From d825cd76fa8ec47cbf1780f35a26d7d048e3a839 Mon Sep 17 00:00:00 2001 From: Kanahia Date: Wed, 12 Jun 2024 11:52:26 +0530 Subject: [PATCH] Improved pause feature --- .../commons/upload/PendingUploadsFragment.kt | 16 ++----- .../upload/PendingUploadsPresenter.java | 44 +++++++++++++++++++ .../free/nrw/commons/upload/UploadClient.kt | 2 - 3 files changed, 48 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsFragment.kt b/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsFragment.kt index bb46414e0..d2f697136 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsFragment.kt @@ -203,22 +203,14 @@ class PendingUploadsFragment : CommonsDaggerSupportFragment(), PendingUploadsCon } fun restartUploads() { - // TODO make the restart as in queue - var contribution = l.get(0) - contribution.state = Contribution.STATE_QUEUED - pendingUploadsPresenter.saveContribution(contribution, this.requireContext().applicationContext) - Timber.d("Restarting for %s", contribution.toString()) + if (l != null){ + pendingUploadsPresenter.restartUploads(l, 0 , this.requireContext().applicationContext) + } } fun pauseUploads() { if (l != null){ - l.forEach { - //Pause the upload in the global singleton - CommonsApplication.pauseUploads[it.pageId] = true - //Retain the paused state in DB - it.state = Contribution.STATE_PAUSED - pendingUploadsPresenter.saveContribution(it, this.requireContext().applicationContext) - } + pendingUploadsPresenter.pauseUploads(l, 0, this.requireContext().applicationContext) } } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsPresenter.java b/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsPresenter.java index fd4d61e00..caf9d1f11 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsPresenter.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsPresenter.java @@ -9,6 +9,7 @@ import androidx.paging.DataSource.Factory; import androidx.paging.LivePagedListBuilder; import androidx.paging.PagedList; import androidx.work.ExistingWorkPolicy; +import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.contributions.Contribution; import fr.free.nrw.commons.contributions.ContributionBoundaryCallback; import fr.free.nrw.commons.contributions.ContributionsRemoteDataSource; @@ -19,8 +20,10 @@ import fr.free.nrw.commons.upload.PendingUploadsContract.View; import fr.free.nrw.commons.upload.worker.WorkRequestHelper; import io.reactivex.Scheduler; import io.reactivex.disposables.CompositeDisposable; +import java.util.List; import javax.inject.Inject; import javax.inject.Named; +import timber.log.Timber; /** * The presenter class for Contributions @@ -119,7 +122,48 @@ public class PendingUploadsPresenter implements UserActionListener { .subscribe(() -> WorkRequestHelper.Companion.makeOneTimeWorkRequest( context, ExistingWorkPolicy.KEEP) + )); + } + public void pauseUploads(List l, int index, Context context) { + Timber.tag("PRINT").e(CommonsApplication.pauseUploads.toString()); + if (index >= l.size()) { + return; + } + Contribution it = l.get(index); + CommonsApplication.pauseUploads.put(it.getPageId().toString(), true); + //Retain the paused state in DB + it.setState(Contribution.STATE_PAUSED); + compositeDisposable.add(repository + .save(it) + .subscribeOn(ioThreadScheduler) + .doOnComplete(() -> { + pauseUploads(l, index + 1, context); + } + ) + .subscribe( () -> + WorkRequestHelper.Companion.makeOneTimeWorkRequest( + context, ExistingWorkPolicy.KEEP) + )); + } + + public void restartUploads(List l, int index, Context context) { + if (index >= l.size()) { + return; + } + Contribution it = l.get(index); + it.setState(Contribution.STATE_QUEUED); + compositeDisposable.add(repository + .save(it) + .subscribeOn(ioThreadScheduler) + .doOnComplete(() -> { + CommonsApplication.pauseUploads.put(it.getPageId().toString(), false); + restartUploads(l, index + 1, context); + } + ) + .subscribe(() -> + WorkRequestHelper.Companion.makeOneTimeWorkRequest( + context, ExistingWorkPolicy.KEEP) )); } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadClient.kt b/app/src/main/java/fr/free/nrw/commons/upload/UploadClient.kt index db6062106..c303b3a30 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadClient.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadClient.kt @@ -58,8 +58,6 @@ class UploadClient @Inject constructor( ) } - contribution.unpause() - val file = contribution.localUriPath val fileChunks = fileUtilsWrapper.getFileChunks(file, CHUNK_SIZE) val mediaType = fileUtilsWrapper.getMimeType(file).toMediaTypeOrNull()