Minor cleanup

This commit is contained in:
Jobobby04 2023-12-24 14:28:39 -05:00
parent 7f89587889
commit c36d2794bb
25 changed files with 166 additions and 63 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -39,18 +39,32 @@ 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 =
BackupChapter( { _: Long,
url = url, _: Long,
name = name, url: String,
chapterNumber = chapterNumber.toFloat(), name: String,
scanlator = scanlator, scanlator: String?,
read = read, read: Boolean,
bookmark = bookmark, bookmark: Boolean,
lastPageRead = lastPageRead, lastPageRead: Long,
dateFetch = dateFetch, chapterNumber: Double,
dateUpload = dateUpload, source_order: Long,
sourceOrder = source_order, dateFetch: Long,
lastModifiedAt = lastModifiedAt, dateUpload: Long,
) lastModifiedAt: Long,
} ->
BackupChapter(
url = url,
name = name,
chapterNumber = chapterNumber.toFloat(),
scanlator = scanlator,
read = read,
bookmark = bookmark,
lastPageRead = lastPageRead,
dateFetch = dateFetch,
dateUpload = dateUpload,
sourceOrder = source_order,
lastModifiedAt = lastModifiedAt,
)
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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.
* *

View 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
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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