aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Library/ml_plg/IDScanner.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Plugins/Library/ml_plg/IDScanner.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Plugins/Library/ml_plg/IDScanner.h')
-rw-r--r--Src/Plugins/Library/ml_plg/IDScanner.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/Src/Plugins/Library/ml_plg/IDScanner.h b/Src/Plugins/Library/ml_plg/IDScanner.h
new file mode 100644
index 00000000..951bcab1
--- /dev/null
+++ b/Src/Plugins/Library/ml_plg/IDScanner.h
@@ -0,0 +1,97 @@
+#ifndef NULLSOFT_ML_PLG_IDSCANNER_H
+#define NULLSOFT_ML_PLG_IDSCANNER_H
+
+#include "../gracenote/gracenote.h"
+
+#include <api/syscb/callbacks/svccb.h>
+#include <api/syscb/api_syscb.h>
+#include "../ml_local/api_mldb.h"
+
+//#include "../nu/lockfreestack.h"
+
+// Regular declarations
+
+struct ProcessItem
+{
+ wchar_t *filename;
+ ProcessItem *next;
+};
+
+class IDScanner : public _ICDDBMusicIDManagerEvents, public SysCallback
+{
+public:
+ IDScanner();
+ ~IDScanner();
+ void ScanDatabase();
+ bool GetStatus(long *state, long *track, long *tracks);
+ void Kill() { killswitch=1; }
+ void Shutdown();
+
+ // Processing data for step 4
+ //LockFreeStack<ProcessItem> process_items;
+
+ // Thread functions
+ static int MLDBFileAddedOnThread(HANDLE handle, void *user_data, intptr_t id);
+ static int MLDBFileRemovedOnThread(HANDLE handle, void *user_data, intptr_t id);
+ static int MLDBClearedOnThread(HANDLE handle, void *user_data, intptr_t id);
+ static int Pass2OnThread(HANDLE handle, void *user_data, intptr_t id);
+ int ProcessStackItems(void);
+
+ enum
+ {
+ STATE_ERROR = -1,
+ STATE_IDLE = 0,
+ STATE_INITIALIZING=1,
+ STATE_SYNC = 2,
+ STATE_METADATA = 3,
+ STATE_MUSICID = 4,
+ STATE_DONE = 5,
+ };
+private:
+ // *** IUnknown Methods ***
+ STDMETHOD(QueryInterface)(REFIID riid, PVOID *ppvObject);
+ STDMETHOD_(ULONG, AddRef)(void);
+ STDMETHOD_(ULONG, Release)(void);
+
+ // *** IDispatch Methods ***
+ STDMETHOD (GetIDsOfNames)(REFIID riid, OLECHAR FAR* FAR* rgszNames, unsigned int cNames, LCID lcid, DISPID FAR* rgdispid);
+ STDMETHOD (GetTypeInfo)(unsigned int itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo);
+ STDMETHOD (GetTypeInfoCount)(unsigned int FAR * pctinfo);
+ STDMETHOD (Invoke)(DISPID dispid, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR *pdispparams, VARIANT FAR *pvarResult, EXCEPINFO FAR * pexecinfo, unsigned int FAR *puArgErr);
+
+ // *** Sys callback ***
+ api_syscb *systemCallbacks;
+ FOURCC GetEventType();
+ int notify(int msg, intptr_t param1, intptr_t param2);
+ static void DebugCallbackMessage(const intptr_t text, const wchar_t *message);
+
+
+
+ // *** ***
+ void Pass1();
+ void Pass2();
+
+
+ // *** Helper functions ***
+ bool SetupMusicID();
+ void CommitFileInfo(ICddbFileInfo *match);
+ void SetGracenoteData(BSTR filename, BSTR tagId, BSTR extData); // extData can be NULL
+
+
+ // *** Data ***
+ ICDDBMusicIDManager3 *musicID;
+ volatile int killswitch;
+ volatile long filesComplete, filesTotal;
+ volatile long state;
+ DWORD m_dwCookie;
+ bool syscb_registered;
+
+protected:
+ RECVS_DISPATCH;
+
+
+};
+
+IConnectionPoint *GetConnectionPoint(IUnknown *punk, REFIID riid);
+
+#endif \ No newline at end of file