123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- #include "PlaylistSync.h"
- #include "api.h"
- #include "../nu/AutoUrl.h"
- #include "main.h"
- #include "../../..\Components\wac_network\wac_network_http_receiver_api.h"
- #include <strsafe.h>
- /* classes and utility functions to notifying the device of playlist modifications */
- class SimpleCallback : public ifc_downloadManagerCallback
- {
- public:
- void OnInit(DownloadToken token)
- {
- api_httpreceiver *jnet = WAC_API_DOWNLOADMANAGER->GetReceiver(token);
- if (jnet)
- {
- jnet->AddHeaderValue("X-Winamp-ID", winamp_id_str);
- jnet->AddHeaderValue("X-Winamp-Name", winamp_name);
- }
- }
- RECVS_DISPATCH;
- };
- #define CBCLASS SimpleCallback
- START_DISPATCH;
- VCB(IFC_DOWNLOADMANAGERCALLBACK_ONINIT, OnInit)
- END_DISPATCH;
- #undef CBCLASS
- class NewPlaylistCallback : public ifc_downloadManagerCallback
- {
- public:
- NewPlaylistCallback()
- {
- event = CreateEvent(NULL, TRUE, FALSE, NULL);
- location=0;
- }
- ~NewPlaylistCallback()
- {
- CloseHandle(event);
- free(location);
- }
- void OnInit(DownloadToken token)
- {
- api_httpreceiver *jnet = WAC_API_DOWNLOADMANAGER->GetReceiver(token);
- if (jnet)
- {
- jnet->AddHeaderValue("X-Winamp-ID", winamp_id_str);
- jnet->AddHeaderValue("X-Winamp-Name", winamp_name);
- }
- }
- void OnCancel(DownloadToken token)
- {
- SetEvent(event);
- }
- void OnError(DownloadToken token, int error)
- {
- SetEvent(event);
- }
- void OnFinish(DownloadToken token)
- {
- api_httpreceiver *jnet = WAC_API_DOWNLOADMANAGER->GetReceiver(token);
- if (jnet)
- {
- const char *jnet_location = jnet->getheader("Location");
- if (jnet_location)
- location = strdup(jnet_location);
- }
- SetEvent(event);
- }
- const char *Wait()
- {
- WaitForSingleObject(event, INFINITE);
- return location;
- }
- HANDLE event;
- char *location;
- RECVS_DISPATCH;
- };
- #define CBCLASS NewPlaylistCallback
- START_DISPATCH;
- VCB(IFC_DOWNLOADMANAGERCALLBACK_ONINIT, OnInit)
- VCB(IFC_DOWNLOADMANAGERCALLBACK_ONCANCEL, OnCancel)
- VCB(IFC_DOWNLOADMANAGERCALLBACK_ONERROR, OnInit)
- VCB(IFC_DOWNLOADMANAGERCALLBACK_ONFINISH, OnFinish)
- END_DISPATCH;
- #undef CBCLASS
- static SimpleCallback simple_callback;
- void Sync_AddToPlaylist(const char *root_url, const wchar_t *playlist_id, const wchar_t *song_id)
- {
- if ( WAC_API_DOWNLOADMANAGER )
- {
- char url[1024] = {0};
- StringCbPrintfA(url, sizeof(url), "%s/playlist?action=add&id=%s&songid=%s", root_url, AutoUrl(playlist_id), AutoUrl(song_id));
- WAC_API_DOWNLOADMANAGER->DownloadEx(url, &simple_callback, api_downloadManager::DOWNLOADEX_BUFFER);
- }
- }
- void Sync_RemoveFromPlaylist(const char *root_url, const wchar_t *playlist_id, const wchar_t *song_id)
- {
- if ( WAC_API_DOWNLOADMANAGER )
- {
- char url[1024] = {0};
- StringCbPrintfA(url, sizeof(url), "%s/playlist?action=remove&id=%s&songid=%s", root_url, AutoUrl(playlist_id), AutoUrl(song_id));
- WAC_API_DOWNLOADMANAGER->DownloadEx(url, &simple_callback, api_downloadManager::DOWNLOADEX_BUFFER);
- }
- }
- void Sync_DeletePlaylist(const char *root_url, const wchar_t *playlist_id)
- {
- if ( WAC_API_DOWNLOADMANAGER )
- {
- char url[1024] = {0};
- StringCbPrintfA(url, sizeof(url), "%s/playlist?action=delete&id=%s", root_url, AutoUrl(playlist_id));
- WAC_API_DOWNLOADMANAGER->DownloadEx(url, &simple_callback, api_downloadManager::DOWNLOADEX_BUFFER);
- }
- }
- WifiPlaylist *Sync_NewPlaylist(const char *root_url, const wchar_t *playlist_name)
- {
- if ( WAC_API_DOWNLOADMANAGER )
- {
- NewPlaylistCallback new_playlist_callback;
- char url[1024] = {0};
- StringCbPrintfA(url, sizeof(url), "%s/playlist?action=new&name=%s", root_url, AutoUrl(playlist_name));
- WAC_API_DOWNLOADMANAGER->DownloadEx(url, &new_playlist_callback, api_downloadManager::DOWNLOADEX_BUFFER);
- const char *playlist_id = new_playlist_callback.Wait();
- if (playlist_id)
- {
- return new WifiPlaylist(playlist_id, playlist_name);
- }
- }
- return 0;
- }
- void Sync_RenamePlaylist(const char *root_url, const wchar_t *playlist_id, const wchar_t *playlist_name)
- {
- if ( WAC_API_DOWNLOADMANAGER )
- {
- char url[ 1024 ] = { 0 };
- StringCbPrintfA( url, sizeof( url ), "%s/playlist?action=rename&id=%s&name=%s", root_url, AutoUrl( playlist_id ), AutoUrl( playlist_name ) );
- WAC_API_DOWNLOADMANAGER->DownloadEx( url, &simple_callback, api_downloadManager::DOWNLOADEX_BUFFER );
- }
- }
|