diff options
author | Max Kellermann <max@duempel.org> | 2014-01-07 10:21:42 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-01-07 10:21:42 +0100 |
commit | 0f99410ba1334670554b9eeda122cdbe1e0478d7 (patch) | |
tree | 7828de92231402c21a396c587b9c033948ba60c3 | |
parent | 442dadd6fe5c4bab90848b233a560c02f8f63a09 (diff) | |
download | mpd-0f99410ba1334670554b9eeda122cdbe1e0478d7.tar.gz mpd-0f99410ba1334670554b9eeda122cdbe1e0478d7.tar.xz mpd-0f99410ba1334670554b9eeda122cdbe1e0478d7.zip |
playlist/soundcloud: parse URI without copying it
-rw-r--r-- | src/playlist/SoundCloudPlaylistPlugin.cxx | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/src/playlist/SoundCloudPlaylistPlugin.cxx b/src/playlist/SoundCloudPlaylistPlugin.cxx index 716e2d6fb..fa2712dad 100644 --- a/src/playlist/SoundCloudPlaylistPlugin.cxx +++ b/src/playlist/SoundCloudPlaylistPlugin.cxx @@ -323,43 +323,35 @@ static SongEnumerator * soundcloud_open_uri(const char *uri, Mutex &mutex, Cond &cond) { assert(memcmp(uri, "soundcloud://", 13) == 0); - - char *const s = g_strdup(uri + 13); - char *p = s; - char *arg = p; - for (; *p; p++) { - if (*p == '/') { - *p = 0; - p++; - break; - } - } - - char *rest = p; + uri += 13; char *u = nullptr; - if (strcmp(arg, "track") == 0) { + if (memcmp(uri, "track/", 6) == 0) { + const char *rest = uri + 6; u = g_strconcat("https://api.soundcloud.com/tracks/", rest, ".json?client_id=", soundcloud_config.apikey.c_str(), nullptr); - } else if (strcmp(arg, "playlist") == 0) { + } else if (memcmp(uri, "playlist/", 9) == 0) { + const char *rest = uri + 9; u = g_strconcat("https://api.soundcloud.com/playlists/", rest, ".json?client_id=", soundcloud_config.apikey.c_str(), nullptr); - } else if (strcmp(arg, "user") == 0) { + } else if (memcmp(uri, "user/", 5) == 0) { + const char *rest = uri + 5; u = g_strconcat("https://api.soundcloud.com/users/", rest, "/tracks.json?client_id=", soundcloud_config.apikey.c_str(), nullptr); - } else if (strcmp(arg, "search") == 0) { + } else if (memcmp(uri, "search/", 7) == 0) { + const char *rest = uri + 7; u = g_strconcat("https://api.soundcloud.com/tracks.json?q=", rest, "&client_id=", soundcloud_config.apikey.c_str(), nullptr); - } else if (strcmp(arg, "url") == 0) { + } else if (memcmp(uri, "url/", 4) == 0) { + const char *rest = uri + 4; /* Translate to soundcloud resolver call. libcurl will automatically follow the redirect to the right resource. */ u = soundcloud_resolve(rest); } - g_free(s); if (u == nullptr) { LogWarning(soundcloud_domain, "unknown soundcloud URI"); |