}
}
- private void on_extracted_cb (File file,
- GUPnP.DLNAInformation dlna,
- string mime,
- uint64 size,
- uint64 mtime) {
+ private void on_extracted_cb (File file,
+ GUPnP.DLNAInformation? dlna,
+ string mime,
+ uint64 size,
+ uint64 mtime) {
if (this.cancellable.is_cancelled ()) {
harvested (this.origin);
}
return;
}
if (file == entry) {
- var item = Item.create_from_info (this.containers.peek_head (),
+ MediaItem item;
+ if (dlna == null) {
+ item = new Item.simple (this.containers.peek_head (),
+ file,
+ mime,
+ size,
+ mtime);
+ } else {
+ item = Item.create_from_info (this.containers.peek_head (),
file,
dlna,
mime,
size,
mtime);
+ }
+
if (item != null) {
item.parent_ref = this.containers.peek_head ();
try {
* Represents MediaExport item.
*/
public class Rygel.MediaExport.Item : Rygel.MediaItem {
+ public Item.simple (MediaContainer parent,
+ File file,
+ string mime,
+ uint64 size,
+ uint64 mtime) {
+ string id = Checksum.compute_for_string (ChecksumType.MD5,
+ file.get_uri ());
+ var title = file.get_basename ();
+ string upnp_class;
+
+ if (mime.has_prefix ("video/")) {
+ upnp_class = MediaItem.VIDEO_CLASS;
+ } else if (mime.has_prefix ("image/")) {
+ upnp_class = MediaItem.PHOTO_CLASS;
+ } else {
+ upnp_class = MediaItem.AUDIO_CLASS;
+ }
+
+ base (id, parent, title, upnp_class);
+ this.mime_type = mime;
+ this.add_uri (file.get_uri (), null);
+ }
+
public static Item? create_from_info (MediaContainer parent,
File file,
GUPnP.DLNAInformation dlna_info,
*/
public class Rygel.MediaExport.MetadataExtractor: GLib.Object {
/* Signals */
- public signal void extraction_done (File file,
- GUPnP.DLNAInformation info,
- string mime,
- uint64 size,
- uint64 mtime);
+ public signal void extraction_done (File file,
+ GUPnP.DLNAInformation? info,
+ string mime,
+ uint64 size,
+ uint64 mtime);
/**
* Signalize that an error occured during metadata extraction
private HashMap<string, File> file_hash;
private uint64 timeout = 10; /* seconds */
+ private bool extract_metadata;
+
public static MetadataExtractor? create () {
return new MetadataExtractor ();
}
public MetadataExtractor () {
this.file_hash = new HashMap<string, File> ();
- this.discoverer = new GUPnP.DLNADiscoverer ((ClockTime)
- (this.timeout * 1000000000ULL));
- this.discoverer.done.connect (on_done);
- this.discoverer.start ();
+ var config = MetaConfig.get_default ();
+ try {
+ this.extract_metadata = config.get_bool ("MediaExport",
+ "extract-metadata");
+ } catch (Error error) {
+ this.extract_metadata = true;
+ }
+
+ if (this.extract_metadata) {
+ var gst_timeout = (ClockTime) (this.timeout * Gst.SECOND);
+ this.discoverer = new GUPnP.DLNADiscoverer (gst_timeout);
+ this.discoverer.done.connect (on_done);
+ this.discoverer.start ();
+ }
}
~MetadataExtractor () {
- this.discoverer.stop ();
+ if (this.extract_metadata) {
+ this.discoverer.stop ();
+ }
}
private void on_done (GUPnP.DLNAInformation dlna,
}
public void extract (File file) {
- string uri = file.get_uri ();
- this.file_hash.set (uri, file);
- this.discoverer.discover_uri (uri);
+ if (this.extract_metadata) {
+ string uri = file.get_uri ();
+ this.file_hash.set (uri, file);
+ this.discoverer.discover_uri (uri);
+ } else {
+ try {
+ string mime;
+ uint64 size;
+ uint64 mtime;
+
+ extract_file_info (file,
+ out mime,
+ out size,
+ out mtime);
+
+ this.extraction_done (file,
+ null,
+ mime,
+ size,
+ mtime);
+ } catch (Error error) {
+ this.error (file, error);
+ }
+ }
}
private void extract_file_info (File file,