diff --git a/app/src/main/java/org/jellyfin/mobile/downloads/DownloadManager.kt b/app/src/main/java/org/jellyfin/mobile/downloads/DownloadManager.kt index 19611747..b89e172e 100644 --- a/app/src/main/java/org/jellyfin/mobile/downloads/DownloadManager.kt +++ b/app/src/main/java/org/jellyfin/mobile/downloads/DownloadManager.kt @@ -95,24 +95,26 @@ class DownloadManager( } suspend fun cancel(id: Long) = withContext(Dispatchers.IO) { - val download = downloadDao.getDownload(id) - if (download != null) { - DownloadWorker.stop(context) - downloadDao.update(download.copy(status = DownloadStatus.CANCELLED)) - DownloadWorker.start(context, appPreferences) + val download = downloadDao.getDownload(id) ?: return@withContext + downloadDao.update(download.copy(status = DownloadStatus.CANCELLED)) + + if (download.status == DownloadStatus.DOWNLOADING) { + DownloadWorker.restart(context, appPreferences) } } suspend fun delete(id: Long, deleteFiles: Boolean) = withContext(Dispatchers.IO) { val download = downloadDao.getDownload(id) ?: return@withContext - if (download.status == DownloadStatus.DOWNLOADING) DownloadWorker.stop(context) + downloadDao.delete(id) + + if (download.status == DownloadStatus.DOWNLOADING) { + DownloadWorker.restart(context, appPreferences) + } if (deleteFiles) { val storageLocation = storageManager.getStorageLocation() storageLocation?.findFile(download.path)?.delete() } - - downloadDao.delete(id) } } diff --git a/app/src/main/java/org/jellyfin/mobile/downloads/DownloadQueue.kt b/app/src/main/java/org/jellyfin/mobile/downloads/DownloadQueue.kt index 12225615..4dd3282a 100644 --- a/app/src/main/java/org/jellyfin/mobile/downloads/DownloadQueue.kt +++ b/app/src/main/java/org/jellyfin/mobile/downloads/DownloadQueue.kt @@ -72,7 +72,11 @@ class DownloadQueue( notificationProgressCallback.onEnd() downloadDao.update(downloadWithFiles.download.copy(status = DownloadStatus.DOWNLOADED)) } catch (e: CancellationException) { - downloadDao.update(downloadWithFiles.download.copy(status = DownloadStatus.QUEUED)) + // The download could've been canceled by the app, in which case we need to refresh it before making changes + val download = downloadDao.getDownload(downloadWithFiles.download.id) + if (download?.status == DownloadStatus.DOWNLOADING) { + downloadDao.update(download.copy(status = DownloadStatus.QUEUED)) + } throw e } catch (e: IOException) { downloadDao.update(downloadWithFiles.download.copy(status = DownloadStatus.QUEUED)) diff --git a/app/src/main/java/org/jellyfin/mobile/downloads/DownloadWorker.kt b/app/src/main/java/org/jellyfin/mobile/downloads/DownloadWorker.kt index 1992c384..e864c1bc 100644 --- a/app/src/main/java/org/jellyfin/mobile/downloads/DownloadWorker.kt +++ b/app/src/main/java/org/jellyfin/mobile/downloads/DownloadWorker.kt @@ -48,6 +48,11 @@ class DownloadWorker( WorkManager.getInstance(context).cancelUniqueWork(tag).await() } + suspend fun restart(context: Context, appPreferences: AppPreferences) { + stop(context) + start(context, appPreferences) + } + suspend fun isActive(context: Context): Boolean = WorkManager.getInstance(context) .getWorkInfosForUniqueWork(tag) .await()