From af80bd2426282b7491d9ba0ebfb201abb42e3ca4 Mon Sep 17 00:00:00 2001 From: geronimo Date: Wed, 15 Aug 2012 07:55:07 +0200 Subject: next variant of java client --- .../de/schwarzrot/media/util/MedialistParser.java | 169 +++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 cmpcj/src/de/schwarzrot/media/util/MedialistParser.java (limited to 'cmpcj/src/de/schwarzrot/media/util/MedialistParser.java') 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: Geronimo + * 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 readMediaArray(JsonReader reader) { + List rv = new ArrayList(); + + 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 readTypeArray(JsonReader reader) { + List rv = new ArrayList(); + + try { + reader.beginArray(); + while (reader.hasNext()) { + rv.add(readMediaType(reader)); + } + reader.endArray(); + } catch (Throwable t) { + t.printStackTrace(); + } + return rv; + } +} -- cgit v1.2.3