@@ -63,7 +63,6 @@ import eu.opencloud.android.presentation.documentsprovider.cursors.SpaceCursor
6363import eu.opencloud.android.presentation.settings.security.SettingsSecurityFragment.Companion.PREFERENCE_LOCK_ACCESS_FROM_DOCUMENT_PROVIDER
6464import eu.opencloud.android.usecases.synchronization.SynchronizeFileUseCase
6565import eu.opencloud.android.usecases.synchronization.SynchronizeFolderUseCase
66- import eu.opencloud.android.usecases.transfers.downloads.DownloadFileUseCase
6766import eu.opencloud.android.usecases.transfers.uploads.UploadFilesFromSystemUseCase
6867import eu.opencloud.android.utils.FileStorageUtils
6968import 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