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); 35*89c4b514Slifegpc bool operator==(const LastFMTrack& track); 36bf0c3a3aSlifegpc }; 37bf0c3a3aSlifegpc 38bf0c3a3aSlifegpc class LastFMDataArchive { 39bf0c3a3aSlifegpc public: 40bf0c3a3aSlifegpc /// The origin track information of current track. 41bf0c3a3aSlifegpc LastFMTrack current_track; 42bf0c3a3aSlifegpc /// The track information of current track after corrected. 43bf0c3a3aSlifegpc LastFMTrack corrected_current_track; 44bf0c3a3aSlifegpc /// The list of tracks are not scrobbed. 45bf0c3a3aSlifegpc list<LastFMTrack> cached_tracks; 46bf0c3a3aSlifegpc /// A session key generated by authenticating a user via the authentication protocol. 47bf0c3a3aSlifegpc wstring session_key; 489b620a10Slifegpc /// User name 499b620a10Slifegpc wstring user_name; 50bf0c3a3aSlifegpc void SaveData(wstring path); 51bf0c3a3aSlifegpc void LoadData(wstring path); 52bf0c3a3aSlifegpc }; 53