Browse Source

chunk size

Marino Faggiana 1 year ago
parent
commit
ae5a647cd8

+ 1 - 1
Brand/Database.swift

@@ -26,4 +26,4 @@ import Foundation
 // Database Realm
 //
 let databaseName                    = "nextcloud.realm"
-let databaseSchemaVersion: UInt64   = 303
+let databaseSchemaVersion: UInt64   = 304

+ 10 - 3
Share/NCShareExtension.swift

@@ -65,7 +65,6 @@ class NCShareExtension: UIViewController {
     var autoUploadDirectory = ""
     let refreshControl = UIRefreshControl()
     var activeAccount: tableAccount!
-    let chunckSize = CCUtility.getChunkSize() * 1000000
     var progress: CGFloat = 0
     var counterUploaded: Int = 0
     var uploadErrors: [tableMetadata] = []
@@ -337,8 +336,16 @@ extension NCShareExtension {
         metadata.contentType = results.mimeType
         metadata.iconName = results.iconName
         metadata.classFile = results.classFile
-        // CHUNCK
-        metadata.chunk = chunckSize != 0 && metadata.size > chunckSize
+        // CHUNK
+        var chunkSize = NCGlobal.shared.chunkSizeMBCellular
+        if NCNetworking.shared.networkReachability == NKCommon.TypeReachability.reachableEthernetOrWiFi {
+            chunkSize = NCGlobal.shared.chunkSizeMBEthernetOrWiFi
+        }
+        if metadata.size > chunkSize {
+            metadata.chunk = chunkSize
+        } else {
+            metadata.chunk = 0 
+        }
         // E2EE
         metadata.e2eEncrypted = metadata.isDirectoryE2EE
 

+ 2 - 2
iOSClient/Data/NCManageDatabase+Metadata.swift

@@ -38,7 +38,7 @@ class tableMetadata: Object, NCUserBaseUrl {
     @objc dynamic var account = ""
     @objc dynamic var assetLocalIdentifier = ""
     @objc dynamic var checksums = ""
-    @objc dynamic var chunk: Bool = false
+    @objc dynamic var chunk: Int = 0
     @objc dynamic var classFile = ""
     @objc dynamic var commentsUnread: Bool = false
     @objc dynamic var contentType = ""
@@ -220,7 +220,7 @@ extension tableMetadata {
     }
 
     var isTransferInForeground: Bool {
-        (status > 0 && (chunk || e2eEncrypted))
+        (status > 0 && (chunk > 0 || e2eEncrypted))
     }
 
     var isDownload: Bool {

+ 2 - 1
iOSClient/Data/NCManageDatabase.swift

@@ -98,8 +98,9 @@ class NCManageDatabase: NSObject {
                         migration.deleteData(forType: tableVideo.className())
                     }
 
-                    if oldSchemaVersion < 303 {
+                    if oldSchemaVersion < 304 {
                         migration.deleteData(forType: tableChunk.className())
+                        migration.deleteData(forType: tableMetadata.className())
                     }
 
                 }, shouldCompactOnLaunch: { totalBytes, usedBytes in

+ 2 - 2
iOSClient/Main/Collection Common/NCCollectionViewCommon.swift

@@ -563,11 +563,11 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
               let ocId = userInfo["ocId"] as? String
         else { return }
 
-        let chunk: Bool = userInfo["chunk"] as? Bool ?? false
+        let chunk: Int = userInfo["chunk"] as? Int ?? 0
         let e2eEncrypted: Bool = userInfo["e2eEncrypted"] as? Bool ?? false
 
         // Header Transfer
-        if headerMenuTransferView && (chunk || e2eEncrypted) {
+        if headerMenuTransferView && (chunk > 0 || e2eEncrypted) {
             if NCNetworking.shared.transferInForegorund?.ocId == ocId {
                 NCNetworking.shared.transferInForegorund?.progress = progressNumber.floatValue
             } else {

+ 4 - 0
iOSClient/NCGlobal.swift

@@ -131,6 +131,10 @@ class NCGlobal: NSObject {
     let e2eePassphraseTest                          = "more over television factory tendency independence international intellectual impress interest sentence pony"
     @objc let e2eeReadVersions                      = ["1.1", "1.2"]
 
+    // CHUNK
+    let chunkSizeMBCellular                         = 10000000
+    let chunkSizeMBEthernetOrWiFi                   = 100000000
+
     // Video
     //
     let maxHTTPCache: Int64                         = 10000000000   // 10 GB

+ 1 - 1
iOSClient/Networking/E2EE/NCNetworkingE2EEUpload.swift

@@ -181,7 +181,7 @@ class NCNetworkingE2EEUpload: NSObject {
 
     private func sendFile(metadata: tableMetadata, e2eToken: String, uploadE2EEDelegate: uploadE2EEDelegate? = nil) async -> (ocId: String?, etag: String?, date: NSDate? ,afError: AFError?, error: NKError) {
 
-        if metadata.chunk {
+        if metadata.chunk > 0 {
 
             return await withCheckedContinuation({ continuation in
                 NCNetworking.shared.uploadChunkFile(metadata: metadata, withUploadComplete: false, addCustomHeaders: ["e2e-token": e2eToken]) {

+ 9 - 4
iOSClient/Networking/NCNetworking.swift

@@ -408,7 +408,7 @@ class NCNetworking: NSObject, NKCommonDelegate {
                 completion: @escaping (_ error: NKError) -> () = { error in }) {
 
         let metadata = tableMetadata.init(value: metadata)
-        NextcloudKit.shared.nkCommonInstance.writeLog("[INFO] Upload file \(metadata.fileNameView) with Identifier \(metadata.assetLocalIdentifier) with size \(metadata.size) [CHUNCK \(metadata.chunk), E2EE \(metadata.isDirectoryE2EE)]")
+        NextcloudKit.shared.nkCommonInstance.writeLog("[INFO] Upload file \(metadata.fileNameView) with Identifier \(metadata.assetLocalIdentifier) with size \(metadata.size) [CHUNK \(metadata.chunk), E2EE \(metadata.isDirectoryE2EE)]")
 
         if metadata.isDirectoryE2EE {
 #if !EXTENSION_FILE_PROVIDER_EXTENSION && !EXTENSION_WIDGET
@@ -417,7 +417,7 @@ class NCNetworking: NSObject, NKCommonDelegate {
                 completion(error)
             }
 #endif
-        } else if metadata.chunk {
+        } else if metadata.chunk > 0 {
             uploadChunkFile(metadata: metadata, start: start, progressHandler: progressHandler) { _, _, _, error in
                 completion(error)
             }
@@ -495,6 +495,11 @@ class NCNetworking: NSObject, NKCommonDelegate {
         let filesChunk = NCManageDatabase.shared.getChunks(account: metadata.account, ocId: metadata.ocId)
         var uploadTask: URLSessionTask?
 
+        var chunkSize = NCGlobal.shared.chunkSizeMBCellular
+        if NCNetworking.shared.networkReachability == NKCommon.TypeReachability.reachableEthernetOrWiFi {
+            chunkSize = NCGlobal.shared.chunkSizeMBEthernetOrWiFi
+        }
+
         NextcloudKit.shared.uploadChunk(directory: directory,
                                         fileName: metadata.fileName,
                                         date: metadata.date as Date,
@@ -502,7 +507,7 @@ class NCNetworking: NSObject, NKCommonDelegate {
                                         serverUrl: metadata.serverUrl,
                                         chunkFolder: chunkFolder,
                                         filesChunk: filesChunk,
-                                        chunkSizeInMB: 10,
+                                        chunkSize: chunkSize,
                                         addCustomHeaders: addCustomHeaders) { filesChunk in
 
             start()
@@ -782,7 +787,7 @@ class NCNetworking: NSObject, NKCommonDelegate {
             return completion()
         }
 
-        if metadata.session == NextcloudKit.shared.nkCommonInstance.sessionIdentifierUpload || metadata.chunk {
+        if metadata.session == NextcloudKit.shared.nkCommonInstance.sessionIdentifierUpload || metadata.chunk > 0 {
 
             CCUtility.removeFile(atPath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId))
             if let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView),

+ 3 - 3
iOSClient/Networking/NCNetworkingProcessUpload.swift

@@ -124,7 +124,7 @@ class NCNetworkingProcessUpload: NSObject {
                 }
             }
             // CHUNK
-            if metadatasUpload.filter({ $0.chunk }).count > 0 {
+            if metadatasUpload.filter({ $0.chunk > 0 }).count > 0 {
                 self.pauseProcess = false
                 return completition(counterUpload)
             }
@@ -168,13 +168,13 @@ class NCNetworkingProcessUpload: NSObject {
                                     continue
                                 }
 
-                                if applicationState != .active && (isInDirectoryE2EE || metadata.chunk) {
+                                if applicationState != .active && (isInDirectoryE2EE || metadata.chunk > 0) {
                                     continue
                                 }
 
                                 if let metadata = NCManageDatabase.shared.setMetadataStatus(ocId: metadata.ocId, status: NCGlobal.shared.metadataStatusInUpload) {
                                     NCNetworking.shared.upload(metadata: metadata)
-                                    if isInDirectoryE2EE || metadata.chunk {
+                                    if isInDirectoryE2EE || metadata.chunk > 0 {
                                         maxConcurrentOperationUpload = 1
                                     }
                                     counterUpload += 1

+ 2 - 25
iOSClient/Settings/CCAdvanced.m

@@ -101,24 +101,6 @@
         [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"];
         [section addFormRow:row];
     }
-    
-    // Section : Chunk --------------------------------------------------------------
-
-    section = [XLFormSectionDescriptor formSection];
-    [form addFormSection:section];
-    section.footerTitle = NSLocalizedString(@"_chunk_footer_title_", nil);
-    
-    row = [XLFormRowDescriptor formRowDescriptorWithTag:@"chunk" rowType:XLFormRowDescriptorTypeStepCounter title:NSLocalizedString(@"_chunk_size_mb_", nil)];
-    row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor;
-    row.value = [NSString stringWithFormat:@"%ld", CCUtility.getChunkSize];
-    [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"];
-    [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"];
-    [row.cellConfigAtConfigure setObject:@YES forKey:@"stepControl.wraps"];
-
-    [row.cellConfigAtConfigure setObject:@10 forKey:@"stepControl.stepValue"];
-    [row.cellConfigAtConfigure setObject:@0 forKey:@"stepControl.minimumValue"];
-    [row.cellConfigAtConfigure setObject:@100 forKey:@"stepControl.maximumValue"];
-    [section addFormRow:row];
 
     // Section : Privacy --------------------------------------------------------------
 
@@ -373,12 +355,7 @@
         [CCUtility setLogLevel:levelLog];
         [[[NextcloudKit shared] nkCommonInstance] setLevelLog:levelLog];
     }
-    
-    if ([rowDescriptor.tag isEqualToString:@"chunk"]) {
-        NSInteger chunkSize = [[rowDescriptor.value valueData] intValue];
-        [CCUtility setChunkSize:chunkSize];
-    }
-    
+
     if ([rowDescriptor.tag isEqualToString:@"deleteoldfiles"]) {
         
         NSInteger days = [[rowDescriptor.value valueData] intValue];
@@ -502,7 +479,7 @@
 
 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
     
-    if (indexPath.section == 5 && indexPath.row == 2) {
+    if (indexPath.section == 4 && indexPath.row == 2) {
         return 80;
     } else {
         return NCGlobal.shared.heightCellSettings;

+ 0 - 3
iOSClient/Utility/CCUtility.h

@@ -169,9 +169,6 @@
 + (BOOL)getAccountRequest;
 + (void)setAccountRequest:(BOOL)set;
 
-+ (NSInteger)getChunkSize;
-+ (void)setChunkSize:(NSInteger)size;
-
 + (NSInteger)getCleanUpDay;
 + (void)setCleanUpDay:(NSInteger)days;
 

+ 0 - 22
iOSClient/Utility/CCUtility.m

@@ -667,28 +667,6 @@
     [UICKeyChainStore setString:sSet forKey:@"accountRequest" service:NCGlobal.shared.serviceShareKeyChain];
 }
 
-/// In megabytes (MB)
-+ (NSInteger)getChunkSize
-{
-    NSString *size = [UICKeyChainStore stringForKey:@"chunkSize" service:NCGlobal.shared.serviceShareKeyChain];
-    NSInteger sizeInt = [size integerValue];
-
-    if (size == nil || sizeInt < 10) {
-        return 0;
-    } else {
-        return [size integerValue];
-    }
-}
-
-/// In megabytes (MB)
-+ (void)setChunkSize:(NSInteger)size
-{
-    if (size < 10) size = 0;
-
-    NSString *sizeString = [@(size) stringValue];
-    [UICKeyChainStore setString:sizeString forKey:@"chunkSize" service:NCGlobal.shared.serviceShareKeyChain];
-}
-
 + (NSInteger)getCleanUpDay
 {
     NSString *size = [UICKeyChainStore stringForKey:@"cleanUpDay" service:NCGlobal.shared.serviceShareKeyChain];

+ 30 - 9
iOSClient/Utility/NCCameraRoll.swift

@@ -29,7 +29,10 @@ class NCCameraRoll: NSObject {
 
     func extractCameraRoll(from metadata: tableMetadata, viewController: UIViewController?, hud: JGProgressHUD, completition: @escaping (_ metadatas: [tableMetadata]) -> Void) {
 
-        let chunckSize = CCUtility.getChunkSize() * 1000000
+        var chunkSize = NCGlobal.shared.chunkSizeMBCellular
+        if NCNetworking.shared.networkReachability == NKCommon.TypeReachability.reachableEthernetOrWiFi {
+            chunkSize = NCGlobal.shared.chunkSizeMBEthernetOrWiFi
+        }
         var metadatas: [tableMetadata] = []
         let metadataSource = tableMetadata.init(value: metadata)
 
@@ -47,9 +50,13 @@ class NCCameraRoll: NSObject {
             if let date = NCUtilityFileSystem.shared.getFileModificationDate(filePath: filePath) {
                 metadataSource.date = date
             }
-            metadataSource.chunk = chunckSize != 0 && metadata.size > chunckSize
+            if metadata.size > chunkSize {
+                metadata.chunk = chunkSize
+            } else {
+                metadata.chunk = 0
+            }
             metadataSource.e2eEncrypted = metadata.isDirectoryE2EE
-            if metadataSource.chunk || metadataSource.e2eEncrypted {
+            if metadataSource.chunk > 0 || metadataSource.e2eEncrypted {
                 metadataSource.session = NextcloudKit.shared.nkCommonInstance.sessionIdentifierUpload
             }
             metadataSource.isExtractFile = true
@@ -89,8 +96,11 @@ class NCCameraRoll: NSObject {
 
         var fileNamePath: String?
         let metadata = tableMetadata.init(value: metadata)
-        let chunckSize = CCUtility.getChunkSize() * 1000000
         var compatibilityFormat: Bool = false
+        var chunkSize = NCGlobal.shared.chunkSizeMBCellular
+        if NCNetworking.shared.networkReachability == NKCommon.TypeReachability.reachableEthernetOrWiFi {
+            chunkSize = NCGlobal.shared.chunkSizeMBEthernetOrWiFi
+        }
 
         func callCompletionWithError(_ error: Bool = true) {
             if error {
@@ -98,9 +108,13 @@ class NCCameraRoll: NSObject {
             } else {
                 var metadataReturn = metadata
                 if modifyMetadataForUpload {
-                    metadata.chunk = chunckSize != 0 && metadata.size > chunckSize
+                    if metadata.size > chunkSize {
+                        metadata.chunk = chunkSize
+                    } else {
+                        metadata.chunk = 0
+                    }
                     metadata.e2eEncrypted = metadata.isDirectoryE2EE
-                    if metadata.chunk || metadata.e2eEncrypted {
+                    if metadata.chunk > 0 || metadata.e2eEncrypted {
                         metadata.session = NextcloudKit.shared.nkCommonInstance.sessionIdentifierUpload
                     }
                     metadata.isExtractFile = true
@@ -234,10 +248,13 @@ class NCCameraRoll: NSObject {
         let options = PHLivePhotoRequestOptions()
         options.deliveryMode = PHImageRequestOptionsDeliveryMode.fastFormat
         options.isNetworkAccessAllowed = true
-        let chunckSize = CCUtility.getChunkSize() * 1000000
         let ocId = NSUUID().uuidString
         let fileName = (metadata.fileName as NSString).deletingPathExtension + ".mov"
         let fileNamePath = CCUtility.getDirectoryProviderStorageOcId(ocId, fileNameView: fileName)!
+        var chunkSize = NCGlobal.shared.chunkSizeMBCellular
+        if NCNetworking.shared.networkReachability == NKCommon.TypeReachability.reachableEthernetOrWiFi {
+            chunkSize = NCGlobal.shared.chunkSizeMBEthernetOrWiFi
+        }
 
         PHImageManager.default().requestLivePhoto(for: asset, targetSize: UIScreen.main.bounds.size, contentMode: PHImageContentMode.default, options: options) { livePhoto, _ in
             guard let livePhoto = livePhoto else { return completion(nil) }
@@ -267,9 +284,13 @@ class NCCameraRoll: NSObject {
                 metadataLivePhoto.sessionSelector = metadata.sessionSelector
                 metadataLivePhoto.size = NCUtilityFileSystem.shared.getFileSize(filePath: fileNamePath)
                 metadataLivePhoto.status = metadata.status
-                metadataLivePhoto.chunk = chunckSize != 0 && metadata.size > chunckSize
+                if metadata.size > chunkSize {
+                    metadataLivePhoto.chunk = chunkSize
+                } else {
+                    metadataLivePhoto.chunk = 0
+                }
                 metadataLivePhoto.e2eEncrypted = metadata.isDirectoryE2EE
-                if metadataLivePhoto.chunk || metadataLivePhoto.e2eEncrypted {
+                if metadataLivePhoto.chunk > 0 || metadataLivePhoto.e2eEncrypted {
                     metadataLivePhoto.session = NextcloudKit.shared.nkCommonInstance.sessionIdentifierUpload
                 }
                 metadataLivePhoto.creationDate = metadata.creationDate