void progress_init (void) { progressdlg = create_progressdlg (); gtk_window_set_title (GTK_WINDOW (progressdlg), _("Adding files...")); g_signal_connect ((gpointer) progressdlg, "delete_event", G_CALLBACK (on_addprogress_delete_event), NULL); GtkWidget *cancelbtn = lookup_widget (progressdlg, "cancelbtn"); g_signal_connect ((gpointer) cancelbtn, "clicked", G_CALLBACK (on_progress_abort), NULL); gtk_window_set_transient_for (GTK_WINDOW (progressdlg), GTK_WINDOW (mainwin)); progressitem = lookup_widget (progressdlg, "progresstitle"); }
void on_write_tags_clicked (GtkButton *button, gpointer user_data) { deadbeef->pl_lock (); GtkTreeView *tree = GTK_TREE_VIEW (lookup_widget (trackproperties, "metalist")); GtkTreeModel *model = GTK_TREE_MODEL (gtk_tree_view_get_model (tree)); // delete all metadata properties that are not in the listview for (int i = 0; i < numtracks; i++) { DB_metaInfo_t *meta = deadbeef->pl_get_metadata_head (tracks[i]); while (meta) { DB_metaInfo_t *next = meta->next; if (meta->key[0] != ':' && meta->key[0] != '!' && meta->key[0] != '_') { GtkTreeIter iter; gboolean res = gtk_tree_model_get_iter_first (model, &iter); while (res) { GValue key = {0,}; gtk_tree_model_get_value (model, &iter, 2, &key); const char *skey = g_value_get_string (&key); if (!strcasecmp (skey, meta->key)) { // field found, don't delete break; } res = gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter); } if (!res) { // field not found, delete deadbeef->pl_delete_metadata (tracks[i], meta); } } meta = next; } } // put all metainfo into track gtk_tree_model_foreach (model, set_metadata_cb, NULL); deadbeef->pl_unlock (); for (int i = 0; i < numtracks; i++) { ddb_event_track_t *ev = (ddb_event_track_t *)deadbeef->event_alloc (DB_EV_TRACKINFOCHANGED); ev->track = tracks[i]; deadbeef->pl_item_ref (ev->track); deadbeef->event_send ((ddb_event_t*)ev, 0, 0); } progress_aborted = 0; progressdlg = create_progressdlg (); gtk_window_set_title (GTK_WINDOW (progressdlg), _("Writing tags...")); g_signal_connect ((gpointer) progressdlg, "delete_event", G_CALLBACK (on_progress_delete_event), NULL); GtkWidget *cancelbtn = lookup_widget (progressdlg, "cancelbtn"); g_signal_connect ((gpointer) cancelbtn, "clicked", G_CALLBACK (on_progress_abort), NULL); gtk_widget_show_all (progressdlg); gtk_window_present (GTK_WINDOW (progressdlg)); gtk_window_set_transient_for (GTK_WINDOW (progressdlg), GTK_WINDOW (trackproperties)); // start new thread for writing metadata intptr_t tid = deadbeef->thread_start (write_meta_worker, NULL); deadbeef->thread_detach (tid); }