static void rb_removable_media_manager_cmd_eject_medium (GtkAction *action, RBRemovableMediaManager *mgr) { RBRemovableMediaManagerPrivate *priv = GET_PRIVATE (mgr); RBRemovableMediaSource *source = RB_REMOVABLE_MEDIA_SOURCE (priv->selected_source); GVolume *volume; GMount *mount; /* try ejecting based on volume first, then based on the mount, * and finally try unmounting. */ g_object_get (source, "volume", &volume, NULL); if (volume != NULL) { if (g_volume_can_eject (volume)) { rb_debug ("ejecting volume"); g_volume_eject (volume, G_MOUNT_UNMOUNT_NONE, NULL, (GAsyncReadyCallback) rb_removable_media_manager_eject_cb, g_object_ref (mgr)); } else { /* this should never happen; the eject command will be * insensitive if the selected source cannot be ejected. */ rb_debug ("don't know what to do with this volume"); } g_object_unref (volume); return; } g_object_get (source, "mount", &mount, NULL); if (mount != NULL) { if (g_mount_can_eject (mount)) { rb_debug ("ejecting mount"); g_mount_eject (mount, G_MOUNT_UNMOUNT_NONE, NULL, (GAsyncReadyCallback) rb_removable_media_manager_eject_cb, g_object_ref (mgr)); } else if (g_mount_can_unmount (mount)) { rb_debug ("unmounting mount"); g_mount_unmount (mount, G_MOUNT_UNMOUNT_NONE, NULL, (GAsyncReadyCallback) rb_removable_media_manager_unmount_cb, g_object_ref (mgr)); } else { /* this should never happen; the eject command will be * insensitive if the selected source cannot be ejected. */ rb_debug ("don't know what to do with this mount"); } g_object_unref (mount); } }
RBRemovableMediaSource * rb_generic_player_source_new (RBShell *shell, GMount *mount) { RBGenericPlayerSource *source; RhythmDBEntryType entry_type; RhythmDBEntryType error_type; RhythmDBEntryType ignore_type; RhythmDB *db; GVolume *volume; char *name; char *path; g_assert (rb_generic_player_is_mount_player (mount)); volume = g_mount_get_volume (mount); g_object_get (G_OBJECT (shell), "db", &db, NULL); path = g_volume_get_identifier (volume, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE); name = g_strdup_printf ("generic audio player: %s", path); entry_type = rhythmdb_entry_register_type (db, name); g_free (name); name = g_strdup_printf ("generic audio player (ignore): %s", path); ignore_type = rhythmdb_entry_register_type (db, name); g_free (name); name = g_strdup_printf ("generic audio player (errors): %s", path); error_type = rhythmdb_entry_register_type (db, name); g_free (name); g_object_unref (db); g_object_unref (volume); g_free (path); source = RB_GENERIC_PLAYER_SOURCE (g_object_new (RB_TYPE_GENERIC_PLAYER_SOURCE, "entry-type", entry_type, "ignore-entry-type", ignore_type, "error-entry-type", error_type, "mount", mount, "shell", shell, "source-group", RB_SOURCE_GROUP_DEVICES, NULL)); rb_shell_register_entry_type_for_source (shell, RB_SOURCE (source), entry_type); return RB_REMOVABLE_MEDIA_SOURCE (source); }
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); }
RBRemovableMediaSource * rb_nokia770_source_new (RBPlugin *plugin, RBShell *shell, GMount *mount, MPIDDevice *device_info) { RBNokia770Source *source; RhythmDBEntryType entry_type; RhythmDB *db; GVolume *volume; char *name; char *path; g_assert (rb_nokia770_is_mount_player (mount, device_info)); volume = g_mount_get_volume (mount); g_object_get (G_OBJECT (shell), "db", &db, NULL); path = g_volume_get_identifier (volume, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE); name = g_strdup_printf ("nokia770: %s", path); entry_type = rhythmdb_entry_register_type (db, name); g_object_unref (db); g_free (name); g_free (path); g_object_unref (volume); source = RB_NOKIA770_SOURCE (g_object_new (RB_TYPE_NOKIA770_SOURCE, "plugin", plugin, "entry-type", entry_type, "ignore-entry-type", RHYTHMDB_ENTRY_TYPE_INVALID, "error-entry-type", RHYTHMDB_ENTRY_TYPE_INVALID, "mount", mount, "shell", shell, "source-group", RB_SOURCE_GROUP_DEVICES, "device-info", device_info, NULL)); rb_shell_register_entry_type_for_source (shell, RB_SOURCE (source), entry_type); return RB_REMOVABLE_MEDIA_SOURCE (source); }
static void impl_show_properties (RBMediaPlayerSource *source, GtkWidget *info_box, GtkWidget *notebook) { RBMtpSourcePrivate *priv = MTP_SOURCE_GET_PRIVATE (source); GtkBuilder *builder; GtkWidget *widget; GHashTableIter iter; gpointer key, value; int num_podcasts; char *device_name; char *builder_file; RBPlugin *plugin; char *text; GList *output_formats; GList *t; GString *str; g_object_get (source, "plugin", &plugin, NULL); builder_file = rb_plugin_find_file (plugin, "mtp-info.ui"); g_object_unref (plugin); if (builder_file == NULL) { g_warning ("Couldn't find mtp-info.ui"); return; } builder = rb_builder_load (builder_file, NULL); g_free (builder_file); if (builder == NULL) { rb_debug ("Couldn't load mtp-info.ui"); return; } /* 'basic' tab stuff */ widget = GTK_WIDGET (gtk_builder_get_object (builder, "mtp-basic-info")); gtk_box_pack_start (GTK_BOX (info_box), widget, TRUE, TRUE, 0); widget = GTK_WIDGET (gtk_builder_get_object (builder, "entry-mtp-name")); g_object_get (source, "name", &device_name, NULL); gtk_entry_set_text (GTK_ENTRY (widget), device_name); g_free (device_name); g_signal_connect (widget, "focus-out-event", (GCallback)rb_mtp_source_name_changed_cb, source); num_podcasts = 0; g_hash_table_iter_init (&iter, priv->entry_map); while (g_hash_table_iter_next (&iter, &key, &value)) { LIBMTP_track_t *track = value; if (g_strcmp0 (track->genre, "Podcast") == 0) { num_podcasts++; } } widget = GTK_WIDGET (gtk_builder_get_object (builder, "mtp-num-tracks")); text = g_strdup_printf ("%d", g_hash_table_size (priv->entry_map) - num_podcasts); gtk_label_set_text (GTK_LABEL (widget), text); g_free (text); widget = GTK_WIDGET (gtk_builder_get_object (builder, "mtp-num-podcasts")); text = g_strdup_printf ("%d", num_podcasts); gtk_label_set_text (GTK_LABEL (widget), text); g_free (text); widget = GTK_WIDGET (gtk_builder_get_object (builder, "mtp-num-playlists")); text = g_strdup_printf ("%d", 0); /* correct, but wrong */ gtk_label_set_text (GTK_LABEL (widget), text); g_free (text); /* 'advanced' tab stuff */ widget = GTK_WIDGET (gtk_builder_get_object (builder, "mtp-advanced-tab")); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), widget, gtk_label_new (_("Advanced"))); widget = GTK_WIDGET (gtk_builder_get_object (builder, "label-mtp-model-value")); gtk_label_set_text (GTK_LABEL (widget), priv->model_name); widget = GTK_WIDGET (gtk_builder_get_object (builder, "label-serial-number-value")); gtk_label_set_text (GTK_LABEL (widget), priv->serial); widget = GTK_WIDGET (gtk_builder_get_object (builder, "label-firmware-version-value")); gtk_label_set_text (GTK_LABEL (widget), priv->device_version); widget = GTK_WIDGET (gtk_builder_get_object (builder, "label-manufacturer-value")); gtk_label_set_text (GTK_LABEL (widget), priv->manufacturer); str = g_string_new (""); output_formats = rb_removable_media_source_get_format_descriptions (RB_REMOVABLE_MEDIA_SOURCE (source)); for (t = output_formats; t != NULL; t = t->next) { if (t != output_formats) { g_string_append (str, "\n"); } g_string_append (str, t->data); } rb_list_deep_free (output_formats); widget = GTK_WIDGET (gtk_builder_get_object (builder, "label-audio-formats-value")); gtk_label_set_text (GTK_LABEL (widget), str->str); g_string_free (str, TRUE); g_object_unref (builder); }