[rygel] tracker: Implement factories rather than items



commit f6df7fff81b1ed5fdfbcbee4f2377fad4d72b39f
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date:   Mon Nov 30 18:34:47 2009 +0200

    tracker: Implement factories rather than items

 src/plugins/tracker/Makefile.am                    |    8 ++--
 ....vala => rygel-tracker-image-item-factory.vala} |   29 ++++++++++------
 ...r-item.vala => rygel-tracker-item-factory.vala} |   36 +++++++++----------
 ....vala => rygel-tracker-music-item-factory.vala} |   33 +++++++++++-------
 .../tracker/rygel-tracker-root-container.vala      |   28 ++++++++-------
 .../tracker/rygel-tracker-search-container.vala    |   30 ++++++++---------
 ....vala => rygel-tracker-video-item-factory.vala} |   29 ++++++++++------
 7 files changed, 106 insertions(+), 87 deletions(-)
---
diff --git a/src/plugins/tracker/Makefile.am b/src/plugins/tracker/Makefile.am
index 8ed89e8..96a5f9c 100644
--- a/src/plugins/tracker/Makefile.am
+++ b/src/plugins/tracker/Makefile.am
@@ -16,10 +16,10 @@ librygel_media_tracker_la_SOURCES = \
 				    rygel-tracker-keywords.vala \
 				    rygel-tracker-search-container.vala \
 				    rygel-tracker-query.vala \
-				    rygel-tracker-item.vala \
-				    rygel-tracker-video-item.vala \
-				    rygel-tracker-music-item.vala \
-				    rygel-tracker-image-item.vala \
+				    rygel-tracker-item-factory.vala \
+				    rygel-tracker-video-item-factory.vala \
+				    rygel-tracker-music-item-factory.vala \
+				    rygel-tracker-image-item-factory.vala \
 				    rygel-tracker-plugin.vala \
 				    rygel-tracker-plugin-factory.vala \
 				    rygel-tracker-interfaces.vala
diff --git a/src/plugins/tracker/rygel-tracker-image-item.vala b/src/plugins/tracker/rygel-tracker-image-item-factory.vala
similarity index 55%
rename from src/plugins/tracker/rygel-tracker-image-item.vala
rename to src/plugins/tracker/rygel-tracker-image-item-factory.vala
index a40b363..9817ef7 100644
--- a/src/plugins/tracker/rygel-tracker-image-item.vala
+++ b/src/plugins/tracker/rygel-tracker-image-item-factory.vala
@@ -25,27 +25,34 @@ using GUPnP;
 using DBus;
 
 /**
- * Represents Tracker image item.
+ * Tracker image item factory.
  */
-public class Rygel.TrackerImageItem : Rygel.TrackerItem {
+public class Rygel.TrackerImageItemFactory : Rygel.TrackerItemFactory {
     public const string CATEGORY = "nmm:Photo";
 
-    public TrackerImageItem (string                 id,
-                             string                 path,
-                             TrackerSearchContainer parent,
-                             string[]               metadata)
-                             throws GLib.Error {
-        base (id, path, parent, MediaItem.IMAGE_CLASS, metadata);
+    public override MediaItem create (string                 id,
+                                      string                 path,
+                                      TrackerSearchContainer parent,
+                                      string?                upnp_class,
+                                      string[]               metadata)
+                                      throws GLib.Error {
+        var item = base.create (id,
+                                path,
+                                parent,
+                                MediaItem.IMAGE_CLASS,
+                                metadata);
 
         if (metadata[Metadata.WIDTH] != "")
-            this.width = metadata[Metadata.WIDTH].to_int ();
+            item.width = metadata[Metadata.WIDTH].to_int ();
 
         if (metadata[Metadata.HEIGHT] != "")
-            this.height = metadata[Metadata.HEIGHT].to_int ();
+            item.height = metadata[Metadata.HEIGHT].to_int ();
 
         if (metadata[Metadata.DATE] != "") {
-            this.date = seconds_to_iso8601 (metadata[Metadata.DATE]);
+            item.date = seconds_to_iso8601 (metadata[Metadata.DATE]);
         }
+
+        return item;
     }
 }
 
diff --git a/src/plugins/tracker/rygel-tracker-item.vala b/src/plugins/tracker/rygel-tracker-item-factory.vala
similarity index 74%
rename from src/plugins/tracker/rygel-tracker-item.vala
rename to src/plugins/tracker/rygel-tracker-item-factory.vala
index 93d267a..7bc37a5 100644
--- a/src/plugins/tracker/rygel-tracker-item.vala
+++ b/src/plugins/tracker/rygel-tracker-item-factory.vala
@@ -25,9 +25,9 @@ using GUPnP;
 using DBus;
 
 /**
- * Represents Tracker item.
+ * Abstract Tracker item factory.
  */
-public abstract class Rygel.TrackerItem : Rygel.MediaItem {
+public abstract class Rygel.TrackerItemFactory {
     protected enum Metadata {
         FILE_NAME,
         TITLE,
@@ -50,33 +50,31 @@ public abstract class Rygel.TrackerItem : Rygel.MediaItem {
         LAST_KEY
     }
 
-    protected string path;
-
-    public TrackerItem (string                 id,
-                        string                 path,
-                        TrackerSearchContainer parent,
-                        string                 upnp_class,
-                        string[]               metadata)
-                        throws GLib.Error {
-        base (id, parent, "", upnp_class);
-
-        this.path = path;
+    public virtual MediaItem create (string                 id,
+                                     string                 path,
+                                     TrackerSearchContainer parent,
+                                     string?                upnp_class,
+                                     string[]               metadata)
+                                     throws GLib.Error {
+        var item = new MediaItem (id, parent, "", upnp_class);
 
         if (metadata[Metadata.TITLE] != "")
-            this.title = metadata[Metadata.TITLE];
+            item.title = metadata[Metadata.TITLE];
         else
             /* If title wasn't provided, use filename instead */
-            this.title = metadata[Metadata.FILE_NAME];
+            item.title = metadata[Metadata.FILE_NAME];
 
         if (metadata[Metadata.SIZE] != "")
-            this.size = metadata[Metadata.SIZE].to_int ();
+            item.size = metadata[Metadata.SIZE].to_int ();
 
         if (metadata[Metadata.DATE] != "")
-            this.date = seconds_to_iso8601 (metadata[Metadata.DATE]);
+            item.date = seconds_to_iso8601 (metadata[Metadata.DATE]);
+
+        item.mime_type = metadata[Metadata.MIME];
 
-        this.mime_type = metadata[Metadata.MIME];
+        item.add_uri (Filename.to_uri (path, null), null);
 
-        this.add_uri (Filename.to_uri (path, null), null);
+        return item;
     }
 
     public static string[] get_metadata_keys () {
diff --git a/src/plugins/tracker/rygel-tracker-music-item.vala b/src/plugins/tracker/rygel-tracker-music-item-factory.vala
similarity index 53%
rename from src/plugins/tracker/rygel-tracker-music-item.vala
rename to src/plugins/tracker/rygel-tracker-music-item-factory.vala
index dd6b042..679839c 100644
--- a/src/plugins/tracker/rygel-tracker-music-item.vala
+++ b/src/plugins/tracker/rygel-tracker-music-item-factory.vala
@@ -25,30 +25,37 @@ using GUPnP;
 using DBus;
 
 /**
- * Represents Tracker music item.
+ * Tracker music item factory.
  */
-public class Rygel.TrackerMusicItem : Rygel.TrackerItem {
+public class Rygel.TrackerMusicItemFactory : Rygel.TrackerItemFactory {
     public const string CATEGORY = "nmm:MusicPiece";
 
-    public TrackerMusicItem (string                 id,
-                             string                 path,
-                             TrackerSearchContainer parent,
-                             string[]               metadata)
-                             throws GLib.Error {
-        base (id, path, parent, MediaItem.MUSIC_CLASS, metadata);
+    public override MediaItem create (string                 id,
+                                      string                 path,
+                                      TrackerSearchContainer parent,
+                                      string?                upnp_class,
+                                      string[]               metadata)
+                                      throws GLib.Error {
+        var item = base.create (id,
+                                path,
+                                parent,
+                                MediaItem.MUSIC_CLASS,
+                                metadata);
 
         if (metadata[Metadata.DURATION] != "")
-            this.duration = metadata[Metadata.DURATION].to_int ();
+            item.duration = metadata[Metadata.DURATION].to_int ();
 
         if (metadata[Metadata.AUDIO_TRACK_NUM] != "")
-            this.track_number = metadata[Metadata.AUDIO_TRACK_NUM].to_int ();
+            item.track_number = metadata[Metadata.AUDIO_TRACK_NUM].to_int ();
 
         if (metadata[Metadata.DATE] != "") {
-            this.date = seconds_to_iso8601 (metadata[Metadata.DATE]);
+            item.date = seconds_to_iso8601 (metadata[Metadata.DATE]);
         }
 
-        this.author = metadata[Metadata.AUDIO_ARTIST];
-        this.album = metadata[Metadata.AUDIO_ALBUM];
+        item.author = metadata[Metadata.AUDIO_ARTIST];
+        item.album = metadata[Metadata.AUDIO_ALBUM];
+
+        return item;
     }
 }
 
diff --git a/src/plugins/tracker/rygel-tracker-root-container.vala b/src/plugins/tracker/rygel-tracker-root-container.vala
index 23c9176..d9ed139 100644
--- a/src/plugins/tracker/rygel-tracker-root-container.vala
+++ b/src/plugins/tracker/rygel-tracker-root-container.vala
@@ -37,33 +37,35 @@ public class Rygel.TrackerRootContainer : Rygel.SimpleContainer {
                                         "16",
                                         this,
                                         "Pictures",
-                                        TrackerImageItem.CATEGORY));
+                                        TrackerImageItemFactory.CATEGORY));
         this.add_child (new TrackerSearchContainer (
                                         "14",
                                         this,
                                         "Music",
-                                        TrackerMusicItem.CATEGORY));
+                                        TrackerMusicItemFactory.CATEGORY));
         this.add_child (new TrackerSearchContainer (
                                         "15",
                                         this,
                                         "Videos",
-                                        TrackerVideoItem.CATEGORY));
+                                        TrackerVideoItemFactory.CATEGORY));
 
         var key_chain = new string[] { "nmm:performer",
                                        "nmm:artistName",
                                        null };
-        this.add_child (new TrackerMetadataValues ("17",
-                                                   this,
-                                                   "Artists",
-                                                   TrackerMusicItem.CATEGORY,
-                                                   key_chain));
+        this.add_child (new TrackerMetadataValues (
+                                        "17",
+                                        this,
+                                        "Artists",
+                                        TrackerMusicItemFactory.CATEGORY,
+                                        key_chain));
 
         key_chain = new string[] { "nmm:musicAlbum", "nmm:albumTitle", null };
-        this.add_child (new TrackerMetadataValues ("18",
-                                                   this,
-                                                   "Albums",
-                                                   TrackerMusicItem.CATEGORY,
-                                                   key_chain));
+        this.add_child (new TrackerMetadataValues (
+                                        "18",
+                                        this,
+                                        "Albums",
+                                        TrackerMusicItemFactory.CATEGORY,
+                                        key_chain));
 
         this.add_child (new TrackerKeywords ("19", this));
     }
diff --git a/src/plugins/tracker/rygel-tracker-search-container.vala b/src/plugins/tracker/rygel-tracker-search-container.vala
index 06118b2..279afc4 100644
--- a/src/plugins/tracker/rygel-tracker-search-container.vala
+++ b/src/plugins/tracker/rygel-tracker-search-container.vala
@@ -66,7 +66,7 @@ public class Rygel.TrackerSearchContainer : Rygel.MediaContainer {
                                                     false));
 
         var optional = new TrackerQueryTriplets ();
-        foreach (var key in TrackerItem.get_metadata_keys ()) {
+        foreach (var key in TrackerItemFactory.get_metadata_keys ()) {
             var variable = "?" + key.replace (":", "_");
 
             variables.add (variable);
@@ -240,24 +240,22 @@ public class Rygel.TrackerSearchContainer : Rygel.MediaContainer {
                                     throws GLib.Error {
         var id = this.id + ":" + uri;
 
-        if (this.category == TrackerVideoItem.CATEGORY) {
-            return new TrackerVideoItem (id,
-                                         uri,
-                                         this,
-                                         metadata);
-        } else if (this.category == TrackerImageItem.CATEGORY) {
-            return new TrackerImageItem (id,
-                                         uri,
-                                         this,
-                                         metadata);
-        } else if (this.category == TrackerMusicItem.CATEGORY) {
-            return new TrackerMusicItem (id,
-                                         uri,
-                                         this,
-                                         metadata);
+        TrackerItemFactory factory;
+        if (this.category == TrackerVideoItemFactory.CATEGORY) {
+            factory = new TrackerVideoItemFactory ();
+        } else if (this.category == TrackerImageItemFactory.CATEGORY) {
+            factory = new TrackerImageItemFactory ();
+        } else if (this.category == TrackerMusicItemFactory.CATEGORY) {
+            factory = new TrackerMusicItemFactory ();
         } else {
             return null;
         }
+
+        return factory.create (id,
+                               uri,
+                               this,
+                               null,
+                               metadata);
     }
 
     // Returns the URI and the ID of the parent this item belongs to, or null
diff --git a/src/plugins/tracker/rygel-tracker-video-item.vala b/src/plugins/tracker/rygel-tracker-video-item-factory.vala
similarity index 55%
rename from src/plugins/tracker/rygel-tracker-video-item.vala
rename to src/plugins/tracker/rygel-tracker-video-item-factory.vala
index c46bdfa..55a6309 100644
--- a/src/plugins/tracker/rygel-tracker-video-item.vala
+++ b/src/plugins/tracker/rygel-tracker-video-item-factory.vala
@@ -25,26 +25,33 @@ using GUPnP;
 using DBus;
 
 /**
- * Represents Tracker video item.
+ * Tracker video item factory.
  */
-public class Rygel.TrackerVideoItem : Rygel.TrackerItem {
+public class Rygel.TrackerVideoItemFactory : Rygel.TrackerItemFactory {
     public const string CATEGORY = "nmm:Video";
 
-    public TrackerVideoItem (string                 id,
-                             string                 path,
-                             TrackerSearchContainer parent,
-                             string[]               metadata)
-                             throws GLib.Error {
-        base (id, path, parent, MediaItem.VIDEO_CLASS, metadata);
+    public override MediaItem create (string                 id,
+                                      string                 path,
+                                      TrackerSearchContainer parent,
+                                      string?                upnp_class,
+                                      string[]               metadata)
+                                      throws GLib.Error {
+        var item = base.create (id,
+                                path,
+                                parent,
+                                MediaItem.VIDEO_CLASS,
+                                metadata);
 
         if (metadata[Metadata.WIDTH] != "")
-            this.width = metadata[Metadata.WIDTH].to_int ();
+            item.width = metadata[Metadata.WIDTH].to_int ();
 
         if (metadata[Metadata.HEIGHT] != "")
-            this.height = metadata[Metadata.HEIGHT].to_int ();
+            item.height = metadata[Metadata.HEIGHT].to_int ();
 
         if (metadata[Metadata.DURATION] != "")
-            this.duration = metadata[Metadata.DURATION].to_int ();
+            item.duration = metadata[Metadata.DURATION].to_int ();
+
+        return item;
     }
 }
 



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