From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/Winamp/handler.cpp | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 Src/Winamp/handler.cpp (limited to 'Src/Winamp/handler.cpp') 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 +#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(®istrar, 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 -- cgit