diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt index f0235ab3b7..f6e65bbfad 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt @@ -48,22 +48,18 @@ class DownloadManager( val queue: DownloadQueue get() = downloader.queue - /** - * Tells the downloader to begin downloads. - * - * @return true if it's started, false otherwise (empty queue). - */ - fun startDownloads(): Boolean { - return downloader.start() - } + // For use by DownloadService only + fun downloaderStart() = downloader.start() + fun downloaderStop(reason: String? = null) = downloader.stop(reason) + + val isDownloaderRunning + get() = DownloadService.isRunning /** - * Tells the downloader to stop downloads. - * - * @param reason an optional reason for being stopped, used to notify the user. + * Tells the downloader to begin downloads. */ - fun stopDownloads(reason: String? = null) { - downloader.stop(reason) + fun startDownloads() { + DownloadService.start(context) } /** @@ -71,6 +67,7 @@ class DownloadManager( */ fun pauseDownloads() { downloader.pause() + DownloadService.stop(context) } /** @@ -78,6 +75,7 @@ class DownloadManager( */ fun clearQueue() { downloader.clearQueue() + DownloadService.stop(context) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt index 06bb2de2d3..1500a44948 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt @@ -95,7 +95,7 @@ class DownloadService : Service() { override fun onDestroy() { scope.cancel() _isRunning.value = false - downloadManager.stopDownloads() + downloadManager.downloaderStop() if (wakeLock.isHeld) { wakeLock.release() } @@ -111,8 +111,8 @@ class DownloadService : Service() { return null } - private fun stopDownloads(@StringRes string: Int) { - downloadManager.stopDownloads(getString(string)) + private fun downloaderStop(@StringRes string: Int) { + downloadManager.downloaderStop(getString(string)) } private fun listenNetworkChanges() { @@ -122,13 +122,13 @@ class DownloadService : Service() { withUIContext { if (isOnline()) { if (downloadPreferences.downloadOnlyOverWifi().get() && !isConnectedToWifi()) { - stopDownloads(R.string.download_notifier_text_only_wifi) + downloaderStop(R.string.download_notifier_text_only_wifi) } else { - val started = downloadManager.startDownloads() + val started = downloadManager.downloaderStart() if (!started) stopSelf() } } else { - stopDownloads(R.string.download_notifier_no_network) + downloaderStop(R.string.download_notifier_no_network) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt index 6f667c2b50..b3720cdaf4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt @@ -27,7 +27,6 @@ import eu.kanade.domain.track.model.toDomainTrack import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.download.DownloadManager -import eu.kanade.tachiyomi.data.download.DownloadService import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.data.preference.DEVICE_BATTERY_NOT_LOW import eu.kanade.tachiyomi.data.preference.DEVICE_CHARGING @@ -309,7 +308,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet if (newUpdates.isNotEmpty()) { notifier.showUpdateNotifications(newUpdates) if (hasDownloads.get()) { - DownloadService.start(context) + downloadManager.startDownloads() } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt b/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt index 335d483daf..f5ce5f65c5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt @@ -12,7 +12,6 @@ import eu.kanade.domain.download.service.DownloadPreferences import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.backup.BackupRestoreService import eu.kanade.tachiyomi.data.download.DownloadManager -import eu.kanade.tachiyomi.data.download.DownloadService import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.data.updater.AppUpdateService import eu.kanade.tachiyomi.source.SourceManager @@ -56,12 +55,9 @@ class NotificationReceiver : BroadcastReceiver() { // Dismiss notification ACTION_DISMISS_NOTIFICATION -> dismissNotification(context, intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1)) // Resume the download service - ACTION_RESUME_DOWNLOADS -> DownloadService.start(context) + ACTION_RESUME_DOWNLOADS -> downloadManager.startDownloads() // Pause the download service - ACTION_PAUSE_DOWNLOADS -> { - DownloadService.stop(context) - downloadManager.pauseDownloads() - } + ACTION_PAUSE_DOWNLOADS -> downloadManager.pauseDownloads() // Clear the download queue ACTION_CLEAR_DOWNLOADS -> downloadManager.clearQueue() // Launch share activity and dismiss notification diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreen.kt index 5fbf8e17ec..4f4265ba7e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreen.kt @@ -31,7 +31,6 @@ import androidx.compose.ui.geometry.Offset import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import androidx.compose.ui.input.nestedscroll.NestedScrollSource import androidx.compose.ui.input.nestedscroll.nestedScroll -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.res.stringResource @@ -51,7 +50,6 @@ import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.OverflowMenu import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.data.download.DownloadService import eu.kanade.tachiyomi.databinding.DownloadListBinding import tachiyomi.core.util.lang.launchUI import tachiyomi.presentation.core.components.Pill @@ -64,7 +62,6 @@ object DownloadQueueScreen : Screen() { @Composable override fun Content() { - val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val scope = rememberCoroutineScope() val screenModel = rememberScreenModel { DownloadQueueScreenModel() } @@ -182,7 +179,7 @@ object DownloadQueueScreen : Screen() { androidx.compose.material3.DropdownMenuItem( text = { Text(text = stringResource(R.string.action_cancel_all)) }, onClick = { - screenModel.clearQueue(context) + screenModel.clearQueue() closeMenu() }, ) @@ -198,7 +195,7 @@ object DownloadQueueScreen : Screen() { enter = fadeIn(), exit = fadeOut(), ) { - val isRunning by DownloadService.isRunning.collectAsState() + val isRunning by screenModel.isDownloaderRunning.collectAsState() ExtendedFloatingActionButton( text = { val id = if (isRunning) { @@ -218,10 +215,9 @@ object DownloadQueueScreen : Screen() { }, onClick = { if (isRunning) { - DownloadService.stop(context) screenModel.pauseDownloads() } else { - DownloadService.start(context) + screenModel.startDownloads() } }, expanded = fabExpanded, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreenModel.kt index 95d95df324..db0d69fdfa 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreenModel.kt @@ -1,12 +1,10 @@ package eu.kanade.tachiyomi.ui.download -import android.content.Context import android.view.MenuItem import cafe.adriel.voyager.core.model.ScreenModel import cafe.adriel.voyager.core.model.coroutineScope import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.DownloadManager -import eu.kanade.tachiyomi.data.download.DownloadService import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.databinding.DownloadListBinding import eu.kanade.tachiyomi.source.model.Page @@ -135,15 +133,21 @@ class DownloadQueueScreenModel( adapter = null } + val isDownloaderRunning + get() = downloadManager.isDownloaderRunning + fun getDownloadStatusFlow() = downloadManager.queue.statusFlow() fun getDownloadProgressFlow() = downloadManager.queue.progressFlow() + fun startDownloads() { + downloadManager.startDownloads() + } + fun pauseDownloads() { downloadManager.pauseDownloads() } - fun clearQueue(context: Context) { - DownloadService.stop(context) + fun clearQueue() { downloadManager.clearQueue() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt index 8eb44ef348..e203a77465 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt @@ -26,7 +26,6 @@ import eu.kanade.presentation.manga.components.ChapterDownloadAction import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.DownloadCache import eu.kanade.tachiyomi.data.download.DownloadManager -import eu.kanade.tachiyomi.data.download.DownloadService import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.track.EnhancedTrackService import eu.kanade.tachiyomi.data.track.TrackManager @@ -589,7 +588,7 @@ class MangaInfoScreenModel( ChapterDownloadAction.START -> { startDownload(items.map { it.chapter }, false) if (items.any { it.downloadState == Download.State.ERROR }) { - DownloadService.start(context) + downloadManager.startDownloads() } } ChapterDownloadAction.START_NOW -> { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt index e422fa0fd4..0ad008f67b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt @@ -23,7 +23,6 @@ import eu.kanade.presentation.more.MoreScreen import eu.kanade.presentation.util.Tab import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.DownloadManager -import eu.kanade.tachiyomi.data.download.DownloadService import eu.kanade.tachiyomi.ui.category.CategoryScreen import eu.kanade.tachiyomi.ui.download.DownloadQueueScreen import eu.kanade.tachiyomi.ui.setting.SettingsScreen @@ -94,7 +93,7 @@ private class MoreScreenModel( // Handle running/paused status change and queue progress updating coroutineScope.launchIO { combine( - DownloadService.isRunning, + downloadManager.isDownloaderRunning, downloadManager.queue.state, ) { isRunning, downloadQueue -> Pair(isRunning, downloadQueue.size) } .collectLatest { (isDownloading, downloadQueueSize) -> diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesScreenModel.kt index b6daaa89d7..5815a585a3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesScreenModel.kt @@ -18,7 +18,6 @@ import eu.kanade.presentation.manga.components.ChapterDownloadAction import eu.kanade.presentation.updates.UpdatesUiModel import eu.kanade.tachiyomi.data.download.DownloadCache import eu.kanade.tachiyomi.data.download.DownloadManager -import eu.kanade.tachiyomi.data.download.DownloadService import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.source.SourceManager @@ -168,7 +167,7 @@ class UpdatesScreenModel( ChapterDownloadAction.START -> { downloadChapters(items) if (items.any { it.downloadStateProvider() == Download.State.ERROR }) { - DownloadService.start(Injekt.get()) + downloadManager.startDownloads() } } ChapterDownloadAction.START_NOW -> {