|
@@ -67,7 +67,6 @@ class OfflineSyncWork constructor(
|
|
return Result.success()
|
|
return Result.success()
|
|
}
|
|
}
|
|
|
|
|
|
- @Suppress("ReturnCount", "ComplexMethod") // legacy code
|
|
|
|
private fun recursive(folder: File, storageManager: FileDataStorageManager, user: User) {
|
|
private fun recursive(folder: File, storageManager: FileDataStorageManager, user: User) {
|
|
val downloadFolder = FileStorageUtils.getSavePath(user.accountName)
|
|
val downloadFolder = FileStorageUtils.getSavePath(user.accountName)
|
|
val folderName = folder.absolutePath.replaceFirst(downloadFolder.toRegex(), "") + OCFile.PATH_SEPARATOR
|
|
val folderName = folder.absolutePath.replaceFirst(downloadFolder.toRegex(), "") + OCFile.PATH_SEPARATOR
|
|
@@ -76,35 +75,9 @@ class OfflineSyncWork constructor(
|
|
if (folder.listFiles() == null) {
|
|
if (folder.listFiles() == null) {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
- val ocFolder = storageManager.getFileByPath(folderName)
|
|
|
|
- Log_OC.d(TAG, folderName + ": currentEtag: " + ocFolder.etag)
|
|
|
|
- // check for etag change, if false, skip
|
|
|
|
- val checkEtagOperation = CheckEtagRemoteOperation(
|
|
|
|
- ocFolder.remotePath,
|
|
|
|
- ocFolder.etagOnServer
|
|
|
|
- )
|
|
|
|
- val result = checkEtagOperation.execute(user, context)
|
|
|
|
- when (result.code) {
|
|
|
|
- ResultCode.ETAG_UNCHANGED -> {
|
|
|
|
- Log_OC.d(TAG, "$folderName: eTag unchanged")
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- ResultCode.FILE_NOT_FOUND -> {
|
|
|
|
- val removalResult = storageManager.removeFolder(ocFolder, true, true)
|
|
|
|
- if (!removalResult) {
|
|
|
|
- Log_OC.e(TAG, "removal of " + ocFolder.storagePath + " failed: file not found")
|
|
|
|
- }
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- ResultCode.ETAG_CHANGED -> Log_OC.d(TAG, "$folderName: eTag changed")
|
|
|
|
- else -> {
|
|
|
|
- if (connectivityService.isInternetWalled) {
|
|
|
|
- Log_OC.d(TAG, "No connectivity, skipping sync")
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- Log_OC.d(TAG, "$folderName: eTag changed")
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
+ val updatedEtag = checkEtagChanged(folderName, storageManager, user) ?: return
|
|
|
|
+
|
|
// iterate over downloaded files
|
|
// iterate over downloaded files
|
|
val files = folder.listFiles { obj: File -> obj.isFile }
|
|
val files = folder.listFiles { obj: File -> obj.isFile }
|
|
if (files != null) {
|
|
if (files != null) {
|
|
@@ -130,11 +103,49 @@ class OfflineSyncWork constructor(
|
|
// update eTag
|
|
// update eTag
|
|
@Suppress("TooGenericExceptionCaught") // legacy code
|
|
@Suppress("TooGenericExceptionCaught") // legacy code
|
|
try {
|
|
try {
|
|
- val updatedEtag = result.data[0] as String
|
|
|
|
|
|
+ val ocFolder = storageManager.getFileByPath(folderName)
|
|
ocFolder.etagOnServer = updatedEtag
|
|
ocFolder.etagOnServer = updatedEtag
|
|
storageManager.saveFile(ocFolder)
|
|
storageManager.saveFile(ocFolder)
|
|
} catch (e: Exception) {
|
|
} catch (e: Exception) {
|
|
Log_OC.e(TAG, "Failed to update etag on " + folder.absolutePath, e)
|
|
Log_OC.e(TAG, "Failed to update etag on " + folder.absolutePath, e)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @return new etag if changed, `null` otherwise
|
|
|
|
+ */
|
|
|
|
+ private fun checkEtagChanged(folderName: String, storageManager: FileDataStorageManager, user: User): String? {
|
|
|
|
+ val ocFolder = storageManager.getFileByPath(folderName)
|
|
|
|
+ Log_OC.d(TAG, folderName + ": currentEtag: " + ocFolder.etag)
|
|
|
|
+ // check for etag change, if false, skip
|
|
|
|
+ val checkEtagOperation = CheckEtagRemoteOperation(
|
|
|
|
+ ocFolder.remotePath,
|
|
|
|
+ ocFolder.etagOnServer
|
|
|
|
+ )
|
|
|
|
+ val result = checkEtagOperation.execute(user, context)
|
|
|
|
+ return when (result.code) {
|
|
|
|
+ ResultCode.ETAG_UNCHANGED -> {
|
|
|
|
+ Log_OC.d(TAG, "$folderName: eTag unchanged")
|
|
|
|
+ null
|
|
|
|
+ }
|
|
|
|
+ ResultCode.FILE_NOT_FOUND -> {
|
|
|
|
+ val removalResult = storageManager.removeFolder(ocFolder, true, true)
|
|
|
|
+ if (!removalResult) {
|
|
|
|
+ Log_OC.e(TAG, "removal of " + ocFolder.storagePath + " failed: file not found")
|
|
|
|
+ }
|
|
|
|
+ null
|
|
|
|
+ }
|
|
|
|
+ ResultCode.ETAG_CHANGED -> {
|
|
|
|
+ Log_OC.d(TAG, "$folderName: eTag changed")
|
|
|
|
+ result.data[0] as String
|
|
|
|
+ }
|
|
|
|
+ else -> if (connectivityService.isInternetWalled) {
|
|
|
|
+ Log_OC.d(TAG, "No connectivity, skipping sync")
|
|
|
|
+ null
|
|
|
|
+ } else {
|
|
|
|
+ Log_OC.d(TAG, "$folderName: eTag changed")
|
|
|
|
+ result.data[0] as String
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|