CallsViewModel.cpp 3.08 KB
Newer Older
Nicolas Jager's avatar
Nicolas Jager committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
/***************************************************************************
* Copyright (C) 2016 by Savoir-faire Linux                                *
* Author: Jger Nicolas <nicolas.jager@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. */
32

Nicolas Jager's avatar
Nicolas Jager committed
33 34
    RingD::instance->incomingCall += ref new RingClientUWP::IncomingCall([&](
    String^ accountId, String^ callId, String^ from) {
35
        auto call = addNewCall(accountId, callId, from);
Nicolas Jager's avatar
Nicolas Jager committed
36
        // REFACTO : add if call == nullptr
37
        callRecieved(call);
Nicolas Jager's avatar
Nicolas Jager committed
38
    });
39

Nicolas Jager's avatar
Nicolas Jager committed
40 41 42 43
    RingD::instance->stateChange += ref new RingClientUWP::StateChange([&](
    String^ callId, String^ state, int code) {
        for each (auto call in CallsList_) {
            if (call->callId == callId) {
44 45 46
                if (state == "OVER") {
                    delete call;
                    call->stateChange("", code);
47
                    callStatusUpdated(call); // used ?
48 49
                    return;
                }
Nicolas Jager's avatar
Nicolas Jager committed
50
                call->stateChange(state, code);
51
                callStatusUpdated(call); // same...
Nicolas Jager's avatar
Nicolas Jager committed
52 53 54 55 56 57 58 59
                return;
            }
        }
        WNG_("Call not found");
    });
}

Call^
Nicolas Jager's avatar
Nicolas Jager committed
60
RingClientUWP::ViewModel::CallsViewModel::addNewCall(String^ accountId, String^ callId, String^ peer)
Nicolas Jager's avatar
Nicolas Jager committed
61
{
Nicolas Jager's avatar
Nicolas Jager committed
62 63 64 65
    if (accountId == "" | callId == "" | peer == "") {
        WNG_("call can't be created");
    }
    auto call = ref new Call(accountId, callId, peer);
Nicolas Jager's avatar
Nicolas Jager committed
66
    CallsList_->Append(call);
67
    return call;
Nicolas Jager's avatar
Nicolas Jager committed
68
}
69 70 71 72

void RingClientUWP::ViewModel::CallsViewModel::clearCallsList()
{
    CallsList_->Clear();
73 74 75 76 77 78 79 80 81 82 83
}

Call^
CallsViewModel::findCall(String^ callId)
{
    for each (Call^ call in CallsList_)
        if (call->callId == callId)
            return call;

    return nullptr;
}