[rygel] tracker: Implement factories rather than items
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [rygel] tracker: Implement factories rather than items
- Date: Sat, 5 Dec 2009 01:20:18 +0000 (UTC)
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]