-/*
- * Copyright (C) 2007 Andre Noll <maan@tuebingen.mpg.de>
- *
- * Licensed under the GPL v2. For licencing details see COPYING.
- */
+/* Copyright (C) 2007 Andre Noll <maan@tuebingen.mpg.de>, see file COPYING. */
#include <regex.h>
#include <osl.h>
+#include <lopsub.h>
#include "para.h"
#include "error.h"
/**
* Check the playlist table for inconsistencies.
*
- * \param fd The afs socket.
- * \param query Unused.
+ * \param aca This callback ignores ->query.
+ *
+ * \return Standard. Invalid paths are reported, but are not considered an
+ * error.
*/
-void playlist_check_callback(int fd, __a_unused const struct osl_object *query)
+int playlist_check_callback(struct afs_callback_arg *aca)
{
- struct para_buffer pb = {
- .max_size = shm_get_shmmax(),
- .private_data = &(struct afs_max_size_handler_data) {
- .fd = fd,
- .band = SBD_OUTPUT
- },
- .max_size_handler = afs_max_size_handler,
- };
- para_printf(&pb, "checking playlists...\n");
- osl_rbtree_loop(playlists_table, BLOBCOL_ID, &pb,
- check_playlist);
- flush_and_free_pb(&pb);
+ para_printf(&aca->pbout, "checking playlists...\n");
+ return osl(osl_rbtree_loop(playlists_table, BLOBCOL_ID, &aca->pbout,
+ check_playlist));
}
/**
* Close the current playlist.
*
- * \sa playlist_open().
+ * \sa \ref playlist_open().
*/
void playlist_close(void)
{
}
/**
- * Open the given playlist.
+ * Open and load the given playlist.
*
* \param name The name of the playlist to open.
+ * \param errmsg To be sent to the client (if called via select command).
*
* Files which are listed in the playlist, but not contained in the database
* are ignored. This is not considered an error.
*
- * \return Standard.
+ * \return The length of the loaded playlist on success, negative error code
+ * else.
*/
-int playlist_open(char *name)
+int playlist_open(const char *name, char **errmsg)
{
struct osl_object obj;
int ret;
struct osl_row *row;
- obj.data = name;
+ obj.data = (char *)name;
obj.size = strlen(obj.data);
ret = osl(osl_get_row(playlists_table, BLOBCOL_NAME, &obj, &row));
if (ret < 0) {
- PARA_NOTICE_LOG("failed to load playlist %s\n", name);
+ if (errmsg)
+ *errmsg = make_message("could not open playlist %s",
+ name);
return ret;
}
playlist_close();
static int handle_audio_file_event(enum afs_events event, void *data)
{
- int ret, was_admissible = 0, is_admissible;
+ int ret;
+ bool was_admissible = false, is_admissible;
struct osl_object playlist_def;
char *new_path;
const struct osl_row *row = data;
- if (!current_playlist.name)
- return 1;
if (event == AUDIO_FILE_RENAME) {
ret = row_belongs_to_score_table(row, NULL);
if (ret < 0)
int ret;
struct afsi_change_event_data *aced = data;
- switch(event) {
+ if (!current_playlist.name)
+ return 1;
+ switch (event) {
case AFSI_CHANGE:
return playlist_update_audio_file(aced->aft_row);
case AUDIO_FILE_RENAME: