[spotify] (Re-) add track-relinking for playlists and albums

Appending the market parameter got lost in the refactoring and therefor
not track-relinking happend
This commit is contained in:
chme 2018-03-18 07:47:49 +01:00 committed by ejurgensen
parent 116f7a0253
commit e6a5168c0d

View File

@ -270,6 +270,8 @@ request_endpoint(const char *uri)
goto out; goto out;
} }
DPRINTF(E_DBG, L_SPOTIFY, "Request Spotify API endpoint: '%s')\n", uri);
ret = http_client_request(ctx); ret = http_client_request(ctx);
if (ret < 0) if (ret < 0)
{ {
@ -487,11 +489,12 @@ typedef int (*paging_item_cb)(json_object *item, int index, int total, void *arg
* @param item_cb The callback function invoked for every item * @param item_cb The callback function invoked for every item
* @param pre_request_cb Callback function invoked before each request (optional) * @param pre_request_cb Callback function invoked before each request (optional)
* @param post_request_cb Callback function invoked after each request (optional) * @param post_request_cb Callback function invoked after each request (optional)
* @param with_market If TRUE appends the user country as market to the request (applies track relinking)
* @param arg User data passed to each callback * @param arg User data passed to each callback
* @return 0 on success, -1 on failure * @return 0 on success, -1 on failure
*/ */
static int static int
request_pagingobject_endpoint(const char *href, paging_item_cb item_cb, paging_request_cb pre_request_cb, paging_request_cb post_request_cb, void *arg) request_pagingobject_endpoint(const char *href, paging_item_cb item_cb, paging_request_cb pre_request_cb, paging_request_cb post_request_cb, bool with_market, void *arg)
{ {
char *next_href; char *next_href;
json_object *response; json_object *response;
@ -503,7 +506,17 @@ request_pagingobject_endpoint(const char *href, paging_item_cb item_cb, paging_r
int total; int total;
int ret; int ret;
next_href = safe_strdup(href); if (!with_market || !spotify_user_country)
{
next_href = safe_strdup(href);
}
else
{
if (strchr(href, '?'))
next_href = safe_asprintf("%s&market=%s", href, spotify_user_country);
else
next_href = safe_asprintf("%s?market=%s", href, spotify_user_country);
}
while (next_href) while (next_href)
{ {
@ -1077,7 +1090,7 @@ scan_saved_albums()
{ {
int ret; int ret;
ret = request_pagingobject_endpoint(spotify_albums_uri, saved_album_add, NULL, NULL, NULL); ret = request_pagingobject_endpoint(spotify_albums_uri, saved_album_add, NULL, NULL, true, NULL);
return ret; return ret;
} }
@ -1110,7 +1123,7 @@ saved_playlist_tracks_add(json_object *item, int index, int total, void *arg)
if (!track.uri || !track.is_playable) if (!track.uri || !track.is_playable)
{ {
DPRINTF(E_LOG, L_SPOTIFY, "Track not available for playback: '%s' - '%s' (%s) (restrictions: %s)\n", track.artist, track.name, track.uri, track.restrictions); DPRINTF(E_LOG, L_SPOTIFY, "Track not available for playback: '%s' - '%s' (%s) (restrictions: %s)\n", track.artist, track.name, track.uri, track.restrictions);
return -1; return 0;
} }
dir_id = prepare_directories(track.album_artist, track.album); dir_id = prepare_directories(track.album_artist, track.album);
@ -1127,7 +1140,7 @@ scan_playlist_tracks(const char *playlist_tracks_endpoint_uri, int plid)
{ {
int ret; int ret;
ret = request_pagingobject_endpoint(playlist_tracks_endpoint_uri, saved_playlist_tracks_add, transaction_start, transaction_end, &plid); ret = request_pagingobject_endpoint(playlist_tracks_endpoint_uri, saved_playlist_tracks_add, transaction_start, transaction_end, true, &plid);
return ret; return ret;
} }
@ -1186,7 +1199,7 @@ scan_playlists()
{ {
int ret; int ret;
ret = request_pagingobject_endpoint(spotify_playlists_uri, saved_playlist_add, NULL, NULL, NULL); ret = request_pagingobject_endpoint(spotify_playlists_uri, saved_playlist_add, NULL, NULL, false, NULL);
return ret; return ret;
} }