static void import_complete_cb (RhythmDBImportJob *job, int total, RBAndroidSource *source) { RBAndroidSourcePrivate *priv = GET_PRIVATE (source); GSettings *settings; RBShell *shell; if (priv->ejecting) { rb_device_source_default_eject (RB_DEVICE_SOURCE (source)); } else { g_object_get (source, "shell", &shell, NULL); rb_shell_append_display_page (shell, RB_DISPLAY_PAGE (priv->import_errors), RB_DISPLAY_PAGE (source)); g_object_unref (shell); g_object_set (source, "load-status", RB_SOURCE_LOAD_STATUS_LOADED, NULL); g_object_get (source, "encoding-settings", &settings, NULL); rb_transfer_target_transfer (RB_TRANSFER_TARGET (source), settings, NULL, FALSE); g_object_unref (settings); rb_media_player_source_purge_metadata_cache (RB_MEDIA_PLAYER_SOURCE (source)); } g_clear_object (&priv->import_job); }
static void import_complete_cb (RhythmDBImportJob *job, int total, RBGenericPlayerSource *source) { RBGenericPlayerSourceClass *klass = RB_GENERIC_PLAYER_SOURCE_GET_CLASS (source); RBGenericPlayerSourcePrivate *priv = GET_PRIVATE (source); RBShell *shell; GDK_THREADS_ENTER (); g_object_get (source, "shell", &shell, NULL); rb_shell_append_display_page (shell, RB_DISPLAY_PAGE (priv->import_errors), RB_DISPLAY_PAGE (source)); g_object_unref (shell); if (klass->impl_load_playlists) klass->impl_load_playlists (source); g_object_unref (priv->import_job); priv->import_job = NULL; rb_display_page_notify_status_changed (RB_DISPLAY_PAGE (source)); g_object_set (source, "load-status", RB_SOURCE_LOAD_STATUS_LOADED, NULL); rb_transfer_target_transfer (RB_TRANSFER_TARGET (source), NULL, FALSE); GDK_THREADS_LEAVE (); }
void rb_podcast_main_source_add_subsources (RBPodcastMainSource *source) { RhythmDBQuery *query; RBSource *podcast_subsource; RBPodcastManager *podcast_mgr; RhythmDB *db; RBShell *shell; g_object_get (source, "shell", &shell, "podcast-manager", &podcast_mgr, NULL); g_object_get (shell, "db", &db, NULL); query = rhythmdb_query_parse (db, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TYPE, RHYTHMDB_ENTRY_TYPE_PODCAST_POST, RHYTHMDB_QUERY_PROP_CURRENT_TIME_WITHIN, RHYTHMDB_PROP_FIRST_SEEN, 3600 * 24 * 7, RHYTHMDB_QUERY_END); podcast_subsource = rb_podcast_source_new (shell, podcast_mgr, query, _("New Episodes"), RB_STOCK_AUTO_PLAYLIST); rhythmdb_query_free (query); rb_source_set_hidden_when_empty (podcast_subsource, TRUE); rb_shell_append_display_page (shell, RB_DISPLAY_PAGE (podcast_subsource), RB_DISPLAY_PAGE (source)); query = rhythmdb_query_parse (db, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TYPE, RHYTHMDB_ENTRY_TYPE_PODCAST_POST, RHYTHMDB_QUERY_PROP_CURRENT_TIME_WITHIN, RHYTHMDB_PROP_LAST_SEEN, 3600 * 24 * 7, RHYTHMDB_QUERY_END); podcast_subsource = rb_podcast_source_new (shell, podcast_mgr, query, _("New Downloads"), /* better name? */ RB_STOCK_AUTO_PLAYLIST); rhythmdb_query_free (query); rb_source_set_hidden_when_empty (podcast_subsource, TRUE); rb_shell_append_display_page (shell, RB_DISPLAY_PAGE (podcast_subsource), RB_DISPLAY_PAGE (source)); g_object_unref (db); g_object_unref (shell); }
void rb_generic_player_source_add_playlist (RBGenericPlayerSource *source, RBShell *shell, RBSource *playlist) { RBGenericPlayerSourcePrivate *priv = GET_PRIVATE (source); g_object_ref (playlist); priv->playlists = g_list_prepend (priv->playlists, playlist); g_signal_connect_object (playlist, "deleted", G_CALLBACK (playlist_deleted_cb), source, 0); rb_shell_append_display_page (shell, RB_DISPLAY_PAGE (playlist), RB_DISPLAY_PAGE (source)); }
static void rb_iradio_source_songs_show_popup_cb (RBEntryView *view, gboolean over_entry, RBIRadioSource *source) { if (source == NULL) { return; } if (over_entry) _rb_display_page_show_popup (RB_DISPLAY_PAGE (source), "/IRadioViewPopup"); else _rb_display_page_show_popup (RB_DISPLAY_PAGE (source), "/IRadioSourcePopup"); }
static void impl_deactivate (PeasActivatable *bplugin) { RBGriloPlugin *plugin = RB_GRILO_PLUGIN (bplugin); GHashTableIter iter; gpointer key, value; g_signal_handler_disconnect (plugin->registry, plugin->handler_id_source_added); g_signal_handler_disconnect (plugin->registry, plugin->handler_id_source_removed); g_hash_table_iter_init (&iter, plugin->sources); while (g_hash_table_iter_next (&iter, &key, &value)) { grl_registry_unregister_source (plugin->registry, GRL_SOURCE (key), NULL); rb_display_page_delete_thyself (RB_DISPLAY_PAGE (value)); } g_hash_table_destroy (plugin->sources); plugin->sources = NULL; plugin->registry = NULL; if (plugin->emit_cover_art_id != 0) { g_source_remove (plugin->emit_cover_art_id); plugin->emit_cover_art_id = 0; } g_signal_handlers_disconnect_by_func (plugin->shell_player, G_CALLBACK (playing_song_changed_cb), plugin); g_object_unref (plugin->shell_player); plugin->shell_player = NULL; g_object_unref (plugin->art_store); plugin->art_store = NULL; }
static void grilo_source_added_cb (GrlPluginRegistry *registry, GrlMediaPlugin *grilo_plugin, RBGriloPlugin *plugin) { RBSource *grilo_source; RBShell *shell; int i; if (GRL_IS_MEDIA_SOURCE (grilo_plugin) == FALSE) { /* TODO use metadata sources for album art and lyrics */ rb_debug ("grilo source %s is not interesting", grl_media_plugin_get_name (grilo_plugin)); return; } for (i = 0; i < G_N_ELEMENTS (ignored_plugins); i++) { if (g_str_equal (ignored_plugins[i], grl_media_plugin_get_id (grilo_plugin))) { rb_debug ("grilo source %s is blacklisted", grl_media_plugin_get_name (grilo_plugin)); return; } } rb_debug ("new grilo source: %s", grl_media_plugin_get_name (grilo_plugin)); grilo_source = rb_grilo_source_new (G_OBJECT (plugin), GRL_MEDIA_SOURCE (grilo_plugin)); g_hash_table_insert (plugin->sources, grilo_plugin, grilo_source); /* probably put some sources under 'shared', some under 'stores'? */ g_object_get (plugin, "object", &shell, NULL); rb_shell_append_display_page (shell, RB_DISPLAY_PAGE (grilo_source), RB_DISPLAY_PAGE_GROUP_SHARED); g_object_unref (shell); }
static void impl_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { RBDisplayPage *page = RB_DISPLAY_PAGE (object); switch (prop_id) { case PROP_SHELL: g_value_set_object (value, page->priv->shell); break; case PROP_NAME: g_value_set_string (value, page->priv->name); break; case PROP_ICON: g_value_set_object (value, page->priv->icon); break; case PROP_VISIBLE: g_value_set_boolean (value, page->priv->visible); break; case PROP_PARENT: g_value_set_object (value, page->priv->parent); break; case PROP_PLUGIN: g_value_set_object (value, page->priv->plugin); break; case PROP_SELECTED: g_value_set_boolean (value, page->priv->selected); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void impl_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { RBDisplayPage *page = RB_DISPLAY_PAGE (object); switch (prop_id) { case PROP_SHELL: page->priv->shell = g_value_get_object (value); break; case PROP_NAME: g_free (page->priv->name); page->priv->name = g_value_dup_string (value); break; case PROP_ICON: g_clear_object (&page->priv->icon); page->priv->icon = g_value_dup_object (value); break; case PROP_VISIBLE: page->priv->visible = g_value_get_boolean (value); break; case PROP_PARENT: page->priv->parent = g_value_get_object (value); break; case PROP_PLUGIN: page->priv->plugin = g_value_get_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void rb_import_errors_source_init (RBImportErrorsSource *source) { source->priv = G_TYPE_INSTANCE_GET_PRIVATE (source, RB_TYPE_IMPORT_ERRORS_SOURCE, RBImportErrorsSourcePrivate); rb_display_page_set_icon_name (RB_DISPLAY_PAGE (source), "dialog-error-symbolic"); }
/** * rb_display_page_menu_get_page: * @model: the #RBDisplayPageModel * @parameters: action parameters * * Retrieves the page instance for an action invocation * given the action parameters. * * Return value: (transfer full): page instance */ RBDisplayPage * rb_display_page_menu_get_page (RBDisplayPageModel *model, GVariant *parameters) { GtkTreeIter iter; void *ptr; if (g_variant_is_of_type (parameters, G_VARIANT_TYPE_STRING) == FALSE) { rb_debug ("can't find page, variant type is %s", g_variant_get_type_string (parameters)); return NULL; } rb_debug ("trying to find page for %s", g_variant_get_string (parameters, NULL)); if (sscanf (g_variant_get_string (parameters, NULL), "%p", &ptr) != 1) { rb_debug ("can't parse parameter"); return NULL; } if (rb_display_page_model_find_page_full (model, ptr, &iter) == FALSE) { rb_debug ("can't find page matching %p", ptr); return NULL; } return g_object_ref (RB_DISPLAY_PAGE (ptr)); }
static void rb_source_set_query_model_internal (RBSource *source, RhythmDBQueryModel *model) { if (source->priv->query_model == model) { return; } if (source->priv->query_model != NULL) { g_signal_handlers_disconnect_by_func (source->priv->query_model, G_CALLBACK (rb_source_post_entry_deleted_cb), source); g_signal_handlers_disconnect_by_func (source->priv->query_model, G_CALLBACK (rb_source_row_inserted_cb), source); g_object_unref (source->priv->query_model); } source->priv->query_model = model; if (source->priv->query_model != NULL) { g_object_ref (source->priv->query_model); g_signal_connect_object (model, "post-entry-delete", G_CALLBACK (rb_source_post_entry_deleted_cb), source, 0); g_signal_connect_object (model, "row_inserted", G_CALLBACK (rb_source_row_inserted_cb), source, 0); } rb_display_page_notify_status_changed (RB_DISPLAY_PAGE (source)); }
static void rb_playlist_source_drop_cb (GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *data, guint info, guint time, gpointer user_data) { RBPlaylistSource *source = RB_PLAYLIST_SOURCE (user_data); GtkTargetList *tlist; GdkAtom target; tlist = gtk_target_list_new (target_uri, G_N_ELEMENTS (target_uri)); target = gtk_drag_dest_find_target (widget, context, tlist); gtk_target_list_unref (tlist); if (target == GDK_NONE) return; rb_display_page_receive_drag (RB_DISPLAY_PAGE (source), data); gtk_drag_finish (context, TRUE, FALSE, time); }
static void rb_missing_files_source_init (RBMissingFilesSource *source) { source->priv = G_TYPE_INSTANCE_GET_PRIVATE (source, RB_TYPE_MISSING_FILES_SOURCE, RBMissingFilesSourcePrivate); rb_display_page_set_icon_name (RB_DISPLAY_PAGE (source), "dialog-warning-symbolic"); }
static gboolean device_open_ignore_idle (DeviceOpenedData *data) { rb_display_page_delete_thyself (RB_DISPLAY_PAGE (data->source)); g_object_unref (data->source); free (data->types); g_free (data->name); g_free (data); return FALSE; }
static void _delete_cb (GrlSource *grilo_source, RBSource *source, RBGriloPlugin *plugin) { /* block the source deleted handler so we don't modify the hash table * while iterating it. */ g_signal_handlers_block_by_func (source, rb_grilo_plugin_source_deleted, plugin); rb_display_page_delete_thyself (RB_DISPLAY_PAGE (source)); }
static gboolean _update_status_idle (RBSource *source) { rb_display_page_notify_status_changed (RB_DISPLAY_PAGE (source)); if (source->priv->hidden_when_empty) update_visibility_idle (source); source->priv->update_status_id = 0; return FALSE; }
static void grilo_source_added_cb (GrlRegistry *registry, GrlSource *grilo_source, RBGriloPlugin *plugin) { GrlPlugin *grilo_plugin; GrlSupportedOps ops; const GList *keys; RBSource *source; RBShell *shell; int i; if (!(grl_source_get_supported_media (grilo_source) & GRL_MEDIA_TYPE_AUDIO)) { rb_debug ("grilo source %s doesn't support audio", grl_source_get_name (grilo_source)); goto ignore; } grilo_plugin = grl_source_get_plugin (grilo_source); for (i = 0; i < G_N_ELEMENTS (ignored_plugins); i++) { if (g_str_equal (ignored_plugins[i], grl_plugin_get_id (grilo_plugin))) { rb_debug ("grilo source %s is blacklisted", grl_source_get_name (grilo_source)); goto ignore; } } ops = grl_source_supported_operations (grilo_source); if (((ops & GRL_OP_BROWSE) == 0) && ((ops & GRL_OP_SEARCH) == 0)) { rb_debug ("grilo source %s is not interesting", grl_source_get_name (grilo_source)); goto ignore; } keys = grl_source_supported_keys (grilo_source); if (g_list_find ((GList *)keys, GINT_TO_POINTER (GRL_METADATA_KEY_URL)) == NULL) { rb_debug ("grilo source %s doesn't do urls", grl_source_get_name (grilo_source)); goto ignore; } rb_debug ("new grilo source: %s", grl_source_get_name (grilo_source)); source = rb_grilo_source_new (G_OBJECT (plugin), grilo_source); g_hash_table_insert (plugin->sources, g_object_ref (grilo_source), g_object_ref_sink (source)); /* probably put some sources under 'shared', some under 'stores'? */ g_object_get (plugin, "object", &shell, NULL); rb_shell_append_display_page (shell, RB_DISPLAY_PAGE (source), RB_DISPLAY_PAGE_GROUP_SHARED); g_object_unref (shell); return; ignore: grl_registry_unregister_source (registry, grilo_source, NULL); }
static void impl_delete_thyself (RBDisplayPage *page) { RBAndroidSourcePrivate *priv = GET_PRIVATE (page); if (priv->import_errors != NULL) { rb_display_page_delete_thyself (RB_DISPLAY_PAGE (priv->import_errors)); priv->import_errors = NULL; } RB_DISPLAY_PAGE_CLASS (rb_android_source_parent_class)->delete_thyself (page); }
static void grilo_source_removed_cb (GrlRegistry *registry, GrlSource *grilo_source, RBGriloPlugin *plugin) { RBSource *source; source = g_hash_table_lookup (plugin->sources, grilo_source); if (source) { rb_display_page_delete_thyself (RB_DISPLAY_PAGE (source)); g_hash_table_remove (plugin->sources, grilo_source); } }
static gboolean stage_button_press_cb (ClutterActor *stage, ClutterEvent *event, RBVisualizerPage *page) { if (event->button.button == 1 && event->button.click_count == 2) { clutter_threads_leave (); toggle_fullscreen (page); clutter_threads_enter (); } else if (event->button.button == 3) { rb_display_page_show_popup (RB_DISPLAY_PAGE (page)); } return FALSE; }
static void impl_dispose (GObject *object) { RBDisplayPage *page; g_return_if_fail (object != NULL); g_return_if_fail (RB_IS_DISPLAY_PAGE (object)); page = RB_DISPLAY_PAGE (object); rb_debug ("Disposing page %s", page->priv->name); g_clear_object (&page->priv->icon); G_OBJECT_CLASS (rb_display_page_parent_class)->dispose (object); }
static void rb_removable_media_manager_remove_volume (RBRemovableMediaManager *mgr, GVolume *volume) { RBRemovableMediaManagerPrivate *priv = GET_PRIVATE (mgr); RBSource *source; g_assert (volume != NULL); rb_debug ("volume removed"); source = g_hash_table_lookup (priv->volume_mapping, volume); if (source) { rb_display_page_delete_thyself (RB_DISPLAY_PAGE (source)); } }
static void rb_removable_media_manager_remove_mount (RBRemovableMediaManager *mgr, GMount *mount) { RBRemovableMediaManagerPrivate *priv = GET_PRIVATE (mgr); RBSource *source; g_assert (mount != NULL); rb_debug ("mount removed"); source = g_hash_table_lookup (priv->mount_mapping, mount); if (source) { rb_display_page_delete_thyself (RB_DISPLAY_PAGE (source)); } }
static void impl_remove_playlists (RBMediaPlayerSource *source) { RBGenericPlayerSourcePrivate *priv = GET_PRIVATE (source); GList *playlists; GList *t; playlists = g_list_copy (priv->playlists); for (t = playlists; t != NULL; t = t->next) { RBDisplayPage *p = RB_DISPLAY_PAGE (t->data); rb_display_page_remove (p); } g_list_free (playlists); }
static void impl_finalize (GObject *object) { RBDisplayPage *page; g_return_if_fail (object != NULL); g_return_if_fail (RB_IS_DISPLAY_PAGE (object)); page = RB_DISPLAY_PAGE (object); rb_debug ("finalizing page %s", page->priv->name); g_free (page->priv->name); G_OBJECT_CLASS (rb_display_page_parent_class)->finalize (object); }
static void impl_delete_thyself (RBDisplayPage *page) { GList *pl; GList *p; RBGenericPlayerSourcePrivate *priv = GET_PRIVATE (page); /* take a copy of the list first, as playlist_deleted_cb modifies priv->playlists */ pl = g_list_copy (priv->playlists); for (p = pl; p != NULL; p = p->next) { RBDisplayPage *playlist_page = RB_DISPLAY_PAGE (p->data); rb_display_page_delete_thyself (playlist_page); } g_list_free (priv->playlists); g_list_free (pl); priv->playlists = NULL; if (priv->import_errors != NULL) { rb_display_page_delete_thyself (RB_DISPLAY_PAGE (priv->import_errors)); priv->import_errors = NULL; } RB_DISPLAY_PAGE_CLASS (rb_generic_player_source_parent_class)->delete_thyself (page); }
static void impl_remove_playlists (RBMediaPlayerSource *source) { RBGenericPlayerSourcePrivate *priv = GET_PRIVATE (source); GList *playlists; GList *t; playlists = g_list_copy (priv->playlists); for (t = playlists; t != NULL; t = t->next) { RBGenericPlayerPlaylistSource *p = RB_GENERIC_PLAYER_PLAYLIST_SOURCE (t->data); rb_generic_player_playlist_delete_from_player (p); rb_display_page_delete_thyself (RB_DISPLAY_PAGE (p)); } g_list_free (playlists); }
RBSource * rb_grilo_source_new (GObject *plugin, GrlSource *grilo_source) { GObject *source; RBShell *shell; GSettings *settings; RhythmDBEntryType *entry_type; RhythmDB *db; char *name; name = g_strdup_printf ("grilo:%s", grl_source_get_id (grilo_source)); g_object_get (plugin, "object", &shell, NULL); g_object_get (shell, "db", &db, NULL); entry_type = g_object_new (rb_grilo_entry_type_get_type (), "db", db, "name", name, "save-to-disk", FALSE, "category", RHYTHMDB_ENTRY_NORMAL, "type-data-size", sizeof(RBGriloEntryData), NULL); rhythmdb_register_entry_type (db, entry_type); g_object_unref (db); g_free (name); settings = g_settings_new ("org.gnome.rhythmbox.plugins.grilo"); source = g_object_new (RB_TYPE_GRILO_SOURCE, "name", grl_source_get_name (grilo_source), "entry-type", entry_type, "shell", shell, "plugin", plugin, "show-browser", FALSE, "settings", g_settings_get_child (settings, "source"), "grilo-source", grilo_source, NULL); g_object_unref (settings); rb_display_page_set_icon_name (RB_DISPLAY_PAGE (source), "network-server-symbolic"); rb_shell_register_entry_type_for_source (shell, RB_SOURCE (source), entry_type); g_object_unref (shell); return RB_SOURCE (source); }
static gboolean device_open_failed_idle (RBMtpSource *source) { /* libmtp doesn't give us a useful error message in this case, so * all we can offer is this generic message. */ RBMtpSourcePrivate *priv = MTP_SOURCE_GET_PRIVATE (source); rb_error_dialog (NULL, _("Media player device error"), /* Translators: first %s is the device manufacturer, * second is the product name. */ _("Unable to open the %s %s device"), priv->raw_device.device_entry.vendor, priv->raw_device.device_entry.product); rb_display_page_delete_thyself (RB_DISPLAY_PAGE (source)); g_object_unref (source); return FALSE; }