diff options
author | Jens Georg <mail@jensge.org> | 2012-06-12 22:47:03 +0200 |
---|---|---|
committer | Jens Georg <mail@jensge.org> | 2012-06-12 23:01:57 +0200 |
commit | 5e4766dd4c4a5ec2f7d734dc82cc877c69bf9591 (patch) | |
tree | 88dbada42c42fcaa16740fb7514feb631eeebf96 | |
parent | 82a9f7a3402bfcabefaa3a482f0d17db00b8a4eb (diff) | |
download | rygel-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
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 (), |