[rygel/wip/new-gupnp-dlna: 17/18] WIP



commit 941dafbeee5ee5c7d8c058e46c3a2725c1eecbeb
Author: Jens Georg <jensg openismus com>
Date:   Tue Dec 18 13:00:25 2012 +0100

    WIP

 .../rygel-media-export-harvesting-task.vala        |    8 ++--
 .../rygel-media-export-item-factory.vala           |   20 ++++++------
 .../rygel-media-export-metadata-extractor.vala     |   32 ++++++++++++-------
 3 files changed, 34 insertions(+), 26 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 8053a27..d3196cb 100644
--- a/src/plugins/media-export/rygel-media-export-harvesting-task.vala
+++ b/src/plugins/media-export/rygel-media-export-harvesting-task.vala
@@ -301,10 +301,10 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine,
         return false;
     }
 
-    private void on_extracted_cb (File              file,
-                                  DiscovererInfo?   dlna,
-                                  GUPnPDLNA.Profile profile,
-                                  FileInfo          file_info) {
+    private void on_extracted_cb (File               file,
+                                  DiscovererInfo?    dlna,
+                                  GUPnPDLNA.Profile? profile,
+                                  FileInfo           file_info) {
         if (this.cancellable.is_cancelled ()) {
             this.completed ();
         }
diff --git a/src/plugins/media-export/rygel-media-export-item-factory.vala b/src/plugins/media-export/rygel-media-export-item-factory.vala
index acc1e4d..ee8dff6 100644
--- a/src/plugins/media-export/rygel-media-export-item-factory.vala
+++ b/src/plugins/media-export/rygel-media-export-item-factory.vala
@@ -115,7 +115,7 @@ namespace Rygel.MediaExport.ItemFactory {
     public static MediaItem? create_from_info (MediaContainer parent,
                                                File           file,
                                                DiscovererInfo info,
-                                               GUPnPDLNA.Profile profile,
+                                               GUPnPDLNA.Profile? profile,
                                                FileInfo       file_info) {
         MediaItem item;
         string id = MediaCache.get_id (file);
@@ -195,7 +195,7 @@ namespace Rygel.MediaExport.ItemFactory {
     private static MediaItem fill_video_item (VideoItem            item,
                                               File                 file,
                                               DiscovererInfo       info,
-                                              GUPnPDLNA.Profile    profile,
+                                              GUPnPDLNA.Profile?   profile,
                                               DiscovererVideoInfo  video_info,
                                               DiscovererAudioInfo? audio_info,
                                               FileInfo             file_info) {
@@ -214,7 +214,7 @@ namespace Rygel.MediaExport.ItemFactory {
     private static MediaItem fill_photo_item (PhotoItem           item,
                                               File                file,
                                               DiscovererInfo      info,
-                                              GUPnPDLNA.Profile   profile,
+                                              GUPnPDLNA.Profile?  profile,
                                               DiscovererVideoInfo video_info,
                                               FileInfo            file_info) {
         fill_media_item (item, file, info, profile, file_info);
@@ -231,7 +231,7 @@ namespace Rygel.MediaExport.ItemFactory {
     private static MediaItem fill_music_item (MusicItem            item,
                                               File                 file,
                                               DiscovererInfo       info,
-                                              GUPnPDLNA.Profile    profile,
+                                              GUPnPDLNA.Profile?   profile,
                                               DiscovererAudioInfo? audio_info,
                                               FileInfo             file_info) {
         fill_audio_item (item as AudioItem, info, audio_info);
@@ -291,11 +291,11 @@ namespace Rygel.MediaExport.ItemFactory {
         return item;
     }
 
-    private static void fill_media_item (MediaItem         item,
-                                         File              file,
-                                         DiscovererInfo    info,
-                                         GUPnPDLNA.Profile profile,
-                                         FileInfo          file_info) {
+    private static void fill_media_item (MediaItem          item,
+                                         File               file,
+                                         DiscovererInfo     info,
+                                         GUPnPDLNA.Profile? profile,
+                                         FileInfo           file_info) {
         string title = null;
 
         if (info.get_tags () == null ||
@@ -326,7 +326,7 @@ namespace Rygel.MediaExport.ItemFactory {
 
         item.size = (int64) file_info.get_size ();
         item.modified = (int64) mtime;
-        if (profile.name != null) {
+        if (profile != null && profile.name != null) {
             item.dlna_profile = profile.name;
             item.mime_type = profile.mime;
         } else {
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 ab731df..1a0d6c5 100644
--- a/src/plugins/media-export/rygel-media-export-metadata-extractor.vala
+++ b/src/plugins/media-export/rygel-media-export-metadata-extractor.vala
@@ -36,10 +36,10 @@ using GUPnPDLNA;
  */
 public class Rygel.MediaExport.MetadataExtractor: GLib.Object {
     /* Signals */
-    public signal void extraction_done (File              file,
-                                        DiscovererInfo?   dlna,
-                                        GUPnPDLNA.Profile profile,
-                                        FileInfo          file_info);
+    public signal void extraction_done (File               file,
+                                        DiscovererInfo?    info,
+                                        GUPnPDLNA.Profile? profile,
+                                        FileInfo           file_info);
 
     /**
      * Signalize that an error occured during metadata extraction
@@ -55,7 +55,7 @@ public class Rygel.MediaExport.MetadataExtractor: GLib.Object {
      * the GLib.File back from the URI in on_discovered().
      */
     private HashMap<string, File> file_hash;
-    private uint64 timeout = 10; /* seconds */
+    private uint timeout = 10; /* seconds */
 
     private bool extract_metadata;
 
@@ -76,11 +76,12 @@ public class Rygel.MediaExport.MetadataExtractor: GLib.Object {
             string uri = file.get_uri ();
             var gst_timeout = (ClockTime) (this.timeout * Gst.SECOND);
             try {
-            this.discoverer = new Discoverer (gst_timeout);
-            this.file_hash.set (uri, file);
-            this.discoverer.discovered.connect (on_done);
-            this.discoverer.start ();
-            this.discoverer.discover_uri (uri);
+                this.discoverer = new Discoverer (gst_timeout);
+                this.file_hash.set (uri, file);
+                this.discoverer.discovered.connect (on_done);
+                this.discoverer.start ();
+                this.discoverer.discover_uri_async (uri);
+                this.guesser = new GUPnPDLNA.ProfileGuesser (true, true);
             } catch (Error error) {
                 this.on_done (null, error);
             }
@@ -106,6 +107,9 @@ public class Rygel.MediaExport.MetadataExtractor: GLib.Object {
 
             // set dlna to null to extract basic file information
             info = null;
+            this.extract_basic_information (file, info, null);
+
+            return;
         } else if ((info.get_result () &
                     DiscovererResult.ERROR) != 0) {
             this.error (file, err);
@@ -113,7 +117,6 @@ public class Rygel.MediaExport.MetadataExtractor: GLib.Object {
             return;
         }
 
-        this.guesser = new GUPnPDLNA.ProfileGuesser (true, true);
         this.guesser.done.connect ((uri, dlna, error)  => {
             if (error != null) {
                 this.error (file, err);
@@ -123,6 +126,12 @@ public class Rygel.MediaExport.MetadataExtractor: GLib.Object {
 
             this.extract_basic_information (file, info, dlna);
         });
+        try {
+            this.guesser.guess_profile_async (info.get_uri (),
+                                              this.timeout * 1000);
+        } catch (Error error) {
+            warning ("Failed to guess DLNA profile: %s", error.message);
+        }
     }
 
     private void extract_basic_information
@@ -163,5 +172,4 @@ public class Rygel.MediaExport.MetadataExtractor: GLib.Object {
         }
 
     }
-
 }



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