Make DownloadManager the sole entry point for DownloadService (#9140)

* Rename functions for DownloadService internal use

* Call DownloadService.start via DownloadManager

* Inline DownloadService.stop into pauseDownloads

* Inline DownloadService.stop into clearQueue

NotificationReceiver will now also stop the DownloadService when
receiving ACTION_CLEAR_DOWNLOADS.

* Provide DownloadService.isRunning via DownloadManager
This commit is contained in:
Two-Ai
2023-02-24 22:07:30 -05:00
committed by GitHub
parent 7ec87e76db
commit 86b9262a7e
9 changed files with 34 additions and 44 deletions

View File

@@ -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,

View File

@@ -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()
}

View File

@@ -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 -> {

View File

@@ -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) ->

View File

@@ -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<Application>())
downloadManager.startDownloads()
}
}
ChapterDownloadAction.START_NOW -> {