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