Skip to content

Commit 9fa8930

Browse files
Eiichi Yoshikawaguruz
authored andcommitted
feat: enable auto-sync for file access via Storage Access Framework (SAF).
1 parent aa4aeb8 commit 9fa8930

1 file changed

Lines changed: 25 additions & 23 deletions

File tree

opencloudApp/src/main/java/eu/opencloud/android/presentation/documentsprovider/DocumentsStorageProvider.kt

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ import eu.opencloud.android.presentation.documentsprovider.cursors.SpaceCursor
6363
import eu.opencloud.android.presentation.settings.security.SettingsSecurityFragment.Companion.PREFERENCE_LOCK_ACCESS_FROM_DOCUMENT_PROVIDER
6464
import eu.opencloud.android.usecases.synchronization.SynchronizeFileUseCase
6565
import eu.opencloud.android.usecases.synchronization.SynchronizeFolderUseCase
66-
import eu.opencloud.android.usecases.transfers.downloads.DownloadFileUseCase
6766
import eu.opencloud.android.usecases.transfers.uploads.UploadFilesFromSystemUseCase
6867
import eu.opencloud.android.utils.FileStorageUtils
6968
import eu.opencloud.android.utils.NotificationUtils
@@ -107,11 +106,8 @@ class DocumentsStorageProvider : DocumentsProvider() {
107106
if (!uploadOnly) {
108107
ocFile = getFileByIdOrException(documentId.toInt())
109108

110-
if (!ocFile.isAvailableLocally) {
111-
val downloadFileUseCase: DownloadFileUseCase by inject()
112-
113-
downloadFileUseCase(DownloadFileUseCase.Params(accountName = ocFile.owner, file = ocFile))
114-
109+
if (!ocFile.isAvailableLocally || !isWrite) {
110+
syncFileWithServer(ocFile)
115111
do {
116112
if (!waitOrGetCancelled(signal)) {
117113
return null
@@ -150,23 +146,7 @@ class DocumentsStorageProvider : DocumentsProvider() {
150146
uploadFilesUseCase(uploadFilesUseCaseParams)
151147
}
152148
} else {
153-
Thread {
154-
val synchronizeFileUseCase: SynchronizeFileUseCase by inject()
155-
val result = synchronizeFileUseCase(
156-
SynchronizeFileUseCase.Params(
157-
fileToSynchronize = ocFile,
158-
)
159-
)
160-
Timber.d("Synced ${ocFile.remotePath} from ${ocFile.owner} with result: $result")
161-
if (result.getDataOrNull() is SynchronizeFileUseCase.SyncType.ConflictDetected) {
162-
context?.let {
163-
NotificationUtils.notifyConflict(
164-
fileInConflict = ocFile,
165-
context = it
166-
)
167-
}
168-
}
169-
}.start()
149+
syncFileWithServer(ocFile)
170150
}
171151
}
172152
} catch (e: IOException) {
@@ -488,6 +468,28 @@ class DocumentsStorageProvider : DocumentsProvider() {
488468
return NONEXISTENT_DOCUMENT_ID
489469
}
490470

471+
private fun syncFileWithServer(fileToSync: OCFile) {
472+
Timber.d("Trying to sync a file ${fileToSync.id} with server")
473+
474+
val synchronizeFileUseCase : SynchronizeFileUseCase by inject()
475+
val synchronizeFileUseCaseParam = SynchronizeFileUseCase.Params(
476+
fileToSynchronize = fileToSync
477+
)
478+
CoroutineScope(Dispatchers.IO).launch {
479+
val useCaseResult = synchronizeFileUseCase(synchronizeFileUseCaseParam)
480+
Timber.d("${fileToSync.remotePath} from ${fileToSync.owner} was synced with server with result: $useCaseResult")
481+
482+
if (useCaseResult.getDataOrNull() is SynchronizeFileUseCase.SyncType.ConflictDetected) {
483+
context?.let {
484+
NotificationUtils.notifyConflict(
485+
fileInConflict = fileToSync,
486+
context = it
487+
)
488+
}
489+
}
490+
}
491+
}
492+
491493
private fun syncDirectoryWithServer(parentDocumentId: String) {
492494
Timber.d("Trying to sync $parentDocumentId with server")
493495
val folderToSync = getFileByIdOrException(parentDocumentId.toInt())

0 commit comments

Comments
 (0)