[rygel] server,media-export: Add support for dc:creator



commit 7e2af489c22d663df16f25b606f971ed1feca7dc
Author: Parthiban Balasubramanian <p balasubramanian cablelabs com>
Date:   Thu Jun 27 13:27:56 2013 -0600

    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

 src/librygel-server/rygel-media-item.vala          |   10 ++++++++++
 src/librygel-server/rygel-photo-item.vala          |    9 ---------
 src/librygel-server/rygel-playlist-item.vala       |    8 --------
 src/librygel-server/rygel-video-item.vala          |    2 +-
 .../rygel-media-export-media-cache-upgrader.vala   |   19 +++++++++++++++++++
 .../rygel-media-export-media-cache.vala            |   14 ++++++++------
 .../rygel-media-export-sql-factory.vala            |   10 ++++++----
 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 e42c291..87a70f4 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 a83102e..1f435a6 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 60175fd..4495941 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 9a056f0..b63b308 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 6695ea7..c8eade2 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 987d11d..0fce8ef 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 db3db40..ffd0064 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, " +


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