Forráskód Böngészése

remove cache clear memory

marinofaggiana 3 éve
szülő
commit
739835f5b4

+ 1 - 5
iOSClient/AppDelegate.swift

@@ -64,7 +64,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD
     var pasteboardOcIds: [String] = []
     var shares: [tableShare] = []
     var timerErrorNetworking: Timer?
-    var avatars: [String:UIImage] = [:]
 
     func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
         
@@ -229,10 +228,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD
                 
         // Required unsubscribing / subscribing
         NCPushNotification.shared().pushNotification()
-        
-        // Clear all avatars
-        avatars.removeAll()
-    
+            
         // Request Service Server Nextcloud
         NCService.shared.startRequestServicesServer()
         

+ 1 - 0
iOSClient/Data/NCDatabase.swift

@@ -171,6 +171,7 @@ class tableAvatar: Object {
     @objc dynamic var date = NSDate()
     @objc dynamic var etag = ""
     @objc dynamic var fileName = ""
+    @objc dynamic var loaded: Bool = false
 
     override static func primaryKey() -> String {
         return "fileName"

+ 62 - 2
iOSClient/Data/NCManageDatabase.swift

@@ -116,7 +116,7 @@ class NCManageDatabase: NSObject {
                         }
                     }
                     
-                    if oldSchemaVersion < 202 {
+                    if oldSchemaVersion < 203 {
                         migration.deleteData(forType: tableDirectory.className())
                         migration.deleteData(forType: tableE2eEncryption.className())
                         migration.deleteData(forType: tableE2eEncryptionLock.className())
@@ -921,6 +921,7 @@ class NCManageDatabase: NSObject {
                 addObject.date = NSDate()
                 addObject.etag = etag
                 addObject.fileName = fileName
+                addObject.loaded = true
 
                 realm.add(addObject, update: .all)
             }
@@ -929,7 +930,7 @@ class NCManageDatabase: NSObject {
         }
     }
     
-    @objc func getTableAvatar(fileName: String) -> tableAvatar? {
+    func getTableAvatar(fileName: String) -> tableAvatar? {
         
         let realm = try! Realm()
         
@@ -939,6 +940,65 @@ class NCManageDatabase: NSObject {
         
         return tableAvatar.init(value: result)
     }
+
+    func clearAllAvatarLoaded() {
+        
+        let realm = try! Realm()
+        
+        do {
+            try realm.safeWrite {
+                
+                let results = realm.objects(tableAvatar.self)
+                for result in results {
+                    result.loaded = false
+                    realm.add(result, update: .all)
+                }
+            }
+        } catch let error {
+            NCCommunicationCommon.shared.writeLog("Could not write to database: \(error)")
+        }
+    }
+    
+    @discardableResult
+    func setAvatarLoaded(fileName: String) -> UIImage? {
+     
+        let realm = try! Realm()
+        let fileNameLocalPath = String(CCUtility.getDirectoryUserData()) + "/" + fileName
+        var image: UIImage?
+        
+        do {
+            try realm.safeWrite {
+                if let result = realm.objects(tableAvatar.self).filter("fileName == %@", fileName).first {
+                    if let imageAvatar = UIImage(contentsOfFile: fileNameLocalPath) {
+                        result.loaded = true
+                        image = imageAvatar
+                    } else {
+                        realm.delete(result)
+                    }
+                }
+            }
+        } catch let error {
+            NCCommunicationCommon.shared.writeLog("Could not write to database: \(error)")
+        }
+        
+        return image
+    }
+    
+    func getImageAvatarLoaded(fileName: String) -> UIImage? {
+        
+        let realm = try! Realm()
+        let fileNameLocalPath = String(CCUtility.getDirectoryUserData()) + "/" + fileName
+
+        let result = realm.objects(tableAvatar.self).filter("fileName == %@", fileName).first
+        if result == nil {
+            NCUtilityFileSystem.shared.deleteFile(filePath: fileNameLocalPath)
+            return nil
+        } else if result?.loaded == false {
+            return nil
+        }
+        
+        return UIImage(contentsOfFile: fileNameLocalPath)
+    }
     
     //MARK: -
     //MARK: Table Capabilities

+ 4 - 1
iOSClient/NCGlobal.swift

@@ -79,7 +79,7 @@ class NCGlobal: NSObject {
     // Database Realm
     //
     let databaseDefault                             = "nextcloud.realm"
-    let databaseSchemaVersion: UInt64               = 202
+    let databaseSchemaVersion: UInt64               = 203
     
     // Intro selector
     //
@@ -348,3 +348,6 @@ class NCGlobal: NSObject {
 //    popoverController.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0)
 //    popoverController.permittedArrowDirections = []
 //}
+
+// @discardableResult
+

+ 4 - 7
iOSClient/Networking/NCOperationQueue.swift

@@ -166,13 +166,11 @@ import NCCommunication
         let cell: NCCellProtocol = cell as! NCCellProtocol
         let fileNameLocalPath = String(CCUtility.getDirectoryUserData()) + "/" + fileName
 
-        #if !EXTENSION
-        if let image = (UIApplication.shared.delegate as! AppDelegate).avatars[user] {
+        if let image = NCManageDatabase.shared.getImageAvatarLoaded(fileName: fileName) {
             cell.fileAvatarImageView?.image = image
             return
         }
-        #endif
-                
+
         if let image = UIImage(contentsOfFile: fileNameLocalPath) {
             cell.fileAvatarImageView?.image = image
         } else {
@@ -475,7 +473,6 @@ class NCOperationDownloadAvatar: ConcurrentOperation {
                 if errorCode == 0, let image = image, let etag = etag {
                     
                     NCManageDatabase.shared.addAvatar(fileName: self.fileName, etag: etag)
-                    self.appDelegate.avatars[self.user] = image
                     if self.user == self.cell.fileUser {
                         if let avatarImageView = self.cell?.fileAvatarImageView  {
                             UIView.transition(with: avatarImageView, duration: 0.75, options: .transitionCrossDissolve) {
@@ -496,8 +493,8 @@ class NCOperationDownloadAvatar: ConcurrentOperation {
                         }
                     }
                     
-                } else if errorCode == NCGlobal.shared.errorNotModified, let image = UIImage(contentsOfFile: self.fileNameLocalPath) {
-                    self.appDelegate.avatars[self.user] = image
+                } else if errorCode == NCGlobal.shared.errorNotModified {
+                    NCManageDatabase.shared.setAvatarLoaded(fileName: self.fileName)
                 }
                 
                 self.finish()

+ 5 - 5
iOSClient/Networking/NCService.swift

@@ -37,7 +37,8 @@ class NCService: NSObject {
     
     @objc public func startRequestServicesServer() {
    
-        appDelegate.avatars = [:]
+        NCManageDatabase.shared.clearAllAvatarLoaded()
+        
         if appDelegate.account == "" { return }
         
         self.addInternalTypeIdentifier()
@@ -112,12 +113,11 @@ class NCService: NSObject {
                     
                     NCCommunication.shared.downloadAvatar(user: user, fileNameLocalPath: fileNameLocalPath, sizeImage: NCGlobal.shared.avatarSize, sizeRoundedAvatar: NCGlobal.shared.sizeRoundedAvatar, etag: etag) { (account, image, etag, errorCode, errorMessage) in
                         
-                        if let etag = etag, errorCode == 0, let image = image {
-                            (UIApplication.shared.delegate as! AppDelegate).avatars[user] = image
+                        if let etag = etag, errorCode == 0 {
                             NCManageDatabase.shared.addAvatar(fileName: fileName, etag: etag)
                             NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterReloadAvatar, userInfo: nil)
-                        } else if errorCode == NCGlobal.shared.errorNotModified, let image = UIImage(contentsOfFile: fileNameLocalPath) {
-                            self.appDelegate.avatars[user] = image
+                        } else if errorCode == NCGlobal.shared.errorNotModified {
+                            NCManageDatabase.shared.setAvatarLoaded(fileName: fileName)
                         }
                     }
                     self.requestServerCapabilities()

+ 16 - 11
iOSClient/Share/NCShare.swift

@@ -96,22 +96,25 @@ class NCShare: UIViewController, UIGestureRecognizerDelegate, NCShareLinkCellDel
             sharedWithYouByLabel.text = NSLocalizedString("_shared_with_you_by_", comment: "") + " " + metadata!.ownerDisplayName
             sharedWithYouByImage.image = UIImage(named: "avatar")?.imageColor(NCBrandColor.shared.label)
 
-            if let image = appDelegate.avatars[metadata!.ownerId] {
+            let fileName = String(CCUtility.getUserUrlBase(appDelegate.user, urlBase: appDelegate.urlBase)) + "-" + metadata!.ownerId + ".png"
+            if let image = NCManageDatabase.shared.getImageAvatarLoaded(fileName: fileName) {
+                
                 sharedWithYouByImage.image = image
+                
             } else {
-                let fileName = String(CCUtility.getUserUrlBase(appDelegate.user, urlBase: appDelegate.urlBase)) + "-" + metadata!.ownerId + ".png"
+                
                 let fileNameLocalPath = String(CCUtility.getDirectoryUserData()) + "/" + fileName
                 let etag = NCManageDatabase.shared.getTableAvatar(fileName: fileName)?.etag
                 
                 NCCommunication.shared.downloadAvatar(user: metadata!.ownerId, fileNameLocalPath: fileNameLocalPath, sizeImage: NCGlobal.shared.avatarSize, sizeRoundedAvatar: NCGlobal.shared.sizeRoundedAvatar, etag: etag) { (account, image, etag, errorCode, errorMessage) in
                     
                     if errorCode == 0, let etag = etag, let image = image {
-                        self.appDelegate.avatars[self.metadata!.ownerId] = image
                         NCManageDatabase.shared.addAvatar(fileName: fileName, etag: etag)
                         self.sharedWithYouByImage.image = image
-                    } else if errorCode == NCGlobal.shared.errorNotModified, let image = UIImage(contentsOfFile: fileNameLocalPath) {
-                        self.appDelegate.avatars[self.metadata!.ownerId] = image
-                        self.sharedWithYouByImage.image = image
+                    } else if errorCode == NCGlobal.shared.errorNotModified {
+                        if let image = NCManageDatabase.shared.setAvatarLoaded(fileName: fileName) {
+                            self.sharedWithYouByImage.image = image
+                        }
                     }
                 }
             }
@@ -339,21 +342,23 @@ class NCShare: UIViewController, UIGestureRecognizerDelegate, NCShareLinkCellDel
             } else {
                 cell.centerTitle.constant = 0
             }
-            if let image = self.appDelegate.avatars[sharee.shareWith] {
+            
+            let fileName = String(CCUtility.getUserUrlBase(self.appDelegate.user, urlBase: self.appDelegate.urlBase)) + "-" + sharee.shareWith + ".png"
+            if let image = NCManageDatabase.shared.getImageAvatarLoaded(fileName: fileName) {
+                
                 cell.imageItem.image = image
+                
             } else {
-                let fileName = String(CCUtility.getUserUrlBase(self.appDelegate.user, urlBase: self.appDelegate.urlBase)) + "-" + sharee.shareWith + ".png"
+                
                 let fileNameLocalPath = String(CCUtility.getDirectoryUserData()) + "/" + fileName
                 let etag = NCManageDatabase.shared.getTableAvatar(fileName: fileName)?.etag
 
                 NCCommunication.shared.downloadAvatar(user: sharee.shareWith, fileNameLocalPath: fileNameLocalPath, sizeImage: NCGlobal.shared.avatarSize, sizeRoundedAvatar: NCGlobal.shared.sizeRoundedAvatar, etag: etag) { (account, image, etag, errorCode, errorMessage) in
                     
                     if errorCode == 0, let etag = etag, let image = image {
-                        self.appDelegate.avatars[sharee.shareWith] = image
                         NCManageDatabase.shared.addAvatar(fileName: fileName, etag: etag)
                         cell.imageItem.image = image
-                    } else if errorCode == NCGlobal.shared.errorNotModified, let image = UIImage(contentsOfFile: fileNameLocalPath) {
-                        self.appDelegate.avatars[sharee.shareWith] = image
+                    } else if errorCode == NCGlobal.shared.errorNotModified, let image = NCManageDatabase.shared.setAvatarLoaded(fileName: fileName) {
                         cell.imageItem.image = image
                     }
                 }