public static record TvContext(@Nullable Channel channel, @Nullable PlayerDetails player) {
}
- private final Map<Integer, String> subPaths = new HashMap<>();
+ private final Map<Integer, @Nullable String> subPaths = new HashMap<>();
public PlayerManager(FreeboxOsSession session) throws FreeboxException {
super(session, LoginManager.Permission.PLAYER, PlayerResponse.class,
session.getUriBuilder().path(THING_PLAYER));
+ }
+
+ private @Nullable String getSubPath(int id) throws FreeboxException {
+ String subPath = subPaths.get(id);
+ if (subPath != null) {
+ return subPath;
+ }
getDevices().stream().filter(Player::apiAvailable).forEach(player -> {
String baseUrl = player.baseUrl();
if (baseUrl != null) {
subPaths.put(player.id, baseUrl);
}
});
+ return subPaths.get(id);
}
- public Status getPlayerStatus(int id) throws FreeboxException {
- return getSingle(StatusResponse.class, subPaths.get(id), STATUS_PATH);
+ public @Nullable Status getPlayerStatus(int id) throws FreeboxException {
+ String subPath = getSubPath(id);
+ return subPath != null ? getSingle(StatusResponse.class, subPath, STATUS_PATH) : null;
}
// The player API does not allow to directly request a given player like others api parts
return getDevices().stream().filter(player -> player.id == id).findFirst().orElse(null);
}
- public Configuration getConfig(int id) throws FreeboxException {
- return getSingle(ConfigurationResponse.class, subPaths.get(id), SYSTEM_PATH);
+ public @Nullable Configuration getConfig(int id) throws FreeboxException {
+ String subPath = getSubPath(id);
+ return subPath != null ? getSingle(ConfigurationResponse.class, subPath, SYSTEM_PATH) : null;
}
public void sendKey(String ip, String code, String key, boolean longPress, int count) {
}
}
- public void reboot(int id) throws FreeboxException {
- post(subPaths.get(id), SYSTEM_PATH, REBOOT_ACTION);
+ public boolean reboot(int id) throws FreeboxException {
+ String subPath = getSubPath(id);
+ if (subPath != null) {
+ post(subPath, SYSTEM_PATH, REBOOT_ACTION);
+ return true;
+ }
+ return false;
}
}
import org.slf4j.LoggerFactory;
/**
- * The {@link ActivePlayerHandler} is responsible for handling everything associated to Freebox Player with api
- * capabilities.
+ * The {@link ActivePlayerHandler} is responsible for handling everything associated to Freebox Player
+ * with api capabilities.
*
* @author Gaël L'hopital - Initial contribution
*/
Player player = getManager(PlayerManager.class).getDevice(getClientId());
if (player.reachable()) {
Configuration config = getManager(PlayerManager.class).getConfig(player.id());
- properties.put(Thing.PROPERTY_SERIAL_NUMBER, config.serial());
- properties.put(Thing.PROPERTY_FIRMWARE_VERSION, config.firmwareVersion());
+ if (config != null) {
+ properties.put(Thing.PROPERTY_SERIAL_NUMBER, config.serial());
+ properties.put(Thing.PROPERTY_FIRMWARE_VERSION, config.firmwareVersion());
+ }
}
}
protected void internalPoll() throws FreeboxException {
super.internalPoll();
if (thing.getStatus().equals(ThingStatus.ONLINE)) {
- Status status = getManager(PlayerManager.class).getPlayerStatus(getClientId());
- updateChannelString(PLAYER_STATUS, PLAYER_STATUS, status.powerState().name());
- ForegroundApp foreground = status.foregroundApp();
- if (foreground != null) {
- updateChannelString(PLAYER_STATUS, PACKAGE, foreground._package());
+ Player player = getManager(PlayerManager.class).getDevice(getClientId());
+ updateStatus(player.reachable() ? ThingStatus.ONLINE : ThingStatus.OFFLINE);
+ if (player.reachable()) {
+ Status status = getManager(PlayerManager.class).getPlayerStatus(getClientId());
+ if (status != null) {
+ updateChannelString(PLAYER_STATUS, PLAYER_STATUS, status.powerState().name());
+ ForegroundApp foreground = status.foregroundApp();
+ if (foreground != null) {
+ updateChannelString(PLAYER_STATUS, PACKAGE, foreground._package());
+ }
+ }
+ Configuration config = getManager(PlayerManager.class).getConfig(getClientId());
+ if (config != null) {
+ uptime = checkUptimeAndFirmware(config.uptimeVal(), uptime, config.firmwareVersion());
+ } else {
+ uptime = 0;
+ }
}
- Configuration config = getManager(PlayerManager.class).getConfig(getClientId());
-
- uptime = checkUptimeAndFirmware(config.uptimeVal(), uptime, config.firmwareVersion());
updateChannelQuantity(SYS_INFO, UPTIME, uptime, Units.SECOND);
}
}
public void reboot() {
processReboot(() -> {
try {
- getManager(PlayerManager.class).reboot(getClientId());
+ if (!getManager(PlayerManager.class).reboot(getClientId())) {
+ logger.warn("Unable to reboot the player - probably not reachable");
+ }
} catch (FreeboxException e) {
logger.warn("Error rebooting: {}", e.getMessage());
}