From 5b57c25110f0c76113020a31ace7551cedb72635 Mon Sep 17 00:00:00 2001 From: Kanahia Date: Sun, 21 Jul 2024 21:18:51 +0530 Subject: [PATCH] Improved current implementation --- .../contributions/ContributionDao.java | 8 +-- .../ContributionsLocalDataSource.java | 4 +- .../ContributionsRepository.java | 4 +- .../commons/upload/FailedUploadsFragment.kt | 2 +- .../commons/upload/PendingUploadsAdapter.kt | 2 - .../commons/upload/PendingUploadsFragment.kt | 2 +- .../upload/PendingUploadsPresenter.java | 4 +- .../nrw/commons/upload/worker/UploadWorker.kt | 58 ++++++++++--------- 8 files changed, 44 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionDao.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionDao.java index 5ecf3cba3..927e17b4a 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionDao.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionDao.java @@ -47,17 +47,17 @@ public abstract class ContributionDao { @Delete public abstract void deleteSynchronous(Contribution contribution); - @Delete - public abstract void deleteContributionsSynchronous(List contributions); + @Query("DELETE FROM contribution WHERE state IN (:states)") + public abstract void deleteContributionsWithStatesSynchronous(List states) throws SQLiteException; public Completable delete(final Contribution contribution) { return Completable .fromAction(() -> deleteSynchronous(contribution)); } - public Completable deleteContributions(final List contributions) { + public Completable deleteContributionsWithStates(List states) { return Completable - .fromAction(() -> deleteContributionsSynchronous(contributions)); + .fromAction(() -> deleteContributionsWithStatesSynchronous(states)); } @Query("SELECT * from contribution WHERE media_filename=:fileName") diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsLocalDataSource.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsLocalDataSource.java index 6e493cc56..a10b25dd2 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsLocalDataSource.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsLocalDataSource.java @@ -64,8 +64,8 @@ class ContributionsLocalDataSource { return contributionDao.delete(contribution); } - public Completable deleteContributions(final List contributions) { - return contributionDao.deleteContributions(contributions); + public Completable deleteContributionsWithStates(List states) { + return contributionDao.deleteContributionsWithStates(states); } public Factory getContributions() { diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsRepository.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsRepository.java index 8f9aa1c5f..526ec0962 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsRepository.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsRepository.java @@ -36,8 +36,8 @@ public class ContributionsRepository { return localDataSource.deleteContribution(contribution); } - public Completable deleteContributionsFromDB(List contributions) { - return localDataSource.deleteContributions(contributions); + public Completable deleteContributionsFromDBWithStates(List states) { + return localDataSource.deleteContributionsWithStates(states); } /** diff --git a/app/src/main/java/fr/free/nrw/commons/upload/FailedUploadsFragment.kt b/app/src/main/java/fr/free/nrw/commons/upload/FailedUploadsFragment.kt index 0405d6c2d..7fd0935e2 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/FailedUploadsFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/FailedUploadsFragment.kt @@ -197,7 +197,7 @@ class FailedUploadsFragment : CommonsDaggerSupportFragment(), PendingUploadsCont ViewUtil.showShortToast(context, R.string.cancelling_upload) uploadProgressActivity.hidePendingIcons() pendingUploadsPresenter.deleteUploads( - contributionsList, + listOf(Contribution.STATE_FAILED), this.requireContext().applicationContext ) }, diff --git a/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsAdapter.kt b/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsAdapter.kt index 40b386db2..013513e37 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsAdapter.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsAdapter.kt @@ -86,7 +86,6 @@ class PendingUploadsAdapter(private val callback: Callback) : } fun bindState(state: Int) { - Timber.tag("PRINT").e("State is: "+state) if (state == Contribution.STATE_QUEUED || state == Contribution.STATE_PAUSED) { errorTextView.text = "Queued" errorTextView.visibility = View.VISIBLE @@ -98,7 +97,6 @@ class PendingUploadsAdapter(private val callback: Callback) : } fun bindProgress(transferred: Long, total: Long, state: Int) { - Timber.tag("PRINT").e("State is2: "+state) if (transferred == 0L) { errorTextView.text = "Queued" errorTextView.visibility = View.VISIBLE 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 75301a3e1..e9394fd08 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 @@ -220,7 +220,7 @@ class PendingUploadsFragment : CommonsDaggerSupportFragment(), PendingUploadsCon ViewUtil.showShortToast(context, R.string.cancelling_upload) uploadProgressActivity.hidePendingIcons() pendingUploadsPresenter.deleteUploads( - contributionsList, + listOf(Contribution.STATE_QUEUED, Contribution.STATE_IN_PROGRESS, Contribution.STATE_PAUSED), 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 25134780a..942cf4fc9 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 @@ -136,9 +136,9 @@ public class PendingUploadsPresenter implements UserActionListener { )); } - public void deleteUploads(List contributionList, Context context) { + public void deleteUploads(List states, Context context) { compositeDisposable.add(repository - .deleteContributionsFromDB(contributionList) + .deleteContributionsFromDBWithStates(states) .subscribeOn(ioThreadScheduler) .subscribe(() -> WorkRequestHelper.Companion.makeOneTimeWorkRequest( diff --git a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt index 88ec14486..c55120545 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt @@ -177,6 +177,8 @@ class UploadWorker(var appContext: Context, workerParams: WorkerParameters) : CommonsApplication.NOTIFICATION_CHANNEL_ID_ALL )!! withContext(Dispatchers.IO) { + + //TODO: Implement Worker Flags /* queuedContributions receives the results from a one-shot query. This means that once the list has been fetched from the database, @@ -187,46 +189,50 @@ class UploadWorker(var appContext: Context, workerParams: WorkerParameters) : https://github.com/commons-app/apps-android-commons/issues/5136 https://github.com/commons-app/apps-android-commons/issues/5346 */ - val queuedContributions = contributionDao.getContribution(statesToProcess) - .blockingGet() - //Showing initial notification for the number of uploads being processed + while (contributionDao.getContribution(statesToProcess) + .blockingGet().size > 0 + ) { + val queuedContributions = contributionDao.getContribution(statesToProcess) + .blockingGet() + //Showing initial notification for the number of uploads being processed - processingUploads.setContentTitle(appContext.getString(R.string.starting_uploads)) - processingUploads.setContentText( - appContext.resources.getQuantityString( + processingUploads.setContentTitle(appContext.getString(R.string.starting_uploads)) + processingUploads.setContentText( + appContext.resources.getQuantityString( R.plurals.starting_multiple_uploads, queuedContributions.size, queuedContributions.size ) - ) - notificationManager?.notify( - PROCESSING_UPLOADS_NOTIFICATION_TAG, - PROCESSING_UPLOADS_NOTIFICATION_ID, - processingUploads.build() - ) + ) + notificationManager?.notify( + PROCESSING_UPLOADS_NOTIFICATION_TAG, + PROCESSING_UPLOADS_NOTIFICATION_ID, + processingUploads.build() + ) - val sortedQueuedContributionsList: List = queuedContributions.sortedBy { it.dateUploadStartedInMillis() } + val sortedQueuedContributionsList: List = + queuedContributions.sortedBy { it.dateUploadStartedInMillis() } - /** - * To avoid race condition when multiple of these workers are working, assign this state - so that the next one does not process these contribution again - */ + /** + * To avoid race condition when multiple of these workers are working, assign this state + so that the next one does not process these contribution again + */ // sortedQueuedContributionsList.forEach { // it.state = Contribution.STATE_IN_PROGRESS // contributionDao.saveSynchronous(it) // } - var contribution = sortedQueuedContributionsList.first() + var contribution = sortedQueuedContributionsList.first() - if (contributionDao.getContribution(contribution.pageId) != null) { - contribution.transferred = 0 - contribution.state = Contribution.STATE_IN_PROGRESS - contributionDao.saveSynchronous(contribution) - setProgressAsync(Data.Builder().putInt("progress", countUpload).build()) - countUpload++ - uploadContribution(contribution = contribution) + if (contributionDao.getContribution(contribution.pageId) != null) { + contribution.transferred = 0 + contribution.state = Contribution.STATE_IN_PROGRESS + contributionDao.saveSynchronous(contribution) + setProgressAsync(Data.Builder().putInt("progress", countUpload).build()) + countUpload++ + uploadContribution(contribution = contribution) + } } - //Dismiss the global notification notificationManager?.cancel( PROCESSING_UPLOADS_NOTIFICATION_TAG,