xref: /MusicPlayer2/MusicPlayer2/LastFM.h (revision 45230f7761877b04341d3bd7a9e408b73e17af89)
1bf0c3a3aSlifegpc #pragma once
2bf0c3a3aSlifegpc #include "LastFMDataArchive.h"
3bf0c3a3aSlifegpc /// Can be obtained from https://www.last.fm/api/accounts/create
4bf0c3a3aSlifegpc #define LASTFM_API_KEY L"f2e8f3d36d2de514acc2b072762bb732"
5bf0c3a3aSlifegpc #define LASTFM_SHARED_SECRET L"a6b6804e2bc3a60732ac9c5719c52494"
6bf0c3a3aSlifegpc class LastFM {
7bf0c3a3aSlifegpc public:
8719e6923Slifegpc     LastFM();
9719e6923Slifegpc     ~LastFM();
10bf0c3a3aSlifegpc 
SaveData(wstring path)11bf0c3a3aSlifegpc     void SaveData(wstring path) {
12bf0c3a3aSlifegpc         return ar.SaveData(path);
13bf0c3a3aSlifegpc     }
14bf0c3a3aSlifegpc 
LoadData(wstring path)15bf0c3a3aSlifegpc     void LoadData(wstring path) {
16bf0c3a3aSlifegpc         return ar.LoadData(path);
17bf0c3a3aSlifegpc     }
189b620a10Slifegpc 
199b620a10Slifegpc     bool GetSession(wstring token);
209b620a10Slifegpc     wstring GetToken();
219b620a10Slifegpc     wstring GetRequestAuthorizationUrl(wstring token);
229b620a10Slifegpc     bool HasSessionKey();
239b620a10Slifegpc     wstring UserName();
241596c33dSlifegpc     bool UpdateNowPlaying(LastFMTrack track, LastFMTrack& corrected_track);
251596c33dSlifegpc     bool UpdateNowPlaying();
261596c33dSlifegpc     void UpdateCurrentTrack(LastFMTrack track);
2789c4b514Slifegpc     const LastFMTrack& CurrentTrack();
2889c4b514Slifegpc     const LastFMTrack& CorrectedCurrentTrack();
29040c544fSlifegpc     bool Love(wstring track, wstring artist);
30040c544fSlifegpc     bool Love();
31040c544fSlifegpc     bool Unlove(wstring track, wstring artist);
32040c544fSlifegpc     bool Unlove();
33*45230f77Slrisora     bool Scrobble(std::list<LastFMTrack>& tracks);
3468b9087aSlifegpc     bool Scrobble();
3568b9087aSlifegpc     bool PushCurrentTrackToCache();
362c5259deSlifegpc     void AddCurrentPlayedTime(int millisec);
3768b9087aSlifegpc     int32_t CurrentPlayedTime();
3868b9087aSlifegpc     bool IsPushed();
3968b9087aSlifegpc     bool IsScrobbeable();
402c5259deSlifegpc     /// ��ǰ�����Ƿ��ŵ��˿����ϴ��Ľ���
412c5259deSlifegpc     bool CurrentTrackScrobbleable();
4283d3e3e1Slifegpc     size_t CachedCount();
43bf0c3a3aSlifegpc protected:
44bf0c3a3aSlifegpc     void GenerateApiSig(map<wstring, wstring>& params);
45518606ffSlifegpc     wstring GetUrl(map<wstring, wstring>& params, wstring base);
46518606ffSlifegpc     wstring GetUrl(map<wstring, wstring>& params);
47518606ffSlifegpc     wstring GetDefaultBase();
482fe2e1f0Slifegpc     wstring GetPostData(map<wstring, wstring>& params);
49bf0c3a3aSlifegpc private:
50bf0c3a3aSlifegpc     LastFMDataArchive ar;
51bf0c3a3aSlifegpc     wstring api_key;
52bf0c3a3aSlifegpc     wstring shared_secret;
53719e6923Slifegpc     /// �����������ڷ�ֹͬʱ��ε���Scrobble
54719e6923Slifegpc     HANDLE mutex;
55bf0c3a3aSlifegpc };
56