#include "clientapp.h" #include "../connectwindow/connectwindow.h" #include "../toolbar/toolbar.h" #include "../net/serverconnection.h" #include #include #include ClientApp::ClientApp(int& argc, char** argv) : QApplication(argc, argv) , _connectionMode(ConnectionMode::None) , _examMode(false) , _connection(nullptr) { /* some values */ setOrganizationName("openslx"); setOrganizationDomain("openslx.org"); setApplicationName("pvsclient"); setQuitOnLastWindowClosed(false); /* configuration */ QSettings::setPath(QSettings::IniFormat, QSettings::SystemScope, "/opt/"); /* parse parameters and keep the unparsed ones */ _arguments = parseParameters(); /* set translator */ // System strings auto *qtTranslator = new QTranslator(this); if (!qtTranslator->load(QLocale::system(), "qt", "_", QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { qDebug() << "Could not load system string translations" << QLocale::system() << QLibraryInfo::location(QLibraryInfo::TranslationsPath); } else { installTranslator(qtTranslator); } // App specific auto *translator = new QTranslator(this); if (!translator->load(QLocale::system(), ":/", "l_")) { qDebug() << "Could not load app translations" << QLocale::system(); } else { installTranslator(translator); } _connectWindow = new ConnectWindow(nullptr); connect(_connectWindow, &ConnectWindow::connected, this, &ClientApp::connected); if (_connectionMode == ConnectionMode::Auto) { _toolbar = new Toolbar(true); // auto connect client without session ID. } else if (_connectionMode == ConnectionMode::Session) { _toolbar = new Toolbar(_sessionName.toUtf8()); // connect client with given session ID. } else { _toolbar = new Toolbar(); // create normal client. } _toolbar->setVisible(!_examMode); } /* parse arguments and return a list with the unused arguments */ QStringList ClientApp::parseParameters() { QStringList rest; for (const QString &a : QApplication::arguments()) { if (a == "--exam-mode") { _examMode = true; } else if (a == "--auto") { _connectionMode = ConnectionMode::Auto; } else if (a.startsWith("--session=")) { _connectionMode = ConnectionMode::Session; _sessionName = a.mid(10); } else if (a.startsWith("--config=")) { _iniPath = a.mid(9); } else { rest << a; } } return rest; } QStringList ClientApp::arguments() { return _arguments; } QSharedPointer ClientApp::getSettings() { QSharedPointer set; if (_iniPath.isEmpty()) { /* default location (system scope) */ set = QSharedPointer(new QSettings(QSettings::IniFormat, QSettings::SystemScope, "openslx/pvs2", "pvs2")); } else { /* use _iniPath to find ini file */ set = QSharedPointer(new QSettings(_iniPath, QSettings::IniFormat)); } set->setIniCodec("UTF-8"); return set; } void ClientApp::connected(ServerConnection* connection) { _connection = connection; connect(_connection, &ServerConnection::disconnected, this, &ClientApp::disconnected); } void ClientApp::disconnected(ServerConnection* connection) { if (connection != nullptr) connection->blockSignals(true); if (_connection == connection) { _connection = nullptr; } }