Comparar commits
1 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| 0e36a25b31 |
@@ -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})
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário