Prechádzať zdrojové kódy

Fix share view (#2601)

* fix

Signed-off-by: Marino Faggiana <marino@marinofaggiana.com>
Marino Faggiana 1 rok pred
rodič
commit
3d89da5523

+ 13 - 0
iOSClient/Data/NCManageDatabase+Share.swift

@@ -228,6 +228,19 @@ extension NCManageDatabase {
         }
         }
     }
     }
 
 
+    func deleteTableShare(account: String, path: String) {
+
+        do {
+            let realm = try Realm()
+            try realm.write {
+                let result = realm.objects(tableShare.self).filter("account == %@ AND path == %@", account, path)
+                realm.delete(result)
+            }
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
+        }
+    }
+
     func deleteTableShare(account: String) {
     func deleteTableShare(account: String) {
 
 
         do {
         do {

+ 4 - 3
iOSClient/Main/Collection Common/NCCollectionViewCommon.swift

@@ -280,14 +280,15 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
 
 
     @objc func reloadAvatar(_ notification: NSNotification) {
     @objc func reloadAvatar(_ notification: NSNotification) {
 
 
+        DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
+            self.showTip()
+        }
+
         guard let userInfo = notification.userInfo as NSDictionary?,
         guard let userInfo = notification.userInfo as NSDictionary?,
               let error = userInfo["error"] as? NKError,
               let error = userInfo["error"] as? NKError,
               error.errorCode != NCGlobal.shared.errorNotModified else { return }
               error.errorCode != NCGlobal.shared.errorNotModified else { return }
 
 
         setNavigationItem()
         setNavigationItem()
-        DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
-            self.showTip()
-        }
     }
     }
 
 
     @objc func changeTheming() {
     @objc func changeTheming() {

+ 1 - 1
iOSClient/Share/NCShareNetworking.swift

@@ -50,7 +50,7 @@ class NCShareNetworking: NSObject {
 
 
         NextcloudKit.shared.readShares(parameters: parameter) { account, shares, _, error in
         NextcloudKit.shared.readShares(parameters: parameter) { account, shares, _, error in
             if error == .success, let shares = shares {
             if error == .success, let shares = shares {
-                NCManageDatabase.shared.deleteTableShare(account: account)
+                NCManageDatabase.shared.deleteTableShare(account: account, path: "/" + filenamePath)
                 let home = NCUtilityFileSystem.shared.getHomeServer(urlBase: self.metadata.urlBase, userId: self.metadata.userId)
                 let home = NCUtilityFileSystem.shared.getHomeServer(urlBase: self.metadata.urlBase, userId: self.metadata.userId)
                 NCManageDatabase.shared.addShare(account: self.metadata.account, home: home, shares: shares)
                 NCManageDatabase.shared.addShare(account: self.metadata.account, home: home, shares: shares)
                 NextcloudKit.shared.getGroupfolders { account, results, _, error in
                 NextcloudKit.shared.getGroupfolders { account, results, _, error in

+ 31 - 16
iOSClient/Shares/NCShares.swift

@@ -51,27 +51,46 @@ class NCShares: NCCollectionViewCommon {
 
 
     override func queryDB(isForced: Bool) {
     override func queryDB(isForced: Bool) {
 
 
-        let sharess = NCManageDatabase.shared.getTableShares(account: self.appDelegate.account)
         var metadatas: [tableMetadata] = []
         var metadatas: [tableMetadata] = []
 
 
+        func reload() {
+            self.dataSource = NCDataSource(metadatas: metadatas,
+                                           account: appDelegate.account,
+                                           sort: layoutForView?.sort,
+                                           ascending: layoutForView?.ascending,
+                                           directoryOnTop: layoutForView?.directoryOnTop,
+                                           favoriteOnTop: true,
+                                           filterLivePhoto: true,
+                                           groupByField: groupByField,
+                                           providers: providers,
+                                           searchResults: searchResults)
+            DispatchQueue.main.async {
+                self.refreshControl.endRefreshing()
+                self.collectionView.reloadData()
+            }
+        }
+
+        let sharess = NCManageDatabase.shared.getTableShares(account: appDelegate.account)
         for share in sharess {
         for share in sharess {
-            if let metadata = NCManageDatabase.shared.getMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileName == %@", self.appDelegate.account, share.serverUrl, share.fileName)) {
+            if let metadata = NCManageDatabase.shared.getMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileName == %@", appDelegate.account, share.serverUrl, share.fileName)) {
                 if !(metadatas.contains { $0.ocId == metadata.ocId }) {
                 if !(metadatas.contains { $0.ocId == metadata.ocId }) {
                     metadatas.append(metadata)
                     metadatas.append(metadata)
                 }
                 }
+            } else {
+                let serverUrlFileName = share.serverUrl + "/" + share.fileName
+                NCNetworking.shared.readFile(serverUrlFileName: serverUrlFileName) { _, metadata, _ in
+                    if let metadata {
+                        NCManageDatabase.shared.addMetadata(metadata)
+                        if !(metadatas.contains { $0.ocId == metadata.ocId }) {
+                            metadatas.append(metadata)
+                            reload()
+                        }
+                    }
+                }
             }
             }
         }
         }
 
 
-        self.dataSource = NCDataSource(metadatas: metadatas,
-                                       account: self.appDelegate.account,
-                                       sort: self.layoutForView?.sort,
-                                       ascending: self.layoutForView?.ascending,
-                                       directoryOnTop: self.layoutForView?.directoryOnTop,
-                                       favoriteOnTop: true,
-                                       filterLivePhoto: true,
-                                       groupByField: self.groupByField,
-                                       providers: self.providers,
-                                       searchResults: self.searchResults)
+        reload()
     }
     }
 
 
     override func reloadDataSource(isForced: Bool = true) {
     override func reloadDataSource(isForced: Bool = true) {
@@ -79,10 +98,6 @@ class NCShares: NCCollectionViewCommon {
 
 
         DispatchQueue.global().async {
         DispatchQueue.global().async {
             self.queryDB(isForced: isForced)
             self.queryDB(isForced: isForced)
-            DispatchQueue.main.async {
-                self.refreshControl.endRefreshing()
-                self.collectionView.reloadData()
-            }
         }
         }
     }
     }