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.tachiyomi.extension.model.Extension
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.ExtensionsScreenModel
import eu.kanade.tachiyomi.util.system.LocaleHelper
import exh.source.anyIs
import tachiyomi.i18n.MR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.presentation.core.components.FastScrollLazyColumn

View File

@ -210,7 +210,7 @@ object SettingsDataScreen : SearchableSettings {
// SY -->
val pagePreviewCache = remember { Injekt.get<PagePreviewCache>() }
var pagePreviewReadableSizeSema by remember { mutableStateOf(0) }
var pagePreviewReadableSizeSema by remember { mutableIntStateOf(0) }
val pagePreviewReadableSize = remember(pagePreviewReadableSizeSema) { pagePreviewCache.readableSize }
// SY <--

View File

@ -248,10 +248,14 @@ object SettingsLibraryScreen : SearchableSettings {
pref = libraryPreferences.swipeToStartAction(),
title = stringResource(MR.strings.pref_chapter_swipe_start),
entries = mapOf(
LibraryPreferences.ChapterSwipeAction.Disabled to stringResource(MR.strings.disabled),
LibraryPreferences.ChapterSwipeAction.ToggleBookmark to 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.Disabled to
stringResource(MR.strings.disabled),
LibraryPreferences.ChapterSwipeAction.ToggleBookmark to
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(
@ -259,8 +263,10 @@ object SettingsLibraryScreen : SearchableSettings {
title = stringResource(MR.strings.pref_chapter_swipe_end),
entries = mapOf(
LibraryPreferences.ChapterSwipeAction.Disabled to stringResource(MR.strings.disabled),
LibraryPreferences.ChapterSwipeAction.ToggleBookmark to stringResource(MR.strings.action_bookmark),
LibraryPreferences.ChapterSwipeAction.ToggleRead to stringResource(MR.strings.action_mark_as_read),
LibraryPreferences.ChapterSwipeAction.ToggleBookmark to
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),
),
),

View File

@ -208,8 +208,10 @@ object SettingsReaderScreen : SearchableSettings {
title = stringResource(MR.strings.pref_read_with_tapping_inverted),
entries = mapOf(
ReaderPreferences.TappingInvertMode.NONE to stringResource(MR.strings.none),
ReaderPreferences.TappingInvertMode.HORIZONTAL to stringResource(MR.strings.tapping_inverted_horizontal),
ReaderPreferences.TappingInvertMode.VERTICAL to stringResource(MR.strings.tapping_inverted_vertical),
ReaderPreferences.TappingInvertMode.HORIZONTAL to
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),
),
enabled = navMode != 5,
@ -308,8 +310,10 @@ object SettingsReaderScreen : SearchableSettings {
title = stringResource(MR.strings.pref_read_with_tapping_inverted),
entries = mapOf(
ReaderPreferences.TappingInvertMode.NONE to stringResource(MR.strings.none),
ReaderPreferences.TappingInvertMode.HORIZONTAL to stringResource(MR.strings.tapping_inverted_horizontal),
ReaderPreferences.TappingInvertMode.VERTICAL to stringResource(MR.strings.tapping_inverted_vertical),
ReaderPreferences.TappingInvertMode.HORIZONTAL to
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),
),
enabled = navMode != 5,

View File

@ -88,7 +88,9 @@ class SettingsSearchScreen : Screen() {
focusRequester.requestFocus()
}
var textFieldValue by rememberSaveable(stateSaver = TextFieldValue.Saver) { mutableStateOf(TextFieldValue()) }
var textFieldValue by rememberSaveable(stateSaver = TextFieldValue.Saver) {
mutableStateOf(TextFieldValue())
}
Scaffold(
topBar = {
Column {
@ -202,7 +204,11 @@ private fun SearchResult(
SearchResultItem(
route = settingsData.route,
title = p.title,
breadcrumbs = getLocalizedBreadcrumb(path = settingsData.title, node = categoryTitle, isLtr = isLtr),
breadcrumbs = getLocalizedBreadcrumb(
path = settingsData.title,
node = categoryTitle,
isLtr = isLtr,
),
highlightKey = p.title,
)
}

View File

@ -112,7 +112,9 @@ fun BottomReaderBar(
if (cropBorders.isIn(enabledButtons)) {
IconButton(onClick = onClickCropBorder) {
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),
)
}

View File

@ -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(
url = url,
name = name,
@ -53,4 +67,4 @@ val backupChapterMapper = { _: Long, _: Long, url: String, name: String, scanlat
sourceOrder = source_order,
lastModifiedAt = lastModifiedAt,
)
}
}

View File

@ -36,7 +36,18 @@ data class BackupMergedMangaReference(
}
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(
isInfoManga = isInfoManga,
getChapterUpdates = getChapterUpdates,

View File

@ -32,7 +32,7 @@ class BackupRestorer(
private val preferenceRestorer: PreferenceRestorer = PreferenceRestorer(context),
private val mangaRestorer: MangaRestorer = MangaRestorer(),
// SY -->
private val savedSearchRestorer: SavedSearchRestorer = SavedSearchRestorer()
private val savedSearchRestorer: SavedSearchRestorer = SavedSearchRestorer(),
// SY <--
) {
@ -208,7 +208,7 @@ data class RestoreOptions(
val sourceSettings: Boolean = true,
val library: Boolean = true,
// SY -->
val savedSearches: Boolean = true
val savedSearches: Boolean = true,
// SY <--
) {
fun toBooleanArray() = booleanArrayOf(

View File

@ -92,7 +92,7 @@ class MangaRestorer(
// SY -->
mergedMangaReferences = backupManga.mergedMangaReferences,
flatMetadata = backupManga.flatMetadata,
customManga = backupManga.getCustomMangaInfo()
customManga = backupManga.getCustomMangaInfo(),
// SY <--
)
}

View File

@ -120,7 +120,9 @@ class PagePreviewFetcher(
}
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) {
response.close()
throw HttpException(response)

View File

@ -178,7 +178,9 @@ class DownloadCache(
val sourceDir = rootDownloadsDir.sourceDirs[manga.source]
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) {
return mangaDir.chapterDirs.size
}
@ -228,7 +230,11 @@ class DownloadCache(
suspend fun removeChapter(chapter: Chapter, manga: Manga) {
rootDownloadsDirLock.withLock {
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 {
if (it in mangaDir.chapterDirs) {
mangaDir.chapterDirs -= it
@ -263,7 +269,11 @@ class DownloadCache(
suspend fun removeChapters(chapters: List<Chapter>, manga: Manga) {
rootDownloadsDirLock.withLock {
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 ->
provider.getValidChapterDirNames(chapter.name, chapter.scanlator).forEach {
if (it in mangaDir.chapterDirs) {

View File

@ -278,7 +278,10 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
.filter {
when {
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
}
@ -298,7 +301,10 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
}
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
}
else -> true
@ -320,7 +326,9 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
logcat {
skippedUpdates
.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()
}
notifier.showUpdateSkippedNotification(skippedUpdates.size)
@ -357,7 +365,10 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
.map { mangaInSource ->
async {
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 {
mangaInSource.forEach { (manga) ->
try {
@ -405,8 +416,10 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
}
} catch (e: Throwable) {
val errorMessage = when (e) {
is NoChaptersException -> context.stringResource(MR.strings.no_chapters_error)
// failedUpdates will already have the source, don't need to copy it into the message
is NoChaptersException ->
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(
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
try {
val networkManga = source.getMangaDetails(manga.toSManga())
val updatedManga = manga.prepUpdateCover(coverCache, networkManga, true)
val updatedManga = manga.prepUpdateCover(
coverCache,
networkManga,
true,
)
.copyFrom(networkManga)
try {
updateManga.await(updatedManga.toMangaUpdate())
@ -542,7 +559,8 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
private suspend fun syncFollows() = coroutineScope {
val preferences = Injekt.get<UnsortedPreferences>()
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 size: Int
@ -555,7 +573,9 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
ensureActive()
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)

View File

@ -107,7 +107,9 @@ class LibraryUpdateNotifier(private val context: Context) {
Notifications.CHANNEL_LIBRARY_PROGRESS,
) {
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)
setTimeoutAfter(Downloader.WARNING_NOTIF_TIMEOUT_MS)
setContentIntent(NotificationHandler.openUrl(context, HELP_WARNING_URL))
@ -338,7 +340,9 @@ class LibraryUpdateNotifier(private val context: Context) {
if (shouldTruncate) {
// "Chapters 1, 2.5, 3, 4, 5 and 10 more"
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(
MR.plurals.notification_chapters_multiple_and_more,
remaining,

View File

@ -138,7 +138,7 @@ class AppModule(val app: Application) : InjektModule {
addSingletonFactory { ChapterCache(app) }
addSingletonFactory { CoverCache(app) }
addSingletonFactory { NetworkHelper(app, get()) }
addSingletonFactory { NetworkHelper(app, get(), BuildConfig.DEBUG) }
addSingletonFactory { JavaScriptEngine(app) }
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.RememberObserver
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.mutableDoubleStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
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) :
Choreographer.FrameCallback,
RememberObserver,
MutableState<Double> by mutableStateOf(0.0) {
MutableState<Double> by mutableDoubleStateOf(0.0) {
private val choreographer = Choreographer.getInstance()
private var startFrameTimeMillis: Long = 0
private var numFramesRendered = 0

View File

@ -237,6 +237,7 @@ class EnhancedFilePrinter internal constructor(
*/
var lastFileName: String? = null
private set
/**
* Get the current log file.
*

View File

@ -1,7 +1,6 @@
package eu.kanade.tachiyomi.network
import android.content.Context
import eu.kanade.tachiyomi.core.BuildConfig
import eu.kanade.tachiyomi.network.interceptor.CloudflareInterceptor
import eu.kanade.tachiyomi.network.interceptor.UncaughtExceptionInterceptor
import eu.kanade.tachiyomi.network.interceptor.UserAgentInterceptor
@ -16,6 +15,9 @@ import java.util.concurrent.TimeUnit
open /* SY <-- */ class NetworkHelper(
private val context: Context,
private val preferences: NetworkPreferences,
// SY -->
val isDebugBuild: Boolean,
// SY <--
) {
/* SY --> */
@ -38,7 +40,7 @@ open /* SY <-- */ class NetworkHelper(
.addInterceptor(UncaughtExceptionInterceptor())
.addInterceptor(UserAgentInterceptor(::defaultUserAgentProvider))
if (BuildConfig.DEBUG) {
if (isDebugBuild) {
val httpLoggingInterceptor = HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.HEADERS
}

View File

@ -131,13 +131,24 @@ class ChapterRepositoryImpl(
override suspend fun getMergedChapterByMangaId(mangaId: Long, applyScanlatorFilter: Boolean): List<Chapter> {
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 {
chaptersQueries.getMergedChaptersByMangaId(mangaId, applyScanlatorFilter.toLong(), ChapterMapper::mapChapter)
chaptersQueries.getMergedChaptersByMangaId(
mangaId,
applyScanlatorFilter.toLong(),
ChapterMapper::mapChapter,
)
}
}
// SY <--

View File

@ -21,7 +21,11 @@ class GetMergedChaptersByMangaId(
dedupe: Boolean = true,
applyScanlatorFilter: Boolean = false,
): List<Chapter> {
return transformMergedChapters(getMergedReferencesById.await(mangaId), getFromDatabase(mangaId, applyScanlatorFilter), dedupe)
return transformMergedChapters(
getMergedReferencesById.await(mangaId),
getFromDatabase(mangaId, applyScanlatorFilter),
dedupe,
)
}
suspend fun subscribe(

View File

@ -33,6 +33,9 @@ interface ChapterRepository {
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 <--
}

View File

@ -73,6 +73,7 @@ class StorageManager(
private const val AUTOMATIC_BACKUPS_PATH = "autobackup"
private const val DOWNLOADS_PATH = "downloads"
private const val LOCAL_SOURCE_PATH = "local"
// SY -->
private const val LOGS_PATH = "logs"
// SY <--

View File

@ -40,7 +40,7 @@ abstract class HttpSource : CatalogueSource {
// SY -->
protected val network: NetworkHelper by lazy {
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
get() = delegate?.networkHttpClient ?: network.client
.newBuilder()

View File

@ -106,7 +106,9 @@ class EHentaiSearchMetadata : RaisedSearchMetadata() {
getItem(visible) { stringResource(SYMR.strings.visible) },
getItem(language) { stringResource(SYMR.strings.language) },
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(favorites) { stringResource(SYMR.strings.total_favorites) },
getItem(ratingCount) { stringResource(SYMR.strings.total_ratings) },

View File

@ -44,7 +44,9 @@ class EightMusesSearchMetadata : RaisedSearchMetadata() {
return with(context) {
listOfNotNull(
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) },
)
}