1bf0c3a3aSlifegpc #pragma once 2bf0c3a3aSlifegpc #include "LastFMDataArchive.h" 3bf0c3a3aSlifegpc #include <map> 4bf0c3a3aSlifegpc /// Can be obtained from https://www.last.fm/api/accounts/create 5bf0c3a3aSlifegpc #define LASTFM_API_KEY L"f2e8f3d36d2de514acc2b072762bb732" 6bf0c3a3aSlifegpc #define LASTFM_SHARED_SECRET L"a6b6804e2bc3a60732ac9c5719c52494" 7bf0c3a3aSlifegpc class LastFM { 8bf0c3a3aSlifegpc public: 9bf0c3a3aSlifegpc LastFM() { 10bf0c3a3aSlifegpc api_key = LASTFM_API_KEY; 11bf0c3a3aSlifegpc shared_secret = LASTFM_SHARED_SECRET; 12bf0c3a3aSlifegpc } 13bf0c3a3aSlifegpc 14bf0c3a3aSlifegpc void SaveData(wstring path) { 15bf0c3a3aSlifegpc return ar.SaveData(path); 16bf0c3a3aSlifegpc } 17bf0c3a3aSlifegpc 18bf0c3a3aSlifegpc void LoadData(wstring path) { 19bf0c3a3aSlifegpc return ar.LoadData(path); 20bf0c3a3aSlifegpc } 219b620a10Slifegpc 229b620a10Slifegpc bool GetSession(wstring token); 239b620a10Slifegpc wstring GetToken(); 249b620a10Slifegpc wstring GetRequestAuthorizationUrl(wstring token); 259b620a10Slifegpc bool HasSessionKey(); 269b620a10Slifegpc wstring UserName(); 271596c33dSlifegpc bool UpdateNowPlaying(LastFMTrack track, LastFMTrack& corrected_track); 281596c33dSlifegpc bool UpdateNowPlaying(); 291596c33dSlifegpc void UpdateCurrentTrack(LastFMTrack track); 3089c4b514Slifegpc const LastFMTrack& CurrentTrack(); 3189c4b514Slifegpc const LastFMTrack& CorrectedCurrentTrack(); 32040c544fSlifegpc bool Love(wstring track, wstring artist); 33040c544fSlifegpc bool Love(); 34040c544fSlifegpc bool Unlove(wstring track, wstring artist); 35040c544fSlifegpc bool Unlove(); 36*68b9087aSlifegpc bool Scrobble(list<LastFMTrack>& tracks); 37*68b9087aSlifegpc bool Scrobble(); 38*68b9087aSlifegpc bool PushCurrentTrackToCache(); 39*68b9087aSlifegpc void AddCurrentPlayedTime(int sec); 40*68b9087aSlifegpc int32_t CurrentPlayedTime(); 41*68b9087aSlifegpc bool IsPushed(); 42*68b9087aSlifegpc bool IsScrobbeable(); 43bf0c3a3aSlifegpc protected: 44bf0c3a3aSlifegpc void GenerateApiSig(map<wstring, wstring>& params); 459b620a10Slifegpc wstring GetUrl(map<wstring, wstring>& params, wstring base = L"http://ws.audioscrobbler.com/2.0/?"); 462fe2e1f0Slifegpc wstring GetPostData(map<wstring, wstring>& params); 47bf0c3a3aSlifegpc private: 48bf0c3a3aSlifegpc LastFMDataArchive ar; 49bf0c3a3aSlifegpc wstring api_key; 50bf0c3a3aSlifegpc wstring shared_secret; 51bf0c3a3aSlifegpc }; 52