xref: /MusicPlayer2/MusicPlayer2/LastFM.h (revision 68b9087afeb63f0274a5cc343ba84bbe24ad2bc8)
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