Kore/app/src/main/java/org/xbmc/kore/jsonrpc/notification/Player.java

242 lines
8.4 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.notification;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.BooleanNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.xbmc.kore.jsonrpc.ApiNotification;
import org.xbmc.kore.jsonrpc.type.GlobalType;
import org.xbmc.kore.utils.JsonUtils;
/**
* All Player.* notifications
*/
public class Player {
/**
* Player.OnPropertyChanged notification
* Player properties have changed. Such as repeat type and shuffle mode
*/
public static class OnPropertyChanged extends ApiNotification {
public static final String NOTIFICATION_NAME = "Player.OnPropertyChanged";
public final NotificationsData data;
public OnPropertyChanged(ObjectNode node) {
super(node);
data = new NotificationsData(node.get(NotificationsData.DATA_NODE));
}
public String getNotificationName() { return NOTIFICATION_NAME; }
}
/**
* Player.OnPause notification
* Playback of a media item has been paused. If there is no ID available extra information will be provided.
*/
public static class OnPause extends ApiNotification {
public static final String NOTIFICATION_NAME = "Player.OnPause";
public final NotificationsData data;
public OnPause(ObjectNode node) {
super(node);
data = new NotificationsData(node.get(NotificationsData.DATA_NODE));
}
public String getNotificationName() { return NOTIFICATION_NAME; }
}
/**
* Player.OnPlay notification
* Playback of a media item has been started or the playback speed has changed. If there is no
* ID available extra information will be provided.
*/
public static class OnPlay extends ApiNotification {
public static final String NOTIFICATION_NAME = "Player.OnPlay";
public final NotificationsData data;
public OnPlay(ObjectNode node) {
super(node);
data = new NotificationsData(node.get(NotificationsData.DATA_NODE));
}
public String getNotificationName() { return NOTIFICATION_NAME; }
}
/**
* Player.OnSeek notification
* The playback position has been changed. If there is no ID available extra information will
* be provided.
*/
public static class OnSeek extends ApiNotification {
public static final String NOTIFICATION_NAME = "Player.OnSeek";
public final NotificationsItem item;
public final GlobalType.Time time;
public final GlobalType.Time seekoffset;
public OnSeek(ObjectNode node) {
super(node);
ObjectNode dataNode = (ObjectNode)node.get("data");
item = new NotificationsItem(dataNode.get(NotificationsItem.ITEM_NODE));
ObjectNode playerNode = (ObjectNode)dataNode.get("player");
time = new GlobalType.Time(playerNode.get("time"));
seekoffset = new GlobalType.Time(playerNode.get("seekoffset"));
}
public String getNotificationName() { return NOTIFICATION_NAME; }
}
/**
* Player.OnSpeedChanged notification
* Speed of the playback of a media item has been changed. If there is no ID available extra information will be provided.
* be provided.
*/
public static class OnSpeedChanged extends ApiNotification {
public static final String NOTIFICATION_NAME = "Player.OnSpeedChanged";
public final NotificationsData data;
public OnSpeedChanged(ObjectNode node) {
super(node);
data = new NotificationsData(node.get(NotificationsData.DATA_NODE));
}
public String getNotificationName() { return NOTIFICATION_NAME; }
}
/**
* Player.OnStop notification
* Playback of a media item has been stopped. If there is no ID available extra information will be provided.
*/
public static class OnStop extends ApiNotification {
public static final String NOTIFICATION_NAME = "Player.OnStop";
public final boolean end;
public final NotificationsItem item;
public OnStop(ObjectNode node) {
super(node);
ObjectNode dataNode = (ObjectNode)node.get("data");
end = JsonUtils.booleanFromJsonNode(dataNode, "end");
item = new NotificationsItem(dataNode.get(NotificationsItem.ITEM_NODE));
}
public String getNotificationName() { return NOTIFICATION_NAME; }
}
/**
* Notification data for Player
*/
public static class NotificationsPlayer {
public static final String PLAYER_NODE = "player";
public final int playerId;
public final int speed;
public NotificationsPlayer(JsonNode node) {
playerId = JsonUtils.intFromJsonNode(node, "playerid");
speed = JsonUtils.intFromJsonNode(node, "speed", 0);
}
}
/**
* General notification data
*/
public static class NotificationsItem {
public static final String ITEM_NODE = "item";
/**
* The item types
*/
public static final String TYPE_UNKNOWN = "unknown",
TYPE_MOVIE = "movie",
TYPE_EPISODE = "episode",
TYPE_MUSIC_VIDEO = "musicvideo",
TYPE_SONG = "song",
TYPE_PICTURE = "picture",
TYPE_CHANNEL = "channel";
public final String type;
public final int id;
public final String title;
public final int year;
public final int episode;
public final int season;
public final String showtitle;
public final String album;
public final String artist;
public final int track;
public NotificationsItem(JsonNode node) {
type = JsonUtils.stringFromJsonNode(node, "type", TYPE_UNKNOWN);
id = JsonUtils.intFromJsonNode(node, "speed");
title = JsonUtils.stringFromJsonNode(node, "title");
year = JsonUtils.intFromJsonNode(node, "year", 0);
episode = JsonUtils.intFromJsonNode(node, "episode", 0);
season = JsonUtils.intFromJsonNode(node, "season", 0);
showtitle = JsonUtils.stringFromJsonNode(node, "showtitle");
album = JsonUtils.stringFromJsonNode(node, "album");
artist = JsonUtils.stringFromJsonNode(node, "artist");
track = JsonUtils.intFromJsonNode(node, "track", 0);
}
}
/**
* Notification data for player properties
*/
public static class NotificationsProperty {
public static final String PROPERTY_NODE = "property";
public final Boolean shuffled;
public final String repeatMode;
public NotificationsProperty(JsonNode node) {
JsonNode shuffledNode = node.get("shuffled");
if (shuffledNode != null)
shuffled = shuffledNode.asBoolean();
else
shuffled = null;
repeatMode = JsonUtils.stringFromJsonNode(node, "repeat");
}
}
public static class NotificationsData {
public static final String DATA_NODE = "data";
public final NotificationsPlayer player;
public final NotificationsItem item;
public final NotificationsProperty property;
public NotificationsData(JsonNode node) {
JsonNode jsonNode = node.get(NotificationsItem.ITEM_NODE);
item = (jsonNode != null) ? new NotificationsItem(jsonNode) : null;
jsonNode = node.get(NotificationsPlayer.PLAYER_NODE);
player = (jsonNode != null)
? new NotificationsPlayer(jsonNode)
: null;
jsonNode = node.get(NotificationsProperty.PROPERTY_NODE);
property = (jsonNode != null) ? new NotificationsProperty(jsonNode) : null;
}
}
}