static void updater_remove_directory (updater_t *updater, GFile *file) { xmmsc_result_t *res; xmmsv_t *univ, *coll; gchar *path, *pattern, *encoded; path = g_file_get_path (file); encoded = xmmsv_encode_url (path); g_free (path); pattern = g_strdup_printf ("file://%s/*", encoded); g_free (encoded); univ = xmmsv_new_coll (XMMS_COLLECTION_TYPE_UNIVERSE); coll = xmmsv_new_coll (XMMS_COLLECTION_TYPE_MATCH); xmmsv_coll_add_operand (coll, univ); xmmsv_coll_attribute_set_string (coll, "field", "url"); xmmsv_coll_attribute_set_string (coll, "value", pattern); xmmsv_coll_attribute_set_string (coll, "case-sensitive", "true"); g_debug ("remove '%s' from mlib", pattern); res = xmmsc_coll_query_ids (updater->conn, coll, NULL, 0, 0); xmmsc_result_notifier_set (res, updater_remove_directory_by_id, updater); xmmsc_result_unref (res); xmmsv_unref (coll); xmmsv_unref (univ); g_free (pattern); }
static void handle_file_del (xmonitor_t *mon, gchar *filename) { xmmsc_result_t *res; xmmsv_coll_t *univ, *coll; gchar tmp[MON_FILENAME_MAX]; g_snprintf (tmp, MON_FILENAME_MAX, "file://%s%%", filename); univ = xmmsv_coll_universe (); coll = xmmsv_coll_new (XMMS_COLLECTION_TYPE_MATCH); xmmsv_coll_add_operand (coll, univ); xmmsv_coll_attribute_set (coll, "field", "url"); xmmsv_coll_attribute_set (coll, "value", tmp); res = xmmsc_coll_query_ids (mon->conn, coll, NULL, 0, 0); DBG ("remove '%s' from mlib", tmp); xmmsc_result_notifier_set (res, handle_remove_from_mlib, mon); xmmsc_result_unref (res); xmmsv_coll_unref (coll); xmmsv_coll_unref (univ); }
void list_print_row (xmmsc_result_t *res, xmmsv_coll_t *filter, column_display_t *coldisp, gboolean is_search) { /* FIXME: w00t at code copy-paste, please modularize */ cli_infos_t *infos = column_display_infos_get (coldisp); xmmsc_result_t *infores = NULL; xmmsv_t *val, *info; GTree *list = NULL; const gchar *err; guint id; gint i = 0; val = xmmsc_result_get_value (res); if (!xmmsv_get_error (val, &err)) { xmmsv_list_iter_t *it; column_display_prepare (coldisp); if (filter != NULL) { xmmsc_result_t *filres; filres = xmmsc_coll_query_ids (infos->sync, filter, NULL, 0, 0); xmmsc_result_wait (filres); if ((list = matching_ids_tree (filres)) == NULL) { goto finish; } } if (is_search) { column_display_print_header (coldisp); } xmmsv_get_list_iter (val, &it); while (xmmsv_list_iter_valid (it)) { xmmsv_t *entry; xmmsv_list_iter_entry (it, &entry); if (xmmsv_get_uint (entry, &id) && (!list || g_tree_lookup (list, &id) != NULL)) { column_display_set_position (coldisp, i); id_coldisp_print_info (infos, coldisp, id); } xmmsv_list_iter_next (it); i++; } } else { g_printf (_("Server error: %s\n"), err); } if (is_search) { column_display_print_footer (coldisp); } else { g_printf ("\n"); column_display_print_footer_totaltime (coldisp); } finish: if (list) { g_tree_destroy (list); } column_display_free (coldisp); cli_infos_loop_resume (infos); xmmsc_result_unref (res); }