/** \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.
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);
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;
* 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 errmsg To be sent to the client (if called via select command).
+ * \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 **errmsg)
+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);
if (ret < 0) {
- if (errmsg)
- *errmsg = make_message("could not read playlist %s",
- name);
+ *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);
if (!playlist->length)
goto err;
playlist->name = para_strdup(name);
- PARA_NOTICE_LOG("loaded playlist %s (%u files)\n", playlist->name,
+ *msg = make_message("loaded playlist %s (%u files)\n", playlist->name,
playlist->length);
/* success */
return current_playlist.length;
err:
PARA_NOTICE_LOG("unable to load playlist %s\n", name);
- if (errmsg)
- *errmsg = make_message("unable to load playlist %s: %s\n",
- name, para_strerror(-ret));
+ *msg = make_message("unable to load playlist %s\n", name);
return ret;
}