summaryrefslogtreecommitdiff
path: root/cmpcj/src/de/schwarzrot/media/util/MedialistParser.java
diff options
context:
space:
mode:
authorgeronimo <geronimo013@gmx.de>2012-08-15 07:55:07 +0200
committergeronimo <geronimo013@gmx.de>2012-08-15 07:55:07 +0200
commitaf80bd2426282b7491d9ba0ebfb201abb42e3ca4 (patch)
tree8aeac09a815f3133773cb927597738d4150030f1 /cmpcj/src/de/schwarzrot/media/util/MedialistParser.java
parent7eb41fd1431019f44227af6f5d707e7c98e0416e (diff)
downloadcmp-af80bd2426282b7491d9ba0ebfb201abb42e3ca4.tar.gz
cmp-af80bd2426282b7491d9ba0ebfb201abb42e3ca4.tar.bz2
next variant of java client
Diffstat (limited to 'cmpcj/src/de/schwarzrot/media/util/MedialistParser.java')
-rw-r--r--cmpcj/src/de/schwarzrot/media/util/MedialistParser.java169
1 files changed, 169 insertions, 0 deletions
diff --git a/cmpcj/src/de/schwarzrot/media/util/MedialistParser.java b/cmpcj/src/de/schwarzrot/media/util/MedialistParser.java
new file mode 100644
index 0000000..756c795
--- /dev/null
+++ b/cmpcj/src/de/schwarzrot/media/util/MedialistParser.java
@@ -0,0 +1,169 @@
+/**
+ * ======================== legal notice ======================
+ *
+ * File: MedialistParser.java
+ * Created: 13. June 2012, 04:57
+ * Author: <a href="mailto:geronimo013@gmx.de">Geronimo</a>
+ * Project: cmpc - a java frontend (client) part of compound media player
+ * uses external players to play the media
+ *
+ * CMP - compound media player
+ *
+ * is a client/server mediaplayer intended to play any media from any workstation
+ * without the need to export or mount shares. cmps is an easy to use backend
+ * with a (ready to use) HTML-interface. Additionally the backend supports
+ * authentication via HTTP-digest authorization.
+ * cmpc is a client with vdr-like osd-menues.
+ *
+ * Copyright (c) 2012 Reinhard Mantey, some rights reserved!
+ * published under Creative Commons by-sa
+ * For details see http://creativecommons.org/licenses/by-sa/3.0/
+ *
+ * The cmp project's homepage is at http://projects.vdr-developer.org/projects/cmp
+ *
+ * --------------------------------------------------------------
+ */
+package de.schwarzrot.media.util;
+
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+import com.google.gson.stream.JsonReader;
+import de.schwarzrot.media.domain.Media;
+import de.schwarzrot.media.domain.MediaType;
+import de.schwarzrot.media.domain.PlayList;
+
+
+public class MedialistParser {
+ public PlayList parseListChunk(InputStream is) {
+ JsonReader reader = null;
+ PlayList rv = null;
+
+ try {
+ reader = new JsonReader(new InputStreamReader(is, "UTF-8"));
+
+ rv = readPlayList(reader);
+ } catch (Throwable t) {
+ t.printStackTrace();
+ } finally {
+ try {
+ reader.close();
+ } catch (Throwable t) {
+ }
+ }
+ return rv;
+ }
+
+
+ protected Media readMedia(JsonReader reader) {
+ Media rv = new Media();
+
+ try {
+ reader.beginObject();
+ while (reader.hasNext()) {
+ String name = reader.nextName();
+
+ if (Media.NAME_PROPERTY.equals(name)) {
+ rv.setName(reader.nextString());
+ } else if (Media.TYPE_PROPERTY.equals(name)) {
+ rv.setType(reader.nextInt());
+ } else if (Media.FORMAT_PROPERTY.equals(name)) {
+ rv.setFormat(reader.nextString());
+ } else if (Media.PATH_PROPERTY.equals(name)) {
+ rv.setPath(reader.nextString());
+ } else {
+ rv.setProperty(name, reader.nextString());
+ }
+ }
+ reader.endObject();
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ return rv;
+ }
+
+
+ protected List<Media> readMediaArray(JsonReader reader) {
+ List<Media> rv = new ArrayList<Media>();
+
+ try {
+ reader.beginArray();
+ while (reader.hasNext()) {
+ rv.add(readMedia(reader));
+ }
+ reader.endArray();
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ return rv;
+ }
+
+
+ protected MediaType readMediaType(JsonReader reader) {
+ MediaType rv = new MediaType();
+
+ try {
+ reader.beginObject();
+ while (reader.hasNext()) {
+ String name = reader.nextName();
+
+ if (MediaType.NAME_PROPERTY.equals(name)) {
+ rv.setName(reader.nextString());
+ } else if (MediaType.START_PROPERTY.equals(name)) {
+ rv.setStart(reader.nextLong());
+ } else {
+ reader.skipValue();
+ }
+ }
+ reader.endObject();
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ return rv;
+ }
+
+
+ protected PlayList readPlayList(JsonReader reader) {
+ PlayList rv = new PlayList();
+
+ try {
+ reader.beginObject();
+ while (reader.hasNext()) {
+ String name = reader.nextName();
+
+ if (PlayList.TOTAL_PROPERTY.equals(name)) {
+ rv.setTotal(reader.nextLong());
+ } else if (PlayList.TYPES_PROPERTY.equals(name)) {
+ rv.setTypes(readTypeArray(reader));
+ } else if (PlayList.RESULTS_PROPERTY.equals(name)) {
+ rv.setResults(readMediaArray(reader));
+ } else {
+ reader.skipValue();
+ }
+ }
+ reader.endObject();
+ } catch (Throwable t) {
+ t.printStackTrace();
+ rv = null;
+ }
+ return rv;
+ }
+
+
+ protected List<MediaType> readTypeArray(JsonReader reader) {
+ List<MediaType> rv = new ArrayList<MediaType>();
+
+ try {
+ reader.beginArray();
+ while (reader.hasNext()) {
+ rv.add(readMediaType(reader));
+ }
+ reader.endArray();
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ return rv;
+ }
+}