[rygel] media-export: Add Playlist extractor
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] media-export: Add Playlist extractor
- Date: Sun, 26 Jun 2016 21:24:27 +0000 (UTC)
commit 7950ad8c226d8862002caf3966e781272da9d2b7
Author: Jens Georg <mail jensge org>
Date: Fri May 13 16:05:59 2016 +0200
media-export: Add Playlist extractor
Signed-off-by: Jens Georg <mail jensge org>
src/plugins/media-export/Makefile.am | 1 +
.../media-export/rygel-media-export-extract.vala | 2 +-
.../media-export/rygel-media-export-extractor.vala | 3 +-
.../rygel-media-export-playlist-extractor.vala | 48 ++++++++++++++++++++
4 files changed, 52 insertions(+), 2 deletions(-)
---
diff --git a/src/plugins/media-export/Makefile.am b/src/plugins/media-export/Makefile.am
index 550d001..c681797 100644
--- a/src/plugins/media-export/Makefile.am
+++ b/src/plugins/media-export/Makefile.am
@@ -11,6 +11,7 @@ pkglibexec_PROGRAMS = mx-extract
mx_extract_SOURCES = \
rygel-media-export-extract.vala \
rygel-media-export-dvd-parser.vala \
+ rygel-media-export-playlist-extractor.vala \
rygel-media-export-extractor.vala \
rygel-media-export-generic-extractor.vala
diff --git a/src/plugins/media-export/rygel-media-export-extract.vala
b/src/plugins/media-export/rygel-media-export-extract.vala
index dbd6926..28ee4ea 100644
--- a/src/plugins/media-export/rygel-media-export-extract.vala
+++ b/src/plugins/media-export/rygel-media-export-extract.vala
@@ -90,7 +90,7 @@ async void run () {
} else if (!is_text) {
extractor = new GenericExtractor (file);
} else {
- extractor = new Extractor (file);
+ extractor = new PlaylistExtractor (file);
}
} else {
extractor = new Extractor (file);
diff --git a/src/plugins/media-export/rygel-media-export-extractor.vala
b/src/plugins/media-export/rygel-media-export-extractor.vala
index db487e5..e669cc0 100644
--- a/src/plugins/media-export/rygel-media-export-extractor.vala
+++ b/src/plugins/media-export/rygel-media-export-extractor.vala
@@ -21,7 +21,8 @@
*/
public errordomain ExtractorError {
- GENERAL
+ GENERAL,
+ INVALID
}
public class Rygel.MediaExport.Extractor : Object {
diff --git a/src/plugins/media-export/rygel-media-export-playlist-extractor.vala
b/src/plugins/media-export/rygel-media-export-playlist-extractor.vala
new file mode 100644
index 0000000..59d40a8
--- /dev/null
+++ b/src/plugins/media-export/rygel-media-export-playlist-extractor.vala
@@ -0,0 +1,48 @@
+using GUPnP;
+
+internal class Rygel.MediaExport.PlaylistExtractor : Extractor {
+ public PlaylistExtractor (File file) {
+ GLib.Object (file: file);
+ }
+
+ public override async void run () throws Error {
+ uint8[] contents;
+
+ if (!yield file.load_contents_async (null, out contents, null)) {
+ throw new ExtractorError.INVALID ("Failed to read file");
+ }
+
+ /* Do some heuristic check if this file looks like XML */
+ var i = 0;
+ while (((char) contents[i]).isspace () && i < contents.length) {
+ i++;
+ }
+
+ if (contents[i] != '<') {
+ throw new ExtractorError.INVALID ("Not an XML file");
+ }
+
+ var didl_s = new MediaCollection.from_string ((string) contents);
+ var author = didl_s.author;
+ var title = didl_s.title;
+
+ if (author == null &&
+ title == null &&
+ didl_s.get_items () == null) {
+ throw new ExtractorError.INVALID ("Not a DIDL-Lite playlist");
+ }
+
+ if (title != null) {
+ this.serialized_info.insert ("Title", "s", title);
+ }
+
+ if (author != null) {
+ this.serialized_info.insert ("Creator", author);
+ }
+
+ this.serialized_info.insert ("DLNAProfile", "s", "DIDL_S");
+ this.serialized_info.insert ("UPnPClass",
+ "s",
+ UPNP_CLASS_PLAYLIST);
+ }
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]