package mediabrowser.apiinteraction.connectionmanager;
import mediabrowser.apiinteraction.EmptyResponse;
import mediabrowser.apiinteraction.Response;
import mediabrowser.apiinteraction.connect.ConnectService;
import mediabrowser.model.apiclient.ServerCredentials;
import mediabrowser.model.apiclient.ServerInfo;
import mediabrowser.model.connect.ConnectUserServer;
import mediabrowser.model.connect.UserLinkType;
import mediabrowser.model.extensions.StringHelper;
import mediabrowser.model.logging.ILogger;
import java.util.ArrayList;
/**
* Created by Luke on 2/15/2015.
*/
public class GetConnectServersResponse extends EmptyResponse {
private ILogger logger;
private ConnectService connectService;
private ServerCredentials credentials;
private ArrayList<ServerInfo> foundServers;
private ArrayList<ServerInfo> connectServers;
private int numTasks;
private int[] numTasksCompleted;
private Response<ArrayList<ServerInfo>> finalResponse;
private ConnectionManager connectionManager;
public GetConnectServersResponse(ILogger logger, ConnectService connectService, ServerCredentials credentials, ArrayList<ServerInfo> foundServers, ArrayList<ServerInfo> connectServers, int numTasks, int[] numTasksCompleted, Response<ArrayList<ServerInfo>> finalResponse, ConnectionManager connectionManager) {
this.logger = logger;
this.connectService = connectService;
this.credentials = credentials;
this.foundServers = foundServers;
this.connectServers = connectServers;
this.numTasks = numTasks;
this.numTasksCompleted = numTasksCompleted;
this.finalResponse = finalResponse;
this.connectionManager = connectionManager;
}
void OnAny(ConnectUserServer[] servers){
synchronized (credentials){
connectServers.addAll(ConvertServerList(servers));
numTasksCompleted[0]++;
if (numTasksCompleted[0] >= numTasks) {
connectionManager.OnGetServerResponse(credentials, foundServers, connectServers, finalResponse);
}
}
}
@Override
public void onResponse() {
logger.Debug("Getting connect servers");
connectService.GetServers(credentials.getConnectUserId(), credentials.getConnectAccessToken(), new GetConnectServersInnerResponse(this));
}
@Override
public void onError(Exception ex) {
OnAny(new ConnectUserServer[]{});
}
private ArrayList<ServerInfo> ConvertServerList(ConnectUserServer[] userServers){
ArrayList<ServerInfo> servers = new ArrayList<ServerInfo>();
for(ConnectUserServer userServer : userServers){
ServerInfo server = new ServerInfo();
server.setExchangeToken(userServer.getAccessKey());
server.setId(userServer.getSystemId());
server.setName(userServer.getName());
server.setLocalAddress(userServer.getLocalAddress());
server.setRemoteAddress(userServer.getUrl());
server.setConnectServerId(userServer.getId());
if (StringHelper.EqualsIgnoreCase(userServer.getUserType(), "guest"))
{
server.setUserLinkType(UserLinkType.Guest);
}
else{
server.setUserLinkType(UserLinkType.LinkedUser);
}
servers.add(server);
}
return servers;
}
}