diff options
Diffstat (limited to 'Src/Plugins/Library/ml_local/MLDBCallback.h')
-rw-r--r-- | Src/Plugins/Library/ml_local/MLDBCallback.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/Src/Plugins/Library/ml_local/MLDBCallback.h b/Src/Plugins/Library/ml_local/MLDBCallback.h new file mode 100644 index 00000000..4fe48286 --- /dev/null +++ b/Src/Plugins/Library/ml_local/MLDBCallback.h @@ -0,0 +1,76 @@ +#pragma once +#include <api/syscb/callbacks/svccb.h> +#include <api/syscb/api_syscb.h> +#include "../ml_local/api_mldb.h" + +class MLDBCallback : public SysCallback +{ +private: + FOURCC GetEventType() + { + return api_mldb::SYSCALLBACK; + } + + int notify(int msg, intptr_t param1, intptr_t param2) + { + const wchar_t *filename = (const wchar_t *)param1; + + switch (msg) + { + case api_mldb::MLDB_FILE_ADDED: + OnFileAdded(filename); + return 1; + + case api_mldb::MLDB_FILE_REMOVED_PRE: + OnFileRemove_Pre(filename); + return 1; + + case api_mldb::MLDB_FILE_REMOVED_POST: + OnFileRemove_Post(filename); + return 1; + + case api_mldb::MLDB_FILE_UPDATED: + case api_mldb::MLDB_FILE_UPDATED_EXTERNAL: + OnFileUpdated(filename, (msg == api_mldb::MLDB_FILE_UPDATED)); + return 1; + + case api_mldb::MLDB_FILE_PLAYED: + OnFilePlayed(filename, + ((api_mldb::played_info *)param2)->played, + ((api_mldb::played_info *)param2)->count); + return 1; + + case api_mldb::MLDB_CLEARED: + OnCleared((const wchar_t **)param1, param2); + return 1; + + case api_mldb::MLDB_FILE_GET_CLOUD_STATUS: + { + OnGetCloudStatus((const wchar_t *)param1, (HMENU *)param2); + } + return 1; + + case api_mldb::MLDB_FILE_PROCESS_CLOUD_STATUS: + OnProcessCloudStatus(param1, (int *)param2); + return 1; + + default: + return 0; + } + } + virtual void OnFileAdded(const wchar_t *filename) {} + virtual void OnFileRemove_Pre(const wchar_t *filename) {} + virtual void OnFileRemove_Post(const wchar_t *filename) {} + virtual void OnFileUpdated(const wchar_t *filename, bool from_library) {} + virtual void OnFilePlayed(const wchar_t *filename, time_t played, int count) {} + virtual void OnCleared(const wchar_t **filenames, int count) {} + virtual void OnGetCloudStatus(const wchar_t *filename, HMENU *menu) {} + virtual void OnProcessCloudStatus(int menu_item, int *result) {} + +#define CBCLASS MLDBCallback + START_DISPATCH_INLINE; + CB(SYSCALLBACK_GETEVENTTYPE, GetEventType); + CB(SYSCALLBACK_NOTIFY, notify); + END_DISPATCH; +#undef CBCLASS +};
\ No newline at end of file |