marinofaggiana 4 жил өмнө
parent
commit
b42c3077f1

+ 5 - 2
iOSClient/AppDelegate.m

@@ -242,8 +242,11 @@
     }
     
     // verify task (download/upload) lost
-    [self verifyTaskLos];
+    [self verifyTaskLost];
     
+    // verify delete Asset Local Identifiers
+    [[NCUtility sharedInstance] deleteAssetLocalIdentifiersWithAccount:self.activeAccount];
+   
     // Brand
 #if defined(HC)
     tableAccount *account = [[NCManageDatabase sharedInstance] getAccountActive];
@@ -1568,7 +1571,7 @@
     }
 }
 
-- (void)verifyTaskLos
+- (void)verifyTaskLost
 {
     // DOWNLOAD
     //

+ 32 - 0
iOSClient/Database/NCManageDatabase.swift

@@ -2532,6 +2532,38 @@ class NCManageDatabase: NSObject {
         }
     }
     
+    @objc func getAssetLocalIdentifiersUploaded(account: String) -> [String] {
+        
+        let realm = try! Realm()
+        realm.refresh()
+        var assetLocalIdentifiers = [String]()
+        
+        let results = realm.objects(tableMetadata.self).filter("account == %@ AND assetLocalIdentifier != '' AND session == '' AND sessionError == ''", account)
+        for result in results {
+            assetLocalIdentifiers.append(result.assetLocalIdentifier)
+        }
+       
+        return assetLocalIdentifiers
+    }
+    
+    @objc func clearAssetLocalIdentifiers(_ assetLocalIdentifiers: [String], account: String) {
+        
+        let realm = try! Realm()
+
+        do {
+            try realm.write {
+            
+                let results = realm.objects(tableMetadata.self).filter("account == %@ AND assetLocalIdentifier IN %@", account, assetLocalIdentifiers)
+
+                for result in results {
+                    result.assetLocalIdentifier = ""
+                }
+            }
+        } catch let error {
+            print("[LOG] Could not write to database: ", error)
+        }
+    }
+    
     //MARK: -
     //MARK: Table Media
  

+ 15 - 0
iOSClient/Utility/NCUtility.swift

@@ -532,5 +532,20 @@ class NCUtility: NSObject {
         
         return image ?? UIImage()
     }
+    
+    @objc func deleteAssetLocalIdentifiers(account: String) {
+        
+        let localIdentifiers = NCManageDatabase.sharedInstance.getAssetLocalIdentifiersUploaded(account: account)
+        if localIdentifiers.count == 0 { return }
+        let assets = PHAsset.fetchAssets(withLocalIdentifiers: localIdentifiers, options: nil)
+        
+        PHPhotoLibrary.shared().performChanges({
+            PHAssetChangeRequest.deleteAssets(assets as NSFastEnumeration)
+        }, completionHandler: { success, error in
+            DispatchQueue.main.async {
+                NCManageDatabase.sharedInstance.clearAssetLocalIdentifiers(localIdentifiers, account: account)
+            }
+        })
+    }
 }