Split download preferences from PreferencesHelper (#8048)

This commit is contained in:
Andreas
2022-09-21 23:45:07 +02:00
committed by GitHub
parent ec34977a64
commit e82963c9ef
17 changed files with 149 additions and 91 deletions

View File

@@ -15,6 +15,7 @@ import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay
import eu.kanade.domain.chapter.interactor.UpdateChapter
import eu.kanade.domain.chapter.model.ChapterUpdate
import eu.kanade.domain.chapter.model.toDbChapter
import eu.kanade.domain.download.service.DownloadPreferences
import eu.kanade.domain.library.service.LibraryPreferences
import eu.kanade.domain.manga.interactor.GetDuplicateLibraryManga
import eu.kanade.domain.manga.interactor.GetMangaWithChapters
@@ -82,6 +83,7 @@ class MangaPresenter(
val mangaId: Long,
val isFromSource: Boolean,
private val preferences: PreferencesHelper = Injekt.get(),
private val downloadPreferences: DownloadPreferences = Injekt.get(),
private val libraryPreferences: LibraryPreferences = Injekt.get(),
private val trackManager: TrackManager = Injekt.get(),
private val sourceManager: SourceManager = Injekt.get(),
@@ -679,7 +681,7 @@ class MangaPresenter(
presenterScope.launchNonCancellableIO {
val manga = successState?.manga ?: return@launchNonCancellableIO
val categories = getCategories.await(manga.id).map { it.id }
if (chapters.isEmpty() || !manga.shouldDownloadNewChapters(categories, preferences)) return@launchNonCancellableIO
if (chapters.isEmpty() || !manga.shouldDownloadNewChapters(categories, downloadPreferences)) return@launchNonCancellableIO
downloadChapters(chapters)
}
}

View File

@@ -9,6 +9,7 @@ import eu.kanade.domain.chapter.interactor.GetChapterByMangaId
import eu.kanade.domain.chapter.interactor.UpdateChapter
import eu.kanade.domain.chapter.model.ChapterUpdate
import eu.kanade.domain.chapter.model.toDbChapter
import eu.kanade.domain.download.service.DownloadPreferences
import eu.kanade.domain.history.interactor.UpsertHistory
import eu.kanade.domain.history.model.HistoryUpdate
import eu.kanade.domain.manga.interactor.GetManga
@@ -80,6 +81,7 @@ class ReaderPresenter(
private val sourceManager: SourceManager = Injekt.get(),
private val downloadManager: DownloadManager = Injekt.get(),
private val preferences: PreferencesHelper = Injekt.get(),
private val downloadPreferences: DownloadPreferences = Injekt.get(),
private val readerPreferences: ReaderPreferences = Injekt.get(),
private val trackPreferences: TrackPreferences = Injekt.get(),
private val delayedTrackingStore: DelayedTrackingStore = Injekt.get(),
@@ -452,7 +454,7 @@ class ReaderPresenter(
val manga = manga ?: return
if (getCurrentChapter()?.pageLoader !is DownloadPageLoader) return
val nextChapter = viewerChaptersRelay.value?.nextChapter?.chapter ?: return
val chaptersNumberToDownload = preferences.autoDownloadWhileReading().get()
val chaptersNumberToDownload = downloadPreferences.autoDownloadWhileReading().get()
if (chaptersNumberToDownload == 0 || !manga.favorite) return
val isNextChapterDownloadedOrQueued = downloadManager.isChapterDownloaded(
nextChapter.name,
@@ -506,7 +508,7 @@ class ReaderPresenter(
private fun deleteChapterIfNeeded(currentChapter: ReaderChapter) {
// Determine which chapter should be deleted and enqueue
val currentChapterPosition = chapterList.indexOf(currentChapter)
val removeAfterReadSlots = preferences.removeAfterReadSlots().get()
val removeAfterReadSlots = downloadPreferences.removeAfterReadSlots().get()
val chapterToDelete = chapterList.getOrNull(currentChapterPosition - removeAfterReadSlots)
if (removeAfterReadSlots != 0 && chapterDownload != null) {

View File

@@ -12,9 +12,9 @@ import androidx.preference.PreferenceScreen
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.hippo.unifile.UniFile
import eu.kanade.domain.category.interactor.GetCategories
import eu.kanade.domain.download.service.DownloadPreferences
import eu.kanade.presentation.category.visualName
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.ui.base.controller.DialogController
import eu.kanade.tachiyomi.util.preference.bindTo
import eu.kanade.tachiyomi.util.preference.entriesRes
@@ -41,6 +41,7 @@ import java.io.File
class SettingsDownloadController : SettingsController() {
private val getCategories: GetCategories by injectLazy()
private val downloadPreferences: DownloadPreferences by injectLazy()
override fun setupPreferenceScreen(screen: PreferenceScreen) = screen.apply {
titleRes = R.string.pref_category_downloads
@@ -48,7 +49,7 @@ class SettingsDownloadController : SettingsController() {
val categories = runBlocking { getCategories.await() }
preference {
bindTo(preferences.downloadsDirectory())
bindTo(downloadPreferences.downloadsDirectory())
titleRes = R.string.pref_download_directory
onClick {
val ctrl = DownloadDirectoriesDialog()
@@ -56,7 +57,7 @@ class SettingsDownloadController : SettingsController() {
ctrl.showDialog(router)
}
preferences.downloadsDirectory().changes()
downloadPreferences.downloadsDirectory().changes()
.onEach { path ->
val dir = UniFile.fromUri(context, path.toUri())
summary = dir.filePath ?: path
@@ -64,15 +65,15 @@ class SettingsDownloadController : SettingsController() {
.launchIn(viewScope)
}
switchPreference {
bindTo(preferences.downloadOnlyOverWifi())
bindTo(downloadPreferences.downloadOnlyOverWifi())
titleRes = R.string.connected_to_wifi
}
switchPreference {
bindTo(preferences.saveChaptersAsCBZ())
bindTo(downloadPreferences.saveChaptersAsCBZ())
titleRes = R.string.save_chapter_as_cbz
}
switchPreference {
bindTo(preferences.splitTallImages())
bindTo(downloadPreferences.splitTallImages())
titleRes = R.string.split_tall_images
summaryRes = R.string.split_tall_images_summary
}
@@ -81,11 +82,11 @@ class SettingsDownloadController : SettingsController() {
titleRes = R.string.pref_category_delete_chapters
switchPreference {
bindTo(preferences.removeAfterMarkedAsRead())
bindTo(downloadPreferences.removeAfterMarkedAsRead())
titleRes = R.string.pref_remove_after_marked_as_read
}
intListPreference {
bindTo(preferences.removeAfterReadSlots())
bindTo(downloadPreferences.removeAfterReadSlots())
titleRes = R.string.pref_remove_after_read
entriesRes = arrayOf(
R.string.disabled,
@@ -99,16 +100,16 @@ class SettingsDownloadController : SettingsController() {
summary = "%s"
}
switchPreference {
bindTo(preferences.removeBookmarkedChapters())
bindTo(downloadPreferences.removeBookmarkedChapters())
titleRes = R.string.pref_remove_bookmarked_chapters
}
multiSelectListPreference {
bindTo(preferences.removeExcludeCategories())
bindTo(downloadPreferences.removeExcludeCategories())
titleRes = R.string.pref_remove_exclude_categories
entries = categories.map { it.visualName(context) }.toTypedArray()
entryValues = categories.map { it.id.toString() }.toTypedArray()
preferences.removeExcludeCategories().changes()
downloadPreferences.removeExcludeCategories().changes()
.onEach { mutable ->
val selected = mutable
.mapNotNull { id -> categories.find { it.id == id.toLong() } }
@@ -127,20 +128,20 @@ class SettingsDownloadController : SettingsController() {
titleRes = R.string.pref_download_new
switchPreference {
bindTo(preferences.downloadNewChapters())
bindTo(downloadPreferences.downloadNewChapters())
titleRes = R.string.pref_download_new
}
preference {
bindTo(preferences.downloadNewChapterCategories())
bindTo(downloadPreferences.downloadNewChapterCategories())
titleRes = R.string.categories
onClick {
DownloadCategoriesDialog().showDialog(router)
}
visibleIf(preferences.downloadNewChapters()) { it }
visibleIf(downloadPreferences.downloadNewChapters()) { it }
fun updateSummary() {
val selectedCategories = preferences.downloadNewChapterCategories().get()
val selectedCategories = downloadPreferences.downloadNewChapterCategories().get()
.mapNotNull { id -> categories.find { it.id == id.toLong() } }
.sortedBy { it.order }
val includedItemsText = if (selectedCategories.isEmpty()) {
@@ -149,7 +150,7 @@ class SettingsDownloadController : SettingsController() {
selectedCategories.joinToString { it.visualName(context) }
}
val excludedCategories = preferences.downloadNewChapterCategoriesExclude().get()
val excludedCategories = downloadPreferences.downloadNewChapterCategoriesExclude().get()
.mapNotNull { id -> categories.find { it.id == id.toLong() } }
.sortedBy { it.order }
val excludedItemsText = if (excludedCategories.isEmpty()) {
@@ -165,10 +166,10 @@ class SettingsDownloadController : SettingsController() {
}
}
preferences.downloadNewChapterCategories().changes()
downloadPreferences.downloadNewChapterCategories().changes()
.onEach { updateSummary() }
.launchIn(viewScope)
preferences.downloadNewChapterCategoriesExclude().changes()
downloadPreferences.downloadNewChapterCategoriesExclude().changes()
.onEach { updateSummary() }
.launchIn(viewScope)
}
@@ -178,7 +179,7 @@ class SettingsDownloadController : SettingsController() {
titleRes = R.string.download_ahead
intListPreference {
bindTo(preferences.autoDownloadWhileReading())
bindTo(downloadPreferences.autoDownloadWhileReading())
titleRes = R.string.auto_download_while_reading
entries = arrayOf(
context.getString(R.string.disabled),
@@ -208,14 +209,14 @@ class SettingsDownloadController : SettingsController() {
}
val file = UniFile.fromUri(context, uri)
preferences.downloadsDirectory().set(file.uri.toString())
downloadPreferences.downloadsDirectory().set(file.uri.toString())
}
}
}
fun predefinedDirectorySelected(selectedDir: String) {
val path = File(selectedDir).toUri()
preferences.downloadsDirectory().set(path.toString())
downloadPreferences.downloadsDirectory().set(path.toString())
}
fun customDirectorySelected() {
@@ -229,11 +230,11 @@ class SettingsDownloadController : SettingsController() {
class DownloadDirectoriesDialog : DialogController() {
private val preferences: PreferencesHelper = Injekt.get()
private val downloadPreferences: DownloadPreferences = Injekt.get()
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
val activity = activity!!
val currentDir = preferences.downloadsDirectory().get()
val currentDir = downloadPreferences.downloadsDirectory().get()
val externalDirs = listOf(getDefaultDownloadDir(), File(activity.getString(R.string.custom_dir))).map(File::toString)
var selectedIndex = externalDirs.indexOfFirst { it in currentDir }
@@ -264,7 +265,7 @@ class SettingsDownloadController : SettingsController() {
class DownloadCategoriesDialog : DialogController() {
private val preferences: PreferencesHelper = Injekt.get()
private val downloadPreferences: DownloadPreferences = Injekt.get()
private val getCategories: GetCategories = Injekt.get()
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
@@ -274,8 +275,8 @@ class SettingsDownloadController : SettingsController() {
var selected = categories
.map {
when (it.id.toString()) {
in preferences.downloadNewChapterCategories().get() -> QuadStateTextView.State.CHECKED.ordinal
in preferences.downloadNewChapterCategoriesExclude().get() -> QuadStateTextView.State.INVERSED.ordinal
in downloadPreferences.downloadNewChapterCategories().get() -> QuadStateTextView.State.CHECKED.ordinal
in downloadPreferences.downloadNewChapterCategoriesExclude().get() -> QuadStateTextView.State.INVERSED.ordinal
else -> QuadStateTextView.State.UNCHECKED.ordinal
}
}
@@ -302,8 +303,8 @@ class SettingsDownloadController : SettingsController() {
.map { categories[it].id.toString() }
.toSet()
preferences.downloadNewChapterCategories().set(included)
preferences.downloadNewChapterCategoriesExclude().set(excluded)
downloadPreferences.downloadNewChapterCategories().set(included)
downloadPreferences.downloadNewChapterCategoriesExclude().set(excluded)
}
.setNegativeButton(android.R.string.cancel, null)
.create()