|
@@ -261,54 +261,79 @@ class NCOperationSynchronization: ConcurrentOperation {
|
|
|
} else {
|
|
|
if metadata.directory {
|
|
|
|
|
|
- let serverUrlFileName = metadata.serverUrl + "/" + metadata.fileName
|
|
|
-
|
|
|
- NCCommunication.shared.readFileOrFolder(serverUrlFileName: serverUrlFileName, depth: "1", showHiddenFiles: CCUtility.getShowHiddenFiles()) { (account, files, responseData, errorCode, errorDescription) in
|
|
|
-
|
|
|
- if errorCode == 0 {
|
|
|
-
|
|
|
- NCManageDatabase.sharedInstance.convertNCCommunicationFilesToMetadatas(files, useMetadataFolder: true, account: account) { (metadataFolder, metadatasFolder, metadatas) in
|
|
|
+ let serverUrl = metadata.serverUrl + "/" + metadata.fileName
|
|
|
+ let directory = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", metadata.account, serverUrl))
|
|
|
+
|
|
|
+ NCCommunication.shared.readFileOrFolder(serverUrlFileName: serverUrl, depth: "0", showHiddenFiles: CCUtility.getShowHiddenFiles()) { (account, files, responseData, errorCode, errorDescription) in
|
|
|
+
|
|
|
+ if (errorCode == 0) && (directory?.etag != files.first?.etag || directory?.synchronized == false) {
|
|
|
+
|
|
|
+ NCCommunication.shared.readFileOrFolder(serverUrlFileName: serverUrl, depth: "1", showHiddenFiles: CCUtility.getShowHiddenFiles()) { (account, files, responseData, errorCode, errorDescription) in
|
|
|
|
|
|
- let metadatasResult = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND status == %d", account, serverUrlFileName, k_metadataStatusNormal))
|
|
|
+ if errorCode == 0 {
|
|
|
|
|
|
- if self.selector == selectorDownloadAllFile {
|
|
|
-
|
|
|
- NCManageDatabase.sharedInstance.updateMetadatas(metadatas, metadatasResult: metadatasResult)
|
|
|
+ NCManageDatabase.sharedInstance.convertNCCommunicationFilesToMetadatas(files, useMetadataFolder: true, account: account) { (metadataFolder, metadatasFolder, metadatas) in
|
|
|
+
|
|
|
+ let metadatasResult = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND status == %d", account, serverUrl, k_metadataStatusNormal))
|
|
|
+
|
|
|
+ if self.selector == selectorDownloadAllFile {
|
|
|
+
|
|
|
+ NCManageDatabase.sharedInstance.updateMetadatas(metadatas, metadatasResult: metadatasResult)
|
|
|
|
|
|
- for metadata in metadatas {
|
|
|
- if metadata.directory {
|
|
|
- NCOperationQueue.shared.synchronizationMetadata(metadata, selector: self.selector)
|
|
|
+ for metadata in metadatas {
|
|
|
+ if metadata.directory {
|
|
|
+ NCOperationQueue.shared.synchronizationMetadata(metadata, selector: self.selector)
|
|
|
+ } else {
|
|
|
+ let localFile = NCManageDatabase.sharedInstance.getTableLocalFile(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
|
|
|
+ if localFile == nil || localFile?.etag != metadata.etag {
|
|
|
+ NCOperationQueue.shared.download(metadata: metadata, selector: self.selector, setFavorite: false)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
} else {
|
|
|
- let localFile = NCManageDatabase.sharedInstance.getTableLocalFile(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
|
|
|
- if localFile == nil || localFile?.etag != metadata.etag {
|
|
|
+
|
|
|
+ let metadatasChanged = NCManageDatabase.sharedInstance.updateMetadatas(metadatas, metadatasResult: metadatasResult, addExistsInLocal: self.download, addCompareEtagLocal: true, addDirectorySynchronized: true)
|
|
|
+
|
|
|
+ for metadata in metadatasChanged.metadatasUpdate {
|
|
|
+ if metadata.directory {
|
|
|
+ NCOperationQueue.shared.synchronizationMetadata(metadata, selector: self.selector)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for metadata in metadatasChanged.metadatasLocalUpdate {
|
|
|
NCOperationQueue.shared.download(metadata: metadata, selector: self.selector, setFavorite: false)
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // Update etag directory
|
|
|
+ NCManageDatabase.sharedInstance.addDirectory(encrypted: metadataFolder.e2eEncrypted, favorite: metadataFolder.favorite, ocId: metadataFolder.ocId, fileId: metadataFolder.fileId, etag: metadataFolder.etag, permissions: metadataFolder.permissions, serverUrl: serverUrl, richWorkspace: metadataFolder.richWorkspace, account: metadataFolder.account)
|
|
|
+ // Update
|
|
|
+ NCManageDatabase.sharedInstance.setDirectory(synchronized: true, serverUrl: serverUrl, account: account)
|
|
|
}
|
|
|
-
|
|
|
- } else {
|
|
|
|
|
|
- let metadatasChanged = NCManageDatabase.sharedInstance.updateMetadatas(metadatas, metadatasResult: metadatasResult, addExistsInLocal: self.download, addCompareEtagLocal: true)
|
|
|
-
|
|
|
- for metadata in metadatasChanged.metadatasUpdate {
|
|
|
- if metadata.directory {
|
|
|
- NCOperationQueue.shared.synchronizationMetadata(metadata, selector: self.selector)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- for metadata in metadatasChanged.metadatasLocalUpdate {
|
|
|
- NCOperationQueue.shared.download(metadata: metadata, selector: self.selector, setFavorite: false)
|
|
|
- }
|
|
|
+ } else if errorCode == k_CCErrorResourceNotFound && self.metadata.directory {
|
|
|
+ NCManageDatabase.sharedInstance.deleteDirectoryAndSubDirectory(serverUrl: self.metadata.serverUrl, account: self.metadata.account)
|
|
|
+ }
|
|
|
+
|
|
|
+ self.finish()
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ let metadatas = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND directory == true", account, serverUrl))
|
|
|
+ for metadata in metadatas {
|
|
|
+ let serverUrl = metadata.serverUrl + "/" + metadata.fileName
|
|
|
+ let directory = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", metadata.account, serverUrl))
|
|
|
+ if directory?.synchronized == false {
|
|
|
+ NCOperationQueue.shared.synchronizationMetadata(metadata, selector: self.selector)
|
|
|
}
|
|
|
- // Update etag directory
|
|
|
- NCManageDatabase.sharedInstance.addDirectory(encrypted: metadataFolder.e2eEncrypted, favorite: metadataFolder.favorite, ocId: metadataFolder.ocId, fileId: metadataFolder.fileId, etag: metadataFolder.etag, permissions: metadataFolder.permissions, serverUrl: serverUrlFileName, richWorkspace: metadataFolder.richWorkspace, account: metadataFolder.account)
|
|
|
}
|
|
|
-
|
|
|
- } else if errorCode == k_CCErrorResourceNotFound && self.metadata.directory {
|
|
|
- NCManageDatabase.sharedInstance.deleteDirectoryAndSubDirectory(serverUrl: self.metadata.serverUrl, account: self.metadata.account)
|
|
|
+
|
|
|
+ self.finish()
|
|
|
}
|
|
|
- self.finish()
|
|
|
}
|
|
|
+
|
|
|
} else {
|
|
|
if self.download {
|
|
|
let localFile = NCManageDatabase.sharedInstance.getTableLocalFile(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
|