From f9c174dbf9d1bacc083600ccfe55d00c10f29972 Mon Sep 17 00:00:00 2001 From: X1nto Date: Thu, 14 Jan 2021 23:48:31 +0400 Subject: [PATCH] prevent downloader from crashing if an exception occurs --- .../vanced/manager/utils/DownloadHelper.kt | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/vanced/manager/utils/DownloadHelper.kt b/app/src/main/java/com/vanced/manager/utils/DownloadHelper.kt index a761abb2..3bcf95ff 100644 --- a/app/src/main/java/com/vanced/manager/utils/DownloadHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/DownloadHelper.kt @@ -19,24 +19,31 @@ import java.io.File object DownloadHelper : CoroutineScope by CoroutineScope(Dispatchers.IO) { fun fuelDownload(url: String, fileFolder: String, fileName: String, context: Context, onDownloadComplete: () -> Unit, onError: (error: String) -> Unit) = launch { - downloadProgress.value?.downloadingFile?.postValue(context.getString(R.string.downloading_file, fileName)) - downloadProgress.value?.currentDownload = Fuel.download(url) - .fileDestination { _, _ -> - File(context.getExternalFilesDir(fileFolder)?.path, fileName) - } - .progress { readBytes, totalBytes -> - downloadProgress.value?.downloadProgress?.postValue((readBytes * 100 / totalBytes).toInt()) - } - .responseString { _, _, result -> - result.fold(success = { - downloadProgress.value?.downloadProgress?.postValue(0) - onDownloadComplete() - }, failure = { error -> - downloadProgress.value?.downloadProgress?.postValue(0) - Log.d("VMDownloader", error.cause.toString()) - onError(error.errorData.toString()) - }) - } + try { + downloadProgress.value?.downloadingFile?.postValue(context.getString(R.string.downloading_file, fileName)) + downloadProgress.value?.currentDownload = Fuel.download(url) + .fileDestination { _, _ -> + File(context.getExternalFilesDir(fileFolder)?.path, fileName) + } + .progress { readBytes, totalBytes -> + downloadProgress.value?.downloadProgress?.postValue((readBytes * 100 / totalBytes).toInt()) + } + .responseString { _, _, result -> + result.fold(success = { + downloadProgress.value?.downloadProgress?.postValue(0) + onDownloadComplete() + }, failure = { error -> + downloadProgress.value?.downloadProgress?.postValue(0) + Log.d("VMDownloader", error.cause.toString()) + onError(error.errorData.toString()) + }) + } + } catch (e: Exception) { + downloadProgress.value?.downloadProgress?.postValue(0) + Log.d("VMDownloader", "Failed to download file: $url") + onError("") + } + } val downloadProgress = MutableLiveData()