diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/playlist/LastFMPlaylistPlugin.cxx | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/playlist/LastFMPlaylistPlugin.cxx b/src/playlist/LastFMPlaylistPlugin.cxx index b1ef10269..2c35ae10e 100644 --- a/src/playlist/LastFMPlaylistPlugin.cxx +++ b/src/playlist/LastFMPlaylistPlugin.cxx @@ -30,12 +30,22 @@ #include <assert.h> #include <string.h> -struct lastfm_playlist { +struct LastfmPlaylist { struct playlist_provider base; struct input_stream *is; struct playlist_provider *xspf; + + LastfmPlaylist(input_stream *_is, playlist_provider *_xspf) + :is(_is), xspf(_xspf) { + playlist_provider_init(&base, &lastfm_playlist_plugin); + } + + ~LastfmPlaylist() { + playlist_plugin_close(xspf); + input_stream_close(is); + } }; static struct { @@ -249,28 +259,22 @@ lastfm_open_uri(const char *uri, Mutex &mutex, Cond &cond) /* create the playlist object */ - const auto playlist = g_new(struct lastfm_playlist, 1); - playlist_provider_init(&playlist->base, &lastfm_playlist_plugin); - playlist->is = is; - playlist->xspf = xspf; - + const auto playlist = new LastfmPlaylist(is, xspf); return &playlist->base; } static void lastfm_close(struct playlist_provider *_playlist) { - struct lastfm_playlist *playlist = (struct lastfm_playlist *)_playlist; + LastfmPlaylist *playlist = (LastfmPlaylist *)_playlist; - playlist_plugin_close(playlist->xspf); - input_stream_close(playlist->is); - g_free(playlist); + delete playlist; } static Song * lastfm_read(struct playlist_provider *_playlist) { - struct lastfm_playlist *playlist = (struct lastfm_playlist *)_playlist; + LastfmPlaylist *playlist = (LastfmPlaylist *)_playlist; return playlist_plugin_read(playlist->xspf); } |