aboutsummaryrefslogtreecommitdiff
path: root/src/main_qmladaptor.cpp
diff options
context:
space:
mode:
authorDaniel Teichmann <daniel.teichmann@das-netzwerkteam.de>2021-08-10 14:56:44 +0200
committerDaniel Teichmann <daniel.teichmann@das-netzwerkteam.de>2021-08-10 14:56:44 +0200
commit6ae4c71032e6b15dedd631dfff0c0c4cc4a8522a (patch)
treecd2c53b90bb13375df387414e99e6d8e7509e2a9 /src/main_qmladaptor.cpp
parentafeb0381f568b4c9f51296cd5de325c8c8aac3f2 (diff)
downloadRWA.Support.DesktopApp-6ae4c71032e6b15dedd631dfff0c0c4cc4a8522a.tar.gz
RWA.Support.DesktopApp-6ae4c71032e6b15dedd631dfff0c0c4cc4a8522a.tar.bz2
RWA.Support.DesktopApp-6ae4c71032e6b15dedd631dfff0c0c4cc4a8522a.zip
Complete restructure of current code tree
Diffstat (limited to 'src/main_qmladaptor.cpp')
-rw-r--r--src/main_qmladaptor.cpp344
1 files changed, 0 insertions, 344 deletions
diff --git a/src/main_qmladaptor.cpp b/src/main_qmladaptor.cpp
deleted file mode 100644
index 688b993..0000000
--- a/src/main_qmladaptor.cpp
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * This file is part of Remote Support Desktop
- * https://gitlab.das-netzwerkteam.de/RemoteWebApp/rwa.support.desktopapp
- * Copyright 2020, 2021 Daniel Teichmann <daniel.teichmann@das-netzwerkteam.de>
- * Copyright 2020, 2021 Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
- * SPDX-License-Identifier: GPL-2.0-or-later
- *
- * 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 2 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, write to the
- * Free Software Foundation, Inc.,
- * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
-
-#include "main_qmladaptor.h"
-
-MainQMLAdaptor::MainQMLAdaptor(QObject *parent, QQmlApplicationEngine* engine,
- DBusAPI *dbus_api) : QObject(parent) {
- Q_ASSERT(engine != nullptr);
- Q_ASSERT(dbus_api != nullptr);
-
- _engine = engine;
- _dbus_api = dbus_api;
- _selected_rwa_host = nullptr;
- _rwaHostModel = new QList<QObject*>;
-
- QTimer *timer = new QTimer(this);
- connect(timer, &QTimer::timeout, _dbus_api,
- QOverload<>::of(&DBusAPI::get_web_app_hosts_request));
- timer->start(10000);
-
- qmlRegisterUncreatableMetaObject(
- Toast::staticMetaObject, // meta object created by Q_NAMESPACE macro
- "rwa.toast.type", // import statement (can be any string)
- 1, 0, // major and minor version of the import
- "ToastType", // name in QML (does not have to match C++ name)
- "Error: only enums" // error if someone tries to create a ToastType object
- );
-
-}
-
-void MainQMLAdaptor::onRwaHostSelected(QString host_uuid) {
- Q_ASSERT(host_uuid != "");
-
- RWAHost *_host = nullptr;
- for (int i = 0; i < getRWAHostModel().size(); i++) {
- QObject *obj = _rwaHostModel->value(i);
- RWAHost *host = qobject_cast<RWAHost *>(obj);
- Q_ASSERT(host != nullptr);
-
- if (host->uuid() == host_uuid) {
- _host = host;
- }
- }
- Q_ASSERT(_host != nullptr);
-
- _selected_rwa_host = _host;
- qDebug() << "RWAHost was selected!" <<
- _selected_rwa_host->uuid() <<
- "aka" <<
- _selected_rwa_host->alias();
-
- setRWAHostSelected(true);
-}
-
-RWAHost* MainQMLAdaptor::getSelectedRWAHost() {
- return _selected_rwa_host;
-}
-
-void MainQMLAdaptor::setRWAHostModel(QList<QObject*> *rwa_hosts) {
- _rwaHostModel = rwa_hosts;
- emit rwaHostModelChanged(*rwa_hosts);
-}
-
-void MainQMLAdaptor::addRWAHost(RWAHost *rwa_host) {
- _rwaHostModel->append(rwa_host);
- emit rwaHostModelChanged(*_rwaHostModel);
-}
-
-void MainQMLAdaptor::removeRWAHost(RWAHost *rwa_host) {
- _rwaHostModel->removeOne(rwa_host);
- emit rwaHostModelChanged(*_rwaHostModel);
-}
-
-QList<QObject*> MainQMLAdaptor::getRWAHostModel() {
- return *_rwaHostModel;
-}
-
-void MainQMLAdaptor::setRWAHostSelected(bool value) {
- // Find item via 'objectName'
- QObject *sidebar_drawer = _engine->rootObjects().takeFirst()->
- findChild<QObject*>("sidebar_drawer");
- if (sidebar_drawer) {
- sidebar_drawer->setProperty("rwaHostIsSelected", value);
- } else {
- qWarning() << "Unable to find 'sidebar_drawer' Item!";
- }
-
- QObject *server_chooser = _engine->rootObjects().takeFirst()->
- findChild<QObject*>("server_chooser");
- if (server_chooser) {
- server_chooser->setProperty("displayText", value ?
- server_chooser->property("currentText") :
- tr("No RWA host available!"));
- server_chooser->setProperty("enabled", value);
- } else {
- qWarning() << "Unable to find 'server_chooser' Item!";
- }
-}
-
-void MainQMLAdaptor::get_web_app_hosts_response(QJsonDocument *doc) {
- // Q_ASSERT lets the program crash immediatly at startup,
- // when the session service is not started.
- // Don't use Q_ASSERT(doc != nullptr); instead use:
- if (doc == nullptr) {
- setRWAHostSelected(false);
-
- showToast(tr("Can't connect to underlying session service!"),
- 9800,
- Toast::ToastError);
-
- // Go to the first page on the stack.
- main_content_pop(nullptr);
-
- return;
- }
-
-
- bool atLeastOneHostAvailable = false;
-
- // Get the QJsonObject
- QJsonObject jObject = doc->object();
- QVariantMap mainMap = jObject.toVariantMap();
-
- // Status of request
- QString request_status = mainMap["status"].toString();
- if (request_status == "success") {
- // Building host_objects
- QJsonArray host_objects = jObject.value("hosts").toArray();
-
- QList<RWAHost*> *all_rwa_hosts = new QList<RWAHost*>;
- foreach (const QJsonValue &host_object, host_objects) {
- QString host_uuid = host_object["uuid"].toString();
- QString host_alias = host_object["alias"].toString();
- QString host_url = host_object["url"].toString();
-
- if (host_url == "" || host_uuid == "") {
- // This two values are required and can't be omitted.
- QString reason = tr("A host object in the response of D-Bus service lacks"
- " a necessary value. (host_url or host_uuid)");
- qCritical().noquote() << tr("An error occured while adding a new host:")
- << reason;
-
- return;
- }
-
- if (host_alias == "") {
- qDebug().noquote() << QString("An alias for the host wasn't delivered "
- "so just use '%0' as alias.").arg(host_url);
- host_alias = host_url;
- }
-
-
- // Now built RWAHost object.
- RWAHost *rwa_host = new RWAHost(host_uuid, host_alias, host_url);
- all_rwa_hosts->append(rwa_host);
-
- bool found = false;
- for (int i = 0; i < this->_rwaHostModel->size(); i++) {
- RWAHost* old_host = qobject_cast<RWAHost*>(_rwaHostModel->value(i));
- Q_ASSERT(old_host != nullptr);
-
- if (rwa_host->uuid() == old_host->uuid()) {
- found = true;
- break;
- }
- }
-
- atLeastOneHostAvailable = true;
-
- if (!found) {
- qInfo().noquote() << QString(tr("Successfully added new RWAHost '%0'"))
- .arg(rwa_host->alias());
- addRWAHost(rwa_host);
- }
- }
-
- for (int i = 0; i < this->_rwaHostModel->size(); i++) {
- RWAHost* old_host = qobject_cast<RWAHost*>(_rwaHostModel->value(i));
- Q_ASSERT(old_host != nullptr);
-
- bool found = false;
- for (RWAHost *host : *all_rwa_hosts) {
- if (host->uuid() == old_host->uuid()) {
- found = true;
- break;
- }
- }
-
- if (!found) {
- removeRWAHost(old_host);
- qInfo().noquote() << QString(tr("Removed RWAHost '%0'")).arg(old_host->alias());
- }
- }
- } else {
- QString reason = tr("An error occured while adding a new host:");
- qCritical().noquote() << reason;
-
- QString type = mainMap["type"].toString();
- if (type != "") {
- reason = QString(tr("The error is not clear. The session service "
- "responded with status type '%0'")).arg(type);
- qCritical().noquote() << reason;
- } else {
- reason = QString(tr("The error is not clear. The session service "
- "responded with no status type!"));
- qCritical().noquote() << reason;
- }
-
- return;
- }
-
- if (!atLeastOneHostAvailable) {
- main_content_replace("scenes/Scene_no_server_available.qml");
- }
-
- setRWAHostSelected(atLeastOneHostAvailable);
-}
-
-void MainQMLAdaptor::main_content_push(QString scene) {
- // Find item via 'objectName'
- QObject *window = _engine->rootObjects().takeFirst();
- Q_ASSERT(window != nullptr);
-
- QObject *main_content = _engine->rootObjects().takeFirst()->findChild<QObject*>("main_content");
- Q_ASSERT(main_content != nullptr);
-
- QVariant to_cast = main_content->property("currentItem");
- QObject *obj = qvariant_cast<QObject *>(to_cast);
- if (obj) {
- if (!(scene.contains(obj->objectName()))) {
- QVariant arg = QVariant::fromValue(scene);
- if(!QMetaObject::invokeMethod(window, "main_content_push", Q_ARG(QVariant, arg)))
- qDebug() << "Failed to invoke push";
- }
- }
-}
-
-void MainQMLAdaptor::main_content_pop(QString scene) {
- // Find item via 'objectName'
- QObject *window = _engine->rootObjects().takeFirst();
- Q_ASSERT(window != nullptr);
-
- QObject *main_content = _engine->rootObjects().takeFirst()->
- findChild<QObject*>("main_content");
- Q_ASSERT(main_content != nullptr);
-
- QVariant to_cast = main_content->property("currentItem");
- QObject *obj = qvariant_cast<QObject *>(to_cast);
- if (obj) {
- if (!(scene.contains(obj->objectName()))) {
- QVariant arg = QVariant::fromValue(scene);
- if(!QMetaObject::invokeMethod(window, "main_content_pop", Q_ARG(QVariant, arg)))
- qDebug() << "Failed to invoke pop";
- }
- }
-}
-
-void MainQMLAdaptor::main_content_replace(QString scene) {
- // Find item via 'objectName'
- QObject *window = _engine->rootObjects().takeFirst();
- Q_ASSERT(window != nullptr);
-
- QObject *main_content = _engine->rootObjects().takeFirst()->
- findChild<QObject*>("main_content");
- Q_ASSERT(main_content != nullptr);
-
- QVariant to_cast = main_content->property("currentItem");
- QObject *obj = qvariant_cast<QObject *>(to_cast);
- if (obj) {
- QString scene_add_rwahost_wizard = "Scene_step_1";
- if (!(scene.contains(obj->objectName()) ||
- scene_add_rwahost_wizard.contains(obj->objectName()))) {
- QVariant arg = QVariant::fromValue(scene);
- if (!QMetaObject::invokeMethod(window, "main_content_replace",
- Q_ARG(QVariant, arg))) {
- qDebug() << "Failed to invoke replace";
- }
- }
- }
-}
-
-bool MainQMLAdaptor::openMessageDialog(QString title, QString text, QMessageBox::Icon icon) {
- _messageDialogText = text;
- _messageDialogTitle = title;
- _messageDialogIcon = icon;
- _showMessageDialog = true;
- emit messageDialogIconChanged(_messageDialogIcon);
- emit messageDialogTitleChanged(_messageDialogTitle);
- emit messageDialogTextChanged(_messageDialogText);
-
- emit showMessageDialogChanged(_showMessageDialog);
-
- qDebug() << "Opening MessageDialog!";
- return true;
-}
-
-QString MainQMLAdaptor::getMessageDialogTitle() {
- return _messageDialogTitle;
-}
-
-QString MainQMLAdaptor::getMessageDialogText() {
- return _messageDialogText;
-}
-
-QMessageBox::Icon MainQMLAdaptor::getMessageDialogIcon() {
- return _messageDialogIcon;
-}
-
-bool MainQMLAdaptor::getShowMessageDialog() {
- return _showMessageDialog;
-}
-
-void MainQMLAdaptor::onCloseHandler() {
- // Do cleanup things here...
- emit onCloseSignal();
-}
-
-void MainQMLAdaptor::showToast(QString text, uint durationMs, uint type) {
- // type is actually Toast::ToastType
- emit showToastSignal(text, QString::number(durationMs), type);
-}