From 2dc27cddbe35ede34431a6fdf7bf931a7c286bc6 Mon Sep 17 00:00:00 2001 From: Daniel Teichmann Date: Fri, 2 Jul 2021 20:21:39 +0200 Subject: Introduce add_server_wizard.{cpp, h}; drop third add_server_wizard scene --- src/scenes/add_server_wizard/add_server_wizard.cpp | 100 +++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 src/scenes/add_server_wizard/add_server_wizard.cpp (limited to 'src/scenes/add_server_wizard/add_server_wizard.cpp') diff --git a/src/scenes/add_server_wizard/add_server_wizard.cpp b/src/scenes/add_server_wizard/add_server_wizard.cpp new file mode 100644 index 0000000..f8d4b7b --- /dev/null +++ b/src/scenes/add_server_wizard/add_server_wizard.cpp @@ -0,0 +1,100 @@ +#include "add_server_wizard.h" +#include "../../RWADBusAdaptor.h" +#include +#include +#include + +Add_Server_wizard::Add_Server_wizard(QObject *parent) : QObject(parent) { + _initDBus(); + + +} + +bool Add_Server_wizard::processStep1(QString host_url) { + qDebug() << "Processing Step 1 with args: " << host_url; + + if(host_url == "") { + emit step1Failed(tr("This field can't be empty!")); + return false; + } + + return _add_server(host_url); +} + +bool Add_Server_wizard::processStep2() { + qDebug() << "Processing Step 2 with args: No Args."; + emit step2Failed(tr("The feature you expected here are not yet implemented.")); + // Just show placeholder scene now. + emit step2Success(); + return false; +} + +bool Add_Server_wizard::_add_server(QString host_url) { + return _add_web_app_host(host_url); +} + +void Add_Server_wizard::_initDBus() { + if (!QDBusConnection::sessionBus().isConnected()) { + qCritical() << "Cannot connect to the D-Bus session bus."; + } + + // Create DBus object + _dbus_rwa = new OrgArcticaProjectRWASupportSessionServiceInterface("org.ArcticaProject.RWASupportSessionService", "/RWASupportSessionService", + QDBusConnection::sessionBus(), this->parent()); + + qDebug("Initialized DBus object!"); +} + +bool Add_Server_wizard::_add_web_app_host(QString host_url) { + qDebug() << "Requesting D-Bus session service to add a new host: " << host_url; + + // Make an asynchrous 'add_web_app_host' call (Response will be sent to '_add_web_app_host_dbus_replied') + QDBusPendingCall async = _dbus_rwa->asyncCall("add_web_app_host", host_url); + QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(async, this); + + QObject::connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), + this, SLOT(_add_web_app_host_dbus_replied(QDBusPendingCallWatcher*))); + + return true; +} + +void Add_Server_wizard::_add_web_app_host_dbus_replied(QDBusPendingCallWatcher *call) { + QString result = ""; + + QDBusPendingReply reply = *call; + if (reply.isError()) { + qDebug() << "D-Bus 'add_web_app_host' request failed, this was the reply:"; + qDebug() << reply.error(); + return; + } else { + result = reply.argumentAt<0>(); + } + call->deleteLater(); + + qDebug() << "Raw JSON from starting session is:" << result.toUtf8().replace('"', ""); + QJsonDocument doc = QJsonDocument::fromJson(result.toUtf8()); + + // Get the QJsonObject + QJsonObject jObject = doc.object(); + QVariantMap mainMap = jObject.toVariantMap(); + + // Status of request + QString request_status = mainMap["status"].toString(); + if (request_status == "success") { + qDebug() << "Successfully started a Session."; + emit step1Success(); + } else { + qCritical() << "An error occured while adding a new host!"; + + QString reason = "An error occured while adding a new host!"; + QString type = mainMap["type"].toString(); + if(type == "connection"){ + reason = tr("Couldn't connect to the specified host!"); + } else if (type == "duplicate") { + reason = tr("The specified host was already added!"); + } else if (type == "invalid_url") { + reason = tr("The specified host address is not valid!"); + } + emit step1Failed(reason); + } +} -- cgit v1.2.3