diff --git a/KelvinDashboardGUI/DapChainWalletsModel.cpp b/KelvinDashboardGUI/DapChainWalletsModel.cpp index 77cc88c4edb4c67f7ced3a33b1ac2ffc3ac4ca46..1abadc1e093f711da67041f961bc0ce7accd8793 100755 --- a/KelvinDashboardGUI/DapChainWalletsModel.cpp +++ b/KelvinDashboardGUI/DapChainWalletsModel.cpp @@ -1,5 +1,6 @@ #include "DapChainWalletsModel.h" + DapChainWalletsModel::DapChainWalletsModel(QObject *parent) { @@ -46,6 +47,9 @@ QHash<int, QByteArray> DapChainWalletsModel::roleNames() const QVariantMap DapChainWalletsModel::get(int row) const { + if (m_dapChainWallets.count() == 0) { + return { {"iconPath", ""}, {"name", ""}, {"address", ""}, {"balance", ""}, {"tokens", QStringList()} }; + } const DapChainWallet *wallet = m_dapChainWallets.value(row); return { {"iconPath", wallet->getIconPath()}, {"name", wallet->getName()}, {"address", wallet->getAddress()}, {"balance", wallet->getBalance()}, {"tokens", wallet->getTokens()} }; } @@ -91,8 +95,12 @@ void DapChainWalletsModel::remove(int row) void DapChainWalletsModel::clear() { - if(m_dapChainWallets.count() > 0) + beginResetModel(); + if(m_dapChainWallets.count() > 0) { + qDeleteAll(m_dapChainWallets); m_dapChainWallets.clear(); + } + endResetModel(); } QObject *DapChainWalletsModel::singletonProvider(QQmlEngine *engine, QJSEngine *scriptEngine) diff --git a/KelvinDashboardGUI/DapServiceController.h b/KelvinDashboardGUI/DapServiceController.h index d71ae869327e5f6804fa17984c97575b8c2e5663..52e6683f4b0f42d4555d7c93b176d7c40d9154c3 100755 --- a/KelvinDashboardGUI/DapServiceController.h +++ b/KelvinDashboardGUI/DapServiceController.h @@ -61,7 +61,7 @@ public: /// @param aiRowCount Number of lines displayed. void getNodeLogs(int aiTimeStamp, int aiRowCount) const; - void getWallets() const; + Q_INVOKABLE void getWallets() const; DapLogModel getLogModel() const; void setLogModel(const DapLogModel &dapLogModel); diff --git a/KelvinDashboardService/DapChainDashboardService.cpp b/KelvinDashboardService/DapChainDashboardService.cpp index d8bb54ee9a9e1d8ed5db9b12e7bd349f44b75a5b..14cb9fd65c6718bebdfbf691c56cba61d149b4e8 100755 --- a/KelvinDashboardService/DapChainDashboardService.cpp +++ b/KelvinDashboardService/DapChainDashboardService.cpp @@ -25,6 +25,7 @@ bool DapChainDashboardService::start() else { qCritical() << QString("Can't listen on %1").arg(DAP_BRAND); + qCritical() << m_pServer->errorString(); return false; } return true; @@ -68,22 +69,22 @@ QString DapChainDashboardService::sendToken(const QString &asWalletName, const Q /// Activate the main client window by double-clicking the application icon in the system tray. /// @param reason Type of action on the icon in the system tray. -void DapChainDashboardService::activateClient(const QSystemTrayIcon::ActivationReason& reason) -{ - qInfo() << "DapChainDashboardService::activateClient()"; - switch (reason) - { - case QSystemTrayIcon::Trigger: - { - QJsonArray arguments; - arguments.append(true); - m_pServer->notifyConnectedClients("RPCClient.activateClient", arguments); - } - break; - default: - break; - } -} +//void DapChainDashboardService::activateClient(const QSystemTrayIcon::ActivationReason& reason) +//{ +// qInfo() << "DapChainDashboardService::activateClient()"; +// switch (reason) +// { +// case QSystemTrayIcon::Trigger: +// { +// QJsonArray arguments; +// arguments.append(true); +// m_pServer->notifyConnectedClients("RPCClient.activateClient", arguments); +// } +// break; +// default: +// break; +// } +//} /// Shut down client. void DapChainDashboardService::closeClient() @@ -96,26 +97,26 @@ void DapChainDashboardService::closeClient() } /// System tray initialization. -void DapChainDashboardService::initTray() -{ - QSystemTrayIcon *trayIconKelvinDashboard = new QSystemTrayIcon(); - trayIconKelvinDashboard->setIcon(QIcon(":/Resources/Icons/icon.ico")); - trayIconKelvinDashboard->setToolTip("KelvinDashboard"); - QMenu * menuKelvinDashboardService = new QMenu(); - QAction * quitAction = new QAction("Выход"); - menuKelvinDashboardService->addAction(quitAction); - trayIconKelvinDashboard->setContextMenu(menuKelvinDashboardService); - trayIconKelvinDashboard->show(); +//void DapChainDashboardService::initTray() +//{ +// QSystemTrayIcon *trayIconKelvinDashboard = new QSystemTrayIcon(); +// trayIconKelvinDashboard->setIcon(QIcon(":/Resources/Icons/icon.ico")); +// trayIconKelvinDashboard->setToolTip("KelvinDashboard"); +// QMenu * menuKelvinDashboardService = new QMenu(); +// QAction * quitAction = new QAction("Выход"); +// menuKelvinDashboardService->addAction(quitAction); +// trayIconKelvinDashboard->setContextMenu(menuKelvinDashboardService); +// trayIconKelvinDashboard->show(); - // If the "Exit" menu item is selected, then we shut down the service, - // and also send a command to shut down the client. - connect(quitAction, &QAction::triggered, this, [=] - { - closeClient(); - }); +// // If the "Exit" menu item is selected, then we shut down the service, +// // and also send a command to shut down the client. +// connect(quitAction, &QAction::triggered, this, [=] +// { +// closeClient(); +// }); - // With a double click on the icon in the system tray, - // we send a command to the client to activate the main window - connect(trayIconKelvinDashboard, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), - this, SLOT(activateClient(QSystemTrayIcon::ActivationReason))); -} +// // With a double click on the icon in the system tray, +// // we send a command to the client to activate the main window +// connect(trayIconKelvinDashboard, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), +// this, SLOT(activateClient(QSystemTrayIcon::ActivationReason))); +//} diff --git a/KelvinDashboardService/DapChainDashboardService.h b/KelvinDashboardService/DapChainDashboardService.h index f6e69b8c0d431d7813e86b2bb9bb779969c7dc17..ef26bf157f1b2cb6db66852bd416f6cc5cef2adb 100755 --- a/KelvinDashboardService/DapChainDashboardService.h +++ b/KelvinDashboardService/DapChainDashboardService.h @@ -13,10 +13,10 @@ #define DAPCHAINDASHBOARDSERVICE_H #include <QObject> -#include <QSystemTrayIcon> -#include <QMenu> -#include <QAction> -#include <QApplication> +//#include <QSystemTrayIcon> +//#include <QMenu> +//#include <QAction> +#include <QCoreApplication> #include "DapRpcAbstractServer.h" #include "DapRpcLocalServer.h" @@ -57,11 +57,11 @@ signals: public slots: /// Activate the main client window by double-clicking the application icon in the system tray. /// @param reason Type of action on the icon in the system tray. - void activateClient(const QSystemTrayIcon::ActivationReason& reason); +// void activateClient(const QSystemTrayIcon::ActivationReason& reason); /// Shut down client. void closeClient(); /// System tray initialization. - void initTray(); + //void initTray(); /// Get node logs. /// @param aiTimeStamp Timestamp start reading logging. /// @param aiRowCount Number of lines displayed. diff --git a/KelvinDashboardService/main.cpp b/KelvinDashboardService/main.cpp index 9c4130e8aa6dd636ac24723797bd5b6b30df375f..82ed77b9453543136d8a8b59f6abe379ea5c6cd7 100755 --- a/KelvinDashboardService/main.cpp +++ b/KelvinDashboardService/main.cpp @@ -1,12 +1,17 @@ -#include <QApplication> +#include <QCoreApplication> #include <QSystemSemaphore> #include <QSharedMemory> +#include <QCommandLineParser> + +#include <unistd.h> #include "DapHalper.h" #include "DapChainDashboardService.h" #include "DapLogger.h" #include "DapChainLogHandler.h" +void processArgs(); + int main(int argc, char *argv[]) { // Creating a semaphore for locking external resources, as well as initializing an external resource-memory @@ -22,8 +27,8 @@ int main(int argc, char *argv[]) { return 1; } - - QApplication a(argc, argv); + + QCoreApplication a(argc, argv); a.setOrganizationName("DEMLABS"); a.setOrganizationDomain("demlabs.com"); a.setApplicationName("KelvinDashboardService"); @@ -36,10 +41,29 @@ int main(int argc, char *argv[]) #endif //#endif // Creating the main application object + processArgs(); DapChainDashboardService service; service.start(); // Initialization of the application in the system tray - service.initTray(); +// service.initTray(); + return a.exec(); } + +void processArgs() +{ +#ifdef Q_OS_LINUX + QCommandLineParser clParser; + clParser.parse(QCoreApplication::arguments()); + auto options = clParser.unknownOptionNames(); + if (options.contains("D")) { + daemon(1, 0); + } + else if (options.contains("stop")) { + qint64 pid = QCoreApplication::applicationPid(); + QProcess::startDetached("kill -9 " + QString::number(pid)); + exit(0); + } +#endif +}