aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Library/ml_local/MLDBCallback.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/Library/ml_local/MLDBCallback.h')
-rw-r--r--Src/Plugins/Library/ml_local/MLDBCallback.h76
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