Kore/app/src/main/java/org/xbmc/kore/jsonrpc/type/VideoType.java

673 lines
27 KiB
Java

/*
* Copyright 2015 Synced Synapse. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.xbmc.kore.jsonrpc.type;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import org.xbmc.kore.utils.JsonUtils;
import java.util.ArrayList;
import java.util.List;
/**
* Types from Video.*
*/
public class VideoType {
public static class Cast {
public static final String NAME = "name";
public static final String ORDER = "order";
public static final String ROLE = "role";
public static final String THUMBNAIL = "thumbnail";
public final String name;
public final int order;
public final String role;
public final String thumbnail;
public Cast(JsonNode node) {
name = JsonUtils.stringFromJsonNode(node, NAME);
order = JsonUtils.intFromJsonNode(node, ORDER, 0);
role = JsonUtils.stringFromJsonNode(node, ROLE);
thumbnail = JsonUtils.stringFromJsonNode(node, THUMBNAIL);
}
public Cast(String name, int order, String role, String thumbnail) {
this.name = name;
this.order = order;
this.role = role;
this.thumbnail = thumbnail;
}
public static List<Cast> castListFromJsonNode(JsonNode node, String key) {
if ((node == null) || (!node.has(key))) {
return new ArrayList<Cast>(0);
}
ArrayNode arrayNode = (ArrayNode) node.get(key);
ArrayList<Cast> castList = new ArrayList<Cast>(arrayNode.size());
for (JsonNode innerNode : arrayNode) {
castList.add(new Cast(innerNode));
}
return castList;
}
}
public static class Resume {
public static final String POSITION = "position";
public static final String TOTAL = "total";
public final double position;
public final double total;
public Resume(JsonNode node) {
position = JsonUtils.doubleFromJsonNode(node, POSITION, 0);
total = JsonUtils.doubleFromJsonNode(node, TOTAL, 0);
}
}
public static class Streams {
public static class Audio {
public static final String CHANNELS = "channels";
public static final String CODEC = "codec";
public static final String LANGUAGE = "language";
public final int channels;
public final String codec;
public final String language;
public Audio(JsonNode node) {
channels = JsonUtils.intFromJsonNode(node, CHANNELS, 0);
codec = JsonUtils.stringFromJsonNode(node, CODEC);
language = JsonUtils.stringFromJsonNode(node, LANGUAGE);
}
}
public static class Subtitle {
public static final String LANGUAGE = "language";
public final String language;
public Subtitle(JsonNode node) {
language = JsonUtils.stringFromJsonNode(node, LANGUAGE, null);
}
}
public static class Video {
public static final String ASPECT = "aspect";
public static final String CODEC = "codec";
public static final String DURATION = "duration";
public static final String HEIGHT = "height";
public static final String WIDTH = "width";
public final double aspect;
public final String codec;
public final int duration;
public final int height;
public final int width;
public Video(JsonNode node) {
aspect = JsonUtils.doubleFromJsonNode(node, ASPECT, 0);
codec = JsonUtils.stringFromJsonNode(node, CODEC, null);
duration = JsonUtils.intFromJsonNode(node, DURATION, -1);
height = JsonUtils.intFromJsonNode(node, HEIGHT, -1);
width = JsonUtils.intFromJsonNode(node, WIDTH, -1);
}
}
public static final String AUDIO = "audio";
public static final String SUBTITLE = "subtitle";
public static final String VIDEO = "video";
// class members
public final List<Audio> audio;
public final List<Subtitle> subtitle;
public final List<Video> video;
public Streams(JsonNode node) {
audio = new ArrayList<Audio>();
if (node.has(AUDIO)) {
ArrayNode arrayNode = (ArrayNode)node.get(AUDIO);
for (JsonNode innerNode : arrayNode) {
audio.add(new Audio(innerNode));
}
}
subtitle = new ArrayList<Subtitle>();
if (node.has(SUBTITLE)) {
ArrayNode arrayNode = (ArrayNode)node.get(SUBTITLE);
for (JsonNode innerNode : arrayNode) {
subtitle.add(new Subtitle(innerNode));
}
}
video = new ArrayList<Video>();
if (node.has(VIDEO)) {
ArrayNode arrayNode = (ArrayNode)node.get(VIDEO);
for (JsonNode innerNode : arrayNode) {
video.add(new Video(innerNode));
}
}
}
}
/**
* Enums for Video.Fields.Movie
*/
public interface FieldsMovie {
public final String TITLE = "title";
public final String GENRE = "genre";
public final String YEAR = "year";
public final String RATING = "rating";
public final String DIRECTOR = "director";
public final String TRAILER = "trailer";
public final String TAGLINE = "tagline";
public final String PLOT = "plot";
public final String PLOTOUTLINE = "plotoutline";
public final String ORIGINALTITLE = "originaltitle";
public final String LASTPLAYED = "lastplayed";
public final String PLAYCOUNT = "playcount";
public final String WRITER = "writer";
public final String STUDIO = "studio";
public final String MPAA = "mpaa";
public final String CAST = "cast";
public final String COUNTRY = "country";
public final String IMDBNUMBER = "imdbnumber";
public final String RUNTIME = "runtime";
public final String SET = "set";
public final String SHOWLINK = "showlink";
public final String STREAMDETAILS = "streamdetails";
public final String TOP250 = "top250";
public final String VOTES = "votes";
public final String FANART = "fanart";
public final String THUMBNAIL = "thumbnail";
public final String FILE = "file";
public final String SORTTITLE = "sorttitle";
public final String RESUME = "resume";
public final String SETID = "setid";
public final String DATEADDED = "dateadded";
public final String TAG = "tag";
public final String ART = "art";
public final static String[] allValues = new String[]{
TITLE, GENRE, YEAR, RATING, DIRECTOR, TRAILER, TAGLINE, PLOT, PLOTOUTLINE,
ORIGINALTITLE, LASTPLAYED, PLAYCOUNT, WRITER, STUDIO, MPAA, CAST, COUNTRY,
IMDBNUMBER, RUNTIME, SET, SHOWLINK, STREAMDETAILS, TOP250, VOTES, FANART,
THUMBNAIL, FILE, SORTTITLE, RESUME, SETID, DATEADDED, TAG, ART
};
}
/**
* Video.Details.Base
*/
public static class DetailsBase extends MediaType.DetailsBase {
public static final String ART = "art";
public static final String PLAYCOUNT = "playcount";
public final MediaType.Artwork art;
public final Integer playcount;
/**
* Constructor
* @param node Json node
*/
public DetailsBase(JsonNode node) {
super(node);
art = node.has(ART) ? new MediaType.Artwork(node.get(ART)) : null;
playcount = JsonUtils.intFromJsonNode(node, PLAYCOUNT, 0);
}
}
/**
* Video.Details.Media
*/
public static class DetailsMedia extends DetailsBase {
public static final String TITLE = "title";
public final String title;
public DetailsMedia(JsonNode node) {
super(node);
title = JsonUtils.stringFromJsonNode(node, TITLE, null);
}
}
/**
* Video.Details.Item
*/
public static class DetailsItem extends DetailsMedia {
public static final String DATEADDED = "dateadded";
public static final String FILE = "file";
public static final String LASTPLAYED = "lastplayed";
public static final String PLOT = "plot";
public final String dateadded;
public final String file;
public final String lastplayed;
public final String plot;
public DetailsItem(JsonNode node) {
super(node);
dateadded = JsonUtils.stringFromJsonNode(node, DATEADDED, null);
file = JsonUtils.stringFromJsonNode(node, FILE, null);
lastplayed = JsonUtils.stringFromJsonNode(node, LASTPLAYED, null);
plot = JsonUtils.stringFromJsonNode(node, PLOT, null);
}
}
/**
* Video.Details.File
*/
public static class DetailsFile extends DetailsItem {
// field names
public static final String DIRECTOR = "director";
public static final String RESUME = "resume";
public static final String RUNTIME = "runtime";
public static final String STREAMDETAILS = "streamdetails";
// class members
public final List<String> director;
public final Resume resume;
public final int runtime;
public final Streams streamdetails;
public DetailsFile(JsonNode node) {
super(node);
director = JsonUtils.stringListFromJsonNode(node, DIRECTOR);
resume = node.has(RESUME) ? new Resume(node.get(RESUME)) : null;
runtime = JsonUtils.intFromJsonNode(node, RUNTIME, 0);
streamdetails = node.has(STREAMDETAILS) ? new Streams(node.get(STREAMDETAILS)) : null;
}
}
/**
* Video.Details.Movie
*/
public static class DetailsMovie extends DetailsFile {
public static final String CAST = "cast";
public static final String COUNTRY = "country";
public static final String GENRE = "genre";
public static final String IMDBNUMBER = "imdbnumber";
public static final String MOVIEID = "movieid";
public static final String MPAA = "mpaa";
public static final String ORIGINALTITLE = "originaltitle";
public static final String PLOTOUTLINE = "plotoutline";
public static final String RATING = "rating";
public static final String SET = "set";
public static final String SETID = "setid";
public static final String SHOWLINK = "showlink";
public static final String SORTTITLE = "sorttitle";
public static final String STUDIO = "studio";
public static final String TAG = "tag";
public static final String TAGLINE = "tagline";
public static final String TOP250 = "top250";
public static final String TRAILER = "trailer";
public static final String VOTES = "votes";
public static final String WRITER = "writer";
public static final String YEAR = "year";
public final List<Cast> cast;
public final List<String> country;
public final List<String> genre;
public final String imdbnumber;
public final int movieid;
public final String mpaa;
public final String originaltitle;
public final String plotoutline;
public final double rating;
public final String set;
public final int setid;
public final List<String> showlink;
public final String sorttitle;
public final List<String> studio;
public final List<String> tag;
public final String tagline;
public final int top250;
public final String trailer;
public final String votes;
public final List<String> writer;
public final int year;
public DetailsMovie(JsonNode node) {
super(node);
cast = Cast.castListFromJsonNode(node, CAST);
country = JsonUtils.stringListFromJsonNode(node, COUNTRY);
genre = JsonUtils.stringListFromJsonNode(node, GENRE);
imdbnumber = JsonUtils.stringFromJsonNode(node, IMDBNUMBER);
movieid = JsonUtils.intFromJsonNode(node, MOVIEID);
mpaa = JsonUtils.stringFromJsonNode(node, MPAA);
originaltitle = JsonUtils.stringFromJsonNode(node, ORIGINALTITLE);
plotoutline = JsonUtils.stringFromJsonNode(node, PLOTOUTLINE);
rating = JsonUtils.doubleFromJsonNode(node, RATING, 0);
set = JsonUtils.stringFromJsonNode(node, SET);
setid = JsonUtils.intFromJsonNode(node, SETID, -1);
showlink = JsonUtils.stringListFromJsonNode(node, SHOWLINK);
sorttitle = JsonUtils.stringFromJsonNode(node, SORTTITLE);
studio = JsonUtils.stringListFromJsonNode(node, STUDIO);
tag = JsonUtils.stringListFromJsonNode(node, TAG);
tagline = JsonUtils.stringFromJsonNode(node, TAGLINE);
top250 = JsonUtils.intFromJsonNode(node, TOP250, 0);
trailer = JsonUtils.stringFromJsonNode(node, TRAILER);
votes = JsonUtils.stringFromJsonNode(node, VOTES);
writer = JsonUtils.stringListFromJsonNode(node, WRITER);
year = JsonUtils.intFromJsonNode(node, YEAR, 0);
}
}
/**
* Enums for Video.Fields.TVShow
*/
public interface FieldsTVShow {
public final String TITLE = "title";
public final String GENRE = "genre";
public final String YEAR = "year";
public final String RATING = "rating";
public final String PLOT = "plot";
public final String STUDIO = "studio";
public final String MPAA = "mpaa";
public final String CAST = "cast";
public final String PLAYCOUNT = "playcount";
public final String EPISODE = "episode";
public final String IMDBNUMBER = "imdbnumber";
public final String PREMIERED = "premiered";
public final String VOTES = "votes";
public final String LASTPLAYED = "lastplayed";
public final String FANART = "fanart";
public final String THUMBNAIL = "thumbnail";
public final String FILE = "file";
public final String ORIGINALTITLE = "originaltitle";
public final String SORTTITLE = "sorttitle";
public final String EPISODEGUIDE = "episodeguide";
public final String SEASON = "season";
public final String WATCHEDEPISODES = "watchedepisodes";
public final String DATEADDED = "dateadded";
public final String TAG = "tag";
public final String ART = "art";
public final static String[] allValues = new String[] {
TITLE, GENRE, YEAR, RATING, PLOT, STUDIO, MPAA, CAST, PLAYCOUNT, EPISODE,
IMDBNUMBER, PREMIERED, VOTES, LASTPLAYED, FANART, THUMBNAIL, FILE, ORIGINALTITLE,
SORTTITLE, EPISODEGUIDE, SEASON, WATCHEDEPISODES, DATEADDED, TAG, ART
};
}
/**
* Video.Details.TVShow
*/
public static class DetailsTVShow extends DetailsItem {
public static final String CAST = "cast";
public static final String EPISODE = "episode";
public static final String EPISODEGUIDE = "episodeguide";
public static final String GENRE = "genre";
public static final String IMDBNUMBER = "imdbnumber";
public static final String MPAA = "mpaa";
public static final String ORIGINALTITLE = "originaltitle";
public static final String PREMIERED = "premiered";
public static final String RATING = "rating";
public static final String SEASON = "season";
public static final String SORTTITLE = "sorttitle";
public static final String STUDIO = "studio";
public static final String TAG = "tag";
public static final String TVSHOWID = "tvshowid";
public static final String VOTES = "votes";
public static final String WATCHEDEPISODES = "watchedepisodes";
public static final String YEAR = "year";
public final List<Cast> cast;
public final int episode;
public final String episodeguide;
public final List<String> genre;
public final String imdbnumber;
public final String mpaa;
public final String originaltitle;
public final String premiered;
public final double rating;
public final int season;
public final String sorttitle;
public final List<String> studio;
public final List<String> tag;
public final int tvshowid;
public final String votes;
public final int watchedepisodes;
public final int year;
public DetailsTVShow(JsonNode node) {
super(node);
cast = Cast.castListFromJsonNode(node, CAST);
episode = JsonUtils.intFromJsonNode(node, EPISODE, 0);
episodeguide = JsonUtils.stringFromJsonNode(node, EPISODEGUIDE);
genre = JsonUtils.stringListFromJsonNode(node, GENRE);
imdbnumber = JsonUtils.stringFromJsonNode(node, IMDBNUMBER);
mpaa = JsonUtils.stringFromJsonNode(node, MPAA);
originaltitle = JsonUtils.stringFromJsonNode(node, ORIGINALTITLE);
premiered = JsonUtils.stringFromJsonNode(node, PREMIERED);
rating = JsonUtils.doubleFromJsonNode(node, RATING, 0);
season = JsonUtils.intFromJsonNode(node, SEASON, 0);
sorttitle = JsonUtils.stringFromJsonNode(node, SORTTITLE);
studio = JsonUtils.stringListFromJsonNode(node, STUDIO);
tag = JsonUtils.stringListFromJsonNode(node, TAG);
tvshowid = JsonUtils.intFromJsonNode(node, TVSHOWID, 0);
votes = JsonUtils.stringFromJsonNode(node, VOTES);
watchedepisodes = JsonUtils.intFromJsonNode(node, WATCHEDEPISODES, 0);
year = JsonUtils.intFromJsonNode(node, YEAR, 0);
}
}
/**
* Enums for Video.Fields.Season
*/
public interface FieldsSeason {
public final String SEASON = "season";
public final String SHOWTITLE = "showtitle";
public final String PLAYCOUNT = "playcount";
public final String EPISODE = "episode";
public final String FANART = "fanart";
public final String THUMBNAIL = "thumbnail";
public final String TVSHOWID = "tvshowid";
public final String WATCHEDEPISODES = "watchedepisodes";
public final String ART = "art";
public final static String[] allValues = new String[] {
SEASON, SHOWTITLE, PLAYCOUNT, EPISODE, FANART, THUMBNAIL, TVSHOWID,
WATCHEDEPISODES, ART
};
}
/**
* Video.Details.Season
*/
public static class DetailsSeason extends DetailsBase {
public static final String EPISODE = "episode";
public static final String SEASON = "season";
public static final String SHOWTITLE = "showtitle";
public static final String TVSHOWID = "tvshowid";
public static final String WATCHEDEPISODES = "watchedepisodes";
// class members
public final int episode;
public final int season;
public final String showtitle;
public final int tvshowid;
public final int watchedepisodes;
public DetailsSeason(JsonNode node) {
super(node);
episode = JsonUtils.intFromJsonNode(node, EPISODE, 0);
season = JsonUtils.intFromJsonNode(node, SEASON, 0);
showtitle = JsonUtils.stringFromJsonNode(node, SHOWTITLE);
tvshowid = JsonUtils.intFromJsonNode(node, TVSHOWID, -1);
watchedepisodes = JsonUtils.intFromJsonNode(node, WATCHEDEPISODES, 0);
}
}
/**
* Enums for Video.Fields.Episoode
*/
public interface FieldsEpisode {
public final String TITLE = "title";
public final String PLOT = "plot";
public final String VOTES = "votes";
public final String RATING = "rating";
public final String WRITER = "writer";
public final String FIRSTAIRED = "firstaired";
public final String PLAYCOUNT = "playcount";
public final String RUNTIME = "runtime";
public final String DIRECTOR = "director";
public final String PRODUCTIONCODE = "productioncode";
public final String SEASON = "season";
public final String EPISODE = "episode";
public final String ORIGINALTITLE = "originaltitle";
public final String SHOWTITLE = "showtitle";
public final String CAST = "cast";
public final String STREAMDETAILS = "streamdetails";
public final String LASTPLAYED = "lastplayed";
public final String FANART = "fanart";
public final String THUMBNAIL = "thumbnail";
public final String FILE = "file";
public final String RESUME = "resume";
public final String TVSHOWID = "tvshowid";
public final String DATEADDED = "dateadded";
public final String UNIQUEID = "uniqueid";
public final String ART = "art";
public final static String[] allValues = new String[] {
TITLE, PLOT, VOTES, RATING, WRITER, FIRSTAIRED, PLAYCOUNT, RUNTIME, DIRECTOR,
PRODUCTIONCODE, SEASON, EPISODE, ORIGINALTITLE, SHOWTITLE, CAST, STREAMDETAILS,
LASTPLAYED, FANART, THUMBNAIL, FILE, RESUME, TVSHOWID, DATEADDED, UNIQUEID, ART
};
}
/**
* Video.Details.Episode
*/
public static class DetailsEpisode extends DetailsFile {
public static final String CAST = "cast";
public static final String EPISODE = "episode";
public static final String EPISODEID = "episodeid";
public static final String FIRSTAIRED = "firstaired";
public static final String ORIGINALTITLE = "originaltitle";
public static final String PRODUCTIONCODE = "productioncode";
public static final String RATING = "rating";
public static final String SEASON = "season";
public static final String SHOWTITLE = "showtitle";
public static final String TVSHOWID = "tvshowid";
// public static final String UNIQUEID = "uniqueid";
public static final String VOTES = "votes";
public static final String WRITER = "writer";
public final List<Cast> cast;
public final int episode;
public final int episodeid;
public final String firstaired;
public final String originaltitle;
public final String productioncode;
public final double rating;
public final int season;
public final String showtitle;
public final int tvshowid;
public final String votes;
public final List<String> writer;
public DetailsEpisode(JsonNode node) {
super(node);
cast = Cast.castListFromJsonNode(node, CAST);
episode = JsonUtils.intFromJsonNode(node, EPISODE, 0);
episodeid = JsonUtils.intFromJsonNode(node, EPISODEID);
firstaired = JsonUtils.stringFromJsonNode(node, FIRSTAIRED);
originaltitle = JsonUtils.stringFromJsonNode(node, ORIGINALTITLE);
productioncode = JsonUtils.stringFromJsonNode(node, PRODUCTIONCODE);
rating = JsonUtils.doubleFromJsonNode(node, RATING, 0);
season = JsonUtils.intFromJsonNode(node, SEASON, 0);
showtitle = JsonUtils.stringFromJsonNode(node, SHOWTITLE);
tvshowid = JsonUtils.intFromJsonNode(node, TVSHOWID);
votes = JsonUtils.stringFromJsonNode(node, VOTES);
writer = JsonUtils.stringListFromJsonNode(node, WRITER);
}
}
/**
* Enums for Video.Fields.MusicVideo
*/
public interface FieldsMusicVideo {
public final String TITLE = "title";
public final String PLAYCOUNT = "playcount";
public final String RUNTIME = "runtime";
public final String DIRECTOR = "director";
public final String STUDIO = "studio";
public final String YEAR = "year";
public final String PLOT = "plot";
public final String ALBUM = "album";
public final String ARTIST = "artist";
public final String GENRE = "genre";
public final String TRACK = "track";
public final String STREAMDETAILS = "streamdetails";
public final String LASTPLAYED = "lastplayed";
public final String FANART = "fanart";
public final String THUMBNAIL = "thumbnail";
public final String FILE = "file";
public final String RESUME = "resume";
public final String DATEADDED = "dateadded";
public final String TAG = "tag";
public final String ART = "art";
public final static String[] allValues = new String[] {
TITLE, PLAYCOUNT, RUNTIME, DIRECTOR, STUDIO, YEAR, PLOT, ALBUM, ARTIST, GENRE,
TRACK, STREAMDETAILS, LASTPLAYED, FANART, THUMBNAIL, FILE, RESUME, DATEADDED,
TAG, ART
};
}
/**
* Video.Details.MusicVideo
*/
public static class DetailsMusicVideo extends DetailsFile {
public static final String ALBUM = "album";
public static final String ARTIST = "artist";
public static final String GENRE = "genre";
public static final String MUSICVIDEOID = "musicvideoid";
public static final String STUDIO = "studio";
public static final String TAG = "tag";
public static final String TRACK = "track";
public static final String YEAR = "year";
public final String album;
public final List<String> artist;
public final List<String> genre;
public final int musicvideoid;
public final List<String> studio;
public final List<String> tag;
public final int track;
public final int year;
/**
* Constructor
* @param node Json node
*/
public DetailsMusicVideo(JsonNode node) {
super(node);
album = JsonUtils.stringFromJsonNode(node, ALBUM);
artist = JsonUtils.stringListFromJsonNode(node, ARTIST);
genre = JsonUtils.stringListFromJsonNode(node, GENRE);
musicvideoid = JsonUtils.intFromJsonNode(node, MUSICVIDEOID);
studio = JsonUtils.stringListFromJsonNode(node, STUDIO);
tag = JsonUtils.stringListFromJsonNode(node, TAG);
track = JsonUtils.intFromJsonNode(node, TRACK, 0);
year = JsonUtils.intFromJsonNode(node, YEAR, 0);
}
}
}