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