From 90cb76839c8fa2b87a01c3945cb4dca9734eeef5 Mon Sep 17 00:00:00 2001 From: MohitMaliFtechiz Date: Tue, 28 Jun 2022 12:32:49 +0530 Subject: [PATCH] Retry strategy if download failed due to network fluctuation --- .../destination/library/OnlineLibraryFragment.kt | 16 ++++++++++++---- .../library_view/adapter/LibraryViewHolder.kt | 3 +++ .../core/downloader/DownloadRequester.kt | 1 + .../kiwixmobile/core/downloader/Downloader.kt | 1 + .../core/downloader/DownloaderImpl.kt | 4 ++++ .../downloader/fetch/FetchDownloadRequester.kt | 4 ++++ 6 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt index b6ad10b20..405bb7ba9 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt @@ -106,10 +106,18 @@ class OnlineLibraryFragment : BaseFragment(), FragmentActivityExtensions { LibraryAdapter( LibraryDelegate.BookDelegate(bookUtils, ::onBookItemClick), LibraryDelegate.DownloadDelegate { - dialogShower.show( - KiwixDialog.YesNoDialog.StopDownload, - { downloader.cancelDownload(it.downloadId) } - ) + if (it.downloadState.toReadableState(requireActivity()).contains("Failed")) { + if (isNotConnected) { + noInternetSnackbar() + } else { + downloader.retryDownload(it.downloadId) + } + } else { + dialogShower.show( + KiwixDialog.YesNoDialog.StopDownload, + { downloader.cancelDownload(it.downloadId) } + ) + } }, LibraryDelegate.DividerDelegate ) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/adapter/LibraryViewHolder.kt b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/adapter/LibraryViewHolder.kt index 6613d32e7..453e47285 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/adapter/LibraryViewHolder.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/adapter/LibraryViewHolder.kt @@ -99,6 +99,9 @@ sealed class LibraryViewHolder(containerView: View) : downloadProgress.progress = item.progress stop.setOnClickListener { clickAction.invoke(item) } downloadState.text = item.downloadState.toReadableState(containerView.context) + if (item.downloadState.toReadableState(containerView.context).contains("Failed")) { + clickAction.invoke(item) + } eta.text = item.readableEta } } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/DownloadRequester.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/DownloadRequester.kt index cf41124ab..33c73c508 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/DownloadRequester.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/DownloadRequester.kt @@ -22,4 +22,5 @@ import org.kiwix.kiwixmobile.core.downloader.model.DownloadRequest interface DownloadRequester { fun enqueue(downloadRequest: DownloadRequest): Long fun cancel(downloadId: Long) + fun retryDownload(downloadId: Long) } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/Downloader.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/Downloader.kt index 53f5c4d5a..4f9d09b50 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/Downloader.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/Downloader.kt @@ -22,4 +22,5 @@ import org.kiwix.kiwixmobile.core.entity.LibraryNetworkEntity interface Downloader { fun download(book: LibraryNetworkEntity.Book) fun cancelDownload(downloadId: Long) + fun retryDownload(downloadId: Long) } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/DownloaderImpl.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/DownloaderImpl.kt index 7483d0be0..291ebf74d 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/DownloaderImpl.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/DownloaderImpl.kt @@ -49,4 +49,8 @@ class DownloaderImpl @Inject constructor( override fun cancelDownload(downloadId: Long) { downloadRequester.cancel(downloadId) } + + override fun retryDownload(downloadId: Long) { + downloadRequester.retryDownload(downloadId) + } } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/fetch/FetchDownloadRequester.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/fetch/FetchDownloadRequester.kt index a11bb7634..cb312342b 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/fetch/FetchDownloadRequester.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/fetch/FetchDownloadRequester.kt @@ -41,6 +41,10 @@ class FetchDownloadRequester @Inject constructor( override fun cancel(downloadId: Long) { fetch.delete(downloadId.toInt()) } + + override fun retryDownload(downloadId: Long) { + fetch.retry(downloadId.toInt()) + } } private fun DownloadRequest.toFetchRequest(sharedPreferenceUtil: SharedPreferenceUtil) =