Properly display encryption status for non root folder connection
authorKevin Ottens <kevin.ottens@nextcloud.com>
Tue, 30 Jun 2020 15:47:10 +0000 (17:47 +0200)
committerKevin Ottens (Rebase PR Action) <er-vin@users.noreply.github.com>
Wed, 1 Jul 2020 16:58:29 +0000 (16:58 +0000)
Since the e2e oracle works only in term of absolute remote paths and
that our model x._path was relative, we need to properly convert.

Signed-off-by: Kevin Ottens <kevin.ottens@nextcloud.com>
src/gui/folderstatusmodel.cpp

index 88cf04db960a22843888210e3f5726bcfc11098b..e92c63cd4879e5148b2a0b79e920f9c02851df29 100644 (file)
@@ -153,13 +153,17 @@ QVariant FolderStatusModel::data(const QModelIndex &index, int role) const
             return QString(QLatin1String("<qt>") + Utility::escape(x._size < 0 ? x._name : tr("%1 (%2)").arg(x._name, Utility::octetsToString(x._size))) + QLatin1String("</qt>"));
         case Qt::CheckStateRole:
             return x._checked;
-        case Qt::DecorationRole:
-            if (_accountState->account()->e2e()->isFolderEncrypted(x._path)) {
+        case Qt::DecorationRole: {
+            Q_ASSERT(x._folder->remotePath().startsWith('/'));
+            const auto rootPath = x._folder->remotePath().mid(1);
+            const auto absoluteRemotePath = rootPath.isEmpty() ? x._path : rootPath + '/' + x._path;
+            if (_accountState->account()->e2e()->isFolderEncrypted(absoluteRemotePath)) {
                 return QIcon(QLatin1String(":/client/theme/lock-https.svg"));
-            } else if (x._size > 0 && _accountState->account()->e2e()->isAnyParentFolderEncrypted(x._path)) {
+            } else if (x._size > 0 && _accountState->account()->e2e()->isAnyParentFolderEncrypted(absoluteRemotePath)) {
                 return QIcon(QLatin1String(":/client/theme/lock-broken.svg"));
             }
             return QFileIconProvider().icon(x._isExternal ? QFileIconProvider::Network : QFileIconProvider::Folder);
+        }
         case Qt::ForegroundRole:
             if (x._isUndecided) {
                 return QColor(Qt::red);