1bf0c3a3aSlifegpc #pragma once 2bf0c3a3aSlifegpc #include "LastFMDataArchive.h" 3bf0c3a3aSlifegpc #include <map> 4bf0c3a3aSlifegpc /// Can be obtained from https://www.last.fm/api/accounts/create 5bf0c3a3aSlifegpc #define LASTFM_API_KEY L"f2e8f3d36d2de514acc2b072762bb732" 6bf0c3a3aSlifegpc #define LASTFM_SHARED_SECRET L"a6b6804e2bc3a60732ac9c5719c52494" 7bf0c3a3aSlifegpc class LastFM { 8bf0c3a3aSlifegpc public: 9*719e6923Slifegpc LastFM(); 10*719e6923Slifegpc ~LastFM(); 11bf0c3a3aSlifegpc 12bf0c3a3aSlifegpc void SaveData(wstring path) { 13bf0c3a3aSlifegpc return ar.SaveData(path); 14bf0c3a3aSlifegpc } 15bf0c3a3aSlifegpc 16bf0c3a3aSlifegpc void LoadData(wstring path) { 17bf0c3a3aSlifegpc return ar.LoadData(path); 18bf0c3a3aSlifegpc } 199b620a10Slifegpc 209b620a10Slifegpc bool GetSession(wstring token); 219b620a10Slifegpc wstring GetToken(); 229b620a10Slifegpc wstring GetRequestAuthorizationUrl(wstring token); 239b620a10Slifegpc bool HasSessionKey(); 249b620a10Slifegpc wstring UserName(); 251596c33dSlifegpc bool UpdateNowPlaying(LastFMTrack track, LastFMTrack& corrected_track); 261596c33dSlifegpc bool UpdateNowPlaying(); 271596c33dSlifegpc void UpdateCurrentTrack(LastFMTrack track); 2889c4b514Slifegpc const LastFMTrack& CurrentTrack(); 2989c4b514Slifegpc const LastFMTrack& CorrectedCurrentTrack(); 30040c544fSlifegpc bool Love(wstring track, wstring artist); 31040c544fSlifegpc bool Love(); 32040c544fSlifegpc bool Unlove(wstring track, wstring artist); 33040c544fSlifegpc bool Unlove(); 3468b9087aSlifegpc bool Scrobble(list<LastFMTrack>& tracks); 3568b9087aSlifegpc bool Scrobble(); 3668b9087aSlifegpc bool PushCurrentTrackToCache(); 372c5259deSlifegpc void AddCurrentPlayedTime(int millisec); 3868b9087aSlifegpc int32_t CurrentPlayedTime(); 3968b9087aSlifegpc bool IsPushed(); 4068b9087aSlifegpc bool IsScrobbeable(); 412c5259deSlifegpc /// ��ǰ�����Ƿŵ��˿����ϴ��Ľ��� 422c5259deSlifegpc bool CurrentTrackScrobbleable(); 43bf0c3a3aSlifegpc protected: 44bf0c3a3aSlifegpc void GenerateApiSig(map<wstring, wstring>& params); 459b620a10Slifegpc wstring GetUrl(map<wstring, wstring>& params, wstring base = L"http://ws.audioscrobbler.com/2.0/?"); 462fe2e1f0Slifegpc wstring GetPostData(map<wstring, wstring>& params); 47bf0c3a3aSlifegpc private: 48bf0c3a3aSlifegpc LastFMDataArchive ar; 49bf0c3a3aSlifegpc wstring api_key; 50bf0c3a3aSlifegpc wstring shared_secret; 51*719e6923Slifegpc /// �����������ڷ�ֹͬʱ��ε���Scrobble 52*719e6923Slifegpc HANDLE mutex; 53bf0c3a3aSlifegpc }; 54