From c4cbe0dbec4cbc87e8d7b086c6335715b55cdbe8 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Sat, 31 Jul 2010 20:35:30 +0200 Subject: Fix addFeedback Pandora seems to have dropped focusTraitId and matchingSeed. New arguments to addFeedback are testStrategy and songType -- no idea what they are doing right now. Beware: Incompatible libpiano abi change! --- libpiano/src/piano.c | 37 +++++++++++++++++++++---------------- libpiano/src/piano.h | 12 ++++++------ libpiano/src/xml.c | 10 +++++----- 3 files changed, 32 insertions(+), 27 deletions(-) (limited to 'libpiano') diff --git a/libpiano/src/piano.c b/libpiano/src/piano.c index 8682cda..fe0393b 100644 --- a/libpiano/src/piano.c +++ b/libpiano/src/piano.c @@ -135,8 +135,6 @@ void PianoDestroyPlaylist (PianoSong_t *playlist) { while (curSong != NULL) { PianoFree (curSong->audioUrl, 0); PianoFree (curSong->artist, 0); - PianoFree (curSong->focusTraitId, 0); - PianoFree (curSong->matchingSeed, 0); PianoFree (curSong->musicId, 0); PianoFree (curSong->title, 0); PianoFree (curSong->userSeed, 0); @@ -312,30 +310,37 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, snprintf (xmlSendBuf, sizeof (xmlSendBuf), "" "station.addFeedback" "%lu" + /* auth token */ "%s" + /* station id */ "%s" + /* music id */ "%s" + /* user seed */ "%s" - "%s" - "%s" - "" + /* test strategy */ + "%u" + /* positive */ "%i" + /* "is-creator-quickmix" */ "0" + /* song type */ + "%u" "", (unsigned long) time (NULL), ph->user.authToken, reqData->stationId, reqData->musicId, - (reqData->matchingSeed == NULL) ? "" : reqData->matchingSeed, (reqData->userSeed == NULL) ? "" : reqData->userSeed, - (reqData->focusTraitId == NULL) ? "" : reqData->focusTraitId, - (reqData->rating == PIANO_RATE_LOVE) ? 1 : 0); + reqData->testStrategy, + (reqData->rating == PIANO_RATE_LOVE) ? 1 : 0, + reqData->songType); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH "rid=%s&lid=%s&method=addFeedback&arg1=%s&arg2=%s" - "&arg3=%s&arg4=%s&arg5=%s&arg6=&arg7=%s&arg8=false", + "&arg3=%s&arg4=%u&arg5=%s&arg6=false&arg7=%u", ph->routeId, ph->user.listenerId, reqData->stationId, reqData->musicId, - (reqData->matchingSeed == NULL) ? "" : reqData->matchingSeed, (reqData->userSeed == NULL) ? "" : reqData->userSeed, - (reqData->focusTraitId == NULL) ? "" : reqData->focusTraitId, - (reqData->rating == PIANO_RATE_LOVE) ? "true" : "false"); + reqData->testStrategy, + (reqData->rating == PIANO_RATE_LOVE) ? "true" : "false", + reqData->songType); break; } @@ -653,10 +658,10 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, PianoRequestDataAddFeedback_t transformedReqData; transformedReqData.stationId = reqData->song->stationId; transformedReqData.musicId = reqData->song->musicId; - transformedReqData.matchingSeed = reqData->song->matchingSeed; transformedReqData.userSeed = reqData->song->userSeed; - transformedReqData.focusTraitId = reqData->song->focusTraitId; transformedReqData.rating = reqData->rating; + transformedReqData.testStrategy = reqData->song->testStrategy; + transformedReqData.songType = reqData->song->songType; req->data = &transformedReqData; /* create request data (url, post data) */ @@ -682,9 +687,9 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, assert (reqData->step < 2); transformedReqData.musicId = reqData->song->musicId; - transformedReqData.matchingSeed = ""; transformedReqData.userSeed = ""; - transformedReqData.focusTraitId = ""; + transformedReqData.songType = reqData->song->songType; + transformedReqData.testStrategy = reqData->song->testStrategy; req->data = &transformedReqData; switch (reqData->step) { diff --git a/libpiano/src/piano.h b/libpiano/src/piano.h index 6b25b2d..aba4ebd 100644 --- a/libpiano/src/piano.h +++ b/libpiano/src/piano.h @@ -64,18 +64,18 @@ typedef enum { typedef struct PianoSong { char *artist; char *artistMusicId; - char *matchingSeed; - float fileGain; - PianoSongRating_t rating; char *stationId; char *album; char *userSeed; char *audioUrl; char *musicId; char *title; - char *focusTraitId; char *identity; + float fileGain; + PianoSongRating_t rating; PianoAudioFormat_t audioFormat; + int testStrategy; + unsigned int songType; struct PianoSong *next; } PianoSong_t; @@ -163,10 +163,10 @@ typedef struct { typedef struct { char *stationId; char *musicId; - char *matchingSeed; char *userSeed; - char *focusTraitId; PianoSongRating_t rating; + unsigned int testStrategy; + unsigned int songType; } PianoRequestDataAddFeedback_t; typedef struct { diff --git a/libpiano/src/xml.c b/libpiano/src/xml.c index 78f7f21..cd06ae5 100644 --- a/libpiano/src/xml.c +++ b/libpiano/src/xml.c @@ -263,12 +263,8 @@ static void PianoXmlParsePlaylistCb (const char *key, const ezxml_t value, song->artist = strdup (valueStr); } else if (strcmp ("musicId", key) == 0) { song->musicId = strdup (valueStr); - } else if (strcmp ("matchingSeed", key) == 0) { - song->matchingSeed = strdup (valueStr); } else if (strcmp ("userSeed", key) == 0) { song->userSeed = strdup (valueStr); - } else if (strcmp ("focusTraitId", key) == 0) { - song->focusTraitId = strdup (valueStr); } else if (strcmp ("songTitle", key) == 0) { song->title = strdup (valueStr); } else if (strcmp ("identity", key) == 0) { @@ -295,7 +291,11 @@ static void PianoXmlParsePlaylistCb (const char *key, const ezxml_t value, } } else if (strcmp ("artistMusicId", key) == 0) { song->artistMusicId = strdup (valueStr); - } + } else if (strcmp ("testStrategy", key) == 0) { + song->testStrategy = atoi (valueStr); + } else if (strcmp ("songType", key) == 0) { + song->songType = atoi (valueStr); + } } /* parses userinfos sent by pandora as login response -- cgit v1.2.3