/****************************************************************************** * Copyright (C) 2014 by Olivier Goffart #include #include #include "ownclouddolphinpluginhelper.h" #include "config.h" OwncloudDolphinPluginHelper* OwncloudDolphinPluginHelper::instance() { static OwncloudDolphinPluginHelper self; return &self; } OwncloudDolphinPluginHelper::OwncloudDolphinPluginHelper() { connect(&_socket, &QLocalSocket::connected, this, &OwncloudDolphinPluginHelper::slotConnected); connect(&_socket, &QLocalSocket::readyRead, this, &OwncloudDolphinPluginHelper::slotReadyRead); _connectTimer.start(45 * 1000, Qt::VeryCoarseTimer, this); tryConnect(); } void OwncloudDolphinPluginHelper::timerEvent(QTimerEvent *e) { if (e->timerId() == _connectTimer.timerId()) { tryConnect(); return; } QObject::timerEvent(e); } bool OwncloudDolphinPluginHelper::isConnected() const { return _socket.state() == QLocalSocket::ConnectedState; } void OwncloudDolphinPluginHelper::sendCommand(const char* data) { _socket.write(data); _socket.flush(); } void OwncloudDolphinPluginHelper::slotConnected() { sendCommand("SHARE_MENU_TITLE:\n"); } void OwncloudDolphinPluginHelper::tryConnect() { if (_socket.state() != QLocalSocket::UnconnectedState) { return; } QString runtimeDir = QFile::decodeName(qgetenv("XDG_RUNTIME_DIR")); runtimeDir.append( QChar('/')); runtimeDir.append( QLatin1String(APPLICATION_SHORTNAME) ); const QString socketPath = runtimeDir + QLatin1String("/socket"); _socket.connectToServer(socketPath); } void OwncloudDolphinPluginHelper::slotReadyRead() { while (_socket.bytesAvailable()) { _line += _socket.readLine(); if (!_line.endsWith("\n")) continue; QByteArray line; qSwap(line, _line); line.chop(1); if (line.isEmpty()) continue; if (line.startsWith("REGISTER_PATH:")) { auto col = line.indexOf(':'); QString file = QString::fromUtf8(line.constData() + col + 1, line.size() - col - 1); _paths.append(file); continue; } else if (line.startsWith("SHARE_MENU_TITLE:")) { auto col = line.indexOf(':'); _shareActionString = QString::fromUtf8(line.constData() + col + 1, line.size() - col - 1); continue; } emit commandRecieved(line); } }