static int updater_remove_file_by_id (xmmsv_t *value, void *udata) { xmmsc_result_t *res; updater_t *updater; int mid; updater = (updater_t *) udata; g_return_val_if_fail (updater, FALSE); if (!xmmsv_get_int (value, &mid)) { g_error ("couldn't find this one!"); return FALSE; } if (!mid) { g_debug ("entry not in medialib"); return FALSE; } res = xmmsc_medialib_remove_entry (updater->conn, mid); xmmsc_result_unref (res); return FALSE; }
static int handle_remove_from_mlib (xmmsv_t *v, void *userdata) { xmonitor_t *mon = userdata; xmmsc_result_t *res2; xmmsv_list_iter_t *it; for (xmmsv_get_list_iter (v, &it); xmmsv_list_iter_valid (it); xmmsv_list_iter_next (it)) { guint32 id; xmmsv_t *elem; if (!xmmsv_list_iter_entry (it, &elem) || !xmmsv_get_uint (elem, &id)) { ERR ("Failed to get entry id from hash!"); continue; } if (id == 0) { DBG ("Entry not in db!"); continue; } DBG ("Removing %d", id); res2 = xmmsc_medialib_remove_entry (mon->conn, id); xmmsc_result_unref (res2); } return FALSE; }
/* Apply operation to an idlist */ void apply_ids (cli_infos_t *infos, xmmsc_result_t *res, idlist_command_t cmd) { const gchar *err; xmmsc_result_t *cmdres; xmmsv_t *val; val = xmmsc_result_get_value (res); if (!xmmsv_get_error (val, &err)) { xmmsv_list_iter_t *it; xmmsv_get_list_iter (val, &it); for (xmmsv_list_iter_first (it); xmmsv_list_iter_valid (it); xmmsv_list_iter_next (it)) { xmmsv_t *entry; guint id; xmmsv_list_iter_entry (it, &entry); if (xmmsv_get_uint (entry, &id)) { switch (cmd) { case IDLIST_CMD_REHASH: cmdres = xmmsc_medialib_rehash (infos->sync, id); break; case IDLIST_CMD_REMOVE: cmdres = xmmsc_medialib_remove_entry (infos->sync, id); break; default: break; } xmmsc_result_wait (cmdres); xmmsc_result_unref (cmdres); } } } else { g_printf (_("Server error: %s\n"), err); } cli_infos_loop_resume (infos); xmmsc_result_unref (res); }