aboutsummaryrefslogtreecommitdiff
path: root/Src/Winamp/handler.cpp
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/Winamp/handler.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Winamp/handler.cpp')
-rw-r--r--Src/Winamp/handler.cpp90
1 files changed, 90 insertions, 0 deletions
diff --git a/Src/Winamp/handler.cpp b/Src/Winamp/handler.cpp
new file mode 100644
index 00000000..0e096efe
--- /dev/null
+++ b/Src/Winamp/handler.cpp
@@ -0,0 +1,90 @@
+#include "main.h"
+#include "handler.h"
+#include "../Agave/URIHandler/svc_urihandler.h"
+#include <api/service/waservicefactory.h>
+#include "api.h"
+
+int HandleFilename(const wchar_t *filename)
+{
+ size_t i=0;
+ waServiceFactory *sf = 0;
+ int handled_count=0;
+
+ while (NULL != (sf=WASABI_API_SVC->service_enumService(svc_urihandler::getServiceType(), i++)))
+ {
+ svc_urihandler *handler = (svc_urihandler *)sf->getInterface();
+ if (handler)
+ {
+ int ret = handler->ProcessFilename(filename);
+ sf->releaseInterface(handler);
+ if (ret == svc_urihandler::HANDLED)
+ handled_count++;
+ else if (ret == svc_urihandler::HANDLED_EXCLUSIVE)
+ return svc_urihandler::HANDLED;
+ }
+
+ }
+ return handled_count?svc_urihandler::HANDLED:svc_urihandler::NOT_HANDLED;
+}
+
+
+int WinampURIHandler::ProcessFilename(const wchar_t *filename)
+{
+ //MessageBoxW(NULL, filename, L"oi", MB_OK);
+ return NOT_HANDLED;
+}
+
+int WinampURIHandler::IsMine(const wchar_t *filename)
+{
+ if (CompareStringW(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT), NORM_IGNORECASE, filename, (int)wcsnlen(filename, 9), L"winamp://", 9) == CSTR_EQUAL)
+ return HANDLED;
+ else
+ return NOT_HANDLED;
+}
+
+int WinampURIHandler::EnumProtocols(size_t n, wchar_t *protocol, size_t protocolCch, wchar_t *description, size_t descriptionCch)
+{
+ switch(n)
+ {
+ case 0:
+ StringCchCopyW(protocol, protocolCch, L"winamp");
+ StringCchCopyW(description, descriptionCch, L"Winamp Command Handler");
+ return 0;
+ default:
+ return 1;
+ }
+}
+
+int WinampURIHandler::RegisterProtocol(const wchar_t *protocol, const wchar_t *winampexe)
+{
+ return 1;
+
+ IFileTypeRegistrar *registrar=0;
+ if (GetRegistrar(&registrar, true) == 0 && registrar)
+ {
+ wchar_t str[MAX_PATH+32] = {0};
+ StringCchPrintfW(str,MAX_PATH+32,L"\"%s\" /HANDLE \"%%1\"",winampexe);
+ wchar_t icon[MAX_PATH+32] = {0};
+ StringCchPrintfW(icon,MAX_PATH+32,L"\"%s\",%d",winampexe, config_whichicon);
+ registrar->RegisterProtocol(L"winamp", str, icon);
+ registrar->Release();
+ return 0;
+ }
+ return 1;
+}
+
+int WinampURIHandler::UnregisterProtocol(const wchar_t *protocol)
+{
+ // TODO:
+ return 1;
+}
+
+#define CBCLASS WinampURIHandler
+START_DISPATCH;
+CB(PROCESSFILENAME, ProcessFilename);
+CB(ISMINE, IsMine);
+CB(ENUMPROTOCOLS, EnumProtocols);
+CB(REGISTERPROTOCOL, RegisterProtocol);
+CB(UNREGISTERPROTOCOL, UnregisterProtocol);
+END_DISPATCH;
+#undef CBCLASS \ No newline at end of file