summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorParthiban Balasubramanian <p.balasubramanian@cablelabs.com>2013-06-27 13:27:56 -0600
committerJens Georg <jensg@openismus.com>2013-06-28 16:17:32 +0200
commit7e2af489c22d663df16f25b606f971ed1feca7dc (patch)
treecee2095c4bc5987244042f8aed547f777e1e1ca2 /src
parentb19954453631120de3fb6b22427ca7a887daef1f (diff)
downloadrygel-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')
-rw-r--r--src/librygel-server/rygel-media-item.vala10
-rw-r--r--src/librygel-server/rygel-photo-item.vala9
-rw-r--r--src/librygel-server/rygel-playlist-item.vala8
-rw-r--r--src/librygel-server/rygel-video-item.vala2
-rw-r--r--src/plugins/media-export/rygel-media-export-media-cache-upgrader.vala19
-rw-r--r--src/plugins/media-export/rygel-media-export-media-cache.vala14
-rw-r--r--src/plugins/media-export/rygel-media-export-sql-factory.vala10
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, " +