mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-22 12:03:09 -04:00
Merge pull request #2881 from kiwix/Issue#2845
Increase read, connect and auto retry attempts
This commit is contained in:
commit
e25df2b10e
@ -46,6 +46,7 @@ import androidx.lifecycle.ViewModelProvider
|
|||||||
import androidx.lifecycle.observe
|
import androidx.lifecycle.observe
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.tonyodev.fetch2.Status
|
||||||
import eu.mhutti1.utils.storage.StorageDevice
|
import eu.mhutti1.utils.storage.StorageDevice
|
||||||
import eu.mhutti1.utils.storage.StorageSelectDialog
|
import eu.mhutti1.utils.storage.StorageSelectDialog
|
||||||
import kotlinx.android.synthetic.main.fragment_destination_download.allowInternetPermissionButton
|
import kotlinx.android.synthetic.main.fragment_destination_download.allowInternetPermissionButton
|
||||||
@ -106,10 +107,18 @@ class OnlineLibraryFragment : BaseFragment(), FragmentActivityExtensions {
|
|||||||
LibraryAdapter(
|
LibraryAdapter(
|
||||||
LibraryDelegate.BookDelegate(bookUtils, ::onBookItemClick),
|
LibraryDelegate.BookDelegate(bookUtils, ::onBookItemClick),
|
||||||
LibraryDelegate.DownloadDelegate {
|
LibraryDelegate.DownloadDelegate {
|
||||||
dialogShower.show(
|
if (it.currentDownloadState == Status.FAILED) {
|
||||||
KiwixDialog.YesNoDialog.StopDownload,
|
if (isNotConnected) {
|
||||||
{ downloader.cancelDownload(it.downloadId) }
|
noInternetSnackbar()
|
||||||
)
|
} else {
|
||||||
|
downloader.retryDownload(it.downloadId)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dialogShower.show(
|
||||||
|
KiwixDialog.YesNoDialog.StopDownload,
|
||||||
|
{ downloader.cancelDownload(it.downloadId) }
|
||||||
|
)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
LibraryDelegate.DividerDelegate
|
LibraryDelegate.DividerDelegate
|
||||||
)
|
)
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
package org.kiwix.kiwixmobile.zim_manager.library_view.adapter
|
package org.kiwix.kiwixmobile.zim_manager.library_view.adapter
|
||||||
|
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
|
import com.tonyodev.fetch2.Status
|
||||||
import org.kiwix.kiwixmobile.core.downloader.model.Base64String
|
import org.kiwix.kiwixmobile.core.downloader.model.Base64String
|
||||||
import org.kiwix.kiwixmobile.core.downloader.model.DownloadModel
|
import org.kiwix.kiwixmobile.core.downloader.model.DownloadModel
|
||||||
import org.kiwix.kiwixmobile.core.downloader.model.DownloadState
|
import org.kiwix.kiwixmobile.core.downloader.model.DownloadState
|
||||||
@ -69,7 +70,8 @@ sealed class LibraryListItem {
|
|||||||
val progress: Int,
|
val progress: Int,
|
||||||
val eta: Seconds,
|
val eta: Seconds,
|
||||||
val downloadState: DownloadState,
|
val downloadState: DownloadState,
|
||||||
override val id: Long
|
override val id: Long,
|
||||||
|
val currentDownloadState: Status
|
||||||
) : LibraryListItem() {
|
) : LibraryListItem() {
|
||||||
|
|
||||||
val readableEta: CharSequence = eta.takeIf { it.seconds > 0L }?.toHumanReadableTime() ?: ""
|
val readableEta: CharSequence = eta.takeIf { it.seconds > 0L }?.toHumanReadableTime() ?: ""
|
||||||
@ -84,7 +86,8 @@ sealed class LibraryListItem {
|
|||||||
downloadModel.progress,
|
downloadModel.progress,
|
||||||
Seconds(downloadModel.etaInMilliSeconds / 1000L),
|
Seconds(downloadModel.etaInMilliSeconds / 1000L),
|
||||||
DownloadState.from(downloadModel.state, downloadModel.error),
|
DownloadState.from(downloadModel.state, downloadModel.error),
|
||||||
downloadModel.book.id.hashCode().toLong()
|
downloadModel.book.id.hashCode().toLong(),
|
||||||
|
downloadModel.state
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ import android.view.View
|
|||||||
import android.view.View.MeasureSpec
|
import android.view.View.MeasureSpec
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
|
import com.tonyodev.fetch2.Status
|
||||||
import kotlinx.android.synthetic.main.item_download.downloadProgress
|
import kotlinx.android.synthetic.main.item_download.downloadProgress
|
||||||
import kotlinx.android.synthetic.main.item_download.downloadState
|
import kotlinx.android.synthetic.main.item_download.downloadState
|
||||||
import kotlinx.android.synthetic.main.item_download.eta
|
import kotlinx.android.synthetic.main.item_download.eta
|
||||||
@ -99,6 +100,9 @@ sealed class LibraryViewHolder<in T : LibraryListItem>(containerView: View) :
|
|||||||
downloadProgress.progress = item.progress
|
downloadProgress.progress = item.progress
|
||||||
stop.setOnClickListener { clickAction.invoke(item) }
|
stop.setOnClickListener { clickAction.invoke(item) }
|
||||||
downloadState.text = item.downloadState.toReadableState(containerView.context)
|
downloadState.text = item.downloadState.toReadableState(containerView.context)
|
||||||
|
if (item.currentDownloadState == Status.FAILED) {
|
||||||
|
clickAction.invoke(item)
|
||||||
|
}
|
||||||
eta.text = item.readableEta
|
eta.text = item.readableEta
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,10 @@ import org.kiwix.kiwixmobile.core.downloader.Downloader
|
|||||||
import org.kiwix.kiwixmobile.core.downloader.DownloaderImpl
|
import org.kiwix.kiwixmobile.core.downloader.DownloaderImpl
|
||||||
import org.kiwix.kiwixmobile.core.downloader.fetch.FetchDownloadNotificationManager
|
import org.kiwix.kiwixmobile.core.downloader.fetch.FetchDownloadNotificationManager
|
||||||
import org.kiwix.kiwixmobile.core.downloader.fetch.FetchDownloadRequester
|
import org.kiwix.kiwixmobile.core.downloader.fetch.FetchDownloadRequester
|
||||||
|
import org.kiwix.kiwixmobile.core.utils.CONNECT_TIME_OUT
|
||||||
|
import org.kiwix.kiwixmobile.core.utils.READ_TIME_OUT
|
||||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
@ -77,6 +80,8 @@ object DownloaderModule {
|
|||||||
@Singleton
|
@Singleton
|
||||||
fun provideOkHttpDownloader() = OkHttpDownloader(
|
fun provideOkHttpDownloader() = OkHttpDownloader(
|
||||||
OkHttpClient.Builder()
|
OkHttpClient.Builder()
|
||||||
|
.connectTimeout(CONNECT_TIME_OUT, TimeUnit.MINUTES)
|
||||||
|
.readTimeout(READ_TIME_OUT, TimeUnit.MINUTES)
|
||||||
.followRedirects(true)
|
.followRedirects(true)
|
||||||
.followSslRedirects(true)
|
.followSslRedirects(true)
|
||||||
.build()
|
.build()
|
||||||
|
@ -22,4 +22,5 @@ import org.kiwix.kiwixmobile.core.downloader.model.DownloadRequest
|
|||||||
interface DownloadRequester {
|
interface DownloadRequester {
|
||||||
fun enqueue(downloadRequest: DownloadRequest): Long
|
fun enqueue(downloadRequest: DownloadRequest): Long
|
||||||
fun cancel(downloadId: Long)
|
fun cancel(downloadId: Long)
|
||||||
|
fun retryDownload(downloadId: Long)
|
||||||
}
|
}
|
||||||
|
@ -22,4 +22,5 @@ import org.kiwix.kiwixmobile.core.entity.LibraryNetworkEntity
|
|||||||
interface Downloader {
|
interface Downloader {
|
||||||
fun download(book: LibraryNetworkEntity.Book)
|
fun download(book: LibraryNetworkEntity.Book)
|
||||||
fun cancelDownload(downloadId: Long)
|
fun cancelDownload(downloadId: Long)
|
||||||
|
fun retryDownload(downloadId: Long)
|
||||||
}
|
}
|
||||||
|
@ -49,4 +49,8 @@ class DownloaderImpl @Inject constructor(
|
|||||||
override fun cancelDownload(downloadId: Long) {
|
override fun cancelDownload(downloadId: Long) {
|
||||||
downloadRequester.cancel(downloadId)
|
downloadRequester.cancel(downloadId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun retryDownload(downloadId: Long) {
|
||||||
|
downloadRequester.retryDownload(downloadId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ import com.tonyodev.fetch2.NetworkType.WIFI_ONLY
|
|||||||
import com.tonyodev.fetch2.Request
|
import com.tonyodev.fetch2.Request
|
||||||
import org.kiwix.kiwixmobile.core.downloader.DownloadRequester
|
import org.kiwix.kiwixmobile.core.downloader.DownloadRequester
|
||||||
import org.kiwix.kiwixmobile.core.downloader.model.DownloadRequest
|
import org.kiwix.kiwixmobile.core.downloader.model.DownloadRequest
|
||||||
|
import org.kiwix.kiwixmobile.core.utils.AUTO_RETRY_MAX_ATTEMPTS
|
||||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ -40,10 +41,14 @@ class FetchDownloadRequester @Inject constructor(
|
|||||||
override fun cancel(downloadId: Long) {
|
override fun cancel(downloadId: Long) {
|
||||||
fetch.delete(downloadId.toInt())
|
fetch.delete(downloadId.toInt())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun retryDownload(downloadId: Long) {
|
||||||
|
fetch.retry(downloadId.toInt())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun DownloadRequest.toFetchRequest(sharedPreferenceUtil: SharedPreferenceUtil) =
|
private fun DownloadRequest.toFetchRequest(sharedPreferenceUtil: SharedPreferenceUtil) =
|
||||||
Request("$uri", getDestination(sharedPreferenceUtil)).apply {
|
Request("$uri", getDestination(sharedPreferenceUtil)).apply {
|
||||||
networkType = if (sharedPreferenceUtil.prefWifiOnly) WIFI_ONLY else ALL
|
networkType = if (sharedPreferenceUtil.prefWifiOnly) WIFI_ONLY else ALL
|
||||||
autoRetryMaxAttempts = 10
|
autoRetryMaxAttempts = AUTO_RETRY_MAX_ATTEMPTS
|
||||||
}
|
}
|
||||||
|
@ -44,3 +44,10 @@ const val INTERNAL_SELECT_POSITION = 0
|
|||||||
const val EXTERNAL_SELECT_POSITION = 1
|
const val EXTERNAL_SELECT_POSITION = 1
|
||||||
|
|
||||||
const val FILE_SELECT_CODE = 5
|
const val FILE_SELECT_CODE = 5
|
||||||
|
|
||||||
|
// For Read and Connect timeout on download OkHttpClient both are in minutes
|
||||||
|
const val READ_TIME_OUT = 1L
|
||||||
|
const val CONNECT_TIME_OUT = 1L
|
||||||
|
|
||||||
|
// For autoRetryMaxAttempts in download zim file
|
||||||
|
const val AUTO_RETRY_MAX_ATTEMPTS = 20
|
||||||
|
Loading…
x
Reference in New Issue
Block a user