/*************************************************************************** * 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 "AccountListItemsViewModel.h" using namespace Windows::ApplicationModel::Core; using namespace Windows::Data::Json; using namespace Windows::Storage; using namespace Windows::Storage::Streams; using namespace Windows::UI::Core; using namespace RingClientUWP; using namespace ViewModel; AccountListItemsViewModel::AccountListItemsViewModel() { itemsList_ = ref new Vector<AccountListItem^>(); /* connect to delegates */ AccountsViewModel::instance->accountAdded += ref new RingClientUWP::AccountAdded(this, &RingClientUWP::ViewModel::AccountListItemsViewModel::OnaccountAdded); AccountsViewModel::instance->clearAccountsList += ref new RingClientUWP::ClearAccountsList(this, &RingClientUWP::ViewModel::AccountListItemsViewModel::OnclearAccountsList); } void RingClientUWP::ViewModel::AccountListItemsViewModel::OnaccountAdded(RingClientUWP::Account ^account) { auto item = ref new AccountListItem(account); itemsList_->InsertAt(0, item); } void RingClientUWP::ViewModel::AccountListItemsViewModel::OnclearAccountsList() { itemsList_->Clear(); } void AccountListItemsViewModel::updateContactsViewModel() { SmartPanelItemsViewModel::instance->refreshFilteredItemsList(); SmartPanelItemsViewModel::instance->update(ViewModel::NotifyStrings::notifySmartPanelItem); } AccountListItem^ RingClientUWP::ViewModel::AccountListItemsViewModel::findItem(String^ accountId) { for each (AccountListItem^ item in itemsList_) if (item->_account->accountID_ == accountId) return item; return nullptr; } int AccountListItemsViewModel::getIndex(String^ accountId) { int i; for (i = 0; i < itemsList_->Size; i++) { if (itemsList_->GetAt(i)->_account->accountID_ == accountId) break; } return i; } void RingClientUWP::ViewModel::AccountListItemsViewModel::removeItem(AccountListItem ^ item) { unsigned int index; itemsList_->IndexOf(item, &index); item->_disconnected = true; // avoid disconected exception. itemsList_->RemoveAt(index); } String^ AccountListItemsViewModel::getSelectedAccountId() { if (_selectedItem) return _selectedItem->_account->accountID_; return nullptr; } int AccountListItemsViewModel::unreadMessages() { int messageCount = 0; for each (auto account in AccountsViewModel::instance->accountsList) { account->_unreadMessages = AccountsViewModel::instance->unreadMessages(account->accountID_); messageCount += account->_unreadMessages; } return messageCount; } int AccountListItemsViewModel::unreadContactRequests() { int unreadContactRequestCount = 0; for each (auto account in AccountsViewModel::instance->accountsList) { account->_unreadContactRequests = AccountsViewModel::instance->unreadContactRequests(account->accountID_); unreadContactRequestCount += account->_unreadContactRequests; } return unreadContactRequestCount; } void AccountListItemsViewModel::update(const std::vector<std::string>& properties) { for each (AccountListItem^ item in itemsList) { item->raiseNotifyPropertyChanged(""); for each (std::string prop in properties) { item->_account->raiseNotifyPropertyChanged(Utils::toPlatformString(prop)); } } }