From f6df7fff81b1ed5fdfbcbee4f2377fad4d72b39f Mon Sep 17 00:00:00 2001 From: "Zeeshan Ali (Khattak)" Date: Mon, 30 Nov 2009 18:34:47 +0200 Subject: [PATCH] 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(-) rename src/plugins/tracker/{rygel-tracker-image-item.vala => rygel-tracker-image-item-factory.vala} (55%) rename src/plugins/tracker/{rygel-tracker-item.vala => rygel-tracker-item-factory.vala} (74%) rename src/plugins/tracker/{rygel-tracker-music-item.vala => rygel-tracker-music-item-factory.vala} (53%) rename src/plugins/tracker/{rygel-tracker-video-item.vala => rygel-tracker-video-item-factory.vala} (55%) 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; } } -- 2.7.4