Minor cleanup
This commit is contained in:
parent
7f89587889
commit
c36d2794bb
@ -45,11 +45,9 @@ import eu.kanade.presentation.browse.components.ExtensionIcon
|
|||||||
import eu.kanade.presentation.manga.components.DotSeparatorNoSpaceText
|
import eu.kanade.presentation.manga.components.DotSeparatorNoSpaceText
|
||||||
import eu.kanade.tachiyomi.extension.model.Extension
|
import eu.kanade.tachiyomi.extension.model.Extension
|
||||||
import eu.kanade.tachiyomi.extension.model.InstallStep
|
import eu.kanade.tachiyomi.extension.model.InstallStep
|
||||||
import eu.kanade.tachiyomi.source.ConfigurableSource
|
|
||||||
import eu.kanade.tachiyomi.ui.browse.extension.ExtensionUiModel
|
import eu.kanade.tachiyomi.ui.browse.extension.ExtensionUiModel
|
||||||
import eu.kanade.tachiyomi.ui.browse.extension.ExtensionsScreenModel
|
import eu.kanade.tachiyomi.ui.browse.extension.ExtensionsScreenModel
|
||||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
||||||
import exh.source.anyIs
|
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.i18n.sy.SYMR
|
import tachiyomi.i18n.sy.SYMR
|
||||||
import tachiyomi.presentation.core.components.FastScrollLazyColumn
|
import tachiyomi.presentation.core.components.FastScrollLazyColumn
|
||||||
|
@ -210,7 +210,7 @@ object SettingsDataScreen : SearchableSettings {
|
|||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
val pagePreviewCache = remember { Injekt.get<PagePreviewCache>() }
|
val pagePreviewCache = remember { Injekt.get<PagePreviewCache>() }
|
||||||
var pagePreviewReadableSizeSema by remember { mutableStateOf(0) }
|
var pagePreviewReadableSizeSema by remember { mutableIntStateOf(0) }
|
||||||
val pagePreviewReadableSize = remember(pagePreviewReadableSizeSema) { pagePreviewCache.readableSize }
|
val pagePreviewReadableSize = remember(pagePreviewReadableSizeSema) { pagePreviewCache.readableSize }
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
|
@ -248,10 +248,14 @@ object SettingsLibraryScreen : SearchableSettings {
|
|||||||
pref = libraryPreferences.swipeToStartAction(),
|
pref = libraryPreferences.swipeToStartAction(),
|
||||||
title = stringResource(MR.strings.pref_chapter_swipe_start),
|
title = stringResource(MR.strings.pref_chapter_swipe_start),
|
||||||
entries = mapOf(
|
entries = mapOf(
|
||||||
LibraryPreferences.ChapterSwipeAction.Disabled to stringResource(MR.strings.disabled),
|
LibraryPreferences.ChapterSwipeAction.Disabled to
|
||||||
LibraryPreferences.ChapterSwipeAction.ToggleBookmark to stringResource(MR.strings.action_bookmark),
|
stringResource(MR.strings.disabled),
|
||||||
LibraryPreferences.ChapterSwipeAction.ToggleRead to stringResource(MR.strings.action_mark_as_read),
|
LibraryPreferences.ChapterSwipeAction.ToggleBookmark to
|
||||||
LibraryPreferences.ChapterSwipeAction.Download to stringResource(MR.strings.action_download),
|
stringResource(MR.strings.action_bookmark),
|
||||||
|
LibraryPreferences.ChapterSwipeAction.ToggleRead to
|
||||||
|
stringResource(MR.strings.action_mark_as_read),
|
||||||
|
LibraryPreferences.ChapterSwipeAction.Download to
|
||||||
|
stringResource(MR.strings.action_download),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Preference.PreferenceItem.ListPreference(
|
Preference.PreferenceItem.ListPreference(
|
||||||
@ -259,8 +263,10 @@ object SettingsLibraryScreen : SearchableSettings {
|
|||||||
title = stringResource(MR.strings.pref_chapter_swipe_end),
|
title = stringResource(MR.strings.pref_chapter_swipe_end),
|
||||||
entries = mapOf(
|
entries = mapOf(
|
||||||
LibraryPreferences.ChapterSwipeAction.Disabled to stringResource(MR.strings.disabled),
|
LibraryPreferences.ChapterSwipeAction.Disabled to stringResource(MR.strings.disabled),
|
||||||
LibraryPreferences.ChapterSwipeAction.ToggleBookmark to stringResource(MR.strings.action_bookmark),
|
LibraryPreferences.ChapterSwipeAction.ToggleBookmark to
|
||||||
LibraryPreferences.ChapterSwipeAction.ToggleRead to stringResource(MR.strings.action_mark_as_read),
|
stringResource(MR.strings.action_bookmark),
|
||||||
|
LibraryPreferences.ChapterSwipeAction.ToggleRead to
|
||||||
|
stringResource(MR.strings.action_mark_as_read),
|
||||||
LibraryPreferences.ChapterSwipeAction.Download to stringResource(MR.strings.action_download),
|
LibraryPreferences.ChapterSwipeAction.Download to stringResource(MR.strings.action_download),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -208,8 +208,10 @@ object SettingsReaderScreen : SearchableSettings {
|
|||||||
title = stringResource(MR.strings.pref_read_with_tapping_inverted),
|
title = stringResource(MR.strings.pref_read_with_tapping_inverted),
|
||||||
entries = mapOf(
|
entries = mapOf(
|
||||||
ReaderPreferences.TappingInvertMode.NONE to stringResource(MR.strings.none),
|
ReaderPreferences.TappingInvertMode.NONE to stringResource(MR.strings.none),
|
||||||
ReaderPreferences.TappingInvertMode.HORIZONTAL to stringResource(MR.strings.tapping_inverted_horizontal),
|
ReaderPreferences.TappingInvertMode.HORIZONTAL to
|
||||||
ReaderPreferences.TappingInvertMode.VERTICAL to stringResource(MR.strings.tapping_inverted_vertical),
|
stringResource(MR.strings.tapping_inverted_horizontal),
|
||||||
|
ReaderPreferences.TappingInvertMode.VERTICAL to
|
||||||
|
stringResource(MR.strings.tapping_inverted_vertical),
|
||||||
ReaderPreferences.TappingInvertMode.BOTH to stringResource(MR.strings.tapping_inverted_both),
|
ReaderPreferences.TappingInvertMode.BOTH to stringResource(MR.strings.tapping_inverted_both),
|
||||||
),
|
),
|
||||||
enabled = navMode != 5,
|
enabled = navMode != 5,
|
||||||
@ -308,8 +310,10 @@ object SettingsReaderScreen : SearchableSettings {
|
|||||||
title = stringResource(MR.strings.pref_read_with_tapping_inverted),
|
title = stringResource(MR.strings.pref_read_with_tapping_inverted),
|
||||||
entries = mapOf(
|
entries = mapOf(
|
||||||
ReaderPreferences.TappingInvertMode.NONE to stringResource(MR.strings.none),
|
ReaderPreferences.TappingInvertMode.NONE to stringResource(MR.strings.none),
|
||||||
ReaderPreferences.TappingInvertMode.HORIZONTAL to stringResource(MR.strings.tapping_inverted_horizontal),
|
ReaderPreferences.TappingInvertMode.HORIZONTAL to
|
||||||
ReaderPreferences.TappingInvertMode.VERTICAL to stringResource(MR.strings.tapping_inverted_vertical),
|
stringResource(MR.strings.tapping_inverted_horizontal),
|
||||||
|
ReaderPreferences.TappingInvertMode.VERTICAL to
|
||||||
|
stringResource(MR.strings.tapping_inverted_vertical),
|
||||||
ReaderPreferences.TappingInvertMode.BOTH to stringResource(MR.strings.tapping_inverted_both),
|
ReaderPreferences.TappingInvertMode.BOTH to stringResource(MR.strings.tapping_inverted_both),
|
||||||
),
|
),
|
||||||
enabled = navMode != 5,
|
enabled = navMode != 5,
|
||||||
|
@ -88,7 +88,9 @@ class SettingsSearchScreen : Screen() {
|
|||||||
focusRequester.requestFocus()
|
focusRequester.requestFocus()
|
||||||
}
|
}
|
||||||
|
|
||||||
var textFieldValue by rememberSaveable(stateSaver = TextFieldValue.Saver) { mutableStateOf(TextFieldValue()) }
|
var textFieldValue by rememberSaveable(stateSaver = TextFieldValue.Saver) {
|
||||||
|
mutableStateOf(TextFieldValue())
|
||||||
|
}
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
Column {
|
Column {
|
||||||
@ -202,7 +204,11 @@ private fun SearchResult(
|
|||||||
SearchResultItem(
|
SearchResultItem(
|
||||||
route = settingsData.route,
|
route = settingsData.route,
|
||||||
title = p.title,
|
title = p.title,
|
||||||
breadcrumbs = getLocalizedBreadcrumb(path = settingsData.title, node = categoryTitle, isLtr = isLtr),
|
breadcrumbs = getLocalizedBreadcrumb(
|
||||||
|
path = settingsData.title,
|
||||||
|
node = categoryTitle,
|
||||||
|
isLtr = isLtr,
|
||||||
|
),
|
||||||
highlightKey = p.title,
|
highlightKey = p.title,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -112,7 +112,9 @@ fun BottomReaderBar(
|
|||||||
if (cropBorders.isIn(enabledButtons)) {
|
if (cropBorders.isIn(enabledButtons)) {
|
||||||
IconButton(onClick = onClickCropBorder) {
|
IconButton(onClick = onClickCropBorder) {
|
||||||
Icon(
|
Icon(
|
||||||
painter = painterResource(if (cropEnabled) R.drawable.ic_crop_24dp else R.drawable.ic_crop_off_24dp),
|
painter = painterResource(
|
||||||
|
if (cropEnabled) R.drawable.ic_crop_24dp else R.drawable.ic_crop_off_24dp,
|
||||||
|
),
|
||||||
contentDescription = stringResource(MR.strings.pref_crop_borders),
|
contentDescription = stringResource(MR.strings.pref_crop_borders),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,21 @@ data class BackupChapter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val backupChapterMapper = { _: Long, _: Long, url: String, name: String, scanlator: String?, read: Boolean, bookmark: Boolean, lastPageRead: Long, chapterNumber: Double, source_order: Long, dateFetch: Long, dateUpload: Long, lastModifiedAt: Long ->
|
val backupChapterMapper =
|
||||||
|
{ _: Long,
|
||||||
|
_: Long,
|
||||||
|
url: String,
|
||||||
|
name: String,
|
||||||
|
scanlator: String?,
|
||||||
|
read: Boolean,
|
||||||
|
bookmark: Boolean,
|
||||||
|
lastPageRead: Long,
|
||||||
|
chapterNumber: Double,
|
||||||
|
source_order: Long,
|
||||||
|
dateFetch: Long,
|
||||||
|
dateUpload: Long,
|
||||||
|
lastModifiedAt: Long,
|
||||||
|
->
|
||||||
BackupChapter(
|
BackupChapter(
|
||||||
url = url,
|
url = url,
|
||||||
name = name,
|
name = name,
|
||||||
|
@ -36,7 +36,18 @@ data class BackupMergedMangaReference(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val backupMergedMangaReferenceMapper =
|
val backupMergedMangaReferenceMapper =
|
||||||
{ _: Long, isInfoManga: Boolean, getChapterUpdates: Boolean, chapterSortMode: Long, chapterPriority: Long, downloadChapters: Boolean, _: Long, mergeUrl: String, _: Long?, mangaUrl: String, mangaSourceId: Long ->
|
{ _: Long,
|
||||||
|
isInfoManga: Boolean,
|
||||||
|
getChapterUpdates: Boolean,
|
||||||
|
chapterSortMode: Long,
|
||||||
|
chapterPriority: Long,
|
||||||
|
downloadChapters: Boolean,
|
||||||
|
_: Long,
|
||||||
|
mergeUrl: String,
|
||||||
|
_: Long?,
|
||||||
|
mangaUrl: String,
|
||||||
|
mangaSourceId: Long,
|
||||||
|
->
|
||||||
BackupMergedMangaReference(
|
BackupMergedMangaReference(
|
||||||
isInfoManga = isInfoManga,
|
isInfoManga = isInfoManga,
|
||||||
getChapterUpdates = getChapterUpdates,
|
getChapterUpdates = getChapterUpdates,
|
||||||
|
@ -32,7 +32,7 @@ class BackupRestorer(
|
|||||||
private val preferenceRestorer: PreferenceRestorer = PreferenceRestorer(context),
|
private val preferenceRestorer: PreferenceRestorer = PreferenceRestorer(context),
|
||||||
private val mangaRestorer: MangaRestorer = MangaRestorer(),
|
private val mangaRestorer: MangaRestorer = MangaRestorer(),
|
||||||
// SY -->
|
// SY -->
|
||||||
private val savedSearchRestorer: SavedSearchRestorer = SavedSearchRestorer()
|
private val savedSearchRestorer: SavedSearchRestorer = SavedSearchRestorer(),
|
||||||
// SY <--
|
// SY <--
|
||||||
) {
|
) {
|
||||||
|
|
||||||
@ -208,7 +208,7 @@ data class RestoreOptions(
|
|||||||
val sourceSettings: Boolean = true,
|
val sourceSettings: Boolean = true,
|
||||||
val library: Boolean = true,
|
val library: Boolean = true,
|
||||||
// SY -->
|
// SY -->
|
||||||
val savedSearches: Boolean = true
|
val savedSearches: Boolean = true,
|
||||||
// SY <--
|
// SY <--
|
||||||
) {
|
) {
|
||||||
fun toBooleanArray() = booleanArrayOf(
|
fun toBooleanArray() = booleanArrayOf(
|
||||||
|
@ -92,7 +92,7 @@ class MangaRestorer(
|
|||||||
// SY -->
|
// SY -->
|
||||||
mergedMangaReferences = backupManga.mergedMangaReferences,
|
mergedMangaReferences = backupManga.mergedMangaReferences,
|
||||||
flatMetadata = backupManga.flatMetadata,
|
flatMetadata = backupManga.flatMetadata,
|
||||||
customManga = backupManga.getCustomMangaInfo()
|
customManga = backupManga.getCustomMangaInfo(),
|
||||||
// SY <--
|
// SY <--
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -120,7 +120,9 @@ class PagePreviewFetcher(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun executeNetworkRequest(): Response {
|
private suspend fun executeNetworkRequest(): Response {
|
||||||
val response = sourceLazy.value?.fetchPreviewImage(page.getPagePreviewInfo(), getCacheControl()) ?: callFactoryLazy.value.newCall(newRequest()).await()
|
val response = sourceLazy.value?.fetchPreviewImage(
|
||||||
|
page.getPagePreviewInfo(), getCacheControl(),
|
||||||
|
) ?: callFactoryLazy.value.newCall(newRequest()).await()
|
||||||
if (!response.isSuccessful && response.code != HTTP_NOT_MODIFIED) {
|
if (!response.isSuccessful && response.code != HTTP_NOT_MODIFIED) {
|
||||||
response.close()
|
response.close()
|
||||||
throw HttpException(response)
|
throw HttpException(response)
|
||||||
|
@ -178,7 +178,9 @@ class DownloadCache(
|
|||||||
|
|
||||||
val sourceDir = rootDownloadsDir.sourceDirs[manga.source]
|
val sourceDir = rootDownloadsDir.sourceDirs[manga.source]
|
||||||
if (sourceDir != null) {
|
if (sourceDir != null) {
|
||||||
val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(/* SY --> */ manga.ogTitle /* SY <-- */)]
|
val mangaDir = sourceDir.mangaDirs[
|
||||||
|
provider.getMangaDirName(/* SY --> */ manga.ogTitle /* SY <-- */),
|
||||||
|
]
|
||||||
if (mangaDir != null) {
|
if (mangaDir != null) {
|
||||||
return mangaDir.chapterDirs.size
|
return mangaDir.chapterDirs.size
|
||||||
}
|
}
|
||||||
@ -228,7 +230,11 @@ class DownloadCache(
|
|||||||
suspend fun removeChapter(chapter: Chapter, manga: Manga) {
|
suspend fun removeChapter(chapter: Chapter, manga: Manga) {
|
||||||
rootDownloadsDirLock.withLock {
|
rootDownloadsDirLock.withLock {
|
||||||
val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return
|
val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return
|
||||||
val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(/* SY --> */ manga.ogTitle /* SY <-- */)] ?: return
|
val mangaDir = sourceDir.mangaDirs[
|
||||||
|
provider.getMangaDirName(
|
||||||
|
/* SY --> */ manga.ogTitle, /* SY <-- */
|
||||||
|
),
|
||||||
|
] ?: return
|
||||||
provider.getValidChapterDirNames(chapter.name, chapter.scanlator).forEach {
|
provider.getValidChapterDirNames(chapter.name, chapter.scanlator).forEach {
|
||||||
if (it in mangaDir.chapterDirs) {
|
if (it in mangaDir.chapterDirs) {
|
||||||
mangaDir.chapterDirs -= it
|
mangaDir.chapterDirs -= it
|
||||||
@ -263,7 +269,11 @@ class DownloadCache(
|
|||||||
suspend fun removeChapters(chapters: List<Chapter>, manga: Manga) {
|
suspend fun removeChapters(chapters: List<Chapter>, manga: Manga) {
|
||||||
rootDownloadsDirLock.withLock {
|
rootDownloadsDirLock.withLock {
|
||||||
val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return
|
val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return
|
||||||
val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(/* SY --> */ manga.ogTitle /* SY <-- */)] ?: return
|
val mangaDir = sourceDir.mangaDirs[
|
||||||
|
provider.getMangaDirName(
|
||||||
|
/* SY --> */ manga.ogTitle, /* SY <-- */
|
||||||
|
),
|
||||||
|
] ?: return
|
||||||
chapters.forEach { chapter ->
|
chapters.forEach { chapter ->
|
||||||
provider.getValidChapterDirNames(chapter.name, chapter.scanlator).forEach {
|
provider.getValidChapterDirNames(chapter.name, chapter.scanlator).forEach {
|
||||||
if (it in mangaDir.chapterDirs) {
|
if (it in mangaDir.chapterDirs) {
|
||||||
|
@ -278,7 +278,10 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
|
|||||||
.filter {
|
.filter {
|
||||||
when {
|
when {
|
||||||
it.manga.updateStrategy != UpdateStrategy.ALWAYS_UPDATE -> {
|
it.manga.updateStrategy != UpdateStrategy.ALWAYS_UPDATE -> {
|
||||||
skippedUpdates.add(it.manga to context.stringResource(MR.strings.skipped_reason_not_always_update))
|
skippedUpdates.add(
|
||||||
|
it.manga to
|
||||||
|
context.stringResource(MR.strings.skipped_reason_not_always_update),
|
||||||
|
)
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -298,7 +301,10 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
|
|||||||
}
|
}
|
||||||
|
|
||||||
MANGA_OUTSIDE_RELEASE_PERIOD in restrictions && it.manga.nextUpdate > fetchWindow.second -> {
|
MANGA_OUTSIDE_RELEASE_PERIOD in restrictions && it.manga.nextUpdate > fetchWindow.second -> {
|
||||||
skippedUpdates.add(it.manga to context.stringResource(MR.strings.skipped_reason_not_in_release_period))
|
skippedUpdates.add(
|
||||||
|
it.manga to
|
||||||
|
context.stringResource(MR.strings.skipped_reason_not_in_release_period),
|
||||||
|
)
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
else -> true
|
else -> true
|
||||||
@ -320,7 +326,9 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
|
|||||||
logcat {
|
logcat {
|
||||||
skippedUpdates
|
skippedUpdates
|
||||||
.groupBy { it.second }
|
.groupBy { it.second }
|
||||||
.map { (reason, entries) -> "$reason: [${entries.map { it.first.title }.sorted().joinToString()}]" }
|
.map { (reason, entries) ->
|
||||||
|
"$reason: [${entries.map { it.first.title }.sorted().joinToString()}]"
|
||||||
|
}
|
||||||
.joinToString()
|
.joinToString()
|
||||||
}
|
}
|
||||||
notifier.showUpdateSkippedNotification(skippedUpdates.size)
|
notifier.showUpdateSkippedNotification(skippedUpdates.size)
|
||||||
@ -357,7 +365,10 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
|
|||||||
.map { mangaInSource ->
|
.map { mangaInSource ->
|
||||||
async {
|
async {
|
||||||
semaphore.withPermit {
|
semaphore.withPermit {
|
||||||
if (mdlistLogged && mangaInSource.firstOrNull()?.let { it.manga.source in mangaDexSourceIds } == true) {
|
if (
|
||||||
|
mdlistLogged && mangaInSource.firstOrNull()
|
||||||
|
?.let { it.manga.source in mangaDexSourceIds } == true
|
||||||
|
) {
|
||||||
launch {
|
launch {
|
||||||
mangaInSource.forEach { (manga) ->
|
mangaInSource.forEach { (manga) ->
|
||||||
try {
|
try {
|
||||||
@ -405,8 +416,10 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
|
|||||||
}
|
}
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
val errorMessage = when (e) {
|
val errorMessage = when (e) {
|
||||||
is NoChaptersException -> context.stringResource(MR.strings.no_chapters_error)
|
is NoChaptersException ->
|
||||||
// failedUpdates will already have the source, don't need to copy it into the message
|
context.stringResource(MR.strings.no_chapters_error)
|
||||||
|
// failedUpdates will already have the source,
|
||||||
|
// don't need to copy it into the message
|
||||||
is SourceNotInstalledException -> context.stringResource(
|
is SourceNotInstalledException -> context.stringResource(
|
||||||
MR.strings.loader_not_implemented_error,
|
MR.strings.loader_not_implemented_error,
|
||||||
)
|
)
|
||||||
@ -513,7 +526,11 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
|
|||||||
val source = sourceManager.get(manga.source) ?: return@withUpdateNotification
|
val source = sourceManager.get(manga.source) ?: return@withUpdateNotification
|
||||||
try {
|
try {
|
||||||
val networkManga = source.getMangaDetails(manga.toSManga())
|
val networkManga = source.getMangaDetails(manga.toSManga())
|
||||||
val updatedManga = manga.prepUpdateCover(coverCache, networkManga, true)
|
val updatedManga = manga.prepUpdateCover(
|
||||||
|
coverCache,
|
||||||
|
networkManga,
|
||||||
|
true,
|
||||||
|
)
|
||||||
.copyFrom(networkManga)
|
.copyFrom(networkManga)
|
||||||
try {
|
try {
|
||||||
updateManga.await(updatedManga.toMangaUpdate())
|
updateManga.await(updatedManga.toMangaUpdate())
|
||||||
@ -542,7 +559,8 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
|
|||||||
private suspend fun syncFollows() = coroutineScope {
|
private suspend fun syncFollows() = coroutineScope {
|
||||||
val preferences = Injekt.get<UnsortedPreferences>()
|
val preferences = Injekt.get<UnsortedPreferences>()
|
||||||
var count = 0
|
var count = 0
|
||||||
val mangaDex = MdUtil.getEnabledMangaDex(preferences, sourceManager = sourceManager) ?: return@coroutineScope
|
val mangaDex = MdUtil.getEnabledMangaDex(preferences, sourceManager = sourceManager)
|
||||||
|
?: return@coroutineScope
|
||||||
val syncFollowStatusInts = preferences.mangadexSyncToLibraryIndexes().get().map { it.toInt() }
|
val syncFollowStatusInts = preferences.mangadexSyncToLibraryIndexes().get().map { it.toInt() }
|
||||||
|
|
||||||
val size: Int
|
val size: Int
|
||||||
@ -555,7 +573,9 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
|
|||||||
ensureActive()
|
ensureActive()
|
||||||
|
|
||||||
count++
|
count++
|
||||||
notifier.showProgressNotification(listOf(Manga.create().copy(ogTitle = networkManga.title)), count, size)
|
notifier.showProgressNotification(
|
||||||
|
listOf(Manga.create().copy(ogTitle = networkManga.title)), count, size,
|
||||||
|
)
|
||||||
|
|
||||||
var dbManga = getManga.await(networkManga.url, mangaDex.id)
|
var dbManga = getManga.await(networkManga.url, mangaDex.id)
|
||||||
|
|
||||||
|
@ -107,7 +107,9 @@ class LibraryUpdateNotifier(private val context: Context) {
|
|||||||
Notifications.CHANNEL_LIBRARY_PROGRESS,
|
Notifications.CHANNEL_LIBRARY_PROGRESS,
|
||||||
) {
|
) {
|
||||||
setContentTitle(context.stringResource(MR.strings.label_warning))
|
setContentTitle(context.stringResource(MR.strings.label_warning))
|
||||||
setStyle(NotificationCompat.BigTextStyle().bigText(context.stringResource(MR.strings.notification_size_warning)))
|
setStyle(
|
||||||
|
NotificationCompat.BigTextStyle().bigText(context.stringResource(MR.strings.notification_size_warning)),
|
||||||
|
)
|
||||||
setSmallIcon(R.drawable.ic_warning_white_24dp)
|
setSmallIcon(R.drawable.ic_warning_white_24dp)
|
||||||
setTimeoutAfter(Downloader.WARNING_NOTIF_TIMEOUT_MS)
|
setTimeoutAfter(Downloader.WARNING_NOTIF_TIMEOUT_MS)
|
||||||
setContentIntent(NotificationHandler.openUrl(context, HELP_WARNING_URL))
|
setContentIntent(NotificationHandler.openUrl(context, HELP_WARNING_URL))
|
||||||
@ -338,7 +340,9 @@ class LibraryUpdateNotifier(private val context: Context) {
|
|||||||
if (shouldTruncate) {
|
if (shouldTruncate) {
|
||||||
// "Chapters 1, 2.5, 3, 4, 5 and 10 more"
|
// "Chapters 1, 2.5, 3, 4, 5 and 10 more"
|
||||||
val remaining = displayableChapterNumbers.size - NOTIF_MAX_CHAPTERS
|
val remaining = displayableChapterNumbers.size - NOTIF_MAX_CHAPTERS
|
||||||
val joinedChapterNumbers = displayableChapterNumbers.take(NOTIF_MAX_CHAPTERS).joinToString(", ")
|
val joinedChapterNumbers = displayableChapterNumbers
|
||||||
|
.take(NOTIF_MAX_CHAPTERS)
|
||||||
|
.joinToString(", ")
|
||||||
context.pluralStringResource(
|
context.pluralStringResource(
|
||||||
MR.plurals.notification_chapters_multiple_and_more,
|
MR.plurals.notification_chapters_multiple_and_more,
|
||||||
remaining,
|
remaining,
|
||||||
|
@ -138,7 +138,7 @@ class AppModule(val app: Application) : InjektModule {
|
|||||||
addSingletonFactory { ChapterCache(app) }
|
addSingletonFactory { ChapterCache(app) }
|
||||||
addSingletonFactory { CoverCache(app) }
|
addSingletonFactory { CoverCache(app) }
|
||||||
|
|
||||||
addSingletonFactory { NetworkHelper(app, get()) }
|
addSingletonFactory { NetworkHelper(app, get(), BuildConfig.DEBUG) }
|
||||||
addSingletonFactory { JavaScriptEngine(app) }
|
addSingletonFactory { JavaScriptEngine(app) }
|
||||||
|
|
||||||
addSingletonFactory<SourceManager> { AndroidSourceManager(app, get(), get()) }
|
addSingletonFactory<SourceManager> { AndroidSourceManager(app, get(), get()) }
|
||||||
|
@ -17,7 +17,7 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.compose.runtime.MutableState
|
import androidx.compose.runtime.MutableState
|
||||||
import androidx.compose.runtime.RememberObserver
|
import androidx.compose.runtime.RememberObserver
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableDoubleStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
@ -132,7 +132,7 @@ private fun Boolean.asEnabledString() = if (this) "enabled" else "disabled"
|
|||||||
private class FpsState(private val interval: Int) :
|
private class FpsState(private val interval: Int) :
|
||||||
Choreographer.FrameCallback,
|
Choreographer.FrameCallback,
|
||||||
RememberObserver,
|
RememberObserver,
|
||||||
MutableState<Double> by mutableStateOf(0.0) {
|
MutableState<Double> by mutableDoubleStateOf(0.0) {
|
||||||
private val choreographer = Choreographer.getInstance()
|
private val choreographer = Choreographer.getInstance()
|
||||||
private var startFrameTimeMillis: Long = 0
|
private var startFrameTimeMillis: Long = 0
|
||||||
private var numFramesRendered = 0
|
private var numFramesRendered = 0
|
||||||
|
@ -237,6 +237,7 @@ class EnhancedFilePrinter internal constructor(
|
|||||||
*/
|
*/
|
||||||
var lastFileName: String? = null
|
var lastFileName: String? = null
|
||||||
private set
|
private set
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the current log file.
|
* Get the current log file.
|
||||||
*
|
*
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package eu.kanade.tachiyomi.network
|
package eu.kanade.tachiyomi.network
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import eu.kanade.tachiyomi.core.BuildConfig
|
|
||||||
import eu.kanade.tachiyomi.network.interceptor.CloudflareInterceptor
|
import eu.kanade.tachiyomi.network.interceptor.CloudflareInterceptor
|
||||||
import eu.kanade.tachiyomi.network.interceptor.UncaughtExceptionInterceptor
|
import eu.kanade.tachiyomi.network.interceptor.UncaughtExceptionInterceptor
|
||||||
import eu.kanade.tachiyomi.network.interceptor.UserAgentInterceptor
|
import eu.kanade.tachiyomi.network.interceptor.UserAgentInterceptor
|
||||||
@ -16,6 +15,9 @@ import java.util.concurrent.TimeUnit
|
|||||||
open /* SY <-- */ class NetworkHelper(
|
open /* SY <-- */ class NetworkHelper(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
private val preferences: NetworkPreferences,
|
private val preferences: NetworkPreferences,
|
||||||
|
// SY -->
|
||||||
|
val isDebugBuild: Boolean,
|
||||||
|
// SY <--
|
||||||
) {
|
) {
|
||||||
|
|
||||||
/* SY --> */
|
/* SY --> */
|
||||||
@ -38,7 +40,7 @@ open /* SY <-- */ class NetworkHelper(
|
|||||||
.addInterceptor(UncaughtExceptionInterceptor())
|
.addInterceptor(UncaughtExceptionInterceptor())
|
||||||
.addInterceptor(UserAgentInterceptor(::defaultUserAgentProvider))
|
.addInterceptor(UserAgentInterceptor(::defaultUserAgentProvider))
|
||||||
|
|
||||||
if (BuildConfig.DEBUG) {
|
if (isDebugBuild) {
|
||||||
val httpLoggingInterceptor = HttpLoggingInterceptor().apply {
|
val httpLoggingInterceptor = HttpLoggingInterceptor().apply {
|
||||||
level = HttpLoggingInterceptor.Level.HEADERS
|
level = HttpLoggingInterceptor.Level.HEADERS
|
||||||
}
|
}
|
||||||
|
@ -131,13 +131,24 @@ class ChapterRepositoryImpl(
|
|||||||
|
|
||||||
override suspend fun getMergedChapterByMangaId(mangaId: Long, applyScanlatorFilter: Boolean): List<Chapter> {
|
override suspend fun getMergedChapterByMangaId(mangaId: Long, applyScanlatorFilter: Boolean): List<Chapter> {
|
||||||
return handler.awaitList {
|
return handler.awaitList {
|
||||||
chaptersQueries.getMergedChaptersByMangaId(mangaId, applyScanlatorFilter.toLong(), ChapterMapper::mapChapter)
|
chaptersQueries.getMergedChaptersByMangaId(
|
||||||
|
mangaId,
|
||||||
|
applyScanlatorFilter.toLong(),
|
||||||
|
ChapterMapper::mapChapter,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun getMergedChapterByMangaIdAsFlow(mangaId: Long, applyScanlatorFilter: Boolean): Flow<List<Chapter>> {
|
override suspend fun getMergedChapterByMangaIdAsFlow(
|
||||||
|
mangaId: Long,
|
||||||
|
applyScanlatorFilter: Boolean,
|
||||||
|
): Flow<List<Chapter>> {
|
||||||
return handler.subscribeToList {
|
return handler.subscribeToList {
|
||||||
chaptersQueries.getMergedChaptersByMangaId(mangaId, applyScanlatorFilter.toLong(), ChapterMapper::mapChapter)
|
chaptersQueries.getMergedChaptersByMangaId(
|
||||||
|
mangaId,
|
||||||
|
applyScanlatorFilter.toLong(),
|
||||||
|
ChapterMapper::mapChapter,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// SY <--
|
// SY <--
|
||||||
|
@ -21,7 +21,11 @@ class GetMergedChaptersByMangaId(
|
|||||||
dedupe: Boolean = true,
|
dedupe: Boolean = true,
|
||||||
applyScanlatorFilter: Boolean = false,
|
applyScanlatorFilter: Boolean = false,
|
||||||
): List<Chapter> {
|
): List<Chapter> {
|
||||||
return transformMergedChapters(getMergedReferencesById.await(mangaId), getFromDatabase(mangaId, applyScanlatorFilter), dedupe)
|
return transformMergedChapters(
|
||||||
|
getMergedReferencesById.await(mangaId),
|
||||||
|
getFromDatabase(mangaId, applyScanlatorFilter),
|
||||||
|
dedupe,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun subscribe(
|
suspend fun subscribe(
|
||||||
|
@ -33,6 +33,9 @@ interface ChapterRepository {
|
|||||||
|
|
||||||
suspend fun getMergedChapterByMangaId(mangaId: Long, applyScanlatorFilter: Boolean = false): List<Chapter>
|
suspend fun getMergedChapterByMangaId(mangaId: Long, applyScanlatorFilter: Boolean = false): List<Chapter>
|
||||||
|
|
||||||
suspend fun getMergedChapterByMangaIdAsFlow(mangaId: Long, applyScanlatorFilter: Boolean = false): Flow<List<Chapter>>
|
suspend fun getMergedChapterByMangaIdAsFlow(
|
||||||
|
mangaId: Long,
|
||||||
|
applyScanlatorFilter: Boolean = false,
|
||||||
|
): Flow<List<Chapter>>
|
||||||
// SY <--
|
// SY <--
|
||||||
}
|
}
|
||||||
|
@ -73,6 +73,7 @@ class StorageManager(
|
|||||||
private const val AUTOMATIC_BACKUPS_PATH = "autobackup"
|
private const val AUTOMATIC_BACKUPS_PATH = "autobackup"
|
||||||
private const val DOWNLOADS_PATH = "downloads"
|
private const val DOWNLOADS_PATH = "downloads"
|
||||||
private const val LOCAL_SOURCE_PATH = "local"
|
private const val LOCAL_SOURCE_PATH = "local"
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
private const val LOGS_PATH = "logs"
|
private const val LOGS_PATH = "logs"
|
||||||
// SY <--
|
// SY <--
|
||||||
|
@ -40,7 +40,7 @@ abstract class HttpSource : CatalogueSource {
|
|||||||
// SY -->
|
// SY -->
|
||||||
protected val network: NetworkHelper by lazy {
|
protected val network: NetworkHelper by lazy {
|
||||||
val network = Injekt.get<NetworkHelper>()
|
val network = Injekt.get<NetworkHelper>()
|
||||||
object : NetworkHelper(Injekt.get<Application>(), Injekt.get()) {
|
object : NetworkHelper(Injekt.get<Application>(), Injekt.get(), network.isDebugBuild) {
|
||||||
override val client: OkHttpClient
|
override val client: OkHttpClient
|
||||||
get() = delegate?.networkHttpClient ?: network.client
|
get() = delegate?.networkHttpClient ?: network.client
|
||||||
.newBuilder()
|
.newBuilder()
|
||||||
|
@ -106,7 +106,9 @@ class EHentaiSearchMetadata : RaisedSearchMetadata() {
|
|||||||
getItem(visible) { stringResource(SYMR.strings.visible) },
|
getItem(visible) { stringResource(SYMR.strings.visible) },
|
||||||
getItem(language) { stringResource(SYMR.strings.language) },
|
getItem(language) { stringResource(SYMR.strings.language) },
|
||||||
getItem(translated) { stringResource(SYMR.strings.translated) },
|
getItem(translated) { stringResource(SYMR.strings.translated) },
|
||||||
getItem(size, { MetadataUtil.humanReadableByteCount(it, true) }) { stringResource(SYMR.strings.gallery_size) },
|
getItem(size, { MetadataUtil.humanReadableByteCount(it, true) }) {
|
||||||
|
stringResource(SYMR.strings.gallery_size)
|
||||||
|
},
|
||||||
getItem(length) { stringResource(SYMR.strings.page_count) },
|
getItem(length) { stringResource(SYMR.strings.page_count) },
|
||||||
getItem(favorites) { stringResource(SYMR.strings.total_favorites) },
|
getItem(favorites) { stringResource(SYMR.strings.total_favorites) },
|
||||||
getItem(ratingCount) { stringResource(SYMR.strings.total_ratings) },
|
getItem(ratingCount) { stringResource(SYMR.strings.total_ratings) },
|
||||||
|
@ -44,7 +44,9 @@ class EightMusesSearchMetadata : RaisedSearchMetadata() {
|
|||||||
return with(context) {
|
return with(context) {
|
||||||
listOfNotNull(
|
listOfNotNull(
|
||||||
getItem(title) { stringResource(MR.strings.title) },
|
getItem(title) { stringResource(MR.strings.title) },
|
||||||
getItem(path.nullIfEmpty(), { it.joinToString("/", prefix = "/") }) { stringResource(SYMR.strings.path) },
|
getItem(path.nullIfEmpty(), { it.joinToString("/", prefix = "/") }) {
|
||||||
|
stringResource(SYMR.strings.path)
|
||||||
|
},
|
||||||
getItem(thumbnailUrl) { stringResource(SYMR.strings.thumbnail_url) },
|
getItem(thumbnailUrl) { stringResource(SYMR.strings.thumbnail_url) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user