aboutsummaryrefslogtreecommitdiff
path: root/src/singleapplication.cpp
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2017-06-04 13:06:28 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2017-06-04 13:06:28 +0200
commit77a27e730b2e8baed2a8b954e4da5bb162d9d824 (patch)
treeae3f3b5e95df4d6eeb70cccbd6ac7ea5fe4240cf /src/singleapplication.cpp
parentAdding plugin action to the menu bar (diff)
downloadsmolbote-77a27e730b2e8baed2a8b954e4da5bb162d9d824.tar.xz
Browser class refactoring
Diffstat (limited to 'src/singleapplication.cpp')
-rw-r--r--src/singleapplication.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/singleapplication.cpp b/src/singleapplication.cpp
new file mode 100644
index 0000000..3a23bfb
--- /dev/null
+++ b/src/singleapplication.cpp
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ **
+ ** smolbote: yet another qute browser
+ ** Copyright (C) 2017 Xian Nox
+ **
+ ** 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 "singleapplication.h"
+#include <QLocalSocket>
+
+SingleApplication::SingleApplication(int &argc, char **argv) : QApplication(argc, argv)
+{
+ m_localServer = new QLocalServer(this);
+ connect(m_localServer, SIGNAL(newConnection()), this, SLOT(receiveMessage()));
+
+ // if we can't send the arguments to a listening local server, start one
+ if(!sendMessage(arguments())) {
+ // remove any unused socket
+ QLocalServer::removeServer(LOCALSERVER_KEY);
+ if(!m_localServer->listen(LOCALSERVER_KEY)) {
+ qWarning("Cannot bind local server [%s]", qUtf8Printable(LOCALSERVER_KEY));
+ }
+ }
+
+}
+
+bool SingleApplication::isRunning()
+{
+ return !m_localServer->isListening();
+}
+
+bool SingleApplication::sendMessage(const QStringList &params)
+{
+ QLocalSocket socket;
+ socket.connectToServer(LOCALSERVER_KEY);
+ if(socket.waitForConnected(LOCALSERVER_TIMEOUT)) {
+ socket.write(params.join('|').toUtf8());
+ socket.waitForBytesWritten();
+ return true;
+ }
+
+ return false;
+}
+
+void SingleApplication::receiveMessage()
+{
+ QLocalSocket *socket = m_localServer->nextPendingConnection();
+ if(!socket) {
+ // null socket --> return
+ return;
+ }
+
+ socket->waitForReadyRead();
+ const QStringList params = QString(socket->readAll()).split('|');
+ socket->deleteLater();
+
+ emit messageAvailable(params);
+}