package im.actor.core.modules.calls;
import java.util.ArrayList;
import java.util.HashMap;
import im.actor.core.entity.Group;
import im.actor.core.entity.GroupMember;
import im.actor.core.entity.Peer;
import im.actor.core.entity.PeerType;
import im.actor.core.modules.ModuleContext;
import im.actor.core.viewmodel.CallMember;
import im.actor.core.viewmodel.CallMemberState;
import im.actor.core.viewmodel.CallState;
import im.actor.core.viewmodel.CallVM;
public class CallViewModels {
private final HashMap<Long, CallVM> callModels;
private final ModuleContext context;
public CallViewModels(ModuleContext context) {
this.context = context;
this.callModels = new HashMap<>();
}
public synchronized CallVM getCall(long id) {
return callModels.get(id);
}
public synchronized CallVM spawnNewVM(long callId, Peer peer, boolean isOutgoing,
boolean isVideoEnabled, boolean isVideoPreffered,
ArrayList<CallMember> members, CallState callState) {
CallVM callVM = new CallVM(callId, peer, isOutgoing, isVideoEnabled, isVideoPreffered,
members, callState);
synchronized (callModels) {
callModels.put(callId, callVM);
}
return callVM;
}
public synchronized CallVM spawnNewIncomingVM(long callId, Peer peer, boolean isVideoEnabled,
boolean isVideoPreffered, CallState callState) {
CallVM callVM = new CallVM(callId, peer, false, isVideoEnabled, isVideoPreffered,
new ArrayList<>(), callState);
synchronized (callModels) {
callModels.put(callId, callVM);
}
return callVM;
}
public synchronized CallVM spawnNewOutgoingVM(long callId, Peer peer, boolean isVideoEnabled,
boolean isVideoPreferred) {
ArrayList<CallMember> members = new ArrayList<>();
if (peer.getPeerType() == PeerType.PRIVATE ||
peer.getPeerType() == PeerType.PRIVATE_ENCRYPTED) {
members.add(new CallMember(peer.getPeerId(), CallMemberState.RINGING));
} else if (peer.getPeerType() == PeerType.GROUP) {
Group g = context.getGroupsModule().getGroups().getValue(peer.getPeerId());
for (GroupMember gm : g.getMembers()) {
if (gm.getUid() != context.getAuthModule().myUid()) {
members.add(new CallMember(gm.getUid(), CallMemberState.RINGING));
}
}
}
return spawnNewVM(callId, peer, true, isVideoEnabled, isVideoPreferred, members,
CallState.RINGING);
}
}