summaryrefslogtreecommitdiff
path: root/src/libpiano/piano.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libpiano/piano.h')
-rw-r--r--src/libpiano/piano.h244
1 files changed, 244 insertions, 0 deletions
diff --git a/src/libpiano/piano.h b/src/libpiano/piano.h
new file mode 100644
index 0000000..ef6e386
--- /dev/null
+++ b/src/libpiano/piano.h
@@ -0,0 +1,244 @@
+/*
+Copyright (c) 2008-2010
+ Lars-Dominik Braun <PromyLOPh@lavabit.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+#ifndef _PIANO_H
+#define _PIANO_H
+
+/* this is our public API; don't expect this api to be stable as long as
+ * pandora does not provide a stable api
+ * all strings _must_ be utf-8 encoded. i won't care, but pandora does. so
+ * be nice and check the encoding of your strings. thanks :) */
+
+#define PIANO_RPC_HOST "www.pandora.com"
+#define PIANO_RPC_PORT "80"
+
+typedef struct PianoUserInfo {
+ char *webAuthToken;
+ char *listenerId;
+ char *authToken;
+} PianoUserInfo_t;
+
+typedef struct PianoStation {
+ char isCreator;
+ char isQuickMix;
+ char useQuickMix; /* station will be included in quickmix */
+ char *name;
+ char *id;
+ struct PianoStation *next;
+} PianoStation_t;
+
+typedef enum {
+ PIANO_RATE_NONE = 0,
+ PIANO_RATE_LOVE = 1,
+ PIANO_RATE_BAN = 2
+} PianoSongRating_t;
+
+/* UNKNOWN should be 0, because memset sets audio format to 0 */
+typedef enum {
+ PIANO_AF_UNKNOWN = 0,
+ PIANO_AF_AACPLUS = 1,
+ PIANO_AF_MP3 = 2,
+ PIANO_AF_MP3_HI = 3
+} PianoAudioFormat_t;
+
+typedef struct PianoSong {
+ char *artist;
+ char *artistMusicId;
+ char *stationId;
+ char *album;
+ char *userSeed;
+ char *audioUrl;
+ char *coverArt;
+ char *musicId;
+ char *title;
+ float fileGain;
+ PianoSongRating_t rating;
+ PianoAudioFormat_t audioFormat;
+ int testStrategy;
+ unsigned int songType;
+ struct PianoSong *next;
+} PianoSong_t;
+
+/* currently only used for search results */
+typedef struct PianoArtist {
+ char *name;
+ char *musicId;
+ int score;
+ struct PianoArtist *next;
+} PianoArtist_t;
+
+typedef struct PianoGenre {
+ char *name;
+ char *musicId;
+ struct PianoGenre *next;
+} PianoGenre_t;
+
+typedef struct PianoGenreCategory {
+ char *name;
+ PianoGenre_t *genres;
+ struct PianoGenreCategory *next;
+} PianoGenreCategory_t;
+
+typedef struct PianoHandle {
+ char routeId[9];
+ PianoUserInfo_t user;
+ /* linked lists */
+ PianoStation_t *stations;
+ PianoGenreCategory_t *genreStations;
+ int timeOffset;
+} PianoHandle_t;
+
+typedef struct PianoSearchResult {
+ PianoSong_t *songs;
+ PianoArtist_t *artists;
+} PianoSearchResult_t;
+
+typedef enum {
+ /* 0 is reserved: memset (x, 0, sizeof (x)) */
+ PIANO_REQUEST_LOGIN = 1,
+ PIANO_REQUEST_GET_STATIONS = 2,
+ PIANO_REQUEST_GET_PLAYLIST = 3,
+ PIANO_REQUEST_RATE_SONG = 4,
+ PIANO_REQUEST_ADD_FEEDBACK = 5,
+ PIANO_REQUEST_MOVE_SONG = 6,
+ PIANO_REQUEST_RENAME_STATION = 7,
+ PIANO_REQUEST_DELETE_STATION = 8,
+ PIANO_REQUEST_SEARCH = 9,
+ PIANO_REQUEST_CREATE_STATION = 10,
+ PIANO_REQUEST_ADD_SEED = 11,
+ PIANO_REQUEST_ADD_TIRED_SONG = 12,
+ PIANO_REQUEST_SET_QUICKMIX = 13,
+ PIANO_REQUEST_GET_GENRE_STATIONS = 14,
+ PIANO_REQUEST_TRANSFORM_STATION = 15,
+ PIANO_REQUEST_EXPLAIN = 16,
+ PIANO_REQUEST_GET_SEED_SUGGESTIONS = 17,
+ PIANO_REQUEST_BOOKMARK_SONG = 18,
+ PIANO_REQUEST_BOOKMARK_ARTIST = 19,
+} PianoRequestType_t;
+
+typedef struct PianoRequest {
+ PianoRequestType_t type;
+ void *data;
+ char urlPath[1024];
+ char *postData;
+ char *responseData;
+} PianoRequest_t;
+
+/* request data structures */
+typedef struct {
+ char *user;
+ char *password;
+ unsigned char step;
+} PianoRequestDataLogin_t;
+
+typedef struct {
+ PianoStation_t *station;
+ PianoAudioFormat_t format;
+ PianoSong_t *retPlaylist;
+} PianoRequestDataGetPlaylist_t;
+
+typedef struct {
+ PianoSong_t *song;
+ PianoSongRating_t rating;
+} PianoRequestDataRateSong_t;
+
+typedef struct {
+ char *stationId;
+ char *musicId;
+ char *userSeed;
+ PianoSongRating_t rating;
+ unsigned int testStrategy;
+ unsigned int songType;
+} PianoRequestDataAddFeedback_t;
+
+typedef struct {
+ PianoSong_t *song;
+ PianoStation_t *from;
+ PianoStation_t *to;
+ unsigned short step;
+} PianoRequestDataMoveSong_t;
+
+typedef struct {
+ PianoStation_t *station;
+ char *newName;
+} PianoRequestDataRenameStation_t;
+
+typedef struct {
+ char *searchStr;
+ PianoSearchResult_t searchResult;
+} PianoRequestDataSearch_t;
+
+typedef struct {
+ char *type;
+ char *id;
+} PianoRequestDataCreateStation_t;
+
+typedef struct {
+ PianoStation_t *station;
+ char *musicId;
+} PianoRequestDataAddSeed_t;
+
+typedef struct {
+ PianoSong_t *song;
+ char *retExplain;
+} PianoRequestDataExplain_t;
+
+typedef struct {
+ char *musicId;
+ unsigned short max;
+ PianoSearchResult_t searchResult;
+} PianoRequestDataGetSeedSuggestions_t;
+
+typedef enum {
+ PIANO_RET_ERR = 0,
+ PIANO_RET_OK = 1,
+ PIANO_RET_XML_INVALID = 2,
+ PIANO_RET_AUTH_TOKEN_INVALID = 3,
+ PIANO_RET_AUTH_USER_PASSWORD_INVALID = 4,
+ PIANO_RET_CONTINUE_REQUEST = 5,
+ PIANO_RET_NOT_AUTHORIZED = 6,
+ PIANO_RET_PROTOCOL_INCOMPATIBLE = 7,
+ PIANO_RET_READONLY_MODE = 8,
+ PIANO_RET_STATION_CODE_INVALID = 9,
+ PIANO_RET_IP_REJECTED = 10,
+ PIANO_RET_STATION_NONEXISTENT = 11,
+ PIANO_RET_OUT_OF_MEMORY = 12,
+ PIANO_RET_OUT_OF_SYNC = 13,
+ PIANO_RET_PLAYLIST_END = 14,
+ PIANO_RET_QUICKMIX_NOT_PLAYABLE = 15,
+} PianoReturn_t;
+
+void PianoInit (PianoHandle_t *);
+void PianoDestroy (PianoHandle_t *);
+void PianoDestroyPlaylist (PianoSong_t *);
+void PianoDestroySearchResult (PianoSearchResult_t *);
+
+PianoReturn_t PianoRequest (PianoHandle_t *, PianoRequest_t *,
+ PianoRequestType_t);
+PianoReturn_t PianoResponse (PianoHandle_t *, PianoRequest_t *);
+void PianoDestroyRequest (PianoRequest_t *);
+
+PianoStation_t *PianoFindStationById (PianoStation_t *, const char *);
+const char *PianoErrorToStr (PianoReturn_t);
+
+#endif /* _PIANO_H */