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