[gnome-online-miners] media-server: Shuffle some code around



commit 72b01e5395b663ce0bfe384546b950c867eeaa09
Author: Pranav Kant <pranav913 gmail com>
Date:   Mon Sep 15 04:02:52 2014 +0530

    media-server: Shuffle some code around
    
    Encapsulate the logic to get photos from a DLNA server into a
    GomDlnaServer method. When we implement support for non-searchable
    servers, this will shield the rest of the miner from all the gory
    details.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=728912

 src/gom-dlna-server.c        |   76 ++++++++++++++++++++++++++++-
 src/gom-dlna-server.h        |   14 +++++
 src/gom-media-server-miner.c |  109 +++++------------------------------------
 3 files changed, 102 insertions(+), 97 deletions(-)
---
diff --git a/src/gom-dlna-server.c b/src/gom-dlna-server.c
index 240cd2b..0c7e537 100644
--- a/src/gom-dlna-server.c
+++ b/src/gom-dlna-server.c
@@ -1,6 +1,6 @@
 /*
  * GNOME Online Miners - crawls through your online content
- * Copyright (c) 2014 Pranav Kant
+ * Copyright (c) 2014, 2015 Pranav Kant
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -17,7 +17,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  * 02110-1301, USA.
  *
- * Author: Pranav Kant <pranav913 gmail com>
+ * Author: Pranav Kant <pranavk gnome org>
  *
  */
 
@@ -26,6 +26,7 @@
 #include "gom-dleyna-server-media-device.h"
 #include "gom-upnp-media-container2.h"
 #include "gom-dlna-server.h"
+#include "gom-utils.h"
 
 struct _GomDlnaServerPrivate
 {
@@ -54,6 +55,32 @@ G_DEFINE_TYPE_WITH_CODE (GomDlnaServer, gom_dlna_server, G_TYPE_OBJECT,
                                                 gom_dlna_server_initable_iface_init));
 
 
+static GomDlnaPhotoItem *
+photo_item_new (GVariant *var)
+{
+  GVariant *tmp;
+  GomDlnaPhotoItem *photo;
+  const gchar *str;
+
+  photo = g_slice_new0 (GomDlnaPhotoItem);
+
+  g_variant_lookup (var, "DisplayName", "&s", &str);
+  photo->name = gom_filename_strip_extension (str);
+
+  g_variant_lookup (var, "MIMEType", "&s", &str);
+  photo->mimetype = g_strdup (str);
+
+  g_variant_lookup (var, "Path", "&o", &str);
+  photo->path = g_strdup (str);
+
+  g_variant_lookup (var, "URLs", "@as", &tmp);
+  g_variant_get_child (tmp, 0, "&s", &str);
+  photo->url = g_strdup (str);
+  g_variant_unref (tmp);
+
+  return photo;
+}
+
 static void
 gom_dlna_server_dispose (GObject *object)
 {
@@ -197,6 +224,15 @@ gom_dlna_server_class_init (GomDlnaServerClass *class)
 
 }
 
+void
+gom_dlna_photo_item_free (GomDlnaPhotoItem *photo)
+{
+  g_free (photo->name);
+  g_free (photo->mimetype);
+  g_free (photo->path);
+  g_free (photo->url);
+  g_slice_free (GomDlnaPhotoItem, photo);
+}
 
 GomDlnaServer *
 gom_dlna_server_new_for_bus (GBusType bus_type,
@@ -302,6 +338,42 @@ gom_dlna_server_search_objects (GomDlnaServer *self, GError **error)
   return out;
 }
 
+GList *
+gom_dlna_server_get_photos (GomDlnaServer *server)
+{
+  GError *error = NULL;
+  GList *photos_list = NULL;
+  GVariant *out, *var;
+  GVariantIter *iter = NULL;
+  GomDlnaPhotoItem *photo;
+
+  if (gom_dlna_server_get_searchable (server))
+    {
+      out = gom_dlna_server_search_objects (server, &error);
+      if (error != NULL)
+        {
+          g_warning ("Unable to search objects on server : %s",
+                     error->message);
+          g_error_free (error);
+          return NULL;
+        }
+
+      g_variant_get (out, "aa{sv}", &iter);
+      while (g_variant_iter_loop (iter, "@a{sv}", &var))
+        {
+          photo = photo_item_new (var);
+          photos_list = g_list_prepend (photos_list, photo);
+        }
+
+      g_variant_iter_free (iter);
+    }
+  else
+    {
+      /* TODO: Implement an algo here for !searchable devices. */
+    }
+
+  return photos_list;
+}
 
 const gchar *
 gom_dlna_server_get_udn (GomDlnaServer *self)
diff --git a/src/gom-dlna-server.h b/src/gom-dlna-server.h
index 2cda7da..e67dacb 100644
--- a/src/gom-dlna-server.h
+++ b/src/gom-dlna-server.h
@@ -50,6 +50,18 @@ G_BEGIN_DECLS
   (G_TYPE_INSTANCE_GET_CLASS ((obj), \
    GOM_TYPE_DLNA_SERVER, GomDlnaServerClass))
 
+typedef struct _GomDlnaPhotoItem     GomDlnaPhotoItem;
+
+struct _GomDlnaPhotoItem
+{
+  gchar *name;
+  gchar *mimetype;
+  gchar *path;
+  gchar *url;
+};
+
+void                  gom_dlna_photo_item_free                  (GomDlnaPhotoItem *photo);
+
 typedef struct _GomDlnaServer        GomDlnaServer;
 typedef struct _GomDlnaServerClass   GomDlnaServerClass;
 typedef struct _GomDlnaServerPrivate GomDlnaServerPrivate;
@@ -86,6 +98,8 @@ const gchar          *gom_dlna_server_get_friendly_name         (GomDlnaServer
 
 const gchar          *gom_dlna_server_get_udn                   (GomDlnaServer  *self);
 
+GList                *gom_dlna_server_get_photos                (GomDlnaServer  *self);
+
 G_END_DECLS
 
 #endif /* GOM_DLNA_SERVER_H */
diff --git a/src/gom-media-server-miner.c b/src/gom-media-server-miner.c
index 6dda624..2e15573 100644
--- a/src/gom-media-server-miner.c
+++ b/src/gom-media-server-miner.c
@@ -1,6 +1,6 @@
 /*
  * GNOME Online Miners - crawls through your online content
- * Copyright (c) 2014 Pranav Kant
+ * Copyright (c) 2014, 2015 Pranav Kant
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -17,7 +17,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  * 02110-1301, USA.
  *
- * Author: Pranav Kant <pranav913 gmail com>
+ * Author: Pranav Kant <pranavk gnome org>
  *
  */
 
@@ -28,7 +28,6 @@
 #include "gom-dlna-server.h"
 #include "gom-dlna-servers-manager.h"
 #include "gom-media-server-miner.h"
-#include "gom-utils.h"
 
 #define MINER_IDENTIFIER "gd:media-server:miner:a4a47a3e-eb55-11e3-b983-14feb59cfa0e"
 
@@ -38,52 +37,10 @@ struct _GomMediaServerMinerPrivate {
 
 G_DEFINE_TYPE_WITH_PRIVATE (GomMediaServerMiner, gom_media_server_miner, GOM_TYPE_MINER)
 
-typedef struct {
-  gchar *name;
-  gchar *mimetype;
-  gchar *path;
-  gchar *url;
-} PhotoItem;
-
-static PhotoItem *
-photo_item_new (GVariant *var)
-{
-  GVariant *tmp;
-  PhotoItem *photo;
-  const gchar *str;
-
-  photo = g_slice_new0 (PhotoItem);
-
-  g_variant_lookup (var, "DisplayName", "&s", &str);
-  photo->name = gom_filename_strip_extension (str);
-
-  g_variant_lookup (var, "MIMEType", "&s", &str);
-  photo->mimetype = g_strdup (str);
-
-  g_variant_lookup (var, "Path", "&o", &str);
-  photo->path = g_strdup (str);
-
-  g_variant_lookup (var, "URLs", "@as", &tmp);
-  g_variant_get_child (tmp, 0, "&s", &str);
-  photo->url = g_strdup (str);
-  g_variant_unref (tmp);
-
-  return photo;
-}
-
-static void
-photo_item_free (PhotoItem *photo)
-{
-  g_free (photo->name);
-  g_free (photo->mimetype);
-  g_free (photo->path);
-  g_free (photo->url);
-  g_slice_free (PhotoItem, photo);
-}
 
 static gboolean
 account_miner_job_process_photo (GomAccountMinerJob *job,
-                                 PhotoItem *photo,
+                                 GomDlnaPhotoItem *photo,
                                  GError **error)
 {
   const gchar *photo_id;
@@ -155,48 +112,6 @@ account_miner_job_process_photo (GomAccountMinerJob *job,
   return TRUE;
 }
 
-static GList *
-get_photos (GomMediaServerMiner *self,
-            const gchar *udn)
-{
-  GomDlnaServer *server;
-  GList *photos_list = NULL;
-  GError *error = NULL;
-  GVariant *out, *var;
-  GVariantIter *iter = NULL;
-  PhotoItem *photo;
-
-  server = gom_dlna_servers_manager_get_server (self->priv->mngr, udn);
-  if (server == NULL)
-    return NULL; /* Server is offline. */
-
-  if (gom_dlna_server_get_searchable (server))
-    {
-      out = gom_dlna_server_search_objects (server, &error);
-      if (error != NULL)
-        {
-          g_warning ("Unable to search objects on server : %s",
-                     error->message);
-          g_error_free (error);
-          return NULL;
-        }
-
-      g_variant_get (out, "aa{sv}", &iter);
-      while (g_variant_iter_loop (iter, "@a{sv}", &var))
-        {
-          photo = photo_item_new (var);
-          photos_list = g_list_prepend (photos_list, photo);
-        }
-
-      g_variant_iter_free (iter);
-    }
-  else
-    {
-      /* TODO: Implement an algo here for !searchable devices. */
-    }
-
-  return photos_list;
-}
 
 static void
 query_media_server (GomAccountMinerJob *job,
@@ -205,10 +120,11 @@ query_media_server (GomAccountMinerJob *job,
   GomMediaServerMiner *self = GOM_MEDIA_SERVER_MINER (job->miner);
   GomMediaServerMinerPrivate *priv = self->priv;
   GError *local_error = NULL;
-  GoaMediaServer *server;
+  GoaMediaServer *media_server;
   GList *l;
   GList *photos_list;
   GoaObject *object;
+  GomDlnaServer *dlna_server;
   const gchar *udn;
 
   object = GOA_OBJECT (g_hash_table_lookup (job->services, "photos"));
@@ -222,13 +138,16 @@ query_media_server (GomAccountMinerJob *job,
       return;
     }
 
-  server = goa_object_get_media_server (object);
-  udn = goa_media_server_get_udn (server);
+  media_server = goa_object_get_media_server (object);
+  udn = goa_media_server_get_udn (media_server);
+  dlna_server = gom_dlna_servers_manager_get_server (priv->mngr, udn);
+  if (dlna_server == NULL)
+    return; /* Server is offline. */
 
-  photos_list = get_photos (self, udn);
+  photos_list = gom_dlna_server_get_photos (dlna_server);
   for (l = photos_list; l != NULL; l = l->next)
     {
-      PhotoItem *photo = (PhotoItem *) l->data;
+      GomDlnaPhotoItem *photo = (GomDlnaPhotoItem *) l->data;
 
       account_miner_job_process_photo (job, photo, &local_error);
       if (local_error != NULL)
@@ -238,8 +157,8 @@ query_media_server (GomAccountMinerJob *job,
         }
     }
 
-  g_list_free_full (photos_list, (GDestroyNotify) photo_item_free);
-  g_object_unref (server);
+  g_list_free_full (photos_list, (GDestroyNotify) gom_dlna_photo_item_free);
+  g_object_unref (media_server);
 }
 
 static GHashTable *


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