Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorHannah von Reth <hannah.vonreth@owncloud.com>2022-07-01 12:44:25 +0300
committerHannah von Reth <vonreth@kde.org>2022-07-05 11:23:43 +0300
commite53c12e8c0c417acf1d4b249ac7b2277ead9693e (patch)
treeec4b251d48ce1eee82bdc0cf33cbbaaf0cf835db /src/gui
parente7b1b3a26a0d8a19c229de511a78cb25eeb5d736 (diff)
Register defaultSyncRoot with the socket api
The socked api won't populate the conext menu for the directory but in every other regard it will behave like an ownCloud managed dir. Fixes: #9838
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/accountstate.cpp4
-rw-r--r--src/gui/socketapi/socketapi.cpp59
-rw-r--r--src/gui/socketapi/socketapi.h3
3 files changed, 50 insertions, 16 deletions
diff --git a/src/gui/accountstate.cpp b/src/gui/accountstate.cpp
index 8fd3128bd..86b0e5b70 100644
--- a/src/gui/accountstate.cpp
+++ b/src/gui/accountstate.cpp
@@ -23,6 +23,7 @@
#include "gui/tlserrordialog.h"
#include "logger.h"
#include "settingsdialog.h"
+#include "socketapi/socketapi.h"
#include "theme.h"
#include <QFontMetrics>
@@ -103,10 +104,13 @@ AccountState::AccountState(AccountPtr account)
connect(account->credentials(), &AbstractCredentials::requestLogout, this, [this] {
_state = State::SignedOut;
});
+
+ FolderMan::instance()->socketApi()->registerAccount(account);
}
AccountState::~AccountState()
{
+ FolderMan::instance()->socketApi()->unregisterAccount(account());
}
AccountStatePtr AccountState::loadFromSettings(AccountPtr account, const QSettings &settings)
diff --git a/src/gui/socketapi/socketapi.cpp b/src/gui/socketapi/socketapi.cpp
index fcec8cb88..94de46739 100644
--- a/src/gui/socketapi/socketapi.cpp
+++ b/src/gui/socketapi/socketapi.cpp
@@ -77,6 +77,11 @@
namespace {
+const QString unregisterpathMessageC()
+{
+ return QStringLiteral("UNREGISTER_PATH");
+}
+
const QLatin1Char RecordSeparator()
{
return QLatin1Char('\x1e');
@@ -159,25 +164,16 @@ QObject *findWidget(const QString &queryString, const QList<QWidget *> &widgets
}
#endif
-static inline QString removeTrailingSlash(QString path)
-{
- Q_ASSERT(path.endsWith(QLatin1Char('/')));
- path.truncate(path.length() - 1);
- return path;
-}
-
static QString buildMessage(const QString &verb, const QString &path, const QString &status = QString())
{
QString msg(verb);
if (!status.isEmpty()) {
- msg.append(QLatin1Char(':'));
- msg.append(status);
+ msg += QLatin1Char(':') + status;
}
if (!path.isEmpty()) {
- msg.append(QLatin1Char(':'));
- QFileInfo fi(path);
- msg.append(QDir::toNativeSeparators(fi.absoluteFilePath()));
+ const QFileInfo fi(path);
+ msg += QLatin1Char(':') + QDir::toNativeSeparators(fi.absoluteFilePath());
}
return msg;
}
@@ -288,9 +284,14 @@ void SocketApi::slotNewConnection()
auto listener = QSharedPointer<SocketListener>::create(socket);
_listeners.insert(socket, listener);
+ for (auto a : _registeredAccounts) {
+ if (a->hasDefaultSyncRoot()) {
+ broadcastMessage(buildRegisterPathMessage(Utility::stripTrailingSlash(a->defaultSyncRoot())));
+ }
+ }
for (Folder *f : FolderMan::instance()->folders()) {
if (f->canSync()) {
- QString message = buildRegisterPathMessage(removeTrailingSlash(f->path()));
+ QString message = buildRegisterPathMessage(Utility::stripTrailingSlash(f->path()));
listener->sendMessage(message);
}
}
@@ -390,13 +391,39 @@ void SocketApi::slotReadSocket()
}
}
+
+void SocketApi::registerAccount(const AccountPtr &a)
+{
+ // Make sure not to register twice to each connected client
+ if (_registeredAccounts.contains(a)) {
+ return;
+ }
+
+ if (a->hasDefaultSyncRoot()) {
+ broadcastMessage(buildRegisterPathMessage(Utility::stripTrailingSlash(a->defaultSyncRoot())));
+ }
+ _registeredAccounts.insert(a);
+}
+
+void SocketApi::unregisterAccount(const AccountPtr &a)
+{
+ if (!_registeredAccounts.contains(a)) {
+ return;
+ }
+
+ if (a->hasDefaultSyncRoot()) {
+ broadcastMessage(buildMessage(unregisterpathMessageC(), Utility::stripTrailingSlash(a->defaultSyncRoot())));
+ }
+ _registeredAccounts.remove(a);
+}
+
void SocketApi::slotRegisterPath(Folder *folder)
{
// Make sure not to register twice to each connected client
if (_registeredFolders.contains(folder))
return;
- broadcastMessage(buildRegisterPathMessage(removeTrailingSlash(folder->path())));
+ broadcastMessage(buildRegisterPathMessage(Utility::stripTrailingSlash(folder->path())));
_registeredFolders.insert(folder);
}
@@ -405,7 +432,7 @@ void SocketApi::slotUnregisterPath(Folder *folder)
if (!_registeredFolders.contains(folder))
return;
- broadcastMessage(buildMessage(QLatin1String("UNREGISTER_PATH"), removeTrailingSlash(folder->path()), QString()), true);
+ broadcastMessage(buildMessage(unregisterpathMessageC(), Utility::stripTrailingSlash(folder->path()), QString()), true);
_registeredFolders.remove(folder);
}
@@ -429,7 +456,7 @@ void SocketApi::slotUpdateFolderView(Folder *f)
case SyncResult::Error:
Q_FALLTHROUGH();
case SyncResult::SetupError: {
- const QString rootPath = removeTrailingSlash(f->path());
+ const QString rootPath = Utility::stripTrailingSlash(f->path());
broadcastStatusPushMessage(rootPath, f->syncEngine().syncFileStatusTracker().fileStatus(""));
broadcastMessage(buildMessage(QStringLiteral("UPDATE_VIEW"), rootPath));
diff --git a/src/gui/socketapi/socketapi.h b/src/gui/socketapi/socketapi.h
index 43c71cafe..3db8b79ce 100644
--- a/src/gui/socketapi/socketapi.h
+++ b/src/gui/socketapi/socketapi.h
@@ -57,6 +57,8 @@ public:
~SocketApi() override;
public slots:
+ void registerAccount(const AccountPtr &a);
+ void unregisterAccount(const AccountPtr &a);
void slotUpdateFolderView(Folder *f);
void slotUnregisterPath(Folder *f);
void slotRegisterPath(Folder *f);
@@ -165,6 +167,7 @@ private:
QString buildRegisterPathMessage(const QString &path);
QSet<Folder *> _registeredFolders;
+ QSet<AccountPtr> _registeredAccounts;
QMap<SocketApiSocket *, QSharedPointer<SocketListener>> _listeners;
SocketApiServer _localServer;
};