blob: b71479020dd6f5659d43f6f25461721631a3f932 [file] [log] [blame]
/**************************************************************************
* Copyright (C) 2016 by Savoir-faire Linux *
* Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com> *
* Author: Traczyk Andreas <andreas.traczyk@savoirfairelinux.com> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
**************************************************************************/
#include "pch.h"
#include "CallsViewModel.h"
using namespace RingClientUWP;
using namespace ViewModel;
using namespace Windows::UI::Core;
using namespace Windows::ApplicationModel::Core;
CallsViewModel::CallsViewModel()
{
CallsList_ = ref new Vector<Call^>();
/* connect to delegates. */
RingD::instance->incomingCall += ref new RingClientUWP::IncomingCall([&](
String^ accountId, String^ callId, String^ from) {
auto call = addNewCall(accountId, callId, from);
// REFACTO : add if call == nullptr
callRecieved(call);
});
RingD::instance->stateChange += ref new RingClientUWP::StateChange([&](
String^ callId, String^ state, int code) {
for each (auto call in CallsList_) {
if (call->callId == callId) {
if (state == "OVER") {
delete call;
call->stateChange("", code);
callEnded();
callStatusUpdated(call); // used ?
RingD::instance->hangUpCall(call);
return;
}
else if (state == "CURRENT") {
callStarted();
}
call->stateChange(state, code);
callStatusUpdated(call); // same...
return;
}
}
WNG_("Call not found");
});
}
Call^
RingClientUWP::ViewModel::CallsViewModel::addNewCall(String^ accountId, String^ callId, String^ peer)
{
if (accountId == "" | callId == "" | peer == "") {
WNG_("call can't be created");
}
auto call = ref new Call(accountId, callId, peer);
CallsList_->Append(call);
return call;
}
void RingClientUWP::ViewModel::CallsViewModel::clearCallsList()
{
CallsList_->Clear();
}
Call^
CallsViewModel::findCall(String^ callId)
{
for each (Call^ call in CallsList_)
if (call->callId == callId)
return call;
return nullptr;
}