Comparar commits

...

1 Commits

Autor SHA1 Mensagem Data
Markus Goetz 0e36a25b31 Folder: WiP Xiphos support
Set OWNCLOUD_WEBSOCKET_URL env to ws://127.0.0.1:6666
2016-11-22 15:16:29 +01:00
3 arquivos alterados com 63 adições e 0 exclusões
+8
Ver Arquivo
@@ -34,6 +34,8 @@ if( Qt5Core_FOUND )
message(FATAL_ERROR "Qt5WebKit required for Shibboleth. Use -DNO_SHIBBOLETH=1 to disable it.")
endif()
endif()
find_package(Qt5WebSockets)
endif()
else( Qt5Core_FOUND )
@@ -67,6 +69,12 @@ if( Qt5Core_FOUND )
set (QT_LIBRARIES ${QT_LIBRARIES} ${Qt5MacExtras_LIBRARIES})
endif()
if(Qt5WebSockets_FOUND)
message(STATUS "Building with websocket notify support")
include_directories(${Qt5WebSockets_INCLUDE_DIRS})
set (QT_LIBRARIES ${QT_LIBRARIES} ${Qt5WebSockets_LIBRARIES})
endif()
if(NOT BUILD_LIBRARIES_ONLY)
macro(qt_wrap_ui)
qt5_wrap_ui(${ARGN})
+48
Ver Arquivo
@@ -33,6 +33,10 @@
#include "filesystem.h"
#include "excludedfiles.h"
// FIXME ifdef
#include "json.h"
#include <QtWebSockets/QWebSocket>
#include "creds/abstractcredentials.h"
#include <QDebug>
@@ -116,6 +120,23 @@ Folder::Folder(const FolderDefinition& definition,
_scheduleSelfTimer.setInterval(SyncEngine::minimumFileAgeForUpload);
connect(&_scheduleSelfTimer, SIGNAL(timeout()),
SLOT(slotScheduleThisFolder()));
_webSocket.reset(new QWebSocket());
// FIXME: Also handle re-connect
QObject::connect(_webSocket.data(), &QWebSocket::connected, this, &Folder::slotWebSocketConnected);
QObject::connect(_webSocket.data(), &QWebSocket::textMessageReceived,
this, &Folder::slotWebSocketTextMessageReceived);
// FIXME: Accept same ssl errors as normal server?
// typedef void (QWebSocket:: *sslErrorsSignal)(const QList<QSslError> &);
// connect(&m_webSocket, static_cast<sslErrorsSignal>(&QWebSocket::sslErrors),
// this, &SslEchoClient::onSslErrors);
// FIXME something with _accountState->account()->davUrl()
// FIXME: Check env / capabilities
QByteArray wsUrl = qgetenv("OWNCLOUD_WEBSOCKET_URL");
if (wsUrl.length() > 0) {
qDebug() << "Connecting to websocket " << wsUrl;
_webSocket->open(QUrl::fromEncoded(wsUrl));
}
}
Folder::~Folder()
@@ -300,6 +321,33 @@ void Folder::slotRunEtagJob()
// The _requestEtagJob is auto deleting itself on finish. Our guard pointer _requestEtagJob will then be null.
}
void Folder::slotWebSocketConnected()
{
qDebug() << "CONNECTED";
}
// FIXME: Can we always assume it's a message? the docs are unclear
void Folder::slotWebSocketTextMessageReceived(QString message)
{
qDebug() << message;
if (!canSync() || isBusy()) {
return;
}
bool success;
QVariantMap json = QtJson::parse(message, success).toMap();
if (success) {
QString notificationEtag = json["etag"].toString();
QString notificationUser = json["user"].toString();
QString user = _accountState->account()->credentials()->user();
if (user == notificationUser && _lastEtag != notificationEtag) {
qDebug() << "* [WebSocket] Compare etag with previous etag: last:" << _lastEtag << ", received:" << notificationEtag << "-> CHANGED";
_lastEtag = notificationEtag;
slotScheduleThisFolder();
_accountState->tagLastSuccessfullETagRequest();
}
}
}
void Folder::etagRetreived(const QString& etag)
{
//qDebug() << "* Compare etag with previous etag: last:" << _lastEtag << ", received:" << etag;
+7
Ver Arquivo
@@ -27,6 +27,8 @@
#include <QObject>
#include <QStringList>
#include <QtWebSockets/QWebSocket>
class QThread;
class QSettings;
@@ -269,6 +271,9 @@ private slots:
void etagRetreived(const QString &);
void etagRetreivedFromSyncEngine(const QString &);
void slotWebSocketConnected();
void slotWebSocketTextMessageReceived(QString message);
void slotThreadTreeWalkResult(const SyncFileItemVector& ); // after sync is done
void slotEmitFinishedDelayed();
@@ -314,6 +319,8 @@ private:
bool _wipeDb;
bool _proxyDirty;
QPointer<RequestEtagJob> _requestEtagJob;
// FIXME: ifdef etc
QScopedPointer<QWebSocket> _webSocket;
QString _lastEtag;
QElapsedTimer _timeSinceLastSyncDone;
QElapsedTimer _timeSinceLastSyncStart;