From 1a1f444b1a933039c00dfe281442b2ba5e986af0 Mon Sep 17 00:00:00 2001 From: urFate Date: Sun, 13 Oct 2024 23:03:33 +0300 Subject: [PATCH] fix(MediaDownloadsService): exceptions processing logic --- .../service/media/DownloadsServiceHelper.kt | 19 +++++++++---------- .../service/media/MediaDownloadsService.kt | 10 +++++++--- .../service/media/model/DownloadsListener.kt | 2 +- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/shirabox/app/service/media/DownloadsServiceHelper.kt b/app/src/main/java/org/shirabox/app/service/media/DownloadsServiceHelper.kt index ba9a31e..b401c56 100644 --- a/app/src/main/java/org/shirabox/app/service/media/DownloadsServiceHelper.kt +++ b/app/src/main/java/org/shirabox/app/service/media/DownloadsServiceHelper.kt @@ -67,13 +67,12 @@ class DownloadsServiceHelper( while (queryListIterator.hasNext()) { val downloadQuery = queryListIterator.next() - var exception: Exception? = null - val queryIterator = downloadQuery.query.listIterator() while (queryIterator.hasNext()) { val index = queryIterator.nextIndex() val enqueuedTask = queryIterator.next() + val exceptions: MutableMap = mutableMapOf() if (enqueuedTask.stopState.value) continue @@ -97,22 +96,22 @@ class DownloadsServiceHelper( StreamProtocol.MPEG -> download(enqueuedTask) StreamProtocol.HLS -> downloadHLS(enqueuedTask) } - } catch (ex: Exception) { ex.printStackTrace() - exception = ex + exceptions[enqueuedTask] = ex } finally { - listeners.forEach { it.onTaskFinish(enqueuedTask, exception) } + listeners.forEach { + it.onTaskFinish( + enqueuedTask, + exceptions.getOrDefault(enqueuedTask, null) + ) + } enqueuedTask.stopState.emit(true) } } listeners.forEach { - it.onQueryFinish( - downloadQuery = downloadQuery, - exception = exception - ) - + it.onQueryFinish(downloadQuery = downloadQuery) downloadQuery.query.clear() } diff --git a/app/src/main/java/org/shirabox/app/service/media/MediaDownloadsService.kt b/app/src/main/java/org/shirabox/app/service/media/MediaDownloadsService.kt index 46f298f..e5198df 100644 --- a/app/src/main/java/org/shirabox/app/service/media/MediaDownloadsService.kt +++ b/app/src/main/java/org/shirabox/app/service/media/MediaDownloadsService.kt @@ -103,6 +103,7 @@ class MediaDownloadsService : Service() { private val db = AppDatabase.getAppDataBase(service)!! private val job = SupervisorJob() private val scope = CoroutineScope(Dispatchers.IO + job) + private var exception: Exception? = null private val notificationId = 1 @@ -138,18 +139,21 @@ class MediaDownloadsService : Service() { } } } + + this.exception = if (exception !is DownloadsServiceHelper.ForcedInterruptionException) { + exception + } else this.exception } override fun onQueryFinish( - downloadQuery: DownloadsServiceHelper.DownloadQuery, - exception: Exception? + downloadQuery: DownloadsServiceHelper.DownloadQuery ) { val finishNotificationId = System.currentTimeMillis().div(1000).toInt() baseBuilder .setProgress(0, 0, false) .apply { - if (exception == null || exception is DownloadsServiceHelper.ForcedInterruptionException) { + if (exception == null) { setContentText(service.getString(R.string.episodes_downloading_finished)) } else { setContentText(service.getString(R.string.episodes_downloading_failed)) diff --git a/app/src/main/java/org/shirabox/app/service/media/model/DownloadsListener.kt b/app/src/main/java/org/shirabox/app/service/media/model/DownloadsListener.kt index 202858b..dab8463 100644 --- a/app/src/main/java/org/shirabox/app/service/media/model/DownloadsListener.kt +++ b/app/src/main/java/org/shirabox/app/service/media/model/DownloadsListener.kt @@ -6,6 +6,6 @@ import org.shirabox.app.service.media.DownloadsServiceHelper interface DownloadsListener { fun onCurrentTaskChanged(task: EnqueuedTask, position: Int, querySize: Int) fun onTaskFinish(task: EnqueuedTask, exception: Exception?) - fun onQueryFinish(downloadQuery: DownloadsServiceHelper.DownloadQuery, exception: Exception?) + fun onQueryFinish(downloadQuery: DownloadsServiceHelper.DownloadQuery) fun onLifecycleEnd() } \ No newline at end of file