1bf0c3a3aSlifegpc #pragma once 2bf0c3a3aSlifegpc #include <string> 3bf0c3a3aSlifegpc #include <list> 4bf0c3a3aSlifegpc #include "Time.h" 51596c33dSlifegpc #include "SongInfo.h" 6bf0c3a3aSlifegpc 7bf0c3a3aSlifegpc using namespace std; 8bf0c3a3aSlifegpc 9bf0c3a3aSlifegpc class LastFMTrack { 10bf0c3a3aSlifegpc public: 11bf0c3a3aSlifegpc /// The artist name. 12bf0c3a3aSlifegpc wstring artist; 13bf0c3a3aSlifegpc /// The track name. 14bf0c3a3aSlifegpc wstring track; 15bf0c3a3aSlifegpc /// The time the track started playing, in UNIX timestamp format (integer number of seconds since 00:00:00, January 1st 1970 UTC). This must be in the UTC time zone. 16bf0c3a3aSlifegpc uint64_t timestamp; 17bf0c3a3aSlifegpc /// The album name. 18bf0c3a3aSlifegpc wstring album; 19bf0c3a3aSlifegpc /// The stream id for this track received from the radio.getPlaylist service, if scrobbling Last.fm radio 20bf0c3a3aSlifegpc wstring streamId; 21bf0c3a3aSlifegpc /// Set to 1 if the user chose this song, or 0 if the song was chosen by someone else (such as a radio station or recommendation service). Assumes 1 if not specified 22bf0c3a3aSlifegpc bool chosenByUser = true; 23bf0c3a3aSlifegpc /// The track number of the track on the album. 24bf0c3a3aSlifegpc uint16_t trackNumber; 25bf0c3a3aSlifegpc /// The MusicBrainz Track ID. 26bf0c3a3aSlifegpc wstring mbid; 27bf0c3a3aSlifegpc /// The album artist - if this differs from the track artist. 28bf0c3a3aSlifegpc wstring albumArtist; 29bf0c3a3aSlifegpc /// The length of the track in seconds. 30bf0c3a3aSlifegpc Time duration; 311596c33dSlifegpc void Clear(); 32bf0c3a3aSlifegpc void SaveDataTo(CArchive &archive); 33bf0c3a3aSlifegpc void ReadDataFrom(CArchive &archive); 341596c33dSlifegpc void ReadDataFrom(SongInfo info); 3589c4b514Slifegpc bool operator==(const LastFMTrack& track); 36040c544fSlifegpc bool operator==(const SongInfo& info); 37bf0c3a3aSlifegpc }; 38bf0c3a3aSlifegpc 39bf0c3a3aSlifegpc class LastFMDataArchive { 40bf0c3a3aSlifegpc public: 41bf0c3a3aSlifegpc /// The origin track information of current track. 42bf0c3a3aSlifegpc LastFMTrack current_track; 43bf0c3a3aSlifegpc /// The track information of current track after corrected. 44bf0c3a3aSlifegpc LastFMTrack corrected_current_track; 45bf0c3a3aSlifegpc /// The list of tracks are not scrobbed. 46bf0c3a3aSlifegpc list<LastFMTrack> cached_tracks; 47bf0c3a3aSlifegpc /// A session key generated by authenticating a user via the authentication protocol. 48bf0c3a3aSlifegpc wstring session_key; 499b620a10Slifegpc /// User name 509b620a10Slifegpc wstring user_name; 51*68b9087aSlifegpc /// The played time for current song. 52*68b9087aSlifegpc int32_t current_played_time; 53*68b9087aSlifegpc /// The current song is pushed to cache list or not. 54*68b9087aSlifegpc bool is_pushed; 55bf0c3a3aSlifegpc void SaveData(wstring path); 56bf0c3a3aSlifegpc void LoadData(wstring path); 57bf0c3a3aSlifegpc }; 58