Browse Source

Improved conflict view

marinofaggiana 4 years ago
parent
commit
3c08c479a7
2 changed files with 78 additions and 77 deletions
  1. 29 40
      iOSClient/Main/CCMain.m
  2. 49 37
      iOSClient/Main/Create cloud/NCCreateFormUploadConflict.swift

+ 29 - 40
iOSClient/Main/CCMain.m

@@ -34,7 +34,7 @@
 #import "NCNetworkingEndToEnd.h"
 #import "PKDownloadButton.h"
 
-@interface CCMain () <UITextViewDelegate, createFormUploadAssetsDelegate, MGSwipeTableCellDelegate, NCSelectDelegate, UITextFieldDelegate, UIAdaptivePresentationControllerDelegate, NCCreateFormUploadConflictDelegate>
+@interface CCMain () <UITextViewDelegate, createFormUploadAssetsDelegate, MGSwipeTableCellDelegate, NCSelectDelegate, UITextFieldDelegate, UIAdaptivePresentationControllerDelegate>
 {
     AppDelegate *appDelegate;
         
@@ -862,7 +862,7 @@
         [coordinator coordinateReadingItemAtURL:url options:NSFileCoordinatorReadingForUploading error:&error byAccessor:^(NSURL *newURL) {
             
             NSString *serverUrl = [appDelegate getTabBarControllerActiveServerUrl];
-            NSString *fileName =  [[NCUtility sharedInstance] createFileName:[url lastPathComponent] serverUrl:serverUrl account:appDelegate.activeAccount];
+            NSString *fileName =  [url lastPathComponent];
             NSString *ocId = [CCUtility createMetadataIDFromAccount:appDelegate.activeAccount serverUrl:serverUrl fileNameView:fileName directory:false];
             NSData *data = [NSData dataWithContentsOfURL:newURL];
             
@@ -883,11 +883,22 @@
                     metadataForUpload.size = data.length;
                     metadataForUpload.status = k_metadataStatusWaitUpload;
                     
-                    [[NCManageDatabase sharedInstance] addMetadata:metadataForUpload];
-                    [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:self.serverUrl ocId:nil action:k_action_NULL];
+                    if ([[NCUtility sharedInstance] getMetadataConflictWithAccount:appDelegate.activeAccount serverUrl:serverUrl fileName:fileName] != nil) {
+                       
+                        NCCreateFormUploadConflict *conflict = [[UIStoryboard storyboardWithName:@"NCCreateFormUploadConflict" bundle:nil] instantiateInitialViewController];
+                        conflict.serverUrl = self.serverUrl;
+                        conflict.metadatasUploadInConflict = @[metadataForUpload];
                         
-                    [appDelegate startLoadAutoDownloadUpload];
-                    
+                        [self presentViewController:conflict animated:YES completion:nil];
+                        
+                    } else {
+                        
+                        [[NCManageDatabase sharedInstance] addMetadata:metadataForUpload];
+                        [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:self.serverUrl ocId:nil action:k_action_NULL];
+                            
+                        [appDelegate startLoadAutoDownloadUpload];
+                    }
+
                 } else {
                                         
                     [[NCContentPresenter shared] messageNotification:@"_error_" description:error.description delay:k_dismissAfterSecond type:messageTypeError errorCode:error.code];
@@ -1140,9 +1151,9 @@
 
 - (void)uploadFileAsset:(NSArray *)assets urls:(NSArray *)urls serverUrl:(NSString *)serverUrl autoUploadPath:(NSString *)autoUploadPath useSubFolder:(BOOL)useSubFolder session:(NSString *)session
 {
-    NSMutableArray *metadatas = [NSMutableArray new];
+    NSMutableArray *metadatasNOConflict = [NSMutableArray new];
     NSMutableArray *metadatasMOV = [NSMutableArray new];
-    NSMutableArray *metadatasConflict = [NSMutableArray new];
+    NSMutableArray *metadatasUploadInConflict = [NSMutableArray new];
 
     for (PHAsset *asset in assets) {
         
@@ -1183,22 +1194,13 @@
         metadataForUpload.size = [[NCUtility sharedInstance] getFileSizeWithAsset:asset];
         metadataForUpload.status = k_metadataStatusWaitUpload;
         [CCUtility insertTypeFileIconName:fileName metadata:metadataForUpload];
-        
-        // verify exists conflict
-        NSString *fileNameExtension = [fileName pathExtension].lowercaseString;
-        NSString *fileNameWithoutExtension = [fileName stringByDeletingPathExtension];
-        NSString *fileNameConflict = fileName;
-        
-        if ([fileNameExtension isEqualToString:@"heic"] && [CCUtility getFormatCompatibility]) {
-            fileNameConflict = [fileNameWithoutExtension stringByAppendingString:@".jpg"];
-        }
-        tableMetadata *metadata = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@ AND fileNameView == %@", appDelegate.activeAccount, serverUrl, fileNameConflict]];
-        if (metadata) {
-            [metadatasConflict addObject:metadataForUpload];
+                        
+        if ([[NCUtility sharedInstance] getMetadataConflictWithAccount:appDelegate.activeAccount serverUrl:serverUrl fileName:fileName] != nil) {
+            [metadatasUploadInConflict addObject:metadataForUpload];
         } else {
-            [metadatas addObject:metadataForUpload];
+            [metadatasNOConflict addObject:metadataForUpload];
         }
-                    
+        
         // Add Medtadata MOV LIVE PHOTO for upload
         if ((asset.mediaSubtypes == PHAssetMediaSubtypePhotoLive || asset.mediaSubtypes == PHAssetMediaSubtypePhotoLive+PHAssetMediaSubtypePhotoHDR) && CCUtility.getLivePhoto && urls.count == assets.count) {
                 
@@ -1228,19 +1230,19 @@
     }
     
     // Verify if file(s) exists
-    if (metadatasConflict.count > 0) {
+    if (metadatasUploadInConflict.count > 0) {
         
         NCCreateFormUploadConflict *conflict = [[UIStoryboard storyboardWithName:@"NCCreateFormUploadConflict" bundle:nil] instantiateInitialViewController];
-        conflict.delegate = self;
-        conflict.metadatas = metadatas;
+        conflict.serverUrl = self.serverUrl;
+        conflict.metadatasNOConflict = metadatasNOConflict;
         conflict.metadatasMOV = metadatasMOV;
-        conflict.metadatasConflict = metadatasConflict;
+        conflict.metadatasUploadInConflict = metadatasUploadInConflict;
         
         [self presentViewController:conflict animated:YES completion:nil];
         
     } else {
         
-        [[NCManageDatabase sharedInstance] addMetadatas:metadatas];
+        [[NCManageDatabase sharedInstance] addMetadatas:metadatasNOConflict];
         [[NCManageDatabase sharedInstance] addMetadatas:metadatasMOV];
         
         [appDelegate startLoadAutoDownloadUpload];
@@ -1248,19 +1250,6 @@
     }
 }
 
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ==== NCCreateFormUploadConflictDelegate ====
-#pragma --------------------------------------------------------------------------------------------
-
-- (void)dismissCreateFormUploadConflictWithMetadatas:(NSArray *)metadatas
-{
-    if (metadatas.count > 0) {
-        [[NCManageDatabase sharedInstance] addMetadatas:metadatas];
-        
-        [appDelegate startLoadAutoDownloadUpload];
-        [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:self.serverUrl ocId:nil action:k_action_NULL];
-    }
-}
 
 #pragma --------------------------------------------------------------------------------------------
 #pragma mark ==== Read Folder ====

+ 49 - 37
iOSClient/Main/Create cloud/NCCreateFormUploadConflict.swift

@@ -23,10 +23,6 @@
 
 import Foundation
 
-@objc protocol NCCreateFormUploadConflictDelegate {
-    @objc func dismissCreateFormUploadConflict(metadatas: [tableMetadata])
-}
-
 @objc class NCCreateFormUploadConflict: UIViewController {
 
     @IBOutlet weak var labelTitle: UILabel!
@@ -45,10 +41,10 @@ import Foundation
     
     private let appDelegate = UIApplication.shared.delegate as! AppDelegate
     
-    @objc var metadatas: [tableMetadata]
+    @objc var metadatasNOConflict: [tableMetadata]
+    @objc var metadatasUploadInConflict: [tableMetadata]
     @objc var metadatasMOV: [tableMetadata]
-    @objc var metadatasConflict: [tableMetadata]
-    @objc weak var delegate: NCCreateFormUploadConflictDelegate?
+    @objc var serverUrl: String?
     
     var metadatasConflictNewFiles = [String]()
     var metadatasConflictAlreadyExistingFiles = [String]()
@@ -57,9 +53,9 @@ import Foundation
     // MARK: - Cicle
 
     @objc required init?(coder aDecoder: NSCoder) {
-        self.metadatas = [tableMetadata]()
+        self.metadatasNOConflict = [tableMetadata]()
         self.metadatasMOV = [tableMetadata]()
-        self.metadatasConflict = [tableMetadata]()
+        self.metadatasUploadInConflict = [tableMetadata]()
         super.init(coder: aDecoder)
     }
     
@@ -73,13 +69,13 @@ import Foundation
         
         tableView.register(UINib.init(nibName: "NCCreateFormUploadConflictCell", bundle: nil), forCellReuseIdentifier: "Cell")
         
-        if metadatasConflict.count == 1 {
-            labelTitle.text = String(metadatasConflict.count) + " " + NSLocalizedString("_file_conflict_num_", comment: "")
+        if metadatasUploadInConflict.count == 1 {
+            labelTitle.text = String(metadatasUploadInConflict.count) + " " + NSLocalizedString("_file_conflict_num_", comment: "")
             labelSubTitle.text = NSLocalizedString("_file_conflict_desc_", comment: "")
             labelNewFiles.text = NSLocalizedString("_file_conflict_new_", comment: "")
             labelAlreadyExistingFiles.text = NSLocalizedString("_file_conflict_exists_", comment: "")
         } else {
-            labelTitle.text = String(metadatasConflict.count) + " " + NSLocalizedString("_files_conflict_num_", comment: "")
+            labelTitle.text = String(metadatasUploadInConflict.count) + " " + NSLocalizedString("_files_conflict_num_", comment: "")
             labelSubTitle.text = NSLocalizedString("_files_conflict_desc_", comment: "")
             labelNewFiles.text = NSLocalizedString("_files_conflict_new_", comment: "")
             labelAlreadyExistingFiles.text = NSLocalizedString("_files_conflict_exists_", comment: "")
@@ -105,7 +101,7 @@ import Foundation
         metadatasConflictNewFiles.removeAll()
 
         if switchNewFiles.isOn {
-            for metadata in metadatasConflict {
+            for metadata in metadatasUploadInConflict {
                 metadatasConflictNewFiles.append(metadata.ocId)
             }
         }
@@ -119,7 +115,7 @@ import Foundation
         metadatasConflictAlreadyExistingFiles.removeAll()
         
         if switchAlreadyExistingFiles.isOn {
-            for metadata in metadatasConflict {
+            for metadata in metadatasUploadInConflict {
                 metadatasConflictAlreadyExistingFiles.append(metadata.ocId)
             }
         }
@@ -135,7 +131,7 @@ import Foundation
     
     @IBAction func buttonContinueTouch(_ sender: Any) {
         
-        for metadata in metadatasConflict {
+        for metadata in metadatasUploadInConflict {
             
             // new filename + num
             if metadatasConflictNewFiles.contains(metadata.ocId) && metadatasConflictAlreadyExistingFiles.contains(metadata.ocId) {
@@ -148,7 +144,7 @@ import Foundation
                 metadata.fileName = newFileName
                 metadata.fileNameView = newFileName
                 
-                metadatas.append(metadata)
+                metadatasNOConflict.append(metadata)
                 
                 // MOV
                 for metadataMOV in metadatasMOV {
@@ -172,7 +168,7 @@ import Foundation
             // overwrite
             } else if metadatasConflictNewFiles.contains(metadata.ocId) {
                 
-                metadatas.append(metadata)
+                metadatasNOConflict.append(metadata)
             
             // remove (MOV)
             } else if metadatasConflictAlreadyExistingFiles.contains(metadata.ocId) {
@@ -193,9 +189,11 @@ import Foundation
             }
         }
         
-        metadatas.append(contentsOf: metadatasMOV)
+        metadatasNOConflict.append(contentsOf: metadatasMOV)
         
-        delegate?.dismissCreateFormUploadConflict(metadatas: metadatas)
+        NCManageDatabase.sharedInstance.addMetadatas(metadatasNOConflict)
+        appDelegate.startLoadAutoDownloadUpload()
+        NCMainCommon.sharedInstance.reloadDatasource(ServerUrl: serverUrl, ocId: nil, action: Int32(k_action_NULL))
         
         dismiss(animated: true)
     }
@@ -206,7 +204,7 @@ import Foundation
 extension NCCreateFormUploadConflict: UITableViewDelegate {
     
     func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
-        if metadatasConflict.count == 1 {
+        if metadatasUploadInConflict.count == 1 {
             return 250
         } else {
             return 280
@@ -223,21 +221,14 @@ extension NCCreateFormUploadConflict: UITableViewDataSource {
     }
     
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
-        return metadatasConflict.count
+        return metadatasUploadInConflict.count
     }
     
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         
         if let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as? NCCreateFormUploadConflictCell {
             
-            let metadataNewFile = metadatasConflict[indexPath.row]
-            let fileNameExtension = (metadataNewFile.fileNameView as NSString).pathExtension.lowercased()
-            let fileNameWithoutExtension = (metadataNewFile.fileNameView as NSString).deletingPathExtension
-            var fileNameConflict = metadataNewFile.fileNameView
-
-            if fileNameExtension == "heic" && CCUtility.getFormatCompatibility() {
-                fileNameConflict = fileNameWithoutExtension + ".jpg"
-            }
+            let metadataNewFile = metadatasUploadInConflict[indexPath.row]
 
             cell.ocId = metadataNewFile.ocId
             cell.delegate = self
@@ -247,7 +238,7 @@ extension NCCreateFormUploadConflict: UITableViewDataSource {
 
             // -----> Already Existing File
             
-            guard let metadataAlreadyExists = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileNameView == %@", metadataNewFile.account, metadataNewFile.serverUrl, fileNameConflict)) else { return UITableViewCell() }
+            guard let metadataAlreadyExists = NCUtility.sharedInstance.getMetadataConflict(account: metadataNewFile.account, serverUrl: metadataNewFile.serverUrl, fileName: metadataNewFile.fileNameView) else { return UITableViewCell() }
             if FileManager().fileExists(atPath: CCUtility.getDirectoryProviderStorageIconOcId(metadataAlreadyExists.ocId, fileNameView: metadataAlreadyExists.fileNameView)) {
                 cell.imageAlreadyExistingFile.image =  UIImage(contentsOfFile: CCUtility.getDirectoryProviderStorageIconOcId(metadataAlreadyExists.ocId, fileNameView: metadataAlreadyExists.fileNameView))
             } else {
@@ -265,7 +256,6 @@ extension NCCreateFormUploadConflict: UITableViewDataSource {
                 cell.switchAlreadyExistingFile.isOn = false
             }
             
-            
             // -----> New File
             
             if metadataNewFile.iconName.count > 0 {
@@ -273,6 +263,7 @@ extension NCCreateFormUploadConflict: UITableViewDataSource {
             } else {
                 cell.imageNewFile.image = UIImage.init(named: "file")
             }
+            let filePathNewFile = CCUtility.getDirectoryProviderStorageOcId(metadataNewFile.ocId, fileNameView: metadataNewFile.fileNameView)!
             if metadataNewFile.assetLocalIdentifier.count > 0 {
                 
                 let result = PHAsset.fetchAssets(withLocalIdentifiers: [metadataNewFile.assetLocalIdentifier], options: nil)
@@ -284,7 +275,9 @@ extension NCCreateFormUploadConflict: UITableViewDataSource {
                     do {
                         if mediaType == PHAssetMediaType.image {
                             let data = try Data(contentsOf: url)
-                            cell.imageNewFile.image = UIImage(data: data)
+                            if let image = UIImage(data: data) {
+                                cell.imageNewFile.image = image
+                            }
                         }
                         
                         let fileDictionary = try FileManager.default.attributesOfItem(atPath: url.path)
@@ -301,7 +294,9 @@ extension NCCreateFormUploadConflict: UITableViewDataSource {
                             do {
                                 if mediaType == PHAssetMediaType.image {
                                     let data = try Data(contentsOf: url!)
-                                    cell.imageNewFile.image = UIImage(data: data)
+                                    if let image = UIImage(data: data) {
+                                        cell.imageNewFile.image = image
+                                    }
                                 }
                                 
                                 let fileDictionary = try FileManager.default.attributesOfItem(atPath: url!.path)
@@ -314,6 +309,23 @@ extension NCCreateFormUploadConflict: UITableViewDataSource {
                     }
                 }
                       
+            } else if FileManager().fileExists(atPath: filePathNewFile) {
+                
+                do {
+                    if metadataNewFile.typeFile == k_metadataTypeFile_image {
+                        let data = try Data(contentsOf: URL(fileURLWithPath: filePathNewFile))
+                        if let image = UIImage(data: data) {
+                            cell.imageNewFile.image = image
+                        }
+                    }
+                    
+                    let fileDictionary = try FileManager.default.attributesOfItem(atPath: filePathNewFile)
+                    let fileSize = fileDictionary[FileAttributeKey.size] as! Double
+                    
+                    cell.labelDetailNewFile.text = CCUtility.dateDiff(metadataNewFile.date as Date) + "\n" + CCUtility.transformedSize(fileSize)
+                    
+                } catch { print("Error: \(error)") }
+                
             } else {
                 CCUtility.dateDiff(metadataNewFile.date as Date)
             }
@@ -325,7 +337,7 @@ extension NCCreateFormUploadConflict: UITableViewDataSource {
             }
         
             // Hide switch if only one
-            if metadatasConflict.count == 1 {
+            if metadatasUploadInConflict.count == 1 {
                 cell.switchAlreadyExistingFile.isHidden = true
                 cell.switchNewFile.isHidden = true
             }
@@ -348,7 +360,7 @@ extension NCCreateFormUploadConflict: NCCreateFormUploadConflictCellDelegate {
         if isOn {
             metadatasConflictNewFiles.append(ocId)
         }
-        if metadatasConflictNewFiles.count == metadatasConflict.count {
+        if metadatasConflictNewFiles.count == metadatasUploadInConflict.count {
             switchNewFiles.isOn = true
         } else {
             switchNewFiles.isOn = false
@@ -364,7 +376,7 @@ extension NCCreateFormUploadConflict: NCCreateFormUploadConflictCellDelegate {
         if isOn {
             metadatasConflictAlreadyExistingFiles.append(ocId)
         }
-        if metadatasConflictAlreadyExistingFiles.count == metadatasConflict.count {
+        if metadatasConflictAlreadyExistingFiles.count == metadatasUploadInConflict.count {
             switchAlreadyExistingFiles.isOn = true
         } else {
             switchAlreadyExistingFiles.isOn = false
@@ -376,7 +388,7 @@ extension NCCreateFormUploadConflict: NCCreateFormUploadConflictCellDelegate {
     func canContinue() {
         var result = true
         
-        for metadata in metadatasConflict {
+        for metadata in metadatasUploadInConflict {
             if !metadatasConflictNewFiles.contains(metadata.ocId) && !metadatasConflictAlreadyExistingFiles.contains(metadata.ocId) {
                 result = false
             }