diff options
author | Parthiban Balasubramanian <p.balasubramanian@cablelabs.com> | 2013-06-27 13:27:56 -0600 |
---|---|---|
committer | Jens Georg <jensg@openismus.com> | 2013-06-28 16:17:32 +0200 |
commit | 7e2af489c22d663df16f25b606f971ed1feca7dc (patch) | |
tree | cee2095c4bc5987244042f8aed547f777e1e1ca2 /src | |
parent | b19954453631120de3fb6b22427ca7a887daef1f (diff) | |
download | rygel-7e2af489c22d663df16f25b606f971ed1feca7dc.tar.gz |
server,media-export: Add support for dc:creator
Ability to add dc:creator is removed from subclasses and moved into
MediaItem.
https://bugzilla.gnome.org/show_bug.cgi?id=701637
Diffstat (limited to 'src')
7 files changed, 44 insertions, 28 deletions
diff --git a/src/librygel-server/rygel-media-item.vala b/src/librygel-server/rygel-media-item.vala index e42c291b..87a70f43 100644 --- a/src/librygel-server/rygel-media-item.vala +++ b/src/librygel-server/rygel-media-item.vala @@ -37,6 +37,8 @@ private errordomain Rygel.MediaItemError { public abstract class Rygel.MediaItem : MediaObject { public string date { get; set; } + public string creator { get; set; } + // Resource info public string mime_type { get; set; } public string dlna_profile { get; set; } @@ -193,6 +195,8 @@ public abstract class Rygel.MediaItem : MediaObject { var item = media_object as MediaItem; switch (property) { + case "dc:creator": + return this.compare_string_props (this.creator, item.creator); case "dc:date": return this.compare_by_date (item); default: @@ -203,6 +207,7 @@ public abstract class Rygel.MediaItem : MediaObject { internal override void apply_didl_lite (DIDLLiteObject didl_object) { base.apply_didl_lite (didl_object); + this.creator = didl_object.get_creator (); this.date = didl_object.date; this.description = didl_object.description; } @@ -238,6 +243,11 @@ public abstract class Rygel.MediaItem : MediaObject { didl_item.date = this.date; } + if (this.creator != null && this.creator != "") { + var creator = didl_item.add_creator (); + creator.name = this.creator; + } + if (this.description != null) { didl_item.description = this.description; } diff --git a/src/librygel-server/rygel-photo-item.vala b/src/librygel-server/rygel-photo-item.vala index a83102e3..1f435a6e 100644 --- a/src/librygel-server/rygel-photo-item.vala +++ b/src/librygel-server/rygel-photo-item.vala @@ -33,8 +33,6 @@ using Gee; public class Rygel.PhotoItem : ImageItem { public new const string UPNP_CLASS = "object.item.imageItem.photo"; - public string creator { get; set; } - public PhotoItem (string id, MediaContainer parent, string title, @@ -54,8 +52,6 @@ public class Rygel.PhotoItem : ImageItem { var item = media_object as PhotoItem; switch (property) { - case "dc:creator": - return this.compare_string_props (this.creator, item.creator); default: return base.compare_by_property (item, property); } @@ -80,11 +76,6 @@ public class Rygel.PhotoItem : ImageItem { throws Error { var didl_item = base.serialize (serializer, http_server); - if (this.creator != null && this.creator != "") { - var contributor = didl_item.add_creator (); - contributor.name = this.creator; - } - return didl_item; } } diff --git a/src/librygel-server/rygel-playlist-item.vala b/src/librygel-server/rygel-playlist-item.vala index 60175fdf..44959419 100644 --- a/src/librygel-server/rygel-playlist-item.vala +++ b/src/librygel-server/rygel-playlist-item.vala @@ -30,8 +30,6 @@ using GUPnP; public class Rygel.PlaylistItem : MediaItem { public new const string UPNP_CLASS = "object.item.playlistItem"; - public string creator { get; set; } - public PlaylistItem (string id, MediaContainer parent, string title, @@ -51,12 +49,6 @@ public class Rygel.PlaylistItem : MediaItem { throws Error { var didl_item = base.serialize (serializer, http_server); - if (this.creator != null && this.creator != "") { - var contributor = didl_item.add_creator (); - - contributor.name = this.creator; - } - return didl_item; } } diff --git a/src/librygel-server/rygel-video-item.vala b/src/librygel-server/rygel-video-item.vala index 9a056f07..b63b308b 100644 --- a/src/librygel-server/rygel-video-item.vala +++ b/src/librygel-server/rygel-video-item.vala @@ -137,7 +137,7 @@ public class Rygel.VideoItem : AudioItem, VisualItem { var item = media_object as VideoItem; switch (property) { - case "dc:author": + case "upnp:author": return this.compare_string_props (this.author, item.author); default: return base.compare_by_property (item, property); diff --git a/src/plugins/media-export/rygel-media-export-media-cache-upgrader.vala b/src/plugins/media-export/rygel-media-export-media-cache-upgrader.vala index 6695ea70..c8eade28 100644 --- a/src/plugins/media-export/rygel-media-export-media-cache-upgrader.vala +++ b/src/plugins/media-export/rygel-media-export-media-cache-upgrader.vala @@ -122,6 +122,9 @@ internal class Rygel.MediaExport.MediaCacheUpgrader { case 13: this.update_v13_v14 (); break; + case 14: + this.update_v14_v15(); + break; default: warning ("Cannot upgrade"); database = null; @@ -501,4 +504,20 @@ internal class Rygel.MediaExport.MediaCacheUpgrader { this.database = null; } } + + private void update_v14_v15 () { + try { + this.database.begin (); + this.database.exec ("ALTER TABLE Meta_Data " + + " ADD COLUMN creator TEXT"); + this.database.exec ("UPDATE schema_info SET version = '15'"); + database.commit (); + database.exec ("VACUUM"); + database.analyze (); + } catch (DatabaseError error) { + database.rollback (); + warning ("Database upgrade failed: %s", error.message); + database = null; + } + } } diff --git a/src/plugins/media-export/rygel-media-export-media-cache.vala b/src/plugins/media-export/rygel-media-export-media-cache.vala index 987d11d7..0fce8efb 100644 --- a/src/plugins/media-export/rygel-media-export-media-cache.vala +++ b/src/plugins/media-export/rygel-media-export-media-cache.vala @@ -653,7 +653,8 @@ public class Rygel.MediaExport.MediaCache : Object { item.id, item.dlna_profile, Database.null (), - -1}; + -1, + item.creator}; if (item is AudioItem) { var audio_item = item as AudioItem; @@ -872,6 +873,7 @@ public class Rygel.MediaExport.MediaCache : Object { item.mime_type = statement.column_text (DetailColumn.MIME_TYPE); item.dlna_profile = statement.column_text (DetailColumn.DLNA_PROFILE); item.size = statement.column_int64 (DetailColumn.SIZE); + item.creator = statement.column_text (DetailColumn.CREATOR); if (item is AudioItem) { var audio_item = item as AudioItem; @@ -900,10 +902,6 @@ public class Rygel.MediaExport.MediaCache : Object { visual_item.height = statement.column_int (DetailColumn.HEIGHT); visual_item.color_depth = statement.column_int (DetailColumn.COLOR_DEPTH); - if (item is VideoItem) { - var video_item = item as VideoItem; - video_item.author = statement.column_text (DetailColumn.AUTHOR); - } } } @@ -991,10 +989,14 @@ public class Rygel.MediaExport.MediaCache : Object { use_collation = true; break; case "upnp:artist": - case "dc:creator": + case "upnp:author": column = "m.author"; use_collation = true; break; + case "dc:creator": + column = "m.creator"; + use_collation = true; + break; case "dc:date": if (for_sort) { column = "m.date"; diff --git a/src/plugins/media-export/rygel-media-export-sql-factory.vala b/src/plugins/media-export/rygel-media-export-sql-factory.vala index db3db406..ffd0064f 100644 --- a/src/plugins/media-export/rygel-media-export-sql-factory.vala +++ b/src/plugins/media-export/rygel-media-export-sql-factory.vala @@ -28,6 +28,7 @@ internal enum Rygel.MediaExport.DetailColumn { WIDTH, HEIGHT, CLASS, + CREATOR, AUTHOR, ALBUM, DATE, @@ -88,8 +89,8 @@ internal class Rygel.MediaExport.SQLFactory : Object { "author, album, date, bitrate, " + "sample_freq, bits_per_sample, channels, " + "track, color_depth, duration, object_fk, " + - "dlna_profile, genre, disc) VALUES " + - "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + "dlna_profile, genre, disc, creator) VALUES " + + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; private const string INSERT_OBJECT_STRING = "INSERT OR REPLACE INTO Object " + @@ -115,7 +116,7 @@ internal class Rygel.MediaExport.SQLFactory : Object { private const string ALL_DETAILS_STRING = "o.type_fk, o.title, m.size, m.mime_type, m.width, " + - "m.height, m.class, m.author, m.album, m.date, m.bitrate, " + + "m.height, m.class, m.creator, m.author, m.album, m.date, m.bitrate, " + "m.sample_freq, m.bits_per_sample, m.channels, m.track, " + "m.color_depth, m.duration, o.upnp_id, o.parent, o.timestamp, " + "o.uri, m.dlna_profile, m.genre, m.disc, o.object_update_id, " + @@ -187,7 +188,7 @@ internal class Rygel.MediaExport.SQLFactory : Object { "WHERE _column IS NOT NULL %s ORDER BY _column COLLATE CASEFOLD " + "LIMIT ?,?"; - internal const string SCHEMA_VERSION = "14"; + internal const string SCHEMA_VERSION = "15"; internal const string CREATE_META_DATA_TABLE_STRING = "CREATE TABLE meta_data (size INTEGER NOT NULL, " + "mime_type TEXT NOT NULL, " + @@ -196,6 +197,7 @@ internal class Rygel.MediaExport.SQLFactory : Object { "width INTEGER, " + "height INTEGER, " + "class TEXT NOT NULL, " + + "creator TEXT, " + "author TEXT, " + "album TEXT, " + "genre TEXT, " + |