mirror of
https://github.com/nextcloud/android.git
synced 2024-12-20 07:52:18 +03:00
fix isDownloading logic
Signed-off-by: alperozturk <alper_ozturk@proton.me>
This commit is contained in:
parent
1e8dc0f762
commit
d4d7f60f2c
5 changed files with 27 additions and 12 deletions
|
@ -172,5 +172,5 @@ interface BackgroundJobManager {
|
||||||
fun startPeriodicallyOfflineOperation()
|
fun startPeriodicallyOfflineOperation()
|
||||||
fun scheduleInternal2WaySync(intervalMinutes: Long)
|
fun scheduleInternal2WaySync(intervalMinutes: Long)
|
||||||
fun cancelAllFilesDownloadJobs()
|
fun cancelAllFilesDownloadJobs()
|
||||||
fun syncFolder(filePaths: List<String>)
|
fun syncFolder(filePaths: List<String>, topParentPath: String)
|
||||||
}
|
}
|
||||||
|
|
|
@ -715,9 +715,10 @@ internal class BackgroundJobManagerImpl(
|
||||||
workManager.enqueueUniquePeriodicWork(JOB_INTERNAL_TWO_WAY_SYNC, ExistingPeriodicWorkPolicy.UPDATE, request)
|
workManager.enqueueUniquePeriodicWork(JOB_INTERNAL_TWO_WAY_SYNC, ExistingPeriodicWorkPolicy.UPDATE, request)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun syncFolder(filePaths: List<String>) {
|
override fun syncFolder(filePaths: List<String>, topParentPath: String) {
|
||||||
val data = Data.Builder()
|
val data = Data.Builder()
|
||||||
.putStringArray(SyncWorker.FILE_PATHS, filePaths.toTypedArray())
|
.putStringArray(SyncWorker.FILE_PATHS, filePaths.toTypedArray())
|
||||||
|
.putString(SyncWorker.TOP_PARENT_PATH, topParentPath)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
val request = oneTimeRequestBuilder(SyncWorker::class, JOB_SYNC_FOLDER)
|
val request = oneTimeRequestBuilder(SyncWorker::class, JOB_SYNC_FOLDER)
|
||||||
|
|
|
@ -48,7 +48,7 @@ class FileDownloadHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
return if (file.isFolder) {
|
return if (file.isFolder) {
|
||||||
SyncWorker.isDownloading(file.fileId)
|
SyncWorker.isDownloading(file.decryptedRemotePath)
|
||||||
} else {
|
} else {
|
||||||
FileDownloadWorker.isDownloading(user.accountName, file.fileId)
|
FileDownloadWorker.isDownloading(user.accountName, file.fileId)
|
||||||
}
|
}
|
||||||
|
@ -139,7 +139,7 @@ class FileDownloadHelper {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun syncFolder(filePaths: List<String>) {
|
fun syncFolder(filePaths: List<String>, topParentPath: String) {
|
||||||
backgroundJobManager.syncFolder(filePaths)
|
backgroundJobManager.syncFolder(filePaths, topParentPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ class SyncWorker(
|
||||||
private const val TAG = "SyncWorker"
|
private const val TAG = "SyncWorker"
|
||||||
|
|
||||||
const val FILE_PATHS = "FILE_PATHS"
|
const val FILE_PATHS = "FILE_PATHS"
|
||||||
|
const val TOP_PARENT_PATH = "TOP_PARENT_PATH"
|
||||||
|
|
||||||
private var downloadingFilePaths = ArrayList<String>()
|
private var downloadingFilePaths = ArrayList<String>()
|
||||||
|
|
||||||
|
@ -48,13 +49,15 @@ class SyncWorker(
|
||||||
return withContext(Dispatchers.IO) {
|
return withContext(Dispatchers.IO) {
|
||||||
Log_OC.d(TAG, "SyncWorker started")
|
Log_OC.d(TAG, "SyncWorker started")
|
||||||
val filePaths = inputData.getStringArray(FILE_PATHS)
|
val filePaths = inputData.getStringArray(FILE_PATHS)
|
||||||
|
val topParentPath = inputData.getString(TOP_PARENT_PATH)
|
||||||
|
|
||||||
if (filePaths.isNullOrEmpty()) {
|
if (filePaths.isNullOrEmpty() || topParentPath.isNullOrEmpty()) {
|
||||||
return@withContext Result.failure()
|
return@withContext Result.failure()
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
downloadingFilePaths = ArrayList(filePaths.toList()).apply {
|
||||||
// downloadingFilePaths = filePaths
|
add(topParentPath)
|
||||||
|
}
|
||||||
|
|
||||||
val fileDataStorageManager = FileDataStorageManager(user, context.contentResolver)
|
val fileDataStorageManager = FileDataStorageManager(user, context.contentResolver)
|
||||||
|
|
||||||
|
@ -77,19 +80,23 @@ class SyncWorker(
|
||||||
|
|
||||||
val operation = DownloadFileOperation(user, file, context).execute(client)
|
val operation = DownloadFileOperation(user, file, context).execute(client)
|
||||||
Log_OC.d(TAG, "Syncing file: " + file.decryptedRemotePath)
|
Log_OC.d(TAG, "Syncing file: " + file.decryptedRemotePath)
|
||||||
if (!operation.isSuccess) {
|
|
||||||
|
if (operation.isSuccess) {
|
||||||
|
downloadingFilePaths.remove(path)
|
||||||
|
} else {
|
||||||
result = false
|
result = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO add isDownloading
|
// TODO add notify isDownloading for adapter
|
||||||
// TODO add cancel only one file download
|
// TODO add cancel only one file download
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
notificationManager.showCompletionMessage(result)
|
notificationManager.showCompletionMessage(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
|
downloadingFilePaths.remove(topParentPath)
|
||||||
Log_OC.d(TAG, "SyncWorker completed")
|
Log_OC.d(TAG, "SyncWorker completed")
|
||||||
Result.success()
|
Result.success()
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -40,7 +40,6 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||||
|
|
||||||
|
@ -503,7 +502,15 @@ public class SynchronizeFolderOperation extends SyncOperation {
|
||||||
} else {
|
} else {
|
||||||
final var filePaths = new ArrayList<String>();
|
final var filePaths = new ArrayList<String>();
|
||||||
mFilesForDirectDownload.forEach(file -> filePaths.add(file.getDecryptedRemotePath()));
|
mFilesForDirectDownload.forEach(file -> filePaths.add(file.getDecryptedRemotePath()));
|
||||||
fileDownloadHelper.syncFolder(filePaths);
|
|
||||||
|
if (filePaths.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final var storageManager = getStorageManager();
|
||||||
|
final OCFile firstFile = storageManager.getFileByDecryptedRemotePath(filePaths.get(0));
|
||||||
|
final OCFile topParent = storageManager.getTopParent(firstFile);
|
||||||
|
fileDownloadHelper.syncFolder(filePaths, topParent.getDecryptedRemotePath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue