[rhythmbox] generic-player: unify all the source creation code



commit cfd44c89cc270da83f700481e165b9897d032744
Author: Jonathan Matthew <jonathan d14n org>
Date:   Sun Jul 26 22:59:56 2015 +1000

    generic-player: unify all the source creation code

 plugins/generic-player/rb-generic-player-plugin.c |  107 ++++++++++++++++++---
 plugins/generic-player/rb-generic-player-source.c |   79 ---------------
 plugins/generic-player/rb-generic-player-source.h |    5 -
 plugins/generic-player/rb-nokia770-source.c       |   43 --------
 plugins/generic-player/rb-nokia770-source.h       |    4 -
 plugins/generic-player/rb-psp-source.c            |   42 --------
 plugins/generic-player/rb-psp-source.h            |    4 -
 7 files changed, 92 insertions(+), 192 deletions(-)
---
diff --git a/plugins/generic-player/rb-generic-player-plugin.c 
b/plugins/generic-player/rb-generic-player-plugin.c
index 17ef5d5..855361e 100644
--- a/plugins/generic-player/rb-generic-player-plugin.c
+++ b/plugins/generic-player/rb-generic-player-plugin.c
@@ -50,7 +50,8 @@
 #include "rb-nokia770-source.h"
 #include "rb-psp-source.h"
 #include "rb-display-page-tree.h"
-
+#include "rb-builder-helpers.h"
+#include "rb-application.h"
 
 #define RB_TYPE_GENERIC_PLAYER_PLUGIN          (rb_generic_player_plugin_get_type ())
 #define RB_GENERIC_PLAYER_PLUGIN(o)            (G_TYPE_CHECK_INSTANCE_CAST ((o), 
RB_TYPE_GENERIC_PLAYER_PLUGIN, RBGenericPlayerPlugin))
@@ -94,23 +95,99 @@ static RBSource *
 create_source_cb (RBRemovableMediaManager *rmm, GMount *mount, MPIDDevice *device_info, 
RBGenericPlayerPlugin *plugin)
 {
        RBSource *source = NULL;
+       GType source_type = G_TYPE_NONE;
        RBShell *shell;
+       RhythmDB *db;
+       RhythmDBEntryType *entry_type;
+       RhythmDBEntryType *error_type;
+       RhythmDBEntryType *ignore_type;
+       GtkBuilder *builder;
+       GMenu *toolbar;
+       GVolume *volume;
+       GSettings *settings;
+       const char *name_prefix;
+       char *name;
+       char *path;
+
+       if (rb_psp_is_mount_player (mount, device_info)) {
+               source_type = RB_TYPE_PSP_SOURCE;
+               name_prefix = "psp";
+       } else if (rb_nokia770_is_mount_player (mount, device_info)) {
+               source_type = RB_TYPE_NOKIA770_SOURCE;
+               name_prefix = "nokia770";
+       } else if (rb_generic_player_is_mount_player (mount, device_info)) {
+               source_type = RB_TYPE_GENERIC_PLAYER_SOURCE;
+               name_prefix = "generic-player";
+       } else {
+               return NULL;
+       }
 
-       g_object_get (plugin, "object", &shell, NULL);
+       volume = g_mount_get_volume (mount);
+       path = g_volume_get_identifier (volume, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE);
 
-       if (rb_psp_is_mount_player (mount, device_info))
-               source = rb_psp_source_new (G_OBJECT (plugin), shell, mount, device_info);
-       if (source == NULL && rb_nokia770_is_mount_player (mount, device_info))
-               source = rb_nokia770_source_new (G_OBJECT (plugin), shell, mount, device_info);
-       if (source == NULL && rb_generic_player_is_mount_player (mount, device_info))
-               source = rb_generic_player_source_new (G_OBJECT (plugin), shell, mount, device_info);
-
-       if (source) {
-               plugin->player_sources = g_list_prepend (plugin->player_sources, source);
-               g_signal_connect_object (G_OBJECT (source),
-                                        "deleted", G_CALLBACK (rb_generic_player_plugin_source_deleted),
-                                        plugin, 0);
-       }
+       g_object_get (plugin, "object", &shell, NULL);
+       g_object_get (shell, "db", &db, NULL);
+
+       name = g_strdup_printf ("%s: %s", name_prefix, path);
+       entry_type = g_object_new (RHYTHMDB_TYPE_ENTRY_TYPE,
+                                  "db", db,
+                                  "name", name,
+                                  "save-to-disk", FALSE,
+                                  "category", RHYTHMDB_ENTRY_NORMAL,
+                                  NULL);
+       rhythmdb_register_entry_type (db, entry_type);
+       g_free (name);
+
+       name = g_strdup_printf ("%s (ignore): %s", name_prefix, path);
+       ignore_type = g_object_new (RHYTHMDB_TYPE_ENTRY_TYPE,
+                                   "db", db,
+                                   "name", name,
+                                   "save-to-disk", FALSE,
+                                   "category", RHYTHMDB_ENTRY_VIRTUAL,
+                                   NULL);
+       rhythmdb_register_entry_type (db, ignore_type);
+       g_free (name);
+
+       name = g_strdup_printf ("%s (errors): %s", name_prefix, path);
+       error_type = g_object_new (RHYTHMDB_TYPE_ENTRY_TYPE,
+                                  "db", db,
+                                  "name", name,
+                                  "save-to-disk", FALSE,
+                                  "category", RHYTHMDB_ENTRY_VIRTUAL,
+                                  NULL);
+       rhythmdb_register_entry_type (db, error_type);
+       g_free (name);
+
+       g_object_unref (db);
+
+       builder = rb_builder_load_plugin_file (G_OBJECT (plugin), "generic-player-toolbar.ui", NULL);
+       toolbar = G_MENU (gtk_builder_get_object (builder, "generic-player-toolbar"));
+       rb_application_link_shared_menus (RB_APPLICATION (g_application_get_default ()), toolbar);
+
+       settings = g_settings_new ("org.gnome.rhythmbox.plugins.generic-player");
+
+       source = RB_SOURCE (g_object_new (source_type,
+                                         "plugin", plugin,
+                                         "entry-type", entry_type,
+                                         "ignore-entry-type", ignore_type,
+                                         "error-entry-type", error_type,
+                                         "mount", mount,
+                                         "shell", shell,
+                                         "device-info", device_info,
+                                         "load-status", RB_SOURCE_LOAD_STATUS_LOADING,
+                                         "settings", g_settings_get_child (settings, "source"),
+                                         "toolbar-menu", toolbar,
+                                         NULL));
+
+       g_object_unref (settings);
+       g_object_unref (builder);
+
+       rb_shell_register_entry_type_for_source (shell, RB_SOURCE (source), entry_type);
+
+       plugin->player_sources = g_list_prepend (plugin->player_sources, source);
+       g_signal_connect_object (G_OBJECT (source),
+                                "deleted", G_CALLBACK (rb_generic_player_plugin_source_deleted),
+                                plugin, 0);
 
        g_object_unref (shell);
        return source;
diff --git a/plugins/generic-player/rb-generic-player-source.c 
b/plugins/generic-player/rb-generic-player-source.c
index a71d097..e6e3603 100644
--- a/plugins/generic-player/rb-generic-player-source.c
+++ b/plugins/generic-player/rb-generic-player-source.c
@@ -464,85 +464,6 @@ impl_dispose (GObject *object)
        G_OBJECT_CLASS (rb_generic_player_source_parent_class)->dispose (object);
 }
 
-RBSource *
-rb_generic_player_source_new (GObject *plugin, RBShell *shell, GMount *mount, MPIDDevice *device_info)
-{
-       RBGenericPlayerSource *source;
-       RhythmDBEntryType *entry_type;
-       RhythmDBEntryType *error_type;
-       RhythmDBEntryType *ignore_type;
-       RhythmDB *db;
-       GtkBuilder *builder;
-       GMenu *toolbar;
-       GVolume *volume;
-       GSettings *settings;
-       char *name;
-       char *path;
-
-       volume = g_mount_get_volume (mount);
-
-       g_object_get (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 = g_object_new (RHYTHMDB_TYPE_ENTRY_TYPE,
-                                  "db", db,
-                                  "name", name,
-                                  "save-to-disk", FALSE,
-                                  "category", RHYTHMDB_ENTRY_NORMAL,
-                                  NULL);
-       rhythmdb_register_entry_type (db, entry_type);
-       g_free (name);
-
-       name = g_strdup_printf ("generic audio player (ignore): %s", path);
-       ignore_type = g_object_new (RHYTHMDB_TYPE_ENTRY_TYPE,
-                                   "db", db,
-                                   "name", name,
-                                   "save-to-disk", FALSE,
-                                   "category", RHYTHMDB_ENTRY_VIRTUAL,
-                                   NULL);
-       rhythmdb_register_entry_type (db, ignore_type);
-       g_free (name);
-
-       name = g_strdup_printf ("generic audio player (errors): %s", path);
-       error_type = g_object_new (RHYTHMDB_TYPE_ENTRY_TYPE,
-                                  "db", db,
-                                  "name", name,
-                                  "save-to-disk", FALSE,
-                                  "category", RHYTHMDB_ENTRY_VIRTUAL,
-                                  NULL);
-       rhythmdb_register_entry_type (db, error_type);
-       g_free (name);
-
-       g_object_unref (db);
-       g_object_unref (volume);
-       g_free (path);
-
-       builder = rb_builder_load_plugin_file (plugin, "generic-player-toolbar.ui", NULL);
-       toolbar = G_MENU (gtk_builder_get_object (builder, "generic-player-toolbar"));
-       rb_application_link_shared_menus (RB_APPLICATION (g_application_get_default ()), toolbar);
-
-       settings = g_settings_new ("org.gnome.rhythmbox.plugins.generic-player");
-       source = RB_GENERIC_PLAYER_SOURCE (g_object_new (RB_TYPE_GENERIC_PLAYER_SOURCE,
-                                                        "plugin", plugin,
-                                                        "entry-type", entry_type,
-                                                        "ignore-entry-type", ignore_type,
-                                                        "error-entry-type", error_type,
-                                                        "mount", mount,
-                                                        "shell", shell,
-                                                        "device-info", device_info,
-                                                        "load-status", RB_SOURCE_LOAD_STATUS_LOADING,
-                                                        "settings", g_settings_get_child (settings, 
"source"),
-                                                        "toolbar-menu", toolbar,
-                                                        NULL));
-       g_object_unref (settings);
-       g_object_unref (builder);
-
-       rb_shell_register_entry_type_for_source (shell, RB_SOURCE (source), entry_type);
-
-       return RB_SOURCE (source);
-}
-
 static void
 impl_delete_thyself (RBDisplayPage *page)
 {
diff --git a/plugins/generic-player/rb-generic-player-source.h 
b/plugins/generic-player/rb-generic-player-source.h
index 014275d..5565101 100644
--- a/plugins/generic-player/rb-generic-player-source.h
+++ b/plugins/generic-player/rb-generic-player-source.h
@@ -56,7 +56,6 @@ typedef struct
 
        char *          (*get_mount_path) (RBGenericPlayerSource *source);
        void            (*load_playlists) (RBGenericPlayerSource *source);
-       char **         (*get_audio_folders) (RBGenericPlayerSource *source);
 
        char *          (*uri_from_playlist_uri) (RBGenericPlayerSource *source, const char *uri);
        char *          (*uri_to_playlist_uri) (RBGenericPlayerSource *source, const char *uri, 
TotemPlParserType playlist_type);
@@ -65,10 +64,6 @@ typedef struct
        char *          (*build_filename) (RBGenericPlayerSource *source, RhythmDBEntry *entry);
 } RBGenericPlayerSourceClass;
 
-RBSource *             rb_generic_player_source_new                    (GObject *plugin,
-                                                                        RBShell *shell,
-                                                                        GMount *mount,
-                                                                        MPIDDevice *device_info);
 GType                  rb_generic_player_source_get_type               (void);
 
 char *                 rb_generic_player_source_get_mount_path         (RBGenericPlayerSource *source);
diff --git a/plugins/generic-player/rb-nokia770-source.c b/plugins/generic-player/rb-nokia770-source.c
index abe771a..f13227c 100644
--- a/plugins/generic-player/rb-nokia770-source.c
+++ b/plugins/generic-player/rb-nokia770-source.c
@@ -69,49 +69,6 @@ rb_nokia770_source_init (RBNokia770Source *source)
 
 }
 
-RBSource *
-rb_nokia770_source_new (GObject *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 = g_object_new (RHYTHMDB_TYPE_ENTRY_TYPE,
-                                  "db", db,
-                                  "name", name,
-                                  "category", RHYTHMDB_ENTRY_NORMAL,
-                                  "save-to-disk", FALSE,
-                                  NULL);
-       rhythmdb_register_entry_type (db, entry_type);
-       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,
-                                                  "mount", mount,
-                                                  "shell", shell,
-                                                  "device-info", device_info,
-                                                  NULL));
-
-       rb_shell_register_entry_type_for_source (shell, RB_SOURCE (source), entry_type);
-
-       return RB_SOURCE (source);
-}
-
 static char *
 impl_uri_from_playlist_uri (RBGenericPlayerSource *source, const char *uri)
 {
diff --git a/plugins/generic-player/rb-nokia770-source.h b/plugins/generic-player/rb-nokia770-source.h
index 3529104..6fc88a6 100644
--- a/plugins/generic-player/rb-nokia770-source.h
+++ b/plugins/generic-player/rb-nokia770-source.h
@@ -53,10 +53,6 @@ typedef struct
        RBGenericPlayerSourceClass parent;
 } RBNokia770SourceClass;
 
-RBSource *                     rb_nokia770_source_new          (GObject *plugin,
-                                                                RBShell *shell,
-                                                                GMount *mount,
-                                                                MPIDDevice *device_info);
 GType                          rb_nokia770_source_get_type     (void);
 
 gboolean                       rb_nokia770_is_mount_player     (GMount *mount, MPIDDevice *device_info);
diff --git a/plugins/generic-player/rb-psp-source.c b/plugins/generic-player/rb-psp-source.c
index f4bd05d..4f422de 100644
--- a/plugins/generic-player/rb-psp-source.c
+++ b/plugins/generic-player/rb-psp-source.c
@@ -67,48 +67,6 @@ rb_psp_source_init (RBPspSource *source)
 {
 }
 
-RBSource *
-rb_psp_source_new (GObject *plugin, RBShell *shell, GMount *mount, MPIDDevice *device_info)
-{
-       RBPspSource *source;
-       RhythmDBEntryType *entry_type;
-       RhythmDB *db;
-       char *name;
-       char *path;
-       GVolume *volume;
-
-       g_assert (rb_psp_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 ("psp: %s", path);
-       entry_type = g_object_new (RHYTHMDB_TYPE_ENTRY_TYPE,
-                                  "db", db,
-                                  "name", name,
-                                  "save-to-disk", FALSE,
-                                  "category", RHYTHMDB_ENTRY_NORMAL,
-                                  NULL);
-       rhythmdb_register_entry_type (db, entry_type);
-       g_object_unref (db);
-       g_free (name);
-       g_free (path);
-       g_object_unref (volume);
-
-       source = RB_PSP_SOURCE (g_object_new (RB_TYPE_PSP_SOURCE,
-                                         "plugin", plugin,
-                                         "entry-type", entry_type,
-                                         "mount", mount,
-                                         "shell", shell,
-                                         "device-info", device_info,
-                                         NULL));
-
-       rb_shell_register_entry_type_for_source (shell, RB_SOURCE (source), entry_type);
-
-       return RB_SOURCE (source);
-}
-
 static GFile *
 find_dir_no_case (GFile *root, gboolean look_for_psp)
 {
diff --git a/plugins/generic-player/rb-psp-source.h b/plugins/generic-player/rb-psp-source.h
index 936c05e..313cda8 100644
--- a/plugins/generic-player/rb-psp-source.h
+++ b/plugins/generic-player/rb-psp-source.h
@@ -53,10 +53,6 @@ typedef struct
        RBGenericPlayerSourceClass parent;
 } RBPspSourceClass;
 
-RBSource *             rb_psp_source_new               (GObject *plugin,
-                                                        RBShell *shell,
-                                                        GMount *mount,
-                                                        MPIDDevice *device_info);
 GType                  rb_psp_source_get_type          (void);
 
 gboolean               rb_psp_is_mount_player          (GMount *mount, MPIDDevice *device_info);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]