static void sync_delete_done_cb (RBMediaPlayerSource *source, gpointer dontcare) { RBMediaPlayerSourcePrivate *priv = MEDIA_PLAYER_SOURCE_GET_PRIVATE (source); rb_debug ("finished deleting %d files from media player", priv->sync_state->sync_remove_count); /* Transfer needed tracks and podcasts from itinerary to device */ if (priv->sync_state->sync_add_count != 0) { RBTrackTransferBatch *batch; rb_debug ("transferring %d files to media player", priv->sync_state->sync_add_count); batch = rb_source_paste (RB_SOURCE (source), priv->sync_state->sync_to_add); if (batch != NULL) { char *name; char *label; g_object_get (source, "name", &name, NULL); label = g_strdup_printf (_("Syncing tracks to %s"), name); g_free (name); g_object_set (batch, "task-label", label, NULL); g_free (label); g_signal_connect_object (batch, "complete", G_CALLBACK (transfer_batch_complete_cb), source, 0); g_signal_connect_object (batch, "cancelled", G_CALLBACK (transfer_batch_cancelled_cb), source, 0); } else { rb_debug ("weird, transfer was apparently synchronous"); g_idle_add ((GSourceFunc) sync_idle_cb_playlists, source); } } else { rb_debug ("no files to transfer to the device"); g_idle_add ((GSourceFunc) sync_idle_cb_playlists, source); } }
static void import_clicked_cb (GtkButton *button, RBImportDialog *dialog) { GList *entries; RBSource *library_source; RBTrackTransferBatch *batch; entries = get_entries (dialog); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->copy_check)) == FALSE) { dialog->priv->add_entry_list = g_list_concat (dialog->priv->add_entry_list, entries); if (dialog->priv->add_entries_id == 0) { dialog->priv->add_entries_id = g_idle_add ((GSourceFunc) add_entries, dialog); } } else { g_object_get (dialog->priv->shell, "library-source", &library_source, NULL); batch = rb_source_paste (library_source, entries); g_list_free_full (entries, (GDestroyNotify) rhythmdb_entry_unref); g_object_unref (library_source); /* delete source entries as they finish being copied */ g_signal_connect (batch, "track-done", G_CALLBACK (copy_track_done_cb), dialog); g_signal_connect (batch, "complete", G_CALLBACK (copy_complete_cb), dialog); } }
static void rb_removable_media_manager_cmd_copy_tracks (GtkAction *action, RBRemovableMediaManager *mgr) { RBRemovableMediaManagerPrivate *priv = GET_PRIVATE (mgr); RBRemovableMediaSource *source; RBLibrarySource *library; RhythmDBQueryModel *model; GList *list = NULL; source = RB_REMOVABLE_MEDIA_SOURCE (priv->selected_source); g_object_get (source, "query-model", &model, NULL); g_object_get (priv->shell, "library-source", &library, NULL); gtk_tree_model_foreach (GTK_TREE_MODEL (model), (GtkTreeModelForeachFunc)copy_entry, &list); rb_source_paste (RB_SOURCE (library), list); g_list_free (list); g_object_unref (model); g_object_unref (library); }
static void copy_tracks_cmd (GtkAction *action, RBAudioCdSource *source) { RBShell *shell; RBSource *library; RhythmDBQueryModel *model; GList *list = NULL; g_object_get (source, "shell", &shell, NULL); g_object_get (shell, "library-source", &library, NULL); g_object_unref (shell); g_object_get (source, "query-model", &model, NULL); gtk_tree_model_foreach (GTK_TREE_MODEL (model), (GtkTreeModelForeachFunc)copy_entry, &list); if (list != NULL) { rb_source_paste (library, list); g_list_free (list); } g_object_unref (model); g_object_unref (library); }
gboolean impl_receive_drag (RBDisplayPage *page, GtkSelectionData *data) { GList *entries; RhythmDB *db; char *type; entries = NULL; type = gdk_atom_name (gtk_selection_data_get_data_type (data)); db = get_db_for_source (RB_SOURCE (page)); if (strcmp (type, "text/uri-list") == 0) { GList *list; GList *i; rb_debug ("parsing uri list"); list = rb_uri_list_parse ((const char *) gtk_selection_data_get_data (data)); for (i = list; i != NULL; i = g_list_next (i)) { char *uri; RhythmDBEntry *entry; if (i->data == NULL) continue; uri = i->data; entry = rhythmdb_entry_lookup_by_location (db, uri); if (entry == NULL) { /* add to the library */ rb_debug ("received drop of unknown uri: %s", uri); } else { /* add to list of entries to copy */ entries = g_list_prepend (entries, entry); } g_free (uri); } g_list_free (list); } else if (strcmp (type, "application/x-rhythmbox-entry") == 0) { char **list; char **i; rb_debug ("parsing entry ids"); list = g_strsplit ((const char*) gtk_selection_data_get_data (data), "\n", -1); for (i = list; *i != NULL; i++) { RhythmDBEntry *entry; gulong id; id = atoi (*i); entry = rhythmdb_entry_lookup_by_id (db, id); if (entry != NULL) entries = g_list_prepend (entries, entry); } g_strfreev (list); } else { rb_debug ("received unknown drop type"); } g_object_unref (db); g_free (type); if (entries) { entries = g_list_reverse (entries); if (rb_source_can_paste (RB_SOURCE (page))) { rb_source_paste (RB_SOURCE (page), entries); } g_list_free (entries); } return TRUE; }