client-qml: add initial commit
Change-Id: I32bfdd2a618aa7ac6181da2697e241667b010aab
diff --git a/src/accountstomigratelistmodel.cpp b/src/accountstomigratelistmodel.cpp
new file mode 100644
index 0000000..8123eec
--- /dev/null
+++ b/src/accountstomigratelistmodel.cpp
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2019-2020 by Savoir-faire Linux
+ * Author: Yang Wang <yang.wang@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 "accountstomigratelistmodel.h"
+
+AccountsToMigrateListModel::AccountsToMigrateListModel(QObject *parent)
+ : QAbstractListModel(parent)
+{}
+
+AccountsToMigrateListModel::~AccountsToMigrateListModel() {}
+
+int
+AccountsToMigrateListModel::rowCount(const QModelIndex &parent) const
+{
+ if (!parent.isValid()) {
+ /*
+ * Count.
+ */
+ auto accountList = LRCInstance::accountModel().getAccountList();
+
+ int countAccountToMigrate = 0;
+
+ for (const QString &i : accountList) {
+ auto accountStatus = LRCInstance::accountModel().getAccountInfo(i).status;
+ if (accountStatus == lrc::api::account::Status::ERROR_NEED_MIGRATION) {
+ countAccountToMigrate++;
+ }
+ }
+
+ return countAccountToMigrate;
+ }
+ /*
+ * A valid QModelIndex returns 0 as no entry has sub-elements.
+ */
+ return 0;
+}
+
+int
+AccountsToMigrateListModel::columnCount(const QModelIndex &parent) const
+{
+ Q_UNUSED(parent);
+ /*
+ * Only need one column.
+ */
+ return 1;
+}
+
+QVariant
+AccountsToMigrateListModel::data(const QModelIndex &index, int role) const
+{
+ auto accountList = LRCInstance::accountModel().getAccountList();
+ if (!index.isValid() || accountList.size() <= index.row()) {
+ return QVariant();
+ }
+
+ QList<QString> accountToMigrateList;
+
+ for (QString i : accountList) {
+ auto accountStatus = LRCInstance::accountModel().getAccountInfo(i).status;
+ if (accountStatus == lrc::api::account::Status::ERROR_NEED_MIGRATION) {
+ accountToMigrateList.append(i);
+ }
+ }
+
+ QString accountId = accountToMigrateList.at(index.row());
+
+ auto &avatarInfo = LRCInstance::accountModel().getAccountInfo(accountId);
+
+ switch (role) {
+ case Role::Account_ID:
+ return QVariant(accountId);
+ case Role::ManagerUsername:
+ return QVariant(avatarInfo.confProperties.managerUsername);
+ case Role::ManagerUri:
+ return QVariant(avatarInfo.confProperties.managerUri);
+ case Role::Username:
+ return QVariant(avatarInfo.confProperties.username);
+ case Role::Alias:
+ return QVariant(LRCInstance::accountModel().getAccountInfo(accountId).profileInfo.alias);
+ case Role::Picture:
+ return QString::fromLatin1(
+ Utils::QImageToByteArray(Utils::accountPhoto(avatarInfo)).toBase64().data());
+ }
+ return QVariant();
+}
+
+QHash<int, QByteArray>
+AccountsToMigrateListModel::roleNames() const
+{
+ QHash<int, QByteArray> roles;
+ roles[Account_ID] = "Account_ID";
+ roles[ManagerUsername] = "ManagerUsername";
+ roles[ManagerUri] = "ManagerUri";
+ roles[Username] = "Username";
+ roles[Alias] = "Alias";
+ roles[Picture] = "Picture";
+ return roles;
+}
+
+QModelIndex
+AccountsToMigrateListModel::index(int row, int column, const QModelIndex &parent) const
+{
+ Q_UNUSED(parent);
+ if (column != 0) {
+ return QModelIndex();
+ }
+
+ if (row >= 0 && row < rowCount()) {
+ return createIndex(row, column);
+ }
+ return QModelIndex();
+}
+
+QModelIndex
+AccountsToMigrateListModel::parent(const QModelIndex &child) const
+{
+ Q_UNUSED(child);
+ return QModelIndex();
+}
+
+Qt::ItemFlags
+AccountsToMigrateListModel::flags(const QModelIndex &index) const
+{
+ auto flags = QAbstractItemModel::flags(index) | Qt::ItemNeverHasChildren | Qt::ItemIsSelectable;
+ if (!index.isValid()) {
+ return QAbstractItemModel::flags(index);
+ }
+ return flags;
+}
+
+void
+AccountsToMigrateListModel::reset()
+{
+ beginResetModel();
+ endResetModel();
+}