xref: /MusicPlayer2/MusicPlayer2/LastFM.h (revision 443d2d2511be730d1b1dd3181942b7fa6539aa1a)
1 #pragma once
2 #include "LastFMDataArchive.h"
3 /// Can be obtained from https://www.last.fm/api/accounts/create
4 #define LASTFM_API_KEY L"f2e8f3d36d2de514acc2b072762bb732"
5 #define LASTFM_SHARED_SECRET L"a6b6804e2bc3a60732ac9c5719c52494"
6 class LastFM {
7 public:
8     LastFM();
9     ~LastFM();
10 
11     void SaveData(wstring path) {
12         return ar.SaveData(path);
13     }
14 
15     void LoadData(wstring path) {
16         return ar.LoadData(path);
17     }
18 
19     bool GetSession(wstring token);
20     wstring GetToken();
21     wstring GetRequestAuthorizationUrl(wstring token);
22     bool HasSessionKey();
23     wstring UserName();
24     bool UpdateNowPlaying(LastFMTrack track, LastFMTrack& corrected_track);
25     bool UpdateNowPlaying();
26     void UpdateCurrentTrack(LastFMTrack track);
27     const LastFMTrack& CurrentTrack();
28     const LastFMTrack& CorrectedCurrentTrack();
29     bool Love(wstring track, wstring artist);
30     bool Love();
31     bool Unlove(wstring track, wstring artist);
32     bool Unlove();
33     bool Scrobble(list<LastFMTrack>& tracks);
34     bool Scrobble();
35     bool PushCurrentTrackToCache();
36     void AddCurrentPlayedTime(int millisec);
37     int32_t CurrentPlayedTime();
38     bool IsPushed();
39     bool IsScrobbeable();
40     /// ��ǰ�����Ƿ��ŵ��˿����ϴ��Ľ���
41     bool CurrentTrackScrobbleable();
42     size_t CachedCount();
43 protected:
44     void GenerateApiSig(map<wstring, wstring>& params);
45     wstring GetUrl(map<wstring, wstring>& params, wstring base);
46     wstring GetUrl(map<wstring, wstring>& params);
47     wstring GetDefaultBase();
48     wstring GetPostData(map<wstring, wstring>& params);
49 private:
50     LastFMDataArchive ar;
51     wstring api_key;
52     wstring shared_secret;
53     /// �����������ڷ�ֹͬʱ��ε���Scrobble
54     HANDLE mutex;
55 };
56