summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2012-06-12 22:47:03 +0200
committerJens Georg <mail@jensge.org>2012-06-12 23:01:57 +0200
commit5e4766dd4c4a5ec2f7d734dc82cc877c69bf9591 (patch)
tree88dbada42c42fcaa16740fb7514feb631eeebf96
parent82a9f7a3402bfcabefaa3a482f0d17db00b8a4eb (diff)
downloadrygel-5e4766dd4c4a5ec2f7d734dc82cc877c69bf9591.tar.gz
media-export: Use display_name as fall-back title
Prevent that invalid or legacy encoding of the filename is imported into the DIDLLite data and breaks XML validity. https://bugzilla.gnome.org/show_bug.cgi?id=677959
-rw-r--r--src/plugins/media-export/rygel-media-export-harvesting-task.vala12
-rw-r--r--src/plugins/media-export/rygel-media-export-item.vala74
-rw-r--r--src/plugins/media-export/rygel-media-export-metadata-extractor.vala19
3 files changed, 39 insertions, 66 deletions
diff --git a/src/plugins/media-export/rygel-media-export-harvesting-task.vala b/src/plugins/media-export/rygel-media-export-harvesting-task.vala
index 60621821..95660f81 100644
--- a/src/plugins/media-export/rygel-media-export-harvesting-task.vala
+++ b/src/plugins/media-export/rygel-media-export-harvesting-task.vala
@@ -284,9 +284,7 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine,
private void on_extracted_cb (File file,
GUPnP.DLNAInformation? dlna,
- string mime,
- uint64 size,
- uint64 mtime) {
+ FileInfo file_info) {
if (this.cancellable.is_cancelled ()) {
this.completed ();
}
@@ -302,16 +300,12 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine,
if (dlna == null) {
item = ItemFactory.create_simple (this.containers.peek_head (),
file,
- mime,
- size,
- mtime);
+ file_info);
} else {
item = ItemFactory.create_from_info (this.containers.peek_head (),
file,
dlna,
- mime,
- size,
- mtime);
+ file_info);
}
if (item != null) {
diff --git a/src/plugins/media-export/rygel-media-export-item.vala b/src/plugins/media-export/rygel-media-export-item.vala
index da2354df..7660b7cb 100644
--- a/src/plugins/media-export/rygel-media-export-item.vala
+++ b/src/plugins/media-export/rygel-media-export-item.vala
@@ -30,11 +30,10 @@ using Gst;
namespace Rygel.MediaExport.ItemFactory {
public static MediaItem create_simple (MediaContainer parent,
File file,
- string mime,
- uint64 size,
- uint64 mtime) {
- var title = file.get_basename ();
+ FileInfo info) {
+ var title = info.get_display_name ();
MediaItem item;
+ var mime = ContentType.get_mime_type (info.get_content_type ());
if (mime.has_prefix ("video/")) {
item = new VideoItem (MediaCache.get_id (file), parent, title);
@@ -45,19 +44,19 @@ namespace Rygel.MediaExport.ItemFactory {
}
item.mime_type = mime;
- item.size = (int64) size;
- item.modified = mtime;
+ item.size = (int64) info.get_size ();
+ item.modified = info.get_attribute_uint64
+ (FILE_ATTRIBUTE_TIME_MODIFIED);
item.add_uri (file.get_uri ());
return item;
}
- public static MediaItem? create_from_info (MediaContainer parent,
- File file,
- GUPnP.DLNAInformation dlna_info,
- string mime,
- uint64 size,
- uint64 mtime) {
+ public static MediaItem? create_from_info
+ (MediaContainer parent,
+ File file,
+ GUPnP.DLNAInformation dlna_info,
+ FileInfo file_info) {
MediaItem item;
string id = MediaCache.get_id (file);
GLib.List<DiscovererAudioInfo> audio_streams;
@@ -80,9 +79,7 @@ namespace Rygel.MediaExport.ItemFactory {
file,
dlna_info,
video_streams.data,
- mime,
- size,
- mtime);
+ file_info);
} else if (video_streams != null) {
item = new VideoItem (id, parent, "");
@@ -96,18 +93,14 @@ namespace Rygel.MediaExport.ItemFactory {
dlna_info,
video_streams.data,
audio_info,
- mime,
- size,
- mtime);
+ file_info);
} else if (audio_streams != null) {
item = new MusicItem (id, parent, "");
return fill_music_item (item as MusicItem,
file,
dlna_info,
audio_streams.data,
- mime,
- size,
- mtime);
+ file_info);
} else {
return null;
}
@@ -135,15 +128,13 @@ namespace Rygel.MediaExport.ItemFactory {
private static MediaItem fill_video_item (VideoItem item,
- File file,
+ File file,
DLNAInformation dlna_info,
DiscovererVideoInfo video_info,
DiscovererAudioInfo? audio_info,
- string mime,
- uint64 size,
- uint64 mtime) {
+ FileInfo file_info) {
fill_audio_item (item as AudioItem, dlna_info, audio_info);
- fill_media_item (item, file, dlna_info, mime, size, mtime);
+ fill_media_item (item, file, dlna_info, file_info);
item.width = (int) video_info.get_width ();
item.height = (int) video_info.get_height ();
@@ -156,10 +147,8 @@ namespace Rygel.MediaExport.ItemFactory {
File file,
DLNAInformation dlna_info,
DiscovererVideoInfo video_info,
- string mime,
- uint64 size,
- uint64 mtime) {
- fill_media_item (item, file, dlna_info, mime, size, mtime);
+ FileInfo file_info) {
+ fill_media_item (item, file, dlna_info, file_info);
item.width = (int) video_info.get_width ();
item.height = (int) video_info.get_height ();
@@ -172,11 +161,9 @@ namespace Rygel.MediaExport.ItemFactory {
File file,
DLNAInformation dlna_info,
DiscovererAudioInfo? audio_info,
- string mime,
- uint64 size,
- uint64 mtime) {
+ FileInfo file_info) {
fill_audio_item (item as AudioItem, dlna_info, audio_info);
- fill_media_item (item, file, dlna_info, mime, size, mtime);
+ fill_media_item (item, file, dlna_info, file_info);
if (audio_info != null) {
if (audio_info.get_tags () != null) {
@@ -218,16 +205,14 @@ namespace Rygel.MediaExport.ItemFactory {
}
private static void fill_media_item (MediaItem item,
- File file,
- DLNAInformation dlna_info,
- string mime,
- uint64 size,
- uint64 mtime) {
+ File file,
+ DLNAInformation dlna_info,
+ FileInfo file_info) {
string title = null;
if (dlna_info.info.get_tags () == null ||
!dlna_info.info.get_tags ().get_string (TAG_TITLE, out title)) {
- title = file.get_basename ();
+ title = file_info.get_display_name ();
}
item.title = title;
@@ -242,19 +227,22 @@ namespace Rygel.MediaExport.ItemFactory {
}
// use mtime if no time tag was available
+ var mtime = file_info.get_attribute_uint64
+ (FILE_ATTRIBUTE_TIME_MODIFIED);
+
if (item.date == null) {
TimeVal tv = { (long) mtime, 0 };
item.date = tv.to_iso8601 ();
}
- item.size = (int64) size;
+ item.size = (int64) file_info.get_size ();
item.modified = (int64) mtime;
-
if (dlna_info.name != null) {
item.dlna_profile = dlna_info.name;
item.mime_type = dlna_info.mime;
} else {
- item.mime_type = mime;
+ item.mime_type = ContentType.get_mime_type
+ (file_info.get_content_type ());
}
item.add_uri (file.get_uri ());
diff --git a/src/plugins/media-export/rygel-media-export-metadata-extractor.vala b/src/plugins/media-export/rygel-media-export-metadata-extractor.vala
index 14b325a4..461dc152 100644
--- a/src/plugins/media-export/rygel-media-export-metadata-extractor.vala
+++ b/src/plugins/media-export/rygel-media-export-metadata-extractor.vala
@@ -35,10 +35,8 @@ using GUPnP;
public class Rygel.MediaExport.MetadataExtractor: GLib.Object {
/* Signals */
public signal void extraction_done (File file,
- GUPnP.DLNAInformation? info,
- string mime,
- uint64 size,
- uint64 mtime);
+ GUPnP.DLNAInformation? dlna,
+ FileInfo file_info);
/**
* Signalize that an error occured during metadata extraction
@@ -131,7 +129,8 @@ public class Rygel.MediaExport.MetadataExtractor: GLib.Object {
(FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE
+ "," +
FILE_ATTRIBUTE_STANDARD_SIZE + "," +
- FILE_ATTRIBUTE_TIME_MODIFIED,
+ FILE_ATTRIBUTE_TIME_MODIFIED + "," +
+ FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME,
FileQueryInfoFlags.NONE,
null);
} catch (Error error) {
@@ -144,17 +143,9 @@ public class Rygel.MediaExport.MetadataExtractor: GLib.Object {
throw error;
}
- var content_type = file_info.get_content_type ();
- var mime = ContentType.get_mime_type (content_type);
- var size = file_info.get_size ();
- var mtime = file_info.get_attribute_uint64
- (FILE_ATTRIBUTE_TIME_MODIFIED);
-
this.extraction_done (file,
dlna,
- mime,
- size,
- mtime);
+ file_info);
} catch (Error error) {
debug ("Failed to extract basic metadata from %s: %s",
file.get_uri (),