-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathSpotifyClient.h
More file actions
93 lines (82 loc) · 2.75 KB
/
Copy pathSpotifyClient.h
File metadata and controls
93 lines (82 loc) · 2.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <string>
#include <map>
#include <MacWifi/MacWifiLib.h>
#include <gason/gason.hpp>
#include "Prefs.h"
#ifndef __SPOTIFY_CLIENT__
#define __SPOTIFY_CLIENT__
using namespace std;
using namespace std::placeholders;
using namespace gason;
struct LoginResponse
{
bool Success;
string ErrorMsg;
};
class SpotifyClient
{
public:
string AccessToken, RefreshToken;
PicHandle ActiveTrackImage;
SpotifyClient(MacWifiLib* wifiLib, Prefs* prefs);
void Login(function<void(LoginResponse)> onComplete);
void GetRecentTracks(function<void(JsonValue&)> onComplete);
void PlayTrack(const string& contextUri, const string& trackUri, function<void(JsonValue&)> onComplete);
void NextTrack(function<void(JsonValue&)> onComplete);
void PreviousTrack(function<void(JsonValue&)> onComplete);
void GetDevices(function<void(JsonValue&)> onComplete);
void GetPlaylists(function<void(JsonValue&)> onComplete);
void GetPlaylistTracks(const string& playlistId, function<void(JsonValue&)> onComplete);
void ActivateDevice(const string& deviceId, function<void(JsonValue&)> onComplete);
bool ImageIsCached(const string& albumId);
void GetImage(const string& image, const string& albumId, function<void(PicHandle)> onComplete);
void GetPlayerState(function<void(JsonValue&)> onComplete);
void Play(function<void(JsonValue&)> onComplete);
void Pause(function<void(JsonValue&)> onComplete);
void SetVolume(int volumePercent, function<void(JsonValue&)> onComplete);
void HandleError(const string& errorMsg);
private:
class SpotifyRequest
{
public:
string Uri;
string Content;
function<void(JsonValue&)> OnComplete;
function<void(int)> DoRequest;
bool Refreshed;
bool Debug;
};
const string _permissions =
"user-read-playback-state "
"user-modify-playback-state "
"user-read-recently-played "
"playlist-read-private "
"playlist-read-collaborative";
MacWifiLib* _wifiLib;
Prefs* _prefs;
JsonValue _root;
short _cacheVRefNum;
long _cacheDirId;
map<int, SpotifyRequest> _requests;
int _requestId = 0;
char _imageBuffer[20000];
char* _imagePtr;
void Get(string uri, bool debug, function<void(JsonValue&)> onComplete);
void Post(string uri, bool debug, string content, function<void(JsonValue&)> onComplete);
void Put(string uri, bool debug, string content, function<void(JsonValue&)> onComplete);
void Request(
string uri,
string content,
bool debug,
function<void(JsonValue&)> onComplete,
function<void(int)> doRequest,
bool refreshed);
void DoGet(int requestId);
void DoPost(int requestId);
void DoPut(int requestId);
void HandleResponse(MacWifiResponse& response);
void RefreshAccessToken(int requestId);
void InitCache();
bool SaveImage(const FSSpec* imageSpec, long size);
};
#endif