瀏覽代碼

Merge pull request #5900 from nextcloud/backport/5885/stable-3.9

[stable-3.9] Disable share view completely when server does not support/has disabled file sharing
Claudio Cambra 2 年之前
父節點
當前提交
21dc0aea98
共有 3 個文件被更改,包括 48 次插入15 次删除
  1. 33 15
      src/gui/filedetails/FileDetailsPage.qml
  2. 12 0
      src/gui/filedetails/filedetails.cpp
  3. 3 0
      src/gui/filedetails/filedetails.h

+ 33 - 15
src/gui/filedetails/FileDetailsPage.qml

@@ -47,13 +47,17 @@ Page {
     Connections {
         target: Systray
         function onShowFileDetailsPage(fileLocalPath, page) {
-            if(fileLocalPath === root.localPath) {
+            if (!root.fileDetails.sharingAvailable && page == Systray.FileDetailsPage.Sharing) {
+                return;
+            }
+
+            if (fileLocalPath === root.localPath) {
                 switch(page) {
                 case Systray.FileDetailsPage.Activity:
                     swipeView.currentIndex = fileActivityView.swipeIndex;
                     break;
                 case Systray.FileDetailsPage.Sharing:
-                    swipeView.currentIndex = shareView.swipeIndex;
+                    swipeView.currentIndex = shareViewLoader.swipeIndex;
                     break;
                 }
             }
@@ -218,6 +222,7 @@ Page {
             Layout.rightMargin: root.intendedPadding
 
             padding: 0
+            background: null
 
             NCTabButton {
                 svgCustomColorSource: "image://svgimage-custom-color/activity.svg"
@@ -227,10 +232,13 @@ Page {
             }
 
             NCTabButton {
+                width: visible ? implicitWidth : 0
+                height: visible ? implicitHeight : 0
                 svgCustomColorSource: "image://svgimage-custom-color/share.svg"
                 text: qsTr("Sharing")
-                checked: swipeView.currentIndex === shareView.swipeIndex
-                onClicked: swipeView.currentIndex = shareView.swipeIndex
+                checked: swipeView.currentIndex === shareViewLoader.swipeIndex
+                onClicked: swipeView.currentIndex = shareViewLoader.swipeIndex
+                visible: root.fileDetails.sharingAvailable
             }
         }
     }
@@ -244,7 +252,7 @@ Page {
         FileActivityView {
             id: fileActivityView
 
-            property int swipeIndex: SwipeView.index
+            readonly property int swipeIndex: SwipeView.index
 
             delegateHorizontalPadding: root.intendedPadding
 
@@ -253,18 +261,28 @@ Page {
             iconSize: root.iconSize
         }
 
-        ShareView {
-            id: shareView
+        Loader {
+            id: shareViewLoader
 
-            property int swipeIndex: SwipeView.index
+            readonly property int swipeIndex: SwipeView.index
 
-            accountState: root.accountState
-            localPath: root.localPath
-            fileDetails: root.fileDetails
-            horizontalPadding: root.intendedPadding
-            iconSize: root.iconSize
-            rootStackView: root.rootStackView
-            backgroundsVisible: root.backgroundsVisible
+            width: swipeView.width
+            height: swipeView.height
+            active: root.fileDetails.sharingAvailable
+
+            sourceComponent: ShareView {
+                id: shareView
+
+                anchors.fill: parent
+
+                accountState: root.accountState
+                localPath: root.localPath
+                fileDetails: root.fileDetails
+                horizontalPadding: root.intendedPadding
+                iconSize: root.iconSize
+                rootStackView: root.rootStackView
+                backgroundsVisible: root.backgroundsVisible
+            }
         }
     }
 }

+ 12 - 0
src/gui/filedetails/filedetails.cpp

@@ -62,6 +62,11 @@ void FileDetails::setLocalPath(const QString &localPath)
     connect(&_fileWatcher, &QFileSystemWatcher::fileChanged, this, &FileDetails::refreshFileDetails);
 
     const auto folder = FolderMan::instance()->folderForPath(_localPath);
+    if (!folder) {
+        qCWarning(lcFileDetails) << "No folder found for path:" << _localPath << "will not load file details.";
+        return;
+    }
+
     const auto file = _localPath.mid(folder->cleanPath().length() + 1);
 
     if (!folder->journalDb()->getFileRecord(file, &_fileRecord)) {
@@ -74,6 +79,8 @@ void FileDetails::setLocalPath(const QString &localPath)
     updateLockExpireString();
     updateFileTagModel(folder);
 
+    _sharingAvailable = folder->accountState()->account()->capabilities().shareAPI();
+
     Q_EMIT fileChanged();
 }
 
@@ -172,4 +179,9 @@ void FileDetails::updateFileTagModel(const Folder * const folder)
     Q_EMIT fileTagModelChanged();
 }
 
+bool FileDetails::sharingAvailable() const
+{
+    return _sharingAvailable;
+}
+
 } // namespace OCC

+ 3 - 0
src/gui/filedetails/filedetails.h

@@ -38,6 +38,7 @@ class FileDetails : public QObject
     Q_PROPERTY(QString lockExpireString READ lockExpireString NOTIFY lockExpireStringChanged)
     Q_PROPERTY(bool isFolder READ isFolder NOTIFY isFolderChanged)
     Q_PROPERTY(FileTagModel* fileTagModel READ fileTagModel NOTIFY fileTagModelChanged)
+    Q_PROPERTY(bool sharingAvailable READ sharingAvailable NOTIFY fileChanged)
 
 public:
     explicit FileDetails(QObject *parent = nullptr);
@@ -50,6 +51,7 @@ public:
     [[nodiscard]] QString lockExpireString() const;
     [[nodiscard]] bool isFolder() const;
     [[nodiscard]] FileTagModel *fileTagModel() const;
+    [[nodiscard]] bool sharingAvailable() const;
 
 public slots:
     void setLocalPath(const QString &localPath);
@@ -80,6 +82,7 @@ private:
     QLocale _locale;
 
     std::unique_ptr<FileTagModel> _fileTagModel;
+    bool _sharingAvailable = true;
 };
 
 } // namespace OCC