[rygel] media-export: Use display_name as fall-back title



commit cad3c73008d656afe6c23b31bad73d36c645eca6
Author: Jens Georg <mail jensge org>
Date:   Tue Jun 12 22:47:03 2012 +0200

    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

 .../rygel-media-export-harvesting-task.vala        |   12 +---
 .../media-export/rygel-media-export-item.vala      |   74 ++++++++-----------
 .../rygel-media-export-metadata-extractor.vala     |   19 ++----
 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 8b2f496..27a9dc1 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 da2354d..cc775b5 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
+                                        (FileAttribute.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
+                                        (FileAttribute.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 ace1d51..c38525e 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 {
                                         (FileAttribute.STANDARD_CONTENT_TYPE
                                          + "," +
                                          FileAttribute.STANDARD_SIZE + "," +
-                                         FileAttribute.TIME_MODIFIED,
+                                         FileAttribute.TIME_MODIFIED + "," +
+                                         FileAttribute.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
-                                        (FileAttribute.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 (),



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