123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418 |
- #include "main.h"
- #include "./commands.h"
- #include "./api__ml_online.h"
- #include "./resource.h"
- #include "./navigation.h"
- #include "./preferences.h"
- #include "./messagebox.h"
- #include "./serviceHelper.h"
- #include "../winamp/wa_ipc.h"
- #include "./import.h"
- #include <ifc_omservice.h>
- #include <browserView.h>
- #include <wininet.h>
- #include <shlwapi.h>
- #include <strsafe.h>
- #define BEGIN_COMMAND_SELECT(__commandId) switch(commandId) {
- #define END_COMMAND_SELECT }
- #define OMCOMMAND(__commandId, __commandCode, __resultOut) case (__commandId):\
- { BOOL result = ##__commandCode; \
- if (NULL != (__resultOut)) { *(__resultOut) = result;}\
- return TRUE;}
- BOOL Command_SetServiceRating(ifc_omservice *service, INT rating)
- {
- return SUCCEEDED(ServiceHelper_SetRating(service, rating, SHF_NOTIFY | SHF_VERBAL | SHF_SAVE));
- }
- BOOL Command_OpenServiceView(ifc_omservice *service)
- {
- BOOL resultOk = FALSE;;
- Navigation *navigation;
- if (NULL != service && SUCCEEDED(Plugin_GetNavigation(&navigation)))
- {
- HNAVITEM hItem = navigation->FindService(service->GetId(), NULL);
- if (NULL != hItem)
- {
- HRESULT hr = navigation->SelectItem(hItem, NULL);
- if (SUCCEEDED(hr))
- resultOk = TRUE;
- }
- navigation->Release();
- }
- return resultOk;
- }
- HRESULT Command_NavigateService(ifc_omservice *service, LPCWSTR pszUrl, BOOL fActiveOnly)
- {
- if (NULL == service)
- return E_INVALIDARG;
- Navigation *navigation;
- if (FAILED(Plugin_GetNavigation(&navigation)))
- return E_UNEXPECTED;
- ifc_omservice *activeService;
- HWND hView = navigation->GetActiveView(&activeService);
- if (NULL == hView || activeService->GetId() != service->GetId())
- hView = NULL;
- if (NULL != activeService)
- activeService->Release();
- HRESULT hr = S_OK;
- if (NULL != hView)
- {
- if (FALSE == BrowserView_Navigate(hView, pszUrl, TRUE))
- hr = E_FAIL;
- }
- else
- {
- hr = (FALSE == fActiveOnly) ?
- navigation->ShowService(service->GetId(), pszUrl) : E_NOTIMPL;
- }
- navigation->Release();
-
- return hr;
- }
- HRESULT Command_EditService( ifc_omservice *service )
- {
- if ( NULL == service )
- return E_INVALIDARG;
- WCHAR szBuffer[ 2048 ] = { 0 };
- HRESULT hr = Plugin_MakeResourcePath( szBuffer, ARRAYSIZE( szBuffer ), RT_HTML, MAKEINTRESOURCE( IDR_HTML_EDITOR ), RESPATH_TARGETIE | RESPATH_COMPACT );
- if ( FAILED( hr ) )
- return hr;
- INT cchUrl = lstrlen( szBuffer );
- LPWSTR pszParam = szBuffer + cchUrl;
- INT cchParamMax = ARRAYSIZE( szBuffer ) - cchUrl;
-
- hr = StringCchPrintf( pszParam, cchParamMax, L"?serviceId=%u", service->GetId() );
- if ( FAILED( hr ) )
- return hr;
- return Command_NavigateService( service, szBuffer, FALSE );
- }
- BOOL Command_OpenServicePopup(ifc_omservice *service)
- {
- BOOL resultOk = FALSE;;
- Navigation *navigation;
- if (NULL != service && SUCCEEDED(Plugin_GetNavigation(&navigation)))
- {
- HNAVITEM hItem = navigation->FindService(service->GetId(), NULL);
- if (NULL != hItem)
- {
- HWND hPopup;
- HRESULT hr = navigation->CreatePopup(hItem, &hPopup);
- if (SUCCEEDED(hr))
- {
- ShowWindow(hPopup, SW_SHOWNORMAL);
- resultOk = TRUE;
- }
- }
- navigation->Release();
- }
- return resultOk;
- }
- BOOL Command_ReportService(ifc_omservice *service)
- {
- HWND hWinamp = Plugin_GetWinamp();
- if (NULL == hWinamp || !IsWindow(hWinamp))
- return FALSE;
- if (NULL == service)
- return FALSE;
- WCHAR szUrl[256] = {0};
- WCHAR szClient[128] = {0};
- OMBROWSERMNGR->GetClientId(szClient, ARRAYSIZE(szClient));
- StringCchPrintf(szUrl, ARRAYSIZE(szUrl), L"http://www.winamp.com/legal/abuse?svc_id=%u&unique=%s",
- service->GetId(), szClient);
- SENDWAIPC(hWinamp, IPC_OPEN_URL, szUrl);
- return TRUE;
- }
- BOOL Command_UnsubscribeService(ifc_omservice *service)
- {
- return (SUCCEEDED(ServiceHelper_Subscribe(service, FALSE, SHF_NOTIFY | SHF_VERBAL | SHF_SAVE)));
- }
- BOOL Command_ShowServiceInfo(ifc_omservice *service)
- {
- if (NULL == service)
- return FALSE;
- BOOL resultOk = FALSE;
- HRESULT hr;
- WCHAR szUrl[INTERNET_MAX_URL_LENGTH] = {0}, szName[INTERNET_MAX_URL_LENGTH] = {0};
-
- DWORD cchName = ARRAYSIZE(szName);
- if (FAILED(service->GetName(szUrl, ARRAYSIZE(szUrl))) ||
- FAILED(UrlEscape(szUrl, szName, &cchName, URL_ESCAPE_SEGMENT_ONLY | URL_ESCAPE_PERCENT)))
- {
- StringCchCopy(szName, ARRAYSIZE(szName), L"Info");
- }
- hr = StringCchPrintf(szUrl, ARRAYSIZE(szUrl), L"http://client.winamp.com/service/detail/%s/%d#", szName, service->GetId());
- if (FAILED(hr)) return hr;
- Navigation *navigation;
- hr = Plugin_GetNavigation(&navigation);
- if (SUCCEEDED(hr))
- {
- HNAVITEM hRoot = navigation->FindService(ROOTSERVICE_ID, NULL);
- if (NULL != hRoot)
- {
- HNAVITEM hActive = navigation->GetActive(NULL);
- if (hActive == hRoot)
- {
- HWND hView = navigation->GetActiveView(NULL);
- if (NULL != hView && FALSE != BrowserView_Navigate(hView, szUrl, TRUE))
- resultOk = TRUE;
- }
-
- if (FALSE == resultOk && SUCCEEDED(navigation->SelectItem(hRoot, szUrl)))
- resultOk = TRUE;
- }
- navigation->Release();
- }
- return resultOk;
- }
- BOOL Command_ResetServicePolicy(ifc_omservice *service)
- {
- return (SUCCEEDED(ServiceHelper_ResetPermissions(service, SHF_NOTIFY | SHF_VERBAL)));
- }
- BOOL Command_ResetSubscription()
- {
- HRESULT hr = ServiceHelper_ResetSubscription(SHF_VERBAL);
- return SUCCEEDED(hr);
- }
- static BOOL Command_OpenPreferences()
- {
- return Preferences_Show();
- }
- static BOOL Command_OpenHelp()
- {
- return (BOOL)SENDWAIPC(Plugin_GetWinamp(), IPC_OPEN_URL, L"https://help.winamp.com/hc/articles/8112533645844-Online-Services");
- }
- static BOOL Command_NavigateView(HWND hView, LPCWSTR navigateUrl)
- {
- Navigation *navigation;
- if (FAILED(Plugin_GetNavigation(&navigation)))
- return E_UNEXPECTED;
- HWND hActive = navigation->GetActiveView(NULL);
- if (hActive != hView) hView = NULL;
-
- BOOL resultOk = ( NULL != hView && FALSE != BrowserView_Navigate( hView, navigateUrl, TRUE ) );
-
- navigation->Release();
- return resultOk;
- }
- HRESULT Command_ImportFiles()
- {
- HWND hOwner = Plugin_GetDialogOwner();
- return ImportService_FromFile(hOwner);
- }
- HRESULT Command_ImportUrl()
- {
- HWND hOwner = Plugin_GetDialogOwner();
- return ImportService_FromUrl(hOwner);
- }
- HRESULT Command_CreateService()
- {
- Navigation *navigation;
- HRESULT hr = Plugin_GetNavigation(&navigation);
- if (FAILED(hr)) return hr;
- HNAVITEM hItem;
- hr = navigation->CreateUserService(&hItem);
- if (SUCCEEDED(hr))
- {
- ifc_omservice *service;
- hr= navigation->GetService(hItem, &service);
- if (SUCCEEDED(hr))
- {
- Command_EditService(service);
- service->Release();
- }
- }
- navigation->Release();
- return hr;
- }
- HRESULT Command_LocateService(ifc_omservice *service)
- {
- if (NULL == service)
- return E_INVALIDARG;
- WCHAR szPath[512];
-
- HRESULT hr = service->GetAddress(szPath, ARRAYSIZE(szPath));
- if (FAILED(hr)) return hr;
- if (L'\0' == szPath[0])
- return E_FAIL;
- Navigation *navigation;
- if (FAILED(Plugin_GetNavigation(&navigation)))
- return E_UNEXPECTED;
- navigation->Release();
- if (WASABI_API_EXPLORERFINDFILE)
- {
- WASABI_API_EXPLORERFINDFILE->AddFile(szPath);
- WASABI_API_EXPLORERFINDFILE->ShowFiles();
- }
- return E_UNEXPECTED;
- }
- HRESULT Command_EditServiceExternal(ifc_omservice *service)
- {
- if (NULL == service)
- return E_INVALIDARG;
-
- WCHAR szPath[512];
-
- HRESULT hr = service->GetAddress(szPath, ARRAYSIZE(szPath));
- if (FAILED(hr)) return hr;
- if (L'\0' == szPath[0])
- return E_FAIL;
- Navigation *navigation;
- if (FAILED(Plugin_GetNavigation(&navigation)))
- return E_UNEXPECTED;
- HWND hOwner = navigation->GetActiveView(NULL);
- navigation->Release();
- if (NULL == hOwner)
- hOwner = Plugin_GetLibrary();
- HINSTANCE hInst = ShellExecute(hOwner, L"open", szPath, NULL, NULL, SW_SHOWNORMAL);
- hr = ((INT_PTR)hInst > 32) ? S_OK : E_FAIL;
- return hr;
- }
- BOOL Command_ProcessService(HWND hView, ifc_omservice *service, INT commandId, BOOL *fSuccess)
- {
- BEGIN_COMMAND_SELECT(commandId)
- OMCOMMAND(ID_RATING_VALUE_5, Command_SetServiceRating(service, 5), fSuccess);
- OMCOMMAND(ID_RATING_VALUE_4, Command_SetServiceRating(service, 4), fSuccess);
- OMCOMMAND(ID_RATING_VALUE_3, Command_SetServiceRating(service, 3), fSuccess);
- OMCOMMAND(ID_RATING_VALUE_2, Command_SetServiceRating(service, 2), fSuccess);
- OMCOMMAND(ID_RATING_VALUE_1, Command_SetServiceRating(service, 1), fSuccess);
- OMCOMMAND(ID_VIEW_OPEN, Command_OpenServiceView(service), fSuccess);
- OMCOMMAND(ID_VIEW_OPENPOPUP, Command_OpenServicePopup(service), fSuccess);
- //OMCOMMAND(ID_SERVICE_REPORT, Command_ReportService(service), fSuccess);
- OMCOMMAND(ID_SERVICE_UNSUBSCRIBE, Command_UnsubscribeService(service), fSuccess);
- //OMCOMMAND(ID_SERVICE_GETINFO, Command_ShowServiceInfo(service), fSuccess);
- OMCOMMAND(ID_SERVICE_RESETPOLICY, Command_ResetServicePolicy(service), fSuccess);
- OMCOMMAND(ID_SERVICE_IMPORT_FILE, Command_ImportFiles(), fSuccess);
- OMCOMMAND(ID_SERVICE_IMPORT_URL, Command_ImportUrl(), fSuccess);
- OMCOMMAND(ID_NAVIGATION_REFRESH, Command_NavigateView(hView, NAVIGATE_REFRESH), fSuccess);
- OMCOMMAND(ID_SERVICE_NEW, Command_CreateService(), fSuccess);
- OMCOMMAND(ID_SERVICE_EDIT, Command_EditService(service), fSuccess);
- OMCOMMAND(ID_SERVICE_LOCATE, Command_LocateService(service), fSuccess);
- OMCOMMAND(ID_SERVICE_EDITEXTERNAL, Command_EditServiceExternal(service), fSuccess);
- END_COMMAND_SELECT
- return FALSE;
- }
- BOOL Command_ProcessGeneral(INT commandId, BOOL *fSuccess)
- {
- BEGIN_COMMAND_SELECT(commandId)
- //OMCOMMAND(ID_SERVICEMANAGER_RESET, Command_ResetSubscription(), fSuccess);
- OMCOMMAND(ID_PLUGIN_PREFERENCES, Command_OpenPreferences(), fSuccess);
- OMCOMMAND(ID_PLUGIN_HELP, Command_OpenHelp(), fSuccess);
- END_COMMAND_SELECT
- return FALSE;
- }
- static void CALLBACK BrowserOptions_Callback(HWND hOptions, UINT type, ULONG_PTR user)
- {
- HWND hLibrary = (HWND)user;
- switch(type)
- {
- case BOCALLBACK_INIT:
- {
- HWND hView = (HWND)SENDMLIPC(hLibrary, ML_IPC_GETCURRENTVIEW, 0);
- if (NULL != hView)
- {
- RECT viewRect, optionsRect;
- if (GetWindowRect(hView, &viewRect) && GetWindowRect(hOptions, &optionsRect))
- {
- INT x = viewRect.left + ((viewRect.right - viewRect.left) - (optionsRect.right - optionsRect.left))/2;
- INT y = viewRect.top + ((viewRect.bottom - viewRect.top) - (optionsRect.bottom - optionsRect.top))/2;
- SetWindowPos(hOptions, NULL, x, y, 0, 0, SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOSIZE);
- SendMessage(hOptions, DM_REPOSITION, 0, 0L);
- }
- }
- }
- break;
- }
- }
- HRESULT Command_ShowBrowserOptions()
- {
- HWND hWinamp = Plugin_GetWinamp();
- if (NULL == hWinamp || NULL == OMBROWSERMNGR)
- return E_UNEXPECTED;
- HRESULT hr = OMBROWSERMNGR->Initialize(NULL, hWinamp);
- if (SUCCEEDED(hr))
- {
- HWND hOwner = Plugin_GetDialogOwner();
- hr = OMBROWSERMNGR->ShowOptions(hOwner, BOSTYLE_NORMAL | BOSTYLE_SHOWDEBUG,
- BrowserOptions_Callback, (ULONG_PTR)hOwner);
- }
- return hr;
- }
- BOOL Command_ProcessView(HWND hView, INT commandId, BOOL *fSuccess)
- {
- BEGIN_COMMAND_SELECT(commandId)
- OMCOMMAND(ID_NAVIGATION_HOME, Command_NavigateView(hView, NAVIGATE_HOME), fSuccess);
- OMCOMMAND(ID_NAVIGATION_BACK, Command_NavigateView(hView, NAVIGATE_BACK), fSuccess);
- OMCOMMAND(ID_NAVIGATION_FORWARD, Command_NavigateView(hView, NAVIGATE_FORWARD), fSuccess);
- OMCOMMAND(ID_NAVIGATION_REFRESH, Command_NavigateView(hView, NAVIGATE_REFRESH), fSuccess);
- OMCOMMAND(ID_NAVIGATION_STOP, Command_NavigateView(hView, NAVIGATE_STOP), fSuccess);
- OMCOMMAND(ID_OMBROWSER_OPTIONS, Command_ShowBrowserOptions(), fSuccess);
- OMCOMMAND(ID_SERVICE_IMPORT_FILE, Command_ImportFiles(), fSuccess);
- OMCOMMAND(ID_SERVICE_IMPORT_URL, Command_ImportUrl(), fSuccess);
- OMCOMMAND(ID_SERVICE_NEW, Command_CreateService(), fSuccess);
- END_COMMAND_SELECT
- return FALSE;
- }
|