rygel r511 - trunk/src/plugins/tracker



Author: zeeshanak
Date: Wed Jan 28 12:34:21 2009
New Revision: 511
URL: http://svn.gnome.org/viewvc/rygel?rev=511&view=rev

Log:
Separate class for Tracker's root container.

Most implementation is now in this class rather than MediaTracker.

Added:
   trunk/src/plugins/tracker/rygel-tracker-root-container.vala
      - copied, changed from r510, /trunk/src/plugins/tracker/rygel-media-tracker.vala
Modified:
   trunk/src/plugins/tracker/Makefile.am
   trunk/src/plugins/tracker/rygel-media-tracker.vala

Modified: trunk/src/plugins/tracker/Makefile.am
==============================================================================
--- trunk/src/plugins/tracker/Makefile.am	(original)
+++ trunk/src/plugins/tracker/Makefile.am	Wed Jan 28 12:34:21 2009
@@ -12,6 +12,8 @@
 BUILT_SOURCES = rygel-media-tracker.stamp \
 		rygel-media-tracker.h \
 		rygel-media-tracker.c \
+		rygel-tracker-root-container.h \
+		rygel-tracker-root-container.c \
 		rygel-tracker-container.h \
 		rygel-tracker-container.c \
 		rygel-tracker-item.h \
@@ -28,6 +30,9 @@
 librygel_media_tracker_la_SOURCES = rygel-media-tracker.h \
 			            rygel-media-tracker.c \
 				    rygel-media-tracker.vala \
+				    rygel-tracker-root-container.h \
+				    rygel-tracker-root-container.c \
+				    rygel-tracker-root-container.vala \
 				    rygel-tracker-container.h \
 			            rygel-tracker-container.c \
 				    rygel-tracker-container.vala \

Modified: trunk/src/plugins/tracker/rygel-media-tracker.vala
==============================================================================
--- trunk/src/plugins/tracker/rygel-media-tracker.vala	(original)
+++ trunk/src/plugins/tracker/rygel-media-tracker.vala	Wed Jan 28 12:34:21 2009
@@ -30,70 +30,32 @@
  * Implementation of Tracker-based ContentDirectory service.
  */
 public class Rygel.MediaTracker : ContentDirectory {
-    /* FIXME: Make this a static if you know how to initize it */
-    private ArrayList<TrackerContainer> containers;
-
     /* Pubic methods */
-    public override void constructed () {
-        // Chain-up to base first
-        base.constructed ();
-
-        this.containers = new ArrayList<TrackerContainer> ();
-        this.containers.add
-                        (new TrackerContainer ("16",
-                                               this.root_container.id,
-                                               "All Images",
-                                               "Images",
-                                               MediaItem.IMAGE_CLASS,
-                                               this.http_server));
-        this.containers.add
-                        (new TrackerContainer ("14",
-                                               this.root_container.id,
-                                               "All Music",
-                                               "Music",
-                                               MediaItem.MUSIC_CLASS,
-                                               this.http_server));
-        this.containers.add
-                        (new TrackerContainer ("15",
-                                               this.root_container.id,
-                                               "All Videos",
-                                               "Videos",
-                                               MediaItem.VIDEO_CLASS,
-                                               this.http_server));
-
-        // Now we know how many top-level containers we have
-        this.root_container.child_count = this.containers.size;
-    }
-
     public override Gee.List<MediaObject> get_children (
                                                  string   container_id,
                                                  uint     offset,
                                                  uint     max_count,
                                                  out uint child_count)
                                                  throws GLib.Error {
-        var container = this.find_container_by_id (container_id);
-        if (container == null) {
+        var media_object = this.find_object_by_id (container_id);
+        if (media_object == null || !(media_object is MediaContainer)) {
             throw new ContentDirectoryError.NO_SUCH_OBJECT ("No such object");
         }
 
-        return container.get_children (offset,
-                                       max_count,
-                                       out child_count);
+        var container = (MediaContainer) media_object;
+        var children = container.get_children (offset,
+                                               max_count,
+                                               out child_count);
+        if (children == null) {
+            throw new ContentDirectoryError.NO_SUCH_OBJECT ("No such object");
+        }
+
+        return children;
     }
 
     public override MediaObject find_object_by_id (string object_id)
                                                    throws GLib.Error {
-        /* First try containers */
-        MediaObject media_object = find_container_by_id (object_id);
-
-        if (media_object == null) {
-            /* Now try items */
-            var container = get_item_parent (object_id);
-
-            if (container != null)
-                media_object = container.find_object_by_id (object_id);
-        }
-
+        var media_object = this.root_container.find_object_by_id (object_id);
         if (media_object == null) {
             throw new ContentDirectoryError.NO_SUCH_OBJECT ("No such object");
         }
@@ -106,19 +68,9 @@
                                                  uint     max_count,
                                                  out uint child_count)
                                                  throws GLib.Error {
-        child_count = this.containers.size;
-
-        Gee.List<MediaObject> children = null;
-
-        if (max_count == 0) {
-            max_count = child_count;
-        }
-
-        uint stop = offset + max_count;
-
-        stop = stop.clamp (0, child_count);
-        children = this.containers.slice ((int) offset, (int) stop);
-
+        var children = this.root_container.get_children (offset,
+                                                         max_count,
+                                                         out child_count);
         if (children == null) {
             throw new ContentDirectoryError.NO_SUCH_OBJECT ("No such object");
         }
@@ -128,48 +80,7 @@
 
     public override MediaContainer? create_root_container () {
         string friendly_name = this.root_device.get_friendly_name ();
-        return new MediaContainer.root (friendly_name, 0);
-    }
-
-    /* Private methods */
-    private TrackerContainer? find_container_by_id (string container_id) {
-        TrackerContainer container;
-
-        container = null;
-
-        foreach (TrackerContainer tmp in this.containers)
-            if (container_id == tmp.id) {
-                container = tmp;
-
-                break;
-            }
-
-        return container;
-    }
-
-    private TrackerContainer? get_item_parent (string uri) {
-        TrackerContainer container = null;
-        string category;
-
-        try {
-            category = TrackerContainer.get_file_category (uri);
-        } catch (GLib.Error error) {
-            critical ("failed to find service type for %s: %s",
-                      uri,
-                      error.message);
-
-            return null;
-        }
-
-        foreach (TrackerContainer tmp in this.containers) {
-            if (tmp.category == category) {
-                container = tmp;
-
-                break;
-            }
-        }
-
-        return container;
+        return new TrackerRootContainer (friendly_name, this.http_server);
     }
 }
 

Copied: trunk/src/plugins/tracker/rygel-tracker-root-container.vala (from r510, /trunk/src/plugins/tracker/rygel-media-tracker.vala)
==============================================================================
--- /trunk/src/plugins/tracker/rygel-media-tracker.vala	(original)
+++ trunk/src/plugins/tracker/rygel-tracker-root-container.vala	Wed Jan 28 12:34:21 2009
@@ -1,8 +1,9 @@
 /*
- * Copyright (C) 2008 Zeeshan Ali <zeenix gmail com>.
+ * Copyright (C) 2008 Zeeshan Ali (Khattak) <zeeshanak gnome org>.
  * Copyright (C) 2008 Nokia Corporation, all rights reserved.
  *
- * Author: Zeeshan Ali <zeenix gmail com>
+ * Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
+ *                               <zeeshan ali nokia com>
  *
  * This file is part of Rygel.
  *
@@ -27,85 +28,46 @@
 using Gee;
 
 /**
- * Implementation of Tracker-based ContentDirectory service.
+ * Represents the root container for Tracker media content hierarchy.
  */
-public class Rygel.MediaTracker : ContentDirectory {
+public class Rygel.TrackerRootContainer : MediaContainer {
     /* FIXME: Make this a static if you know how to initize it */
     private ArrayList<TrackerContainer> containers;
 
-    /* Pubic methods */
-    public override void constructed () {
-        // Chain-up to base first
-        base.constructed ();
+    public TrackerRootContainer (string title, HTTPServer http_server) {
+        base.root (title, 0);
 
         this.containers = new ArrayList<TrackerContainer> ();
         this.containers.add
                         (new TrackerContainer ("16",
-                                               this.root_container.id,
+                                               this.id,
                                                "All Images",
                                                "Images",
                                                MediaItem.IMAGE_CLASS,
-                                               this.http_server));
+                                               http_server));
         this.containers.add
                         (new TrackerContainer ("14",
-                                               this.root_container.id,
+                                               this.id,
                                                "All Music",
                                                "Music",
                                                MediaItem.MUSIC_CLASS,
-                                               this.http_server));
+                                               http_server));
         this.containers.add
                         (new TrackerContainer ("15",
-                                               this.root_container.id,
+                                               this.id,
                                                "All Videos",
                                                "Videos",
                                                MediaItem.VIDEO_CLASS,
-                                               this.http_server));
+                                               http_server));
 
         // Now we know how many top-level containers we have
-        this.root_container.child_count = this.containers.size;
+        this.child_count = this.containers.size;
     }
 
-    public override Gee.List<MediaObject> get_children (
-                                                 string   container_id,
-                                                 uint     offset,
-                                                 uint     max_count,
-                                                 out uint child_count)
-                                                 throws GLib.Error {
-        var container = this.find_container_by_id (container_id);
-        if (container == null) {
-            throw new ContentDirectoryError.NO_SUCH_OBJECT ("No such object");
-        }
-
-        return container.get_children (offset,
-                                       max_count,
-                                       out child_count);
-    }
-
-    public override MediaObject find_object_by_id (string object_id)
-                                                   throws GLib.Error {
-        /* First try containers */
-        MediaObject media_object = find_container_by_id (object_id);
-
-        if (media_object == null) {
-            /* Now try items */
-            var container = get_item_parent (object_id);
-
-            if (container != null)
-                media_object = container.find_object_by_id (object_id);
-        }
-
-        if (media_object == null) {
-            throw new ContentDirectoryError.NO_SUCH_OBJECT ("No such object");
-        }
-
-        return media_object;
-    }
-
-    public override Gee.List<MediaObject> get_root_children (
-                                                 uint     offset,
-                                                 uint     max_count,
-                                                 out uint child_count)
-                                                 throws GLib.Error {
+    public override Gee.List<MediaObject> get_children (uint     offset,
+                                                        uint     max_count,
+                                                        out uint child_count)
+                                                        throws GLib.Error {
         child_count = this.containers.size;
 
         Gee.List<MediaObject> children = null;
@@ -126,9 +88,24 @@
         return children;
     }
 
-    public override MediaContainer? create_root_container () {
-        string friendly_name = this.root_device.get_friendly_name ();
-        return new MediaContainer.root (friendly_name, 0);
+    public override MediaObject find_object_by_id (string id)
+                                                   throws GLib.Error {
+        /* First try containers */
+        MediaObject media_object = find_container_by_id (id);
+
+        if (media_object == null) {
+            /* Now try items */
+            var container = get_item_parent (id);
+
+            if (container != null)
+                media_object = container.find_object_by_id (id);
+        }
+
+        if (media_object == null) {
+            throw new ContentDirectoryError.NO_SUCH_OBJECT ("No such object");
+        }
+
+        return media_object;
     }
 
     /* Private methods */



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