Browse Source

add metadataNet.directoryID on getQueueUpload

Marino Faggiana 6 năm trước cách đây
mục cha
commit
c18daec86c

+ 29 - 31
PickerFileProvider/FileProvider.swift

@@ -98,45 +98,43 @@ class FileProvider: NSFileProviderExtension {
                                 let etag = (fields["OC-ETag"] as! String).replacingOccurrences(of: "\"", with: "")
                                 let fileID = fields["OC-FileId"] as! String
                                 
-                                if let directoryID = NCManageDatabase.sharedInstance.getDirectoryID(uploadMetadataNet!.serverUrl) {
-                                    if let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileName = %@ AND directoryID = %@", account, uploadMetadataNet!.fileName, directoryID)) {
+                                if let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileName = %@ AND directoryID = %@", account, uploadMetadataNet!.fileName, uploadMetadataNet!.directoryID)) {
                                         
-                                        let prevFileID = metadata.fileID
+                                    let prevFileID = metadata.fileID
                                         
-                                        metadata.etag = etag
-                                        metadata.fileID = fileID
-                                        do {
-                                            let attr = try FileManager.default.attributesOfItem(atPath: directoryUser + "/" + metadataNetQueue!.fileName)
-                                            metadata.size = attr[FileAttributeKey.size] as! Double
-                                        } catch { }
-                                        metadata.session = ""
-                                        metadata.status = Double(k_metadataStatusNormal)
+                                    metadata.etag = etag
+                                    metadata.fileID = fileID
+                                    do {
+                                        let attr = try FileManager.default.attributesOfItem(atPath: directoryUser + "/" + metadataNetQueue!.fileName)
+                                        metadata.size = attr[FileAttributeKey.size] as! Double
+                                    } catch { }
+                                    metadata.session = ""
+                                    metadata.status = Double(k_metadataStatusNormal)
                                         
-                                        NCManageDatabase.sharedInstance.addLocalFile(metadata: metadata)
-                                        NCManageDatabase.sharedInstance.setLocalFile(fileID: fileID, date: nil, exifDate: nil, exifLatitude: nil, exifLongitude: nil, fileName: nil, etag: etag, etagFPE: etag)
-                                        let metadataDB = NCManageDatabase.sharedInstance.addMetadata(metadata)
-                                        _ = self.copyFile(metadataNetQueue!.path, toPath: directoryUser + "/" + fileID)
+                                    NCManageDatabase.sharedInstance.addLocalFile(metadata: metadata)
+                                    NCManageDatabase.sharedInstance.setLocalFile(fileID: fileID, date: nil, exifDate: nil, exifLatitude: nil, exifLongitude: nil, fileName: nil, etag: etag, etagFPE: etag)
+                                    let metadataDB = NCManageDatabase.sharedInstance.addMetadata(metadata)
+                                    _ = self.copyFile(metadataNetQueue!.path, toPath: directoryUser + "/" + fileID)
                                         
-                                        // if prevFileID is a k_uploadSessionID remove
-                                        if prevFileID.contains(k_uploadSessionID) {
+                                    // if prevFileID is a k_uploadSessionID remove
+                                    if prevFileID.contains(k_uploadSessionID) {
                                         
-                                            // remove tempID
-                                            NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, prevFileID), clearDateReadDirectoryID: nil)
-                                            NCManageDatabase.sharedInstance.deleteLocalFile(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, prevFileID))
+                                        // remove tempID
+                                        NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, prevFileID), clearDateReadDirectoryID: nil)
+                                        NCManageDatabase.sharedInstance.deleteLocalFile(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, prevFileID))
                                         
-                                            // rename Directory : <base storage directory>/prevFileID/<item file name> to <base storage directory>/fileID/<item file name>
-                                            do {
-                                                let atPath = fileProviderStorageURL!.path + "/" + prevFileID
-                                                let toPath = fileProviderStorageURL!.path + "/" + fileID
-                                                try FileManager.default.moveItem(atPath: atPath, toPath: toPath)
-                                            } catch let error as NSError {
-                                                NSLog("Unable to create directory \(error.debugDescription)")
-                                            }
+                                        // rename Directory : <base storage directory>/prevFileID/<item file name> to <base storage directory>/fileID/<item file name>
+                                        do {
+                                            let atPath = fileProviderStorageURL!.path + "/" + prevFileID
+                                            let toPath = fileProviderStorageURL!.path + "/" + fileID
+                                            try FileManager.default.moveItem(atPath: atPath, toPath: toPath)
+                                        } catch let error as NSError {
+                                            NSLog("Unable to create directory \(error.debugDescription)")
                                         }
-                                        
-                                        let item = FileProviderItem(metadata: metadataDB!, serverUrl: uploadMetadataNet!.serverUrl)
-                                        self.refreshEnumerator(identifier: item.itemIdentifier, serverUrl: uploadMetadataNet!.serverUrl)
                                     }
+                                        
+                                    let item = FileProviderItem(metadata: metadataDB!, serverUrl: uploadMetadataNet!.serverUrl)
+                                    self.refreshEnumerator(identifier: item.itemIdentifier, serverUrl: uploadMetadataNet!.serverUrl)
                                 }
                                 
                             } else {

+ 10 - 5
iOSClient/AppDelegate.m

@@ -1504,11 +1504,16 @@
                 
                 if ([[UIApplication sharedApplication] applicationState] != UIApplicationStateBackground) {
                     
-                    metadataNet = [[NCManageDatabase sharedInstance] getQueueUploadLockWithSelector:selectorUploadFile];
-                    NSString *toPath = [NSString stringWithFormat:@"%@/%@", self.directoryUser, metadataNet.fileName];
-                    [CCUtility copyFileAtPath:metadataNet.path toPath:toPath];
-                    [[CCNetworking sharedNetworking] uploadFile:metadataNet.fileName serverUrl:metadataNet.serverUrl assetLocalIdentifier:metadataNet.assetLocalIdentifier session:metadataNet.session taskStatus:k_taskStatusResume selector:metadataNet.selector selectorPost:metadataNet.selectorPost errorCode:0 delegate:nil];
-                    counterNewUpload++;
+                    tableMetadata *metadata = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND fileName = %@ AND directoryID = %@ AND session != %@", self.activeAccount, metadataNet.fileName, metadataNet.directoryID, k_upload_session_extension]];
+                    
+                    if (metadata == nil ) {
+                        metadataNet = [[NCManageDatabase sharedInstance] getQueueUploadLockWithSelector:selectorUploadFile];
+                        NSString *toPath = [NSString stringWithFormat:@"%@/%@", self.directoryUser, metadataNet.fileName];
+                    
+                        [CCUtility copyFileAtPath:metadataNet.path toPath:toPath];
+                        [[CCNetworking sharedNetworking] uploadFile:metadataNet.fileName serverUrl:metadataNet.serverUrl assetLocalIdentifier:metadataNet.assetLocalIdentifier session:metadataNet.session taskStatus:k_taskStatusResume selector:metadataNet.selector selectorPost:metadataNet.selectorPost errorCode:0 delegate:nil];
+                        counterNewUpload++;
+                    }
                 }
             }
         }

+ 2 - 0
iOSClient/Database/NCManageDatabase.swift

@@ -2321,6 +2321,7 @@ class NCManageDatabase: NSObject {
         
         metadataNet.account = result.account
         metadataNet.assetLocalIdentifier = result.assetLocalIdentifier
+        metadataNet.directoryID = self.getDirectoryID(result.serverUrl)
         metadataNet.errorCode = result.errorCode
         metadataNet.fileName = result.fileName
         metadataNet.path = result.path
@@ -2397,6 +2398,7 @@ class NCManageDatabase: NSObject {
         metadataNet.account = result!.account
         metadataNet.assetLocalIdentifier = result!.assetLocalIdentifier
         metadataNet.errorCode = result!.errorCode
+        metadataNet.directoryID = self.getDirectoryID(result!.serverUrl)
         metadataNet.fileName = result!.fileName
         metadataNet.path = result!.path
         metadataNet.selector = result!.selector