/*
* Copyright (c) 2014-2016 Jan Strauß <jan[at]over9000.eu>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package eu.over9000.skadi.remote;
import eu.over9000.cathode.Result;
import eu.over9000.cathode.data.Stream;
import eu.over9000.cathode.data.StreamBox;
import eu.over9000.skadi.model.Channel;
import eu.over9000.skadi.remote.data.ChannelMetadata;
import eu.over9000.skadi.util.ImageUtil;
import eu.over9000.skadi.util.TwitchUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Date;
/**
* This class provides static methods to retrieve channel/stream info from the twitch API.
*/
public class ChannelDataRetriever {
private static final Logger LOGGER = LoggerFactory.getLogger(ChannelDataRetriever.class);
public static ChannelMetadata getChannelMetadata(final Channel channel) {
ImageUtil.updatePreviewAsyncFromTwitch(channel);
final Result<StreamBox> streamResponse = TwitchUtil.getTwitch().streams.getStream(channel.getName());
if (!streamResponse.isOk()) {
LOGGER.error("Exception getting metadata for stream " + channel + ": " + streamResponse.getErrorRaw());
return null;
}
final StreamBox stream = streamResponse.getResultRaw();
final eu.over9000.cathode.data.Channel channelObject;
final Boolean online = stream.isOnline();
final Long uptime;
final Long viewer;
if (online) {
channelObject = stream.getStream().getChannel();
uptime = getChannelUptime(stream.getStream());
viewer = stream.getStream().getViewers();
} else {
final Result<eu.over9000.cathode.data.Channel> channelResponse = TwitchUtil.getTwitch().channels.getChannel(channel.getName());
if (!channelResponse.isOk()) {
LOGGER.error("Exception getting metadata for channel " + channel + ": " + channelResponse.getErrorRaw());
return null;
}
channelObject = channelResponse.getResultRaw();
uptime = 0L;
viewer = 0L;
}
return new ChannelMetadata(channelObject, viewer, uptime, online);
}
private static long getChannelUptime(final Stream stream) {
final Date startDate = stream.getCreatedAt();
final Date nowDate = new Date();
return nowDate.getTime() - startDate.getTime();
}
public static boolean checkIfChannelExists(final String channel) {
return TwitchUtil.getTwitch().channels.getChannel(channel).isOk();
}
}