X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=playlist.c;h=d02ade3ba911a186f0f7e5a57f419ce9074092d0;hb=b85e61d07fc2fa9e56147af29609a84721947a6f;hp=8f5c3d7d1089a7cc48352a70d6f1aaf6e8ee2aa0;hpb=462a71176aa847494a1a26826768b5fa52994f54;p=paraslash.git diff --git a/playlist.c b/playlist.c index 8f5c3d7d..d02ade3b 100644 --- a/playlist.c +++ b/playlist.c @@ -15,13 +15,13 @@ /** \file playlist.c Functions for loading and saving playlists. */ /** Structure used for adding entries to a playlist. */ -struct playlist_info { +struct playlist_instance { /** The name of the playlist. */ char *name; /** The number of entries currently in the playlist. */ unsigned length; }; -static struct playlist_info current_playlist; +static struct playlist_instance current_playlist; /** * Re-insert an audio file into the tree of admissible files. @@ -38,7 +38,7 @@ static int playlist_update_audio_file(const struct osl_row *aft_row) static int add_playlist_entry(char *path, void *data) { - struct playlist_info *playlist = data; + struct playlist_instance *playlist = data; struct osl_row *aft_row; int ret = aft_get_row_of_path(path, &aft_row); @@ -57,31 +57,32 @@ static int add_playlist_entry(char *path, void *data) static int check_playlist_path(char *path, void *data) { - struct para_buffer *pb = data; + struct afs_callback_arg *aca = data; struct osl_row *aft_row; int ret = aft_get_row_of_path(path, &aft_row); if (ret < 0) - para_printf(pb, "%s: %s\n", path, para_strerror(-ret)); + afs_error(aca, "%s: %s\n", path, para_strerror(-ret)); return 1; /* do not fail the loop on bad paths */ } static int check_playlist(struct osl_row *row, void *data) { - struct para_buffer *pb = data; + struct afs_callback_arg *aca = data; + struct para_buffer *pb = &aca->pbout; struct osl_object playlist_def; char *playlist_name; int ret = pl_get_name_and_def_by_row(row, &playlist_name, &playlist_def); if (ret < 0) { /* log error, but continue */ - para_printf(pb, "failed to get playlist data: %s\n", + afs_error(aca, "failed to get playlist data: %s\n", para_strerror(-ret)); return 1; } if (*playlist_name) { /* skip dummy row */ para_printf(pb, "checking playlist %s...\n", playlist_name); for_each_line(FELF_READ_ONLY, playlist_def.data, - playlist_def.size, check_playlist_path, pb); + playlist_def.size, check_playlist_path, aca); } osl_close_disk_object(&playlist_def); return 1; @@ -98,16 +99,12 @@ static int check_playlist(struct osl_row *row, void *data) int playlist_check_callback(struct afs_callback_arg *aca) { para_printf(&aca->pbout, "checking playlists...\n"); - return osl(osl_rbtree_loop(playlists_table, BLOBCOL_ID, &aca->pbout, + return osl(osl_rbtree_loop(playlists_table, BLOBCOL_ID, aca, check_playlist)); } -/** - * Close the current playlist. - * - * \sa \ref playlist_open(). - */ -void playlist_close(void) +/** Free all resources of the current playlist, if any. */ +void playlist_unload(void) { if (!current_playlist.name) return; @@ -124,17 +121,17 @@ void playlist_close(void) * up in the audio file table. If the path lookup succeeds, a reference to the * corresponding row of the audio file table is added to the score table. * - * \param name The name of the playlist to open. + * \param name The name of the playlist to load. * \param msg Error message or playlist info is returned here. * * \return The length of the loaded playlist on success, negative error code * else. Files which are listed in the playlist, but are not contained in the * database are ignored. This is not considered an error. */ -int playlist_open(const char *name, char **msg) +int playlist_load(const char *name, char **msg) { int ret; - struct playlist_info *playlist = ¤t_playlist; + struct playlist_instance *playlist = ¤t_playlist; struct osl_object playlist_def; ret = pl_get_def_by_name(name, &playlist_def); @@ -142,7 +139,7 @@ int playlist_open(const char *name, char **msg) *msg = make_message("could not read playlist %s\n", name); return ret; } - playlist_close(); + playlist_unload(); ret = for_each_line(FELF_READ_ONLY, playlist_def.data, playlist_def.size, add_playlist_entry, playlist); osl_close_disk_object(&playlist_def);