static enum command_state playlist_add(void *arg, int *retval) { struct playlist_add_param *param = arg; int i; int ret = LIBRARY_ERROR; DPRINTF(E_DBG, L_LIB, "Adding item '%s' to playlist '%s'\n", param->vp_item, param->vp_playlist); for (i = 0; sources[i]; i++) { if (sources[i]->disabled || !sources[i]->playlist_add) { DPRINTF(E_DBG, L_LIB, "Library source '%s' is disabled or does not support playlist_add\n", sources[i]->name); continue; } ret = sources[i]->playlist_add(param->vp_playlist, param->vp_item); if (ret == LIBRARY_OK) { DPRINTF(E_DBG, L_LIB, "Adding item '%s' to playlist '%s' with library source '%s'\n", param->vp_item, param->vp_playlist, sources[i]->name); listener_notify(LISTENER_STORED_PLAYLIST); break; } } *retval = ret; return COMMAND_END; }
static enum command_state queue_save(void *arg, int *retval) { const char *virtual_path; int i; int ret = LIBRARY_ERROR; virtual_path = arg; DPRINTF(E_DBG, L_LIB, "Saving queue to path '%s'\n", virtual_path); for (i = 0; sources[i]; i++) { if (sources[i]->disabled || !sources[i]->queue_save) { DPRINTF(E_DBG, L_LIB, "Library source '%s' is disabled or does not support queue_save\n", sources[i]->name); continue; } ret = sources[i]->queue_save(virtual_path); if (ret == LIBRARY_OK) { DPRINTF(E_DBG, L_LIB, "Saving queue to path '%s' with library source '%s'\n", virtual_path, sources[i]->name); listener_notify(LISTENER_STORED_PLAYLIST); break; } } *retval = ret; return COMMAND_END; }
/* * Callback to notify listeners of database changes */ static void update_trigger_cb(int fd, short what, void *arg) { if (handle_deferred_update_notifications()) { listener_notify(deferred_update_events); deferred_update_events = 0; } }
static void initscan() { time_t starttime; time_t endtime; bool clear_queue_disabled; int i; scanning = true; starttime = time(NULL); listener_notify(LISTENER_UPDATE); // Only clear the queue if enabled (default) in config clear_queue_disabled = cfg_getbool(cfg_getsec(cfg, "mpd"), "clear_queue_on_stop_disable"); if (!clear_queue_disabled) { db_queue_clear(0); } for (i = 0; sources[i]; i++) { if (!sources[i]->disabled && sources[i]->initscan) sources[i]->initscan(); } if (! (cfg_getbool(cfg_getsec(cfg, "library"), "filescan_disable"))) { purge_cruft(starttime); DPRINTF(E_DBG, L_LIB, "Running post library scan jobs\n"); db_hook_post_scan(); } endtime = time(NULL); DPRINTF(E_LOG, L_LIB, "Library init scan completed in %.f sec (%d changes)\n", difftime(endtime, starttime), deferred_update_notifications); scanning = false; if (handle_deferred_update_notifications()) listener_notify(LISTENER_UPDATE | LISTENER_DATABASE); else listener_notify(LISTENER_UPDATE); }
static enum command_state fullrescan(void *arg, int *ret) { time_t starttime; time_t endtime; int i; DPRINTF(E_LOG, L_LIB, "Library full-rescan triggered\n"); listener_notify(LISTENER_UPDATE); starttime = time(NULL); player_playback_stop(); db_queue_clear(0); db_purge_all(); // Clears files, playlists, playlistitems, inotify and groups for (i = 0; sources[i]; i++) { if (!sources[i]->disabled && sources[i]->fullrescan) { DPRINTF(E_INFO, L_LIB, "Full-rescan library source '%s'\n", sources[i]->name); sources[i]->fullrescan(); } else { DPRINTF(E_INFO, L_LIB, "Library source '%s' is disabled\n", sources[i]->name); } } endtime = time(NULL); DPRINTF(E_LOG, L_LIB, "Library full-rescan completed in %.f sec (%d changes)\n", difftime(endtime, starttime), deferred_update_notifications); scanning = false; if (handle_deferred_update_notifications()) listener_notify(LISTENER_UPDATE | LISTENER_DATABASE); else listener_notify(LISTENER_UPDATE); *ret = 0; return COMMAND_END; }
static enum command_state rescan(void *arg, int *ret) { time_t starttime; time_t endtime; int i; DPRINTF(E_LOG, L_LIB, "Library rescan triggered\n"); listener_notify(LISTENER_UPDATE); starttime = time(NULL); for (i = 0; sources[i]; i++) { if (!sources[i]->disabled && sources[i]->rescan) { DPRINTF(E_INFO, L_LIB, "Rescan library source '%s'\n", sources[i]->name); sources[i]->rescan(); } else { DPRINTF(E_INFO, L_LIB, "Library source '%s' is disabled\n", sources[i]->name); } } purge_cruft(starttime); endtime = time(NULL); DPRINTF(E_LOG, L_LIB, "Library rescan completed in %.f sec (%d changes)\n", difftime(endtime, starttime), deferred_update_notifications); scanning = false; if (handle_deferred_update_notifications()) listener_notify(LISTENER_UPDATE | LISTENER_DATABASE); else listener_notify(LISTENER_UPDATE); *ret = 0; return COMMAND_END; }
static void _descriptor_notifyListener(gpointer data, gpointer user_data) { Listener* listener = data; listener_notify(listener); }