Skip to content

Commit

Permalink
Merge pull request #7016 from nextcloud/bugfix/hideEncryptFromContext…
Browse files Browse the repository at this point in the history
…Menu

Bugfix/hide encrypt from context menu
  • Loading branch information
mgallien authored Aug 22, 2024
2 parents a384119 + 539be0a commit aa1c83c
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 8 deletions.
26 changes: 18 additions & 8 deletions src/gui/socketapi/socketapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -403,9 +403,9 @@ void SocketApi::slotReadSocket()
return out;
}();

const auto argument = argPos != -1 ? line.mid(argPos + 1) : QStringView();
const auto argument = QString{argPos != -1 ? line.mid(argPos + 1) : QString()};
if (command.startsWith("ASYNC_")) {
auto arguments = argument.split('|');
const auto arguments = argument.split('|');
if (arguments.size() != 2) {
listener->sendError(QStringLiteral("argument count is wrong"));
return;
Expand All @@ -416,7 +416,7 @@ void SocketApi::slotReadSocket()
auto jobId = arguments[0];

auto socketApiJob = QSharedPointer<SocketApiJob>(
new SocketApiJob(jobId.toString(), listener, json), &QObject::deleteLater);
new SocketApiJob(jobId, listener, json), &QObject::deleteLater);
if (indexOfMethod != -1) {
staticMetaObject.method(indexOfMethod)
.invoke(this, Qt::QueuedConnection,
Expand All @@ -430,7 +430,7 @@ void SocketApi::slotReadSocket()
QJsonParseError error{};
const auto json = QJsonDocument::fromJson(argument.toUtf8(), &error).object();
if (error.error != QJsonParseError::NoError) {
qCWarning(lcSocketApi()) << "Invalid json" << argument.toString() << error.errorString();
qCWarning(lcSocketApi()) << "Invalid json" << argument << error.errorString();
listener->sendError(error.errorString());
return;
}
Expand All @@ -448,15 +448,15 @@ void SocketApi::slotReadSocket()
if (indexOfMethod != -1) {
ASSERT(thread() == QThread::currentThread())
staticMetaObject.method(indexOfMethod)
.invoke(this, Qt::QueuedConnection, Q_ARG(QString, argument.toString()),
.invoke(this, Qt::QueuedConnection, Q_ARG(QString, argument),
Q_ARG(SocketListener *, listener.data()));
}
} else {
if (indexOfMethod != -1) {
// to ensure that listener is still valid we need to call it with Qt::DirectConnection
ASSERT(thread() == QThread::currentThread())
staticMetaObject.method(indexOfMethod)
.invoke(this, Qt::DirectConnection, Q_ARG(QString, argument.toString()),
.invoke(this, Qt::DirectConnection, Q_ARG(QString, argument),
Q_ARG(SocketListener *, listener.data()));
}
}
Expand Down Expand Up @@ -1242,7 +1242,8 @@ void SocketApi::sendEncryptFolderCommandMenuEntries(const QFileInfo &fileInfo,
!fileData.folder->accountState()->account() ||
!fileData.folder->accountState()->account()->capabilities().clientSideEncryptionAvailable() ||
!FileSystem::isDir(fileInfo.absoluteFilePath()) ||
isE2eEncryptedPath) {
isE2eEncryptedPath ||
!fileData.isFolderEmpty()) {
return;
}

Expand All @@ -1257,7 +1258,7 @@ void SocketApi::sendEncryptFolderCommandMenuEntries(const QFileInfo &fileInfo,
ancestor = ancestor.parentFolder();
}

if (!anyAncestorEncrypted) {
if (!anyAncestorEncrypted && !fileData.parentFolder().journalRecord().isValid()) {
const auto isOnTheServer = fileData.journalRecord().isValid();
const auto flagString = isOnTheServer ? QLatin1String("::") : QLatin1String(":d:");
listener->sendMessage(QStringLiteral("MENU_ITEM:ENCRYPT") + flagString + tr("Encrypt"));
Expand Down Expand Up @@ -1328,6 +1329,15 @@ QString SocketApi::FileData::folderRelativePathNoVfsSuffix() const
return result;
}

bool SocketApi::FileData::isFolderEmpty() const
{
if (FileSystem::isDir(localPath)) {
const auto nativeFolder = QDir{localPath};
return nativeFolder.isEmpty();
}
return false;
}

SyncFileStatus SocketApi::FileData::syncFileStatus() const
{
if (!folder)
Expand Down
2 changes: 2 additions & 0 deletions src/gui/socketapi/socketapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ private slots:
// Relative path of the file locally, without any vfs suffix
[[nodiscard]] QString folderRelativePathNoVfsSuffix() const;

[[nodiscard]] bool isFolderEmpty() const;

Folder *folder = nullptr;
// Absolute path of the file locally. (May be a virtual file)
QString localPath;
Expand Down

0 comments on commit aa1c83c

Please sign in to comment.