From e66005563efb24cdeb0c034a680f6a5556265c09 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 29 Jan 2013 20:36:28 +0100 Subject: playlist/despotify: various code simplifications --- src/playlist/DespotifyPlaylistPlugin.cxx | 86 ++++++++++++-------------------- 1 file changed, 31 insertions(+), 55 deletions(-) (limited to 'src/playlist') diff --git a/src/playlist/DespotifyPlaylistPlugin.cxx b/src/playlist/DespotifyPlaylistPlugin.cxx index 17bcf0f6..25f12785 100644 --- a/src/playlist/DespotifyPlaylistPlugin.cxx +++ b/src/playlist/DespotifyPlaylistPlugin.cxx @@ -33,14 +33,8 @@ extern "C" { #include #include -struct despotify_playlist { - struct despotify_session *session; - - std::forward_list songs; -}; - static void -add_song(struct despotify_playlist *ctx, struct ds_track *track) +add_song(std::forward_list &songs, struct ds_track *track) { const char *dsp_scheme = despotify_playlist_plugin.schemes[0]; struct song *song; @@ -60,92 +54,75 @@ add_song(struct despotify_playlist *ctx, struct ds_track *track) song = song_remote_new(uri); song->tag = mpd_despotify_tag_from_track(track); - ctx->songs.emplace_front(song); + songs.emplace_front(song); } static bool -parse_track(struct despotify_playlist *ctx, - struct ds_link *link) +parse_track(struct despotify_session *session, + std::forward_list &songs, + struct ds_link *link) { - struct ds_track *track; - - track = despotify_link_get_track(ctx->session, link); - if (!track) + struct ds_track *track = despotify_link_get_track(session, link); + if (track == nullptr) return false; - add_song(ctx, track); + add_song(songs, track); return true; } static bool -parse_playlist(struct despotify_playlist *ctx, - struct ds_link *link) +parse_playlist(struct despotify_session *session, + std::forward_list &songs, + struct ds_link *link) { - struct ds_playlist *playlist; - struct ds_track *track; - - playlist = despotify_link_get_playlist(ctx->session, link); - if (!playlist) + ds_playlist *playlist = despotify_link_get_playlist(session, link); + if (playlist == nullptr) return false; - for (track = playlist->tracks; track; track = track->next) - add_song(ctx, track); + for (ds_track *track = playlist->tracks; track != nullptr; + track = track->next) + add_song(songs, track); return true; } -static bool -despotify_playlist_init(G_GNUC_UNUSED const struct config_param *param) -{ - return true; -} - -static void -despotify_playlist_finish(void) -{ -} - - static struct playlist_provider * despotify_playlist_open_uri(const char *url, gcc_unused Mutex &mutex, gcc_unused Cond &cond) { - struct despotify_session *session; - struct ds_link *link; - bool parse_result; - - session = mpd_despotify_get_session(); - if (!session) + despotify_session *session = mpd_despotify_get_session(); + if (session == nullptr) return nullptr; /* Get link without spt:// */ - link = despotify_link_from_uri(url + strlen(despotify_playlist_plugin.schemes[0]) + 3); - if (!link) { + ds_link *link = + despotify_link_from_uri(url + strlen(despotify_playlist_plugin.schemes[0]) + 3); + if (link == nullptr) { g_debug("Can't find %s\n", url); return nullptr; } - struct despotify_playlist ctx; - ctx.session = session; + std::forward_list songs; - switch (link->type) - { + bool parse_result; + switch (link->type) { case LINK_TYPE_TRACK: - parse_result = parse_track(&ctx, link); + parse_result = parse_track(session, songs, link); break; case LINK_TYPE_PLAYLIST: - parse_result = parse_playlist(&ctx, link); + parse_result = parse_playlist(session, songs, link); break; default: parse_result = false; break; } + despotify_free_link(link); if (!parse_result) return nullptr; - ctx.songs.reverse(); - return new MemoryPlaylistProvider(std::move(ctx.songs)); + songs.reverse(); + return new MemoryPlaylistProvider(std::move(songs)); } static const char *const despotify_schemes[] = { @@ -156,9 +133,8 @@ static const char *const despotify_schemes[] = { const struct playlist_plugin despotify_playlist_plugin = { "despotify", - despotify_playlist_init, - despotify_playlist_finish, - + nullptr, + nullptr, despotify_playlist_open_uri, nullptr, nullptr, -- cgit v1.2.3