From 8ce8b600922410a4eb64da35a1850840a2f28669 Mon Sep 17 00:00:00 2001
From: Ivan Iskandar <12537387+ivaniskandar@users.noreply.github.com>
Date: Thu, 30 Nov 2023 04:34:07 +0700
Subject: [PATCH 01/21] Migrate downloader service to WorkManager (#10190)
---
app/build.gradle.kts | 1 -
app/src/main/AndroidManifest.xml | 11 +-
.../tachiyomi/data/download/DownloadJob.kt | 121 ++++++++++++++
.../data/download/DownloadManager.kt | 13 +-
.../data/download/DownloadService.kt | 151 ------------------
.../tachiyomi/data/download/Downloader.kt | 7 +-
.../ui/download/DownloadQueueScreenModel.kt | 6 +-
gradle/libs.versions.toml | 1 -
8 files changed, 142 insertions(+), 169 deletions(-)
create mode 100644 app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadJob.kt
delete mode 100644 app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 0f0917a05..0fd4cd1fa 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -196,7 +196,6 @@ dependencies {
// RxJava
implementation(libs.rxjava)
- implementation(libs.flowreactivenetwork)
// Networking
implementation(libs.bundles.okhttp)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5c903960f..9eddc43a2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -21,6 +21,8 @@
+
+
-
-
@@ -154,6 +152,11 @@
android:value="true" />
+
+
= Build.VERSION_CODES.Q) {
+ ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
+ } else {
+ 0
+ },
+ )
+ }
+
+ override suspend fun doWork(): Result {
+ try {
+ setForeground(getForegroundInfo())
+ } catch (e: IllegalStateException) {
+ logcat(LogPriority.ERROR, e) { "Not allowed to set foreground job" }
+ }
+
+ var networkCheck = checkConnectivity()
+ var active = networkCheck
+ downloadManager.downloaderStart()
+
+ // Keep the worker running when needed
+ while (active) {
+ delay(100)
+ networkCheck = checkConnectivity()
+ active = !isStopped && networkCheck && downloadManager.isRunning
+ }
+
+ return Result.success()
+ }
+
+ private fun checkConnectivity(): Boolean {
+ return with(applicationContext) {
+ if (isOnline()) {
+ val noWifi = downloadPreferences.downloadOnlyOverWifi().get() && !isConnectedToWifi()
+ if (noWifi) {
+ downloadManager.downloaderStop(
+ applicationContext.getString(R.string.download_notifier_text_only_wifi),
+ )
+ }
+ !noWifi
+ } else {
+ downloadManager.downloaderStop(applicationContext.getString(R.string.download_notifier_no_network))
+ false
+ }
+ }
+ }
+
+ companion object {
+ private const val TAG = "Downloader"
+
+ fun start(context: Context) {
+ val request = OneTimeWorkRequestBuilder()
+ .addTag(TAG)
+ .build()
+ WorkManager.getInstance(context)
+ .enqueueUniqueWork(TAG, ExistingWorkPolicy.REPLACE, request)
+ }
+
+ fun stop(context: Context) {
+ WorkManager.getInstance(context)
+ .cancelUniqueWork(TAG)
+ }
+
+ fun isRunning(context: Context): Boolean {
+ return WorkManager.getInstance(context)
+ .getWorkInfosForUniqueWork(TAG)
+ .get()
+ .let { list -> list.count { it.state == WorkInfo.State.RUNNING } == 1 }
+ }
+
+ fun isRunningFlow(context: Context): Flow {
+ return WorkManager.getInstance(context)
+ .getWorkInfosForUniqueWorkLiveData(TAG)
+ .asFlow()
+ .map { list -> list.count { it.state == WorkInfo.State.RUNNING } == 1 }
+ }
+ }
+}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt
index ba5c4d81a..dca4fac23 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt
@@ -46,6 +46,9 @@ class DownloadManager(
*/
private val downloader = Downloader(context, provider, cache)
+ val isRunning: Boolean
+ get() = downloader.isRunning
+
/**
* Queue to delay the deletion of a list of chapters until triggered.
*/
@@ -59,13 +62,13 @@ class DownloadManager(
fun downloaderStop(reason: String? = null) = downloader.stop(reason)
val isDownloaderRunning
- get() = DownloadService.isRunning
+ get() = DownloadJob.isRunningFlow(context)
/**
* Tells the downloader to begin downloads.
*/
fun startDownloads() {
- DownloadService.start(context)
+ DownloadJob.start(context)
}
/**
@@ -104,10 +107,10 @@ class DownloadManager(
queue.add(0, toAdd)
reorderQueue(queue)
if (!downloader.isRunning) {
- if (DownloadService.isRunning(context)) {
+ if (DownloadJob.isRunning(context)) {
downloader.start()
} else {
- DownloadService.start(context)
+ DownloadJob.start(context)
}
}
}
@@ -143,7 +146,7 @@ class DownloadManager(
addAll(0, downloads)
reorderQueue(this)
}
- if (!DownloadService.isRunning(context)) DownloadService.start(context)
+ if (!DownloadJob.isRunning(context)) DownloadJob.start(context)
}
/**
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt
deleted file mode 100644
index 9ce5c5b2a..000000000
--- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt
+++ /dev/null
@@ -1,151 +0,0 @@
-package eu.kanade.tachiyomi.data.download
-
-import android.app.Notification
-import android.app.Service
-import android.content.Context
-import android.content.Intent
-import android.os.IBinder
-import android.os.PowerManager
-import androidx.core.content.ContextCompat
-import dev.icerock.moko.resources.StringResource
-import eu.kanade.tachiyomi.data.notification.Notifications
-import eu.kanade.tachiyomi.util.system.acquireWakeLock
-import eu.kanade.tachiyomi.util.system.isConnectedToWifi
-import eu.kanade.tachiyomi.util.system.isOnline
-import eu.kanade.tachiyomi.util.system.isServiceRunning
-import eu.kanade.tachiyomi.util.system.notificationBuilder
-import eu.kanade.tachiyomi.util.system.toast
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.SupervisorJob
-import kotlinx.coroutines.cancel
-import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.flow.asStateFlow
-import kotlinx.coroutines.flow.catch
-import kotlinx.coroutines.flow.launchIn
-import kotlinx.coroutines.flow.onEach
-import logcat.LogPriority
-import ru.beryukhov.reactivenetwork.ReactiveNetwork
-import tachiyomi.core.i18n.stringResource
-import tachiyomi.core.util.lang.withUIContext
-import tachiyomi.core.util.system.logcat
-import tachiyomi.domain.download.service.DownloadPreferences
-import tachiyomi.i18n.MR
-import uy.kohesive.injekt.injectLazy
-
-/**
- * This service is used to manage the downloader. The system can decide to stop the service, in
- * which case the downloader is also stopped. It's also stopped while there's no network available.
- * While the downloader is running, a wake lock will be held.
- */
-class DownloadService : Service() {
-
- companion object {
-
- private val _isRunning = MutableStateFlow(false)
- val isRunning = _isRunning.asStateFlow()
-
- /**
- * Starts this service.
- *
- * @param context the application context.
- */
- fun start(context: Context) {
- val intent = Intent(context, DownloadService::class.java)
- ContextCompat.startForegroundService(context, intent)
- }
-
- /**
- * Stops this service.
- *
- * @param context the application context.
- */
- fun stop(context: Context) {
- context.stopService(Intent(context, DownloadService::class.java))
- }
-
- /**
- * Returns the status of the service.
- *
- * @param context the application context.
- * @return true if the service is running, false otherwise.
- */
- fun isRunning(context: Context): Boolean {
- return context.isServiceRunning(DownloadService::class.java)
- }
- }
-
- private val downloadManager: DownloadManager by injectLazy()
- private val downloadPreferences: DownloadPreferences by injectLazy()
-
- /**
- * Wake lock to prevent the device to enter sleep mode.
- */
- private lateinit var wakeLock: PowerManager.WakeLock
-
- private lateinit var scope: CoroutineScope
-
- override fun onCreate() {
- scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
- startForeground(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS, getPlaceholderNotification())
- wakeLock = acquireWakeLock(javaClass.name)
- _isRunning.value = true
- listenNetworkChanges()
- }
-
- override fun onDestroy() {
- scope.cancel()
- _isRunning.value = false
- downloadManager.downloaderStop()
- if (wakeLock.isHeld) {
- wakeLock.release()
- }
- }
-
- // Not used
- override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
- return START_NOT_STICKY
- }
-
- // Not used
- override fun onBind(intent: Intent): IBinder? {
- return null
- }
-
- private fun downloaderStop(string: StringResource) {
- downloadManager.downloaderStop(stringResource(string))
- }
-
- private fun listenNetworkChanges() {
- ReactiveNetwork()
- .observeNetworkConnectivity(applicationContext)
- .onEach {
- withUIContext {
- if (isOnline()) {
- if (downloadPreferences.downloadOnlyOverWifi().get() && !isConnectedToWifi()) {
- downloaderStop(MR.strings.download_notifier_text_only_wifi)
- } else {
- val started = downloadManager.downloaderStart()
- if (!started) stopSelf()
- }
- } else {
- downloaderStop(MR.strings.download_notifier_no_network)
- }
- }
- }
- .catch { error ->
- withUIContext {
- logcat(LogPriority.ERROR, error)
- toast(MR.strings.download_queue_error)
- stopSelf()
- }
- }
- .launchIn(scope)
- }
-
- private fun getPlaceholderNotification(): Notification {
- return notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {
- setContentTitle(stringResource(MR.strings.download_notifier_downloader_title))
- }.build()
- }
-}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt
index 5e58d4f6a..1dd117f41 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt
@@ -161,10 +161,7 @@ class Downloader(
isPaused = false
- // Prevent recursion when DownloadService.onDestroy() calls downloader.stop()
- if (DownloadService.isRunning.value) {
- DownloadService.stop(context)
- }
+ DownloadJob.stop(context)
}
/**
@@ -310,7 +307,7 @@ class Downloader(
)
}
}
- DownloadService.start(context)
+ DownloadJob.start(context)
}
}
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreenModel.kt
index 3cfb3ff1a..3f8896632 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreenModel.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreenModel.kt
@@ -11,12 +11,14 @@ import eu.kanade.tachiyomi.source.model.Page
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import uy.kohesive.injekt.Injekt
@@ -137,8 +139,8 @@ class DownloadQueueScreenModel(
adapter = null
}
- val isDownloaderRunning
- get() = downloadManager.isDownloaderRunning
+ val isDownloaderRunning = downloadManager.isDownloaderRunning
+ .stateIn(screenModelScope, SharingStarted.WhileSubscribed(5000), false)
fun getDownloadStatusFlow() = downloadManager.statusFlow()
fun getDownloadProgressFlow() = downloadManager.progressFlow()
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 889ac693d..fa08d896a 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -15,7 +15,6 @@ android-shortcut-gradle = "com.github.zellius:android-shortcut-gradle-plugin:0.1
google-services-gradle = "com.google.gms:google-services:4.4.0"
rxjava = "io.reactivex:rxjava:1.3.8"
-flowreactivenetwork = "ru.beryukhov:flowreactivenetwork:1.0.4"
okhttp-core = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp_version" }
okhttp-logging = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okhttp_version" }
From 5dda32bb8143abe4e495fb7a5693299ac9f4da41 Mon Sep 17 00:00:00 2001
From: arkon
Date: Wed, 29 Nov 2023 16:44:49 -0500
Subject: [PATCH 02/21] Bump dependencies
---
.github/workflows/build_pull_request.yml | 2 +-
.github/workflows/build_push.yml | 2 +-
.../settings/screen/debug/DebugInfoScreen.kt | 1 -
.../settings/screen/debug/WorkerInfoScreen.kt | 25 +++++++++++++------
.../ui/browse/migration/MigrationFlags.kt | 1 -
gradle/androidx.versions.toml | 2 +-
gradle/compose.versions.toml | 2 +-
gradle/libs.versions.toml | 2 +-
gradle/wrapper/gradle-wrapper.properties | 2 +-
9 files changed, 24 insertions(+), 15 deletions(-)
diff --git a/.github/workflows/build_pull_request.yml b/.github/workflows/build_pull_request.yml
index da79440dc..5a7bfdd10 100644
--- a/.github/workflows/build_pull_request.yml
+++ b/.github/workflows/build_pull_request.yml
@@ -28,7 +28,7 @@ jobs:
uses: actions/dependency-review-action@v3
- name: Set up JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v4
with:
java-version: 17
distribution: adopt
diff --git a/.github/workflows/build_push.yml b/.github/workflows/build_push.yml
index e43c229a0..6127d3f30 100644
--- a/.github/workflows/build_push.yml
+++ b/.github/workflows/build_push.yml
@@ -23,7 +23,7 @@ jobs:
uses: gradle/wrapper-validation-action@v1
- name: Set up JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v4
with:
java-version: 17
distribution: adopt
diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/DebugInfoScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/DebugInfoScreen.kt
index b4be0ebd9..3eecee438 100644
--- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/DebugInfoScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/DebugInfoScreen.kt
@@ -13,7 +13,6 @@ import eu.kanade.presentation.more.settings.Preference
import eu.kanade.presentation.more.settings.PreferenceScaffold
import eu.kanade.presentation.more.settings.screen.about.AboutScreen
import eu.kanade.presentation.util.Screen
-import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.util.system.DeviceUtil
import eu.kanade.tachiyomi.util.system.WebViewUtil
import kotlinx.coroutines.guava.await
diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/WorkerInfoScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/WorkerInfoScreen.kt
index 2c891e271..ea8db81e8 100644
--- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/WorkerInfoScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/WorkerInfoScreen.kt
@@ -18,17 +18,18 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.fastForEach
-import androidx.lifecycle.asFlow
import androidx.work.WorkInfo
import androidx.work.WorkQuery
import cafe.adriel.voyager.core.model.ScreenModel
import cafe.adriel.voyager.core.model.rememberScreenModel
import cafe.adriel.voyager.navigator.LocalNavigator
import cafe.adriel.voyager.navigator.currentOrThrow
+import eu.kanade.domain.ui.UiPreferences
import eu.kanade.presentation.components.AppBar
import eu.kanade.presentation.components.AppBarActions
import eu.kanade.presentation.util.Screen
import eu.kanade.presentation.util.ioCoroutineScope
+import eu.kanade.tachiyomi.util.lang.toDateTimestampString
import eu.kanade.tachiyomi.util.system.copyToClipboard
import eu.kanade.tachiyomi.util.system.workManager
import kotlinx.collections.immutable.persistentListOf
@@ -39,6 +40,9 @@ import tachiyomi.i18n.MR
import tachiyomi.presentation.core.components.material.Scaffold
import tachiyomi.presentation.core.i18n.stringResource
import tachiyomi.presentation.core.util.plus
+import uy.kohesive.injekt.Injekt
+import uy.kohesive.injekt.api.get
+import java.util.Date
class WorkerInfoScreen : Screen() {
@@ -116,22 +120,19 @@ class WorkerInfoScreen : Screen() {
private val workManager = context.workManager
val finished = workManager
- .getWorkInfosLiveData(
+ .getWorkInfosFlow(
WorkQuery.fromStates(WorkInfo.State.SUCCEEDED, WorkInfo.State.FAILED, WorkInfo.State.CANCELLED),
)
- .asFlow()
.map(::constructString)
.stateIn(ioCoroutineScope, SharingStarted.WhileSubscribed(), "")
val running = workManager
- .getWorkInfosLiveData(WorkQuery.fromStates(WorkInfo.State.RUNNING))
- .asFlow()
+ .getWorkInfosFlow(WorkQuery.fromStates(WorkInfo.State.RUNNING))
.map(::constructString)
.stateIn(ioCoroutineScope, SharingStarted.WhileSubscribed(), "")
val enqueued = workManager
- .getWorkInfosLiveData(WorkQuery.fromStates(WorkInfo.State.ENQUEUED))
- .asFlow()
+ .getWorkInfosFlow(WorkQuery.fromStates(WorkInfo.State.ENQUEUED))
.map(::constructString)
.stateIn(ioCoroutineScope, SharingStarted.WhileSubscribed(), "")
@@ -146,6 +147,16 @@ class WorkerInfoScreen : Screen() {
appendLine(" - $it")
}
appendLine("State: ${workInfo.state}")
+ if (workInfo.state == WorkInfo.State.ENQUEUED) {
+ appendLine(
+ "Next scheduled run: ${Date(workInfo.nextScheduleTimeMillis).toDateTimestampString(
+ UiPreferences.dateFormat(
+ Injekt.get().dateFormat().get(),
+ ),
+ )}",
+ )
+ appendLine("Attempt #${workInfo.runAttemptCount + 1}")
+ }
appendLine()
}
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/MigrationFlags.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/MigrationFlags.kt
index c79c111fc..3064ad60f 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/MigrationFlags.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/MigrationFlags.kt
@@ -6,7 +6,6 @@ import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.download.DownloadCache
import tachiyomi.domain.manga.model.Manga
import tachiyomi.i18n.MR
-import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
data class MigrationFlag(
diff --git a/gradle/androidx.versions.toml b/gradle/androidx.versions.toml
index 7ef758874..5d7aead08 100644
--- a/gradle/androidx.versions.toml
+++ b/gradle/androidx.versions.toml
@@ -20,7 +20,7 @@ lifecycle-common = { module = "androidx.lifecycle:lifecycle-common", version.ref
lifecycle-process = { module = "androidx.lifecycle:lifecycle-process", version.ref = "lifecycle_version" }
lifecycle-runtimektx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle_version" }
-workmanager = "androidx.work:work-runtime-ktx:2.8.1"
+workmanager = "androidx.work:work-runtime:2.9.0"
paging-runtime = { module = "androidx.paging:paging-runtime", version.ref = "paging_version" }
paging-compose = { module = "androidx.paging:paging-compose", version.ref = "paging_version" }
diff --git a/gradle/compose.versions.toml b/gradle/compose.versions.toml
index ce7b074bf..6ccce2b06 100644
--- a/gradle/compose.versions.toml
+++ b/gradle/compose.versions.toml
@@ -1,5 +1,5 @@
[versions]
-compiler = "1.5.4"
+compiler = "1.5.5"
compose-bom = "2023.12.00-alpha02"
accompanist = "0.33.2-alpha"
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index fa08d896a..3cd0e3da7 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -26,7 +26,7 @@ conscrypt-android = "org.conscrypt:conscrypt-android:2.5.2"
quickjs-android = "app.cash.quickjs:quickjs-android:0.9.2"
-jsoup = "org.jsoup:jsoup:1.16.2"
+jsoup = "org.jsoup:jsoup:1.17.1"
disklrucache = "com.jakewharton:disklrucache:2.0.2"
unifile = "com.github.tachiyomiorg:unifile:7c257e1c64"
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 3fa8f862f..1af9e0930 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
From 162b6397050e1577c113a88e7b7cfe9f98e6a45c Mon Sep 17 00:00:00 2001
From: arkon
Date: Thu, 30 Nov 2023 22:19:38 -0500
Subject: [PATCH 03/21] Remove unused resources
---
.../util/system/ContextExtensions.kt | 30 -------------------
.../main/res/color/ripple_toolbar_fainter.xml | 5 ----
.../main/res/color/slider_active_track.xml | 5 ----
.../main/res/color/slider_inactive_track.xml | 5 ----
app/src/main/res/drawable/ic_blank_24dp.xml | 7 -----
.../main/res/drawable/ic_offline_pin_24dp.xml | 9 ------
app/src/main/res/drawable/ic_webview_24dp.xml | 7 -----
.../drawable/transparent_tabs_background.xml | 16 ----------
app/src/main/res/values-sw720dp/dimens.xml | 3 --
app/src/main/res/values/dimens.xml | 2 --
10 files changed, 89 deletions(-)
delete mode 100644 app/src/main/res/color/ripple_toolbar_fainter.xml
delete mode 100644 app/src/main/res/color/slider_active_track.xml
delete mode 100644 app/src/main/res/color/slider_inactive_track.xml
delete mode 100644 app/src/main/res/drawable/ic_blank_24dp.xml
delete mode 100644 app/src/main/res/drawable/ic_offline_pin_24dp.xml
delete mode 100644 app/src/main/res/drawable/ic_webview_24dp.xml
delete mode 100644 app/src/main/res/drawable/transparent_tabs_background.xml
delete mode 100644 app/src/main/res/values-sw720dp/dimens.xml
diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt
index 5f91bfbac..44635e98d 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt
@@ -1,13 +1,11 @@
package eu.kanade.tachiyomi.util.system
-import android.app.ActivityManager
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.content.res.Configuration
-import android.graphics.drawable.Drawable
import android.net.Uri
import android.os.Build
import android.os.PowerManager
@@ -68,26 +66,6 @@ fun Context.hasPermission(
val Context.powerManager: PowerManager
get() = getSystemService()!!
-/**
- * Convenience method to acquire a partial wake lock.
- */
-fun Context.acquireWakeLock(tag: String): PowerManager.WakeLock {
- val wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "$tag:WakeLock")
- wakeLock.acquire()
- return wakeLock
-}
-
-/**
- * Returns true if the given service class is running.
- */
-fun Context.isServiceRunning(serviceClass: Class<*>): Boolean {
- val className = serviceClass.name
- val manager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
- @Suppress("DEPRECATION")
- return manager.getRunningServices(Integer.MAX_VALUE)
- .any { className == it.service.className }
-}
-
fun Context.openInBrowser(url: String, forceDefaultBrowser: Boolean = false) {
this.openInBrowser(url.toUri(), forceDefaultBrowser)
}
@@ -200,11 +178,3 @@ fun Context.isInstalledFromFDroid(): Boolean {
// F-Droid builds typically disable the updater
(!BuildConfig.INCLUDE_UPDATER && !isDevFlavor)
}
-
-fun Context.getApplicationIcon(pkgName: String): Drawable? {
- return try {
- packageManager.getApplicationIcon(pkgName)
- } catch (e: PackageManager.NameNotFoundException) {
- null
- }
-}
diff --git a/app/src/main/res/color/ripple_toolbar_fainter.xml b/app/src/main/res/color/ripple_toolbar_fainter.xml
deleted file mode 100644
index e7fb4ba66..000000000
--- a/app/src/main/res/color/ripple_toolbar_fainter.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/app/src/main/res/color/slider_active_track.xml b/app/src/main/res/color/slider_active_track.xml
deleted file mode 100644
index 764d21bf3..000000000
--- a/app/src/main/res/color/slider_active_track.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/color/slider_inactive_track.xml b/app/src/main/res/color/slider_inactive_track.xml
deleted file mode 100644
index 0f624c117..000000000
--- a/app/src/main/res/color/slider_inactive_track.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_blank_24dp.xml b/app/src/main/res/drawable/ic_blank_24dp.xml
deleted file mode 100644
index 940db069f..000000000
--- a/app/src/main/res/drawable/ic_blank_24dp.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_offline_pin_24dp.xml b/app/src/main/res/drawable/ic_offline_pin_24dp.xml
deleted file mode 100644
index f3dcb3625..000000000
--- a/app/src/main/res/drawable/ic_offline_pin_24dp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_webview_24dp.xml b/app/src/main/res/drawable/ic_webview_24dp.xml
deleted file mode 100644
index 9400f45ed..000000000
--- a/app/src/main/res/drawable/ic_webview_24dp.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/transparent_tabs_background.xml b/app/src/main/res/drawable/transparent_tabs_background.xml
deleted file mode 100644
index a503ef698..000000000
--- a/app/src/main/res/drawable/transparent_tabs_background.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
- -
-
-
-
-
- -
-
-
-
-
-
-
diff --git a/app/src/main/res/values-sw720dp/dimens.xml b/app/src/main/res/values-sw720dp/dimens.xml
deleted file mode 100644
index 5cb983dc4..000000000
--- a/app/src/main/res/values-sw720dp/dimens.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- 24dp
-
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index e82288767..af52b6c3d 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -1,6 +1,4 @@
- 16dp
-
16dp
12dp
From 296201d6b7a14427014c24801fec2d931b2860e5 Mon Sep 17 00:00:00 2001
From: arkon
Date: Thu, 30 Nov 2023 22:23:30 -0500
Subject: [PATCH 04/21] Replace ReaderOrientation icon resources
---
.../reader/OrientationSelectDialog.kt | 4 +--
.../reader/appbars/BottomReaderBar.kt | 2 +-
.../ui/reader/setting/ReaderOrientation.kt | 25 +++++++++++--------
.../ic_screen_lock_landscape_24dp.xml | 9 -------
.../drawable/ic_screen_lock_portrait_24dp.xml | 9 -------
.../res/drawable/ic_screen_rotation_24dp.xml | 9 -------
.../ic_stay_current_landscape_24dp.xml | 9 -------
.../ic_stay_current_portrait_24dp.xml | 9 -------
8 files changed, 17 insertions(+), 59 deletions(-)
delete mode 100644 app/src/main/res/drawable/ic_screen_lock_landscape_24dp.xml
delete mode 100644 app/src/main/res/drawable/ic_screen_lock_portrait_24dp.xml
delete mode 100644 app/src/main/res/drawable/ic_screen_rotation_24dp.xml
delete mode 100644 app/src/main/res/drawable/ic_stay_current_landscape_24dp.xml
delete mode 100644 app/src/main/res/drawable/ic_stay_current_portrait_24dp.xml
diff --git a/app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt b/app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt
index ea6f3d58f..22a02444c 100644
--- a/app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt
+++ b/app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt
@@ -11,8 +11,6 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.vector.ImageVector
-import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.tooling.preview.PreviewLightDark
import dev.icerock.moko.resources.StringResource
import eu.kanade.domain.manga.model.readerOrientation
@@ -72,7 +70,7 @@ private fun DialogContent(
selected = mode
},
modifier = Modifier.fillMaxWidth(),
- imageVector = ImageVector.vectorResource(mode.iconRes),
+ imageVector = mode.icon,
title = stringResource(mode.stringRes),
)
}
diff --git a/app/src/main/java/eu/kanade/presentation/reader/appbars/BottomReaderBar.kt b/app/src/main/java/eu/kanade/presentation/reader/appbars/BottomReaderBar.kt
index b1f7189ed..8d0cae57b 100644
--- a/app/src/main/java/eu/kanade/presentation/reader/appbars/BottomReaderBar.kt
+++ b/app/src/main/java/eu/kanade/presentation/reader/appbars/BottomReaderBar.kt
@@ -49,7 +49,7 @@ fun BottomReaderBar(
IconButton(onClick = onClickOrientation) {
Icon(
- painter = painterResource(orientation.iconRes),
+ imageVector = orientation.icon,
contentDescription = stringResource(MR.strings.rotation_type),
)
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderOrientation.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderOrientation.kt
index 01073cd60..ad0e58a15 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderOrientation.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderOrientation.kt
@@ -1,57 +1,62 @@
package eu.kanade.tachiyomi.ui.reader.setting
import android.content.pm.ActivityInfo
-import androidx.annotation.DrawableRes
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ScreenLockLandscape
+import androidx.compose.material.icons.filled.ScreenLockPortrait
+import androidx.compose.material.icons.filled.ScreenRotation
+import androidx.compose.material.icons.filled.StayCurrentLandscape
+import androidx.compose.material.icons.filled.StayCurrentPortrait
+import androidx.compose.ui.graphics.vector.ImageVector
import dev.icerock.moko.resources.StringResource
-import eu.kanade.tachiyomi.R
import tachiyomi.i18n.MR
enum class ReaderOrientation(
val flag: Int,
val stringRes: StringResource,
- @DrawableRes val iconRes: Int,
+ val icon: ImageVector,
val flagValue: Int,
) {
DEFAULT(
ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED,
MR.strings.label_default,
- R.drawable.ic_screen_rotation_24dp,
+ Icons.Default.ScreenRotation,
0x00000000,
),
FREE(
ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED,
MR.strings.rotation_free,
- R.drawable.ic_screen_rotation_24dp,
+ Icons.Default.ScreenRotation,
0x00000008,
),
PORTRAIT(
ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT,
MR.strings.rotation_portrait,
- R.drawable.ic_stay_current_portrait_24dp,
+ Icons.Default.StayCurrentPortrait,
0x00000010,
),
LANDSCAPE(
ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE,
MR.strings.rotation_landscape,
- R.drawable.ic_stay_current_landscape_24dp,
+ Icons.Default.StayCurrentLandscape,
0x00000018,
),
LOCKED_PORTRAIT(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT,
MR.strings.rotation_force_portrait,
- R.drawable.ic_screen_lock_portrait_24dp,
+ Icons.Default.ScreenLockPortrait,
0x00000020,
),
LOCKED_LANDSCAPE(
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE,
MR.strings.rotation_force_landscape,
- R.drawable.ic_screen_lock_landscape_24dp,
+ Icons.Default.ScreenLockLandscape,
0x00000028,
),
REVERSE_PORTRAIT(
ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT,
MR.strings.rotation_reverse_portrait,
- R.drawable.ic_stay_current_portrait_24dp,
+ Icons.Default.StayCurrentPortrait,
0x00000030,
),
;
diff --git a/app/src/main/res/drawable/ic_screen_lock_landscape_24dp.xml b/app/src/main/res/drawable/ic_screen_lock_landscape_24dp.xml
deleted file mode 100644
index 6c46c7b8a..000000000
--- a/app/src/main/res/drawable/ic_screen_lock_landscape_24dp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_screen_lock_portrait_24dp.xml b/app/src/main/res/drawable/ic_screen_lock_portrait_24dp.xml
deleted file mode 100644
index c7ee82f6b..000000000
--- a/app/src/main/res/drawable/ic_screen_lock_portrait_24dp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_screen_rotation_24dp.xml b/app/src/main/res/drawable/ic_screen_rotation_24dp.xml
deleted file mode 100644
index 04460bd85..000000000
--- a/app/src/main/res/drawable/ic_screen_rotation_24dp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_stay_current_landscape_24dp.xml b/app/src/main/res/drawable/ic_stay_current_landscape_24dp.xml
deleted file mode 100644
index a36b366c4..000000000
--- a/app/src/main/res/drawable/ic_stay_current_landscape_24dp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_stay_current_portrait_24dp.xml b/app/src/main/res/drawable/ic_stay_current_portrait_24dp.xml
deleted file mode 100644
index 25ce49739..000000000
--- a/app/src/main/res/drawable/ic_stay_current_portrait_24dp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
From 7a52afd223332819d462365138f65ad8bcd8b3d9 Mon Sep 17 00:00:00 2001
From: arkon
Date: Fri, 1 Dec 2023 22:27:15 -0500
Subject: [PATCH 05/21] Bump dependencies
---
.../eu/kanade/presentation/browse/ExtensionDetailsScreen.kt | 1 +
.../eu/kanade/presentation/browse/ExtensionFilterScreen.kt | 1 +
.../java/eu/kanade/presentation/browse/ExtensionsScreen.kt | 3 +++
.../eu/kanade/presentation/browse/MigrateSourceScreen.kt | 1 +
.../eu/kanade/presentation/browse/SourcesFilterScreen.kt | 2 ++
.../java/eu/kanade/presentation/browse/SourcesScreen.kt | 2 ++
.../java/eu/kanade/presentation/category/CategoryScreen.kt | 1 +
.../java/eu/kanade/presentation/history/HistoryScreen.kt | 2 ++
.../java/eu/kanade/presentation/updates/UpdatesUiItem.kt | 3 +++
gradle/androidx.versions.toml | 6 +++---
gradle/compose.versions.toml | 2 +-
gradle/libs.versions.toml | 2 +-
12 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt
index abb893572..c94a687c2 100644
--- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt
@@ -190,6 +190,7 @@ private fun ExtensionDetails(
key = { it.source.id },
) { source ->
SourceSwitchPreference(
+ modifier = Modifier.animateItemPlacement(),
source = source,
onClickSourcePreferences = onClickSourcePreferences,
onClickSource = onClickSource,
diff --git a/app/src/main/java/eu/kanade/presentation/browse/ExtensionFilterScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/ExtensionFilterScreen.kt
index 51acdfccf..c65f0d0b1 100644
--- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionFilterScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionFilterScreen.kt
@@ -58,6 +58,7 @@ private fun ExtensionFilterContent(
) {
items(state.languages) { language ->
SwitchPreferenceWidget(
+ modifier = Modifier.animateItemPlacement(),
title = LocaleHelper.getSourceDisplayName(language, context),
checked = language in state.enabledLanguages,
onCheckedChanged = { onClickLang(language) },
diff --git a/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt
index 3469af6ca..2e4c6fc0b 100644
--- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt
@@ -148,12 +148,14 @@ private fun ExtensionContent(
}
ExtensionHeader(
textRes = header.textRes,
+ modifier = Modifier.animateItemPlacement(),
action = action,
)
}
is ExtensionUiModel.Header.Text -> {
ExtensionHeader(
text = header.text,
+ modifier = Modifier.animateItemPlacement(),
)
}
}
@@ -165,6 +167,7 @@ private fun ExtensionContent(
key = { "extension-${it.hashCode()}" },
) { item ->
ExtensionItem(
+ modifier = Modifier.animateItemPlacement(),
item = item,
onClickItem = {
when (it) {
diff --git a/app/src/main/java/eu/kanade/presentation/browse/MigrateSourceScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/MigrateSourceScreen.kt
index b7dc70ebb..e45ca5189 100644
--- a/app/src/main/java/eu/kanade/presentation/browse/MigrateSourceScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/browse/MigrateSourceScreen.kt
@@ -132,6 +132,7 @@ private fun MigrateSourceList(
key = { (source, _) -> "migrate-${source.id}" },
) { (source, count) ->
MigrateSourceItem(
+ modifier = Modifier.animateItemPlacement(),
source = source,
count = count,
onClickItem = { onClickItem(source) },
diff --git a/app/src/main/java/eu/kanade/presentation/browse/SourcesFilterScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/SourcesFilterScreen.kt
index 6306800b8..e334a451e 100644
--- a/app/src/main/java/eu/kanade/presentation/browse/SourcesFilterScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/browse/SourcesFilterScreen.kt
@@ -68,6 +68,7 @@ private fun SourcesFilterContent(
contentType = "source-filter-header",
) {
SourcesFilterHeader(
+ modifier = Modifier.animateItemPlacement(),
language = language,
enabled = enabled,
onClickItem = onClickLanguage,
@@ -80,6 +81,7 @@ private fun SourcesFilterContent(
contentType = { "source-filter-item" },
) { source ->
SourcesFilterItem(
+ modifier = Modifier.animateItemPlacement(),
source = source,
enabled = "${source.id}" !in state.disabledSources,
onClickItem = onClickSource,
diff --git a/app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt
index 94cca357d..d0411b7a8 100644
--- a/app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt
@@ -74,10 +74,12 @@ fun SourcesScreen(
when (model) {
is SourceUiModel.Header -> {
SourceHeader(
+ modifier = Modifier.animateItemPlacement(),
language = model.language,
)
}
is SourceUiModel.Item -> SourceItem(
+ modifier = Modifier.animateItemPlacement(),
source = model.source,
onClickItem = onClickItem,
onLongClickItem = onLongClickItem,
diff --git a/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt b/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt
index 471ec7fc9..34a6a1217 100644
--- a/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt
@@ -107,6 +107,7 @@ private fun CategoryContent(
key = { _, category -> "category-${category.id}" },
) { index, category ->
CategoryListItem(
+ modifier = Modifier.animateItemPlacement(),
category = category,
canMoveUp = index != 0,
canMoveDown = index != categories.lastIndex,
diff --git a/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt b/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt
index ec6416480..ce6871e13 100644
--- a/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt
@@ -123,6 +123,7 @@ private fun HistoryScreenContent(
when (item) {
is HistoryUiModel.Header -> {
RelativeDateHeader(
+ modifier = Modifier.animateItemPlacement(),
date = item.date,
relativeTime = relativeTime,
dateFormat = dateFormat,
@@ -131,6 +132,7 @@ private fun HistoryScreenContent(
is HistoryUiModel.Item -> {
val value = item.item
HistoryItem(
+ modifier = Modifier.animateItemPlacement(),
history = value,
onClickCover = { onClickCover(value) },
onClickResume = { onClickResume(value) },
diff --git a/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt b/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt
index ad2e0dbc3..eeaee2008 100644
--- a/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt
+++ b/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt
@@ -53,6 +53,7 @@ internal fun LazyListScope.updatesLastUpdatedItem(
item(key = "updates-lastUpdated") {
Box(
modifier = Modifier
+ .animateItemPlacement()
.padding(horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small),
) {
Text(
@@ -89,12 +90,14 @@ internal fun LazyListScope.updatesUiItems(
when (item) {
is UpdatesUiModel.Header -> {
ListGroupHeader(
+ modifier = Modifier.animateItemPlacement(),
text = item.date,
)
}
is UpdatesUiModel.Item -> {
val updatesItem = item.item
UpdatesUiItem(
+ modifier = Modifier.animateItemPlacement(),
update = updatesItem.update,
selected = updatesItem.selected,
readProgress = updatesItem.update.lastPageRead
diff --git a/gradle/androidx.versions.toml b/gradle/androidx.versions.toml
index 5d7aead08..cc110cdf6 100644
--- a/gradle/androidx.versions.toml
+++ b/gradle/androidx.versions.toml
@@ -25,9 +25,9 @@ workmanager = "androidx.work:work-runtime:2.9.0"
paging-runtime = { module = "androidx.paging:paging-runtime", version.ref = "paging_version" }
paging-compose = { module = "androidx.paging:paging-compose", version.ref = "paging_version" }
-benchmark-macro = "androidx.benchmark:benchmark-macro-junit4:1.2.1"
-test-ext = "androidx.test.ext:junit-ktx:1.2.0-alpha01"
-test-espresso-core = "androidx.test.espresso:espresso-core:3.6.0-alpha01"
+benchmark-macro = "androidx.benchmark:benchmark-macro-junit4:1.2.2"
+test-ext = "androidx.test.ext:junit-ktx:1.2.0-alpha02"
+test-espresso-core = "androidx.test.espresso:espresso-core:3.6.0-alpha02"
test-uiautomator = "androidx.test.uiautomator:uiautomator:2.3.0-alpha05"
[bundles]
diff --git a/gradle/compose.versions.toml b/gradle/compose.versions.toml
index 6ccce2b06..6bfad292f 100644
--- a/gradle/compose.versions.toml
+++ b/gradle/compose.versions.toml
@@ -1,6 +1,6 @@
[versions]
compiler = "1.5.5"
-compose-bom = "2023.12.00-alpha02"
+compose-bom = "2023.12.00-alpha03"
accompanist = "0.33.2-alpha"
[libraries]
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 3cd0e3da7..8724b39d2 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -93,7 +93,7 @@ voyager-navigator = { module = "cafe.adriel.voyager:voyager-navigator", version.
voyager-tab-navigator = { module = "cafe.adriel.voyager:voyager-tab-navigator", version.ref = "voyager" }
voyager-transitions = { module = "cafe.adriel.voyager:voyager-transitions", version.ref = "voyager" }
-ktlint = "org.jlleitschuh.gradle:ktlint-gradle:11.6.1"
+ktlint = "org.jlleitschuh.gradle:ktlint-gradle:12.0.2"
[bundles]
okhttp = ["okhttp-core", "okhttp-logging", "okhttp-brotli", "okhttp-dnsoverhttps"]
From e5a22eafe72b701ed277d937a5c0f25d84a5eb25 Mon Sep 17 00:00:00 2001
From: Ivan Iskandar <12537387+ivaniskandar@users.noreply.github.com>
Date: Sat, 2 Dec 2023 22:35:03 +0700
Subject: [PATCH 06/21] Define storage permission in manifest (#10200)
Mainly for migration process and to avoid breakage on users who doesn't
change their granular storage prefs.
---
app/src/main/AndroidManifest.xml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9eddc43a2..79f55c864 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,6 +7,9 @@
+
+
+
@@ -38,6 +41,8 @@
android:largeHeap="true"
android:localeConfig="@xml/locales_config"
android:networkSecurityConfig="@xml/network_security_config"
+ android:preserveLegacyExternalStorage="true"
+ android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Tachiyomi">
From e5518b76152044b164fbbd30812993de581f6735 Mon Sep 17 00:00:00 2001
From: Ivan Iskandar <12537387+ivaniskandar@users.noreply.github.com>
Date: Sat, 2 Dec 2023 23:19:43 +0700
Subject: [PATCH 07/21] PullRefresh: Invoke callback only when initiated by
user (#10201)
---
.../core/components/material/PullRefresh.kt | 36 +++++++++++--------
1 file changed, 21 insertions(+), 15 deletions(-)
diff --git a/presentation-core/src/main/java/tachiyomi/presentation/core/components/material/PullRefresh.kt b/presentation-core/src/main/java/tachiyomi/presentation/core/components/material/PullRefresh.kt
index b24baec43..9642cec71 100644
--- a/presentation-core/src/main/java/tachiyomi/presentation/core/components/material/PullRefresh.kt
+++ b/presentation-core/src/main/java/tachiyomi/presentation/core/components/material/PullRefresh.kt
@@ -47,22 +47,11 @@ fun PullRefresh(
content: @Composable () -> Unit,
) {
val state = rememberPullToRefreshState(
- initialRefreshing = refreshing,
+ isRefreshing = refreshing,
extraVerticalOffset = indicatorPadding.calculateTopPadding(),
enabled = enabled,
+ onRefresh = onRefresh,
)
- if (state.isRefreshing) {
- LaunchedEffect(true) {
- onRefresh()
- }
- }
- LaunchedEffect(refreshing) {
- if (refreshing && !state.isRefreshing) {
- state.startRefreshAnimated()
- } else if (!refreshing && state.isRefreshing) {
- state.endRefreshAnimated()
- }
- }
Box(modifier.nestedScroll(state.nestedScrollConnection)) {
content()
@@ -94,10 +83,11 @@ fun PullRefresh(
@Composable
private fun rememberPullToRefreshState(
- initialRefreshing: Boolean,
+ isRefreshing: Boolean,
extraVerticalOffset: Dp,
positionalThreshold: Dp = 64.dp,
enabled: () -> Boolean = { true },
+ onRefresh: () -> Unit,
): PullToRefreshStateImpl {
val density = LocalDensity.current
val extraVerticalOffsetPx = with(density) { extraVerticalOffset.toPx() }
@@ -106,18 +96,29 @@ private fun rememberPullToRefreshState(
extraVerticalOffset,
positionalThresholdPx,
enabled,
+ onRefresh,
saver = PullToRefreshStateImpl.Saver(
extraVerticalOffset = extraVerticalOffsetPx,
positionalThreshold = positionalThresholdPx,
enabled = enabled,
+ onRefresh = onRefresh,
),
) {
PullToRefreshStateImpl(
- initialRefreshing = initialRefreshing,
+ initialRefreshing = isRefreshing,
extraVerticalOffset = extraVerticalOffsetPx,
positionalThreshold = positionalThresholdPx,
enabled = enabled,
+ onRefresh = onRefresh,
)
+ }.also {
+ LaunchedEffect(isRefreshing) {
+ if (isRefreshing && !it.isRefreshing) {
+ it.startRefreshAnimated()
+ } else if (!isRefreshing && it.isRefreshing) {
+ it.endRefreshAnimated()
+ }
+ }
}
}
@@ -128,6 +129,7 @@ private fun rememberPullToRefreshState(
* @param extraVerticalOffset Extra vertical offset, in pixels, for the "refreshing" state
* @param initialRefreshing The initial refreshing value of [PullToRefreshState]
* @param enabled a callback used to determine whether scroll events are to be handled by this
+ * @param onRefresh a callback to run when pull-to-refresh action is triggered by user
* [PullToRefreshState]
*/
private class PullToRefreshStateImpl(
@@ -135,6 +137,7 @@ private class PullToRefreshStateImpl(
private val extraVerticalOffset: Float,
override val positionalThreshold: Float,
enabled: () -> Boolean,
+ private val onRefresh: () -> Unit,
) : PullToRefreshState {
override val progress get() = adjustedDistancePulled / positionalThreshold
@@ -215,6 +218,7 @@ private class PullToRefreshStateImpl(
if (isRefreshing) return 0f // Already refreshing, do nothing
// Trigger refresh
if (adjustedDistancePulled > positionalThreshold) {
+ onRefresh()
startRefreshAnimated()
} else {
animateTo(0f)
@@ -263,6 +267,7 @@ private class PullToRefreshStateImpl(
extraVerticalOffset: Float,
positionalThreshold: Float,
enabled: () -> Boolean,
+ onRefresh: () -> Unit,
) = Saver(
save = { it.isRefreshing },
restore = { isRefreshing ->
@@ -271,6 +276,7 @@ private class PullToRefreshStateImpl(
extraVerticalOffset = extraVerticalOffset,
positionalThreshold = positionalThreshold,
enabled = enabled,
+ onRefresh = onRefresh,
)
},
)
From 82d9ae31bdde0abaefeb78995d60b6c6b22e6052 Mon Sep 17 00:00:00 2001
From: arkon
Date: Sat, 2 Dec 2023 11:20:41 -0500
Subject: [PATCH 08/21] Set foreground service types for library update jobs
---
.../eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt | 7 +++++++
.../eu/kanade/tachiyomi/data/library/MetadataUpdateJob.kt | 7 +++++++
2 files changed, 14 insertions(+)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt
index 89fd40dcc..2df3b804e 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt
@@ -1,6 +1,8 @@
package eu.kanade.tachiyomi.data.library
import android.content.Context
+import android.content.pm.ServiceInfo
+import android.os.Build
import androidx.work.BackoffPolicy
import androidx.work.Constraints
import androidx.work.CoroutineWorker
@@ -140,6 +142,11 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
return ForegroundInfo(
Notifications.ID_LIBRARY_PROGRESS,
notifier.progressNotificationBuilder.build(),
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
+ } else {
+ 0
+ },
)
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/MetadataUpdateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/MetadataUpdateJob.kt
index c2121ccf9..61178bc19 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/library/MetadataUpdateJob.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/MetadataUpdateJob.kt
@@ -1,6 +1,8 @@
package eu.kanade.tachiyomi.data.library
import android.content.Context
+import android.content.pm.ServiceInfo
+import android.os.Build
import androidx.work.CoroutineWorker
import androidx.work.ExistingWorkPolicy
import androidx.work.ForegroundInfo
@@ -82,6 +84,11 @@ class MetadataUpdateJob(private val context: Context, workerParams: WorkerParame
return ForegroundInfo(
Notifications.ID_LIBRARY_PROGRESS,
notifier.progressNotificationBuilder.build(),
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
+ } else {
+ 0
+ },
)
}
From 87be54aa4aed257dfe060c0a9ee7072fece848bb Mon Sep 17 00:00:00 2001
From: arkon
Date: Sat, 2 Dec 2023 11:24:13 -0500
Subject: [PATCH 09/21] Revert overridePendingTransition refactorings
---
.../ui/base/delegate/SecureActivityDelegate.kt | 3 +--
.../kanade/tachiyomi/ui/reader/ReaderActivity.kt | 5 ++---
.../kanade/tachiyomi/ui/webview/WebViewActivity.kt | 5 ++---
.../tachiyomi/util/system/ActivityExtensions.kt | 14 --------------
4 files changed, 5 insertions(+), 22 deletions(-)
delete mode 100644 app/src/main/java/eu/kanade/tachiyomi/util/system/ActivityExtensions.kt
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate.kt
index dc017c328..02589cec9 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate.kt
@@ -10,7 +10,6 @@ import eu.kanade.tachiyomi.core.security.SecurityPreferences
import eu.kanade.tachiyomi.ui.security.UnlockActivity
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported
-import eu.kanade.tachiyomi.util.system.overridePendingTransitionCompat
import eu.kanade.tachiyomi.util.view.setSecureScreen
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.launchIn
@@ -107,7 +106,7 @@ class SecureActivityDelegateImpl : SecureActivityDelegate, DefaultLifecycleObser
if (activity.isAuthenticationSupported()) {
if (!SecureActivityDelegate.requireUnlock) return
activity.startActivity(Intent(activity, UnlockActivity::class.java))
- activity.overridePendingTransitionCompat(0, 0)
+ activity.overridePendingTransition(0, 0)
} else {
securityPreferences.useAuthenticator().set(false)
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
index 7900b377c..f5b647e85 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
@@ -70,7 +70,6 @@ import eu.kanade.tachiyomi.ui.reader.viewer.ReaderProgressIndicator
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
import eu.kanade.tachiyomi.util.system.hasDisplayCutout
import eu.kanade.tachiyomi.util.system.isNightMode
-import eu.kanade.tachiyomi.util.system.overridePendingTransitionCompat
import eu.kanade.tachiyomi.util.system.toShareIntent
import eu.kanade.tachiyomi.util.system.toast
import eu.kanade.tachiyomi.util.view.setComposeContent
@@ -139,7 +138,7 @@ class ReaderActivity : BaseActivity() {
*/
override fun onCreate(savedInstanceState: Bundle?) {
registerSecureActivity(this)
- overridePendingTransitionCompat(R.anim.shared_axis_x_push_enter, R.anim.shared_axis_x_push_exit)
+ overridePendingTransition(R.anim.shared_axis_x_push_enter, R.anim.shared_axis_x_push_exit)
super.onCreate(savedInstanceState)
@@ -270,7 +269,7 @@ class ReaderActivity : BaseActivity() {
override fun finish() {
viewModel.onActivityFinish()
super.finish()
- overridePendingTransitionCompat(R.anim.shared_axis_x_pop_enter, R.anim.shared_axis_x_pop_exit)
+ overridePendingTransition(R.anim.shared_axis_x_pop_enter, R.anim.shared_axis_x_pop_exit)
}
override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt
index 5afd8364c..61d09dc79 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt
@@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.source.online.HttpSource
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
import eu.kanade.tachiyomi.util.system.WebViewUtil
import eu.kanade.tachiyomi.util.system.openInBrowser
-import eu.kanade.tachiyomi.util.system.overridePendingTransitionCompat
import eu.kanade.tachiyomi.util.system.toShareIntent
import eu.kanade.tachiyomi.util.system.toast
import eu.kanade.tachiyomi.util.view.setComposeContent
@@ -36,7 +35,7 @@ class WebViewActivity : BaseActivity() {
}
override fun onCreate(savedInstanceState: Bundle?) {
- overridePendingTransitionCompat(R.anim.shared_axis_x_push_enter, R.anim.shared_axis_x_push_exit)
+ overridePendingTransition(R.anim.shared_axis_x_push_enter, R.anim.shared_axis_x_push_exit)
super.onCreate(savedInstanceState)
if (!WebViewUtil.supportsWebView(this)) {
@@ -78,7 +77,7 @@ class WebViewActivity : BaseActivity() {
override fun finish() {
super.finish()
- overridePendingTransitionCompat(R.anim.shared_axis_x_pop_enter, R.anim.shared_axis_x_pop_exit)
+ overridePendingTransition(R.anim.shared_axis_x_pop_enter, R.anim.shared_axis_x_pop_exit)
}
private fun shareWebpage(url: String) {
diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/ActivityExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/ActivityExtensions.kt
deleted file mode 100644
index c145f0e28..000000000
--- a/app/src/main/java/eu/kanade/tachiyomi/util/system/ActivityExtensions.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-package eu.kanade.tachiyomi.util.system
-
-import android.app.Activity
-import android.os.Build
-import androidx.annotation.AnimRes
-
-fun Activity.overridePendingTransitionCompat(@AnimRes enterAnim: Int, @AnimRes exitAnim: Int) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
- overrideActivityTransition(Activity.OVERRIDE_TRANSITION_OPEN, enterAnim, exitAnim)
- } else {
- @Suppress("DEPRECATION")
- overridePendingTransition(enterAnim, exitAnim)
- }
-}
From dfa5c229b35e6ea70244f88192a308c37d3caff2 Mon Sep 17 00:00:00 2001
From: "Weblate (bot)"
Date: Sat, 2 Dec 2023 17:25:10 +0100
Subject: [PATCH 10/21] Translations update from Hosted Weblate (#10148)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Weblate translations
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/ar/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/ca/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/de/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/el/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/es/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/fa/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/fil/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/fr/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/hr/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/hu/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/id/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/ja/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/jv/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/pl/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/ru/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/sc/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/sv/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/th/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/tr/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/tachiyomi-plurals-xml/ca/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/tachiyomi-plurals-xml/es/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/tachiyomi-plurals-xml/fa/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/tachiyomi-plurals-xml/hu/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/tachiyomi-plurals-xml/ja/
Translation: Tachiyomi/Tachiyomi plurals.xml
Translation: Tachiyomi/Tachiyomi strings.xml
Co-authored-by: Ajeje Brazorf
Co-authored-by: Alessandro Jean <14254807+alessandrojean@users.noreply.github.com>
Co-authored-by: Ali Aljishi
Co-authored-by: Arash
Co-authored-by: CR0YD <98400750+CR0YD@users.noreply.github.com>
Co-authored-by: Dexroneum
Co-authored-by: Eduard Ereza Martínez
Co-authored-by: FaCsaba
Co-authored-by: InfinityDouki56
Co-authored-by: La prière
Co-authored-by: Lyfja
Co-authored-by: Lzmxya
Co-authored-by: Milo Ivir
Co-authored-by: Nepx
Co-authored-by: Pitpe11
Co-authored-by: Swyter
Co-authored-by: TheKingTermux
Co-authored-by: Uzuki Shimamura
Co-authored-by: Vetle Ledaal
Co-authored-by: Xavier Giguère (bebewold)
Co-authored-by: aa aa
Co-authored-by: altinat
Co-authored-by: bittin1ddc447d824349b2
Co-authored-by: gallegonovato
Co-authored-by: orkan gökçe alaz aşina
---
.../commonMain/resources/MR/am/strings.xml | 4 --
.../commonMain/resources/MR/ar/strings.xml | 11 +++--
.../commonMain/resources/MR/be/strings.xml | 2 -
.../commonMain/resources/MR/bg/strings.xml | 5 --
.../commonMain/resources/MR/bn/strings.xml | 5 --
.../commonMain/resources/MR/ca/plurals.xml | 16 +++++++
.../commonMain/resources/MR/ca/strings.xml | 11 +++--
.../commonMain/resources/MR/ceb/strings.xml | 4 --
.../commonMain/resources/MR/cs/strings.xml | 5 --
.../commonMain/resources/MR/cv/strings.xml | 5 --
.../commonMain/resources/MR/da/strings.xml | 2 -
.../commonMain/resources/MR/de/strings.xml | 11 +++--
.../commonMain/resources/MR/el/strings.xml | 11 +++--
.../commonMain/resources/MR/eo/strings.xml | 5 --
.../commonMain/resources/MR/es/strings.xml | 37 ++++++++-------
.../commonMain/resources/MR/eu/strings.xml | 5 --
.../commonMain/resources/MR/fa/plurals.xml | 12 +++++
.../commonMain/resources/MR/fa/strings.xml | 23 +++++++--
.../commonMain/resources/MR/fi/strings.xml | 5 --
.../commonMain/resources/MR/fil/strings.xml | 11 +++--
.../commonMain/resources/MR/fr/strings.xml | 21 +++++++--
.../commonMain/resources/MR/gl/strings.xml | 5 --
.../commonMain/resources/MR/he/strings.xml | 5 --
.../commonMain/resources/MR/hi/strings.xml | 5 --
.../commonMain/resources/MR/hr/strings.xml | 11 +++--
.../commonMain/resources/MR/hu/plurals.xml | 4 ++
.../commonMain/resources/MR/hu/strings.xml | 47 +++++++++++++++++--
.../commonMain/resources/MR/in/strings.xml | 13 ++---
.../commonMain/resources/MR/it/strings.xml | 5 --
.../commonMain/resources/MR/ja/plurals.xml | 12 ++---
.../commonMain/resources/MR/ja/strings.xml | 45 +++++++++---------
.../commonMain/resources/MR/jv/strings.xml | 4 +-
.../resources/MR/ka-rGE/strings.xml | 5 --
.../commonMain/resources/MR/kk/strings.xml | 5 --
.../commonMain/resources/MR/kn/strings.xml | 5 --
.../commonMain/resources/MR/ko/strings.xml | 5 --
.../commonMain/resources/MR/lt/strings.xml | 5 --
.../commonMain/resources/MR/lv/strings.xml | 5 --
.../commonMain/resources/MR/ms/strings.xml | 5 --
.../resources/MR/nb-rNO/strings.xml | 25 ++++++++--
.../commonMain/resources/MR/ne/strings.xml | 5 --
.../commonMain/resources/MR/nl/strings.xml | 5 --
.../commonMain/resources/MR/nn/strings.xml | 1 -
.../commonMain/resources/MR/pl/strings.xml | 8 ++--
.../resources/MR/pt-rBR/strings.xml | 11 +++--
.../commonMain/resources/MR/pt/strings.xml | 5 --
.../commonMain/resources/MR/ro/strings.xml | 5 --
.../commonMain/resources/MR/ru/strings.xml | 11 +++--
.../commonMain/resources/MR/sa/strings.xml | 5 --
.../commonMain/resources/MR/sah/strings.xml | 4 --
.../commonMain/resources/MR/sc/strings.xml | 30 ++++++++++--
.../commonMain/resources/MR/sdh/strings.xml | 2 -
.../commonMain/resources/MR/sk/strings.xml | 5 --
.../commonMain/resources/MR/sq/strings.xml | 5 --
.../commonMain/resources/MR/sr/strings.xml | 5 --
.../commonMain/resources/MR/sv/strings.xml | 11 +++--
.../commonMain/resources/MR/th/strings.xml | 11 +++--
.../commonMain/resources/MR/tr/strings.xml | 11 +++--
.../commonMain/resources/MR/uk/strings.xml | 5 --
.../commonMain/resources/MR/uz/strings.xml | 2 -
.../commonMain/resources/MR/vi/strings.xml | 5 --
.../resources/MR/zh-rCN/strings.xml | 5 --
.../resources/MR/zh-rTW/strings.xml | 11 +++--
63 files changed, 286 insertions(+), 309 deletions(-)
diff --git a/i18n/src/commonMain/resources/MR/am/strings.xml b/i18n/src/commonMain/resources/MR/am/strings.xml
index 4a07d01ac..b829f44db 100644
--- a/i18n/src/commonMain/resources/MR/am/strings.xml
+++ b/i18n/src/commonMain/resources/MR/am/strings.xml
@@ -158,12 +158,10 @@
ማስተካከያዎች
ተጨማሪ
ስም
- ብጁ አካባቢ
ዕልባት የተደረገባቸውን ምዕራፎች ሰርዝ
ካነበብኩ በኋላ
በእጅ እንደተነበበ ምልክት ከተደረገ በኋላ
ምዕራፎችን ሰርዝ
- አካባቢን ያውርዱ
የጎን ሽፋን
ንባብ
የንባብ ሁነታ
@@ -246,9 +244,7 @@
ኣ
ልክ ያልሆነ የመጠባበቂያ ፋይል
ምትኬ ተፈጥሯል
- ከፍተኛ መጠባበቂያዎች
የመጠባበቂያ ድግግሞሽ
- የመጠባበቂያ ቦታ
ቤተ-መጽሐፍት ከመጠባበቂያ ፋይል ይመልሱ
ምትኬ ወደነበረበት
የአሁኑን ቤተ-መጽሐፍት ወደነበረበት ለመመለስ ሊያገለግል ይችላል
diff --git a/i18n/src/commonMain/resources/MR/ar/strings.xml b/i18n/src/commonMain/resources/MR/ar/strings.xml
index ec7204278..7040a74da 100644
--- a/i18n/src/commonMain/resources/MR/ar/strings.xml
+++ b/i18n/src/commonMain/resources/MR/ar/strings.xml
@@ -116,10 +116,8 @@
حر
الوضع الرأسي اﻹجباري
الوضع الأفقي الإجباري
- موقع التنزيل
بعد وضع علامة \"مقروءة\" يدوياً
الحذف تلقائيا بعد القراءة
- مجلد مخصص
معطل
آخر فصل مقروء
من الفصل الثاني قبل الأخير
@@ -132,9 +130,7 @@
يمكن استخدامها لإستعادة المكتبة الحالية
إستعادة النسخة الإحتياطية
إستعادة مكتبة من ملف نسخة إحتياطية
- موقع النسخ الإحتياطي
معدل النسخ الاحتياطي التلقائي
- أقصى عدد للنسخ الاحتياطية التلقائية
أُنشئت نسخة احتياطية
اكتملت الاستعادة
ما الذي تريد نسخه احتياطيّاً؟
@@ -350,7 +346,6 @@
الفصول %1$s
الفصل %1$s و%2$d فصول أخرى
الفصل %1$s
- جارٍ التحقق من وجود فصول جديدة
الفصل %1$s - %2$s
تُحدَّث المكتبة
وضع القراءة
@@ -768,4 +763,10 @@
لم يُعثَر على مترجمين
المترجم
احجب بعض المترجمين
+ خيارات أكثر
+ محدَّد
+ غير مُحدَّد
+ اصعد
+ مكان التخزين
+ يُستخدَم في الاحتياط وتنزيل الفصول والمصدر المحليِّ.
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/be/strings.xml b/i18n/src/commonMain/resources/MR/be/strings.xml
index 2e94d6897..e1799953d 100644
--- a/i18n/src/commonMain/resources/MR/be/strings.xml
+++ b/i18n/src/commonMain/resources/MR/be/strings.xml
@@ -288,12 +288,10 @@
Перадапошняя частка
Апошняя прачытаная частка
Адключана
- Карыстацкая дырэкторыя
Дазволіць выдаленне частак з закладкамі
Аўтаматычна пасля чытання
Пасля таго, як пазначана як \"Прачытанае\"
Выдаліць часткі
- Каталог загрузак
Найнізкая
Нізкая
Высокая
diff --git a/i18n/src/commonMain/resources/MR/bg/strings.xml b/i18n/src/commonMain/resources/MR/bg/strings.xml
index 2ff68ca60..8efd0173d 100644
--- a/i18n/src/commonMain/resources/MR/bg/strings.xml
+++ b/i18n/src/commonMain/resources/MR/bg/strings.xml
@@ -106,10 +106,8 @@
G
B
A
- Директория на изтеглянията
След маркиране като прочетено
След прочитане автоматично изтрийте
- Персонализирана директория
Изключено
Последно прочетена глава
Предпоследна прочетена глава
@@ -214,9 +212,7 @@
Може да се използва за възстановяване на текущата библиотека
Възстанови резервно копие
Възстанови библиотеката от резервно копие
- Директория за резервното копие
Честота на запазване
- Максимален брой копия
Резервно копие създадено
Възстановяването завършено
Какво искате да запазите?
@@ -310,7 +306,6 @@
Глави %1$s
Глава %1$s и %2$d още
Глава %1$s
- Проверяване за нови глави
Гл. %1$s - %2$s
Обновяване на библиотеката
Добави проследяване
diff --git a/i18n/src/commonMain/resources/MR/bn/strings.xml b/i18n/src/commonMain/resources/MR/bn/strings.xml
index 8605763b0..07728c4bb 100644
--- a/i18n/src/commonMain/resources/MR/bn/strings.xml
+++ b/i18n/src/commonMain/resources/MR/bn/strings.xml
@@ -122,10 +122,8 @@
স
নী
আ
- ডাউনলোডের স্থান
পঠিত হিসেবে চিহ্নিত করার পর
পড়ার পর স্বয়ংক্রিয়ভাবে
- স্বনির্ধারিত নির্দেশক
নিষ্ক্রিয়
শেষ পঠিত অধ্যায়
২য় থেকে শেষ অধ্যায়
@@ -138,9 +136,7 @@
বর্তমান সংগ্রহশালা পুনরুদ্ধারের জন্য ব্যাবহার করা যাবে
ব্যাকআপ পুনরুদ্ধার
ব্যাকআপ ফাইল থেকে সংগ্রহশালা পুনরুদ্ধার করুন
- ব্যাকআপের স্থান
ব্যাকআপ ফ্রিকোয়েন্সি
- সর্বোচ্চ ব্যাকআপ
ব্যাকআপ তৈরী হয়েছে
পুনরুদ্ধার সম্পন্ন হয়েছে
আপনি কি ব্যাকআপ করতে ইচ্ছুক?
@@ -393,7 +389,6 @@
অধ্যায়গুলি %1$s
অধ্যায় %1$s এবং %2$d আরও
অধ্যায় %1$s
- নতুন অধ্যায়ের জন্য অনুসন্ধান করা হচ্ছে
কম সঞ্চয়স্থানের কারণে অধ্যায়গুলি ডাউনলোড করা যায়নি
অঃ %1$s - %2$s
সংগ্রহশালার হালনাগাদ হচ্ছে
diff --git a/i18n/src/commonMain/resources/MR/ca/plurals.xml b/i18n/src/commonMain/resources/MR/ca/plurals.xml
index 0309ac347..a8c2ffa28 100644
--- a/i18n/src/commonMain/resources/MR/ca/plurals.xml
+++ b/i18n/src/commonMain/resources/MR/ca/plurals.xml
@@ -2,66 +2,82 @@
- Després d’%1$s minut
+ - Després de %1$s minuts
- Després de %1$s minuts
- %1$d capítol nou
+ - %1$d capítols nous
- %1$d capítols nous
- Capítols %1$s i 1 més
+ - Capítols %1$s i %2$d més
- Capítols %1$s i %2$d més
- Per a %d element
+ - Per a %d elements
- Per a %d elements
- Hi ha una actualització d’una extensió
+ - Hi ha actualitzacions de %d extensions
- Hi ha actualitzacions de %d extensions
- En resta %1$s
+ - En resten %1$s
- En resten %1$s
- Fet en %1$s amb %2$s error
+ - Fet en %1$s amb %2$s errors
- Fet en %1$s amb %2$s errors
- %d categoria
+ - %d categories
- %d categories
- %1$s capítol
+ - %1$s capítols
- %1$s capítols
- %d servei de seguiment
+ - %d serveis de seguiment
- %d serveis de seguiment
- S’ha omès %d capítol. És possible que manqui a la font o que hagi estat filtrat
+ - S’han omès %d capítols. És possible que manquin a la font o que hagin estat filtrats
- S’han omès %d capítols. És possible que manquin a la font o que hagin estat filtrats
- Ahir
+ - Fa %1$d dies
- Fa %1$d dies
- El següent capítol no llegit
+ - Els següents %d capítols no llegits
- Els següents %d capítols no llegits
- El següent capítol
+ - Els següents %d capítols
- Els següents %d capítols
- Manca %1$s capítol
+ - Manquen %1$s capítols
- Manquen %1$s capítols
- 1 dia
+ - %d dies
- %d dies
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/ca/strings.xml b/i18n/src/commonMain/resources/MR/ca/strings.xml
index 3740982d9..b132407c8 100644
--- a/i18n/src/commonMain/resources/MR/ca/strings.xml
+++ b/i18n/src/commonMain/resources/MR/ca/strings.xml
@@ -144,11 +144,9 @@
G
B
A
- Ubicació de les baixades
Després de marcar com a llegit de manera manual
Suprimeix automàticament després de llegir
Velocitat de l’animació del doble toc
- Ubicació personalitzada
Desactivat
Darrer capítol llegit
Penúltim capítol llegit
@@ -161,9 +159,7 @@
Es pot utilitzar per a restaurar la biblioteca actual
Restaura una còpia de seguretat
Restaura la biblioteca del fitxer de còpia de seguretat
- Ubicació de la còpia de seguretat
Freqüència de la còpia de seguretat automàtica
- Màxim de còpies de seguretat automàtiques
S’ha creat la còpia de seguretat
S’ha completat la restauració
De què voleu fer una còpia de seguretat\?
@@ -327,7 +323,6 @@
Capítol %1$s i %2$d més
Capítols %1$s
Amaga el contingut de les notificacions
- S’està comprovant si hi ha capítols nous
Desactiva l’optimització de la bateria
Fa que funcionin millor les actualitzacions de la biblioteca en segon pla i les còpies de seguretat
L’optimització de la bateria ja està desactivada
@@ -768,4 +763,10 @@
Puntuació del servei de seguiment
Dades i emmagatzematge
Exclou scanlators
+ Seleccionat
+ No seleccionat
+ Ubicació de l’emmagatzematge
+ S’utilitza per a les còpies de seguretat automàtiques, les baixades de capítols i la font local.
+ Més opcions
+ Navega cap amunt
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/ceb/strings.xml b/i18n/src/commonMain/resources/MR/ceb/strings.xml
index 2ab18919f..01b4ce101 100644
--- a/i18n/src/commonMain/resources/MR/ceb/strings.xml
+++ b/i18n/src/commonMain/resources/MR/ceb/strings.xml
@@ -297,13 +297,11 @@
Pagbasa
Taas
Ubos
- Lokasyon sa pag-download
Pagtangtang sa mga kapitulo
Human gimarkahan sa mano-mano ingon nabasa na
Human sa pagbasa awtomatikong tangtangon
Tugoti ang pagtangtang sa gimarkahan nga mga kapitulo
Wala iapil nga mga kategorya
- Pasadya nga lokasyon
Nabaldado
Ikalima hangtod sa kataposang pagbasa sa kapitulo
Awtomatikong pag-download
@@ -350,8 +348,6 @@
Uri sa sukdanan sa hulagway
Ibalik ang backup
Ibalik ang librarya gikan sa backup file
- Backup nga lokasyon
- Maximum nga pag-backup
Gihimo ang backup
Kadaghanon sa pag-backup
Dili balido nga backup file
diff --git a/i18n/src/commonMain/resources/MR/cs/strings.xml b/i18n/src/commonMain/resources/MR/cs/strings.xml
index a770c0c64..a752f5af0 100644
--- a/i18n/src/commonMain/resources/MR/cs/strings.xml
+++ b/i18n/src/commonMain/resources/MR/cs/strings.xml
@@ -84,10 +84,8 @@
G
B
A
- Umístění pro stažení
Po ručním označení jako přečtené
Po přečtení automaticky smazat
- Vlastní umístění
Stahovat nové kapitoly
Uživatelské jméno
Heslo
@@ -207,7 +205,6 @@
Sledovače
Vytvořit zálohu
Obnovit zálohu
- Místo zálohy
Frekvence automatických záloh
Záloha vytvořena
Obnova dokončena
@@ -258,7 +255,6 @@
Pátá předposlední přečtená kapitola
Lze použít k obnovení aktuální knihovny
Obnovit knihovnu ze záložního souboru
- Maximum automatických záloh
Přihlásit se do %1$s
Název zdroje
Číslo kapitoly
@@ -420,7 +416,6 @@
Kapitoly %1$s
Kapitola %1$s a %2$d dalších
Kapitola %1$s
- Hledám nové kapitoly
Nelze stáhnout kapitoly kvůli nedostatku místa
Návod k přesunu zdrojů
Jste si jistý/á\? Všechna historie bude navždy ztracena.
diff --git a/i18n/src/commonMain/resources/MR/cv/strings.xml b/i18n/src/commonMain/resources/MR/cv/strings.xml
index 9ded14d5d..d0401db23 100644
--- a/i18n/src/commonMain/resources/MR/cv/strings.xml
+++ b/i18n/src/commonMain/resources/MR/cv/strings.xml
@@ -11,7 +11,6 @@
Юлашки вуланӑ сыпăк
Сӳнтернӗ
Вуланӑ хыҫҫӑн
- Тийев вырӑнӗ
Вулани
Кӑвак
Симӗс
@@ -190,7 +189,6 @@
Вуланӑ сыпӑкран тӑваттӑмӗшӗ
Вуланӑ сыпӑкран виҫҫӗмӗшӗ
Юлашкинчен маларахри
- Усӑҫ палӑртнӑ вырӑнӗ
Вуланӑ пек палӑртнӑ хыҫҫӑн катерт
Хӑйӗн виҫе
Елсерен
@@ -275,7 +273,6 @@
Хуплашкана ҫӗнетеймерӗ
%1$s сыпӑкӗ тата ытти %2$d
%1$s сыпӑкӗсем
- Ҫӗнӗ сыпӑксен пуррине тӗрӗслени
Сыпӑксене тийесе илме пулмасть. Тийевсем пайӗнче ҫӗнӗрен хӑтланса пӑхма пултаратӑн
Ӑтавла
Куҫар
@@ -401,8 +398,6 @@
Хальхи вулавăша тавӑрма усӑ курма пулать
Янтӑвра манкӑсем ҫук.
Янтӑв тӑвӑннӑ
- Май килнӗ таран янтӑвсем
- Янтӑв вырнаҫни
Вулавӑша янтӑвран тавӑр
Янтӑв тавӑр
Янтӑв ту
diff --git a/i18n/src/commonMain/resources/MR/da/strings.xml b/i18n/src/commonMain/resources/MR/da/strings.xml
index 3362db563..cb2a3bea7 100644
--- a/i18n/src/commonMain/resources/MR/da/strings.xml
+++ b/i18n/src/commonMain/resources/MR/da/strings.xml
@@ -286,7 +286,6 @@
Læser
Udvidelsesopdateringer
Sikkerhedskopiering mislykkedes
- Placering af sikkerhedskopi
Fri
Fejl
Gendannelse fuldført
@@ -300,7 +299,6 @@
Læsetilstand
Du er ved at fjerne \"%s\" fra dit bibliotek
Højeste
- Maksimale antal automatiske sikkerhedskopier
Lav
Kildeindstillinger
App-indstillinger
diff --git a/i18n/src/commonMain/resources/MR/de/strings.xml b/i18n/src/commonMain/resources/MR/de/strings.xml
index 58231342e..737264efe 100644
--- a/i18n/src/commonMain/resources/MR/de/strings.xml
+++ b/i18n/src/commonMain/resources/MR/de/strings.xml
@@ -118,10 +118,8 @@
G
B
A
- Speicherort
Nachdem manuell als gelesen markiert
Automatisch nach dem Lesen löschen
- Eigener Speicherort
Deaktiviert
Ab zuletzt gelesenem Kapitel
Ab zweitletzt gelesenem Kapitel
@@ -134,9 +132,7 @@
Kann benutzt werden, um die aktuelle Bibliothek wiederherzustellen
Datensicherung wiederherstellen
Bibliothek mit Hilfe einer Datensicherung wiederherstellen
- Sicherungsspeicherort
Automatische Datensicherungshäufigkeit
- Maximale Anzahl automatischer Datensicherungen
Datensicherung erstellt
Wiederherstellen abgeschlossen
Was möchtest du sichern\?
@@ -327,7 +323,6 @@
Kapitel %1$s und %2$d mehr
Kapitel %1$s
Benachrichtigungsinhalt verbergen
- Überprüfe auf neue Kapitel
Akkuverbrauch-Optimierung deaktivieren
Hilft bei Bibliotheksaktualisierungen und -sicherungen im Hintergrund
Akkuverbrauch-Optimierung ist bereits deaktiviert
@@ -768,4 +763,10 @@
Speichernutzung
Tracker-Bewertung
Scanlatoren ausschließen
+ Ausgewählt
+ Nicht ausgewählt
+ Speicherort
+ Wird für automatische Datensicherungen, heruntergeladene Kapitel und lokale Quellen verwendet.
+ Weitere Optionen
+ Nach oben navigieren
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/el/strings.xml b/i18n/src/commonMain/resources/MR/el/strings.xml
index 9d086ba05..d27a7219e 100644
--- a/i18n/src/commonMain/resources/MR/el/strings.xml
+++ b/i18n/src/commonMain/resources/MR/el/strings.xml
@@ -145,10 +145,8 @@
G
B
A
- Τοποθεσία λήψεων
Αφού επισημανθεί χειροκίνητα ως αναγνωσμένο
Αυτόματη διαγραφή μετά την ανάγνωση
- Προσαρμοσμένη τοποθεσία
Απενεργοποιημένο
Τελευταίο αναγνωσμένο κεφάλαιο
Προτελευταίο αναγνωσμένο κεφάλαιο
@@ -161,9 +159,7 @@
Μπορεί να χρησιμοποιηθεί για επαναφορά τρέχουσας βιβλιοθήκης
Επαναφορά αντιγράφου ασφαλείας
Επαναφορά βιβλιοθήκης από αρχείο αντιγράφου ασφαλείας
- Τοποθεσία αντιγράφων ασφαλείας
Συχνότητα αυτόματων αντιγράφων ασφαλείας
- Μέγιστα αυτόματα αντίγραφα ασφαλείας
Δημιουργήθηκε αντίγραφο ασφαλείας
Η επαναφορά ολοκληρώθηκε
Τι αντίγραφο ασφαλείας θέλετε να δημιουργήσετε;
@@ -308,7 +304,6 @@
Κεφάλαιο %1$s και %2$d ακόμη
Κεφάλαια %1$s
Κεφάλαιο %1$s
- Έλεγχος για νέα κεφάλαια
Κεφ. %1$s - %2$s
Ενημέρωση βιβλιοθήκης
Σε παύση
@@ -768,4 +763,10 @@
Δε βρέθηκαν scanlators
Scanlator
Εξαίρεση scanlator
+ Περισσότερες επιλογές
+ Επιλεγμένο
+ Μη επιλεγμένο
+ Πλοήγηση προς τα πάνω
+ Τοποθεσία αποθήκευσης
+ Χρησιμοποιείται για αυτόματα αντίγραφα ασφαλείας, λήψη κεφαλαίων και τοπική πηγή.
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/eo/strings.xml b/i18n/src/commonMain/resources/MR/eo/strings.xml
index ef4cf570f..03555cbfc 100644
--- a/i18n/src/commonMain/resources/MR/eo/strings.xml
+++ b/i18n/src/commonMain/resources/MR/eo/strings.xml
@@ -108,12 +108,10 @@
Ĉiutage
Nevalida savkopia dosiero
Savkopio kreita
- Savkopiejo
Krei savkopion
Elŝuti novajn ĉapitrojn
Malŝaltita
Forigi ĉapitrojn
- Elŝutejo
Sen animacioj
Originala grando
Streĉi
@@ -132,7 +130,6 @@
En biblioteko
Aldonita al biblioteko
Aldoni al biblioteko
- Propra dosierujo
Aŭtomate post legado
Legada
Legada reĝimo
@@ -364,7 +361,6 @@
Kromaĵaj ĝisdatigoj
Elŝutito paŭzigita
Elŝutilo
- Kontrolas por trovi novajn ĉapitrojn
Por ĉi-serion
Propra filtrilo
Fonto ne subtenita
@@ -386,7 +382,6 @@
Restaŭras savkopion
Restaŭrado kompletita
Savkopio enhavas neniun mangaon.
- Maksimume savkopioj
Deviga horizontala
Deviga vertikala
Vertikala
diff --git a/i18n/src/commonMain/resources/MR/es/strings.xml b/i18n/src/commonMain/resources/MR/es/strings.xml
index 764824f21..4fc2ae17d 100644
--- a/i18n/src/commonMain/resources/MR/es/strings.xml
+++ b/i18n/src/commonMain/resources/MR/es/strings.xml
@@ -87,10 +87,8 @@
Cualquier dirección
Forzar en vertical
Forzar en horizontal
- Carpeta de descarga
Borrarlos tras marcarlos como leídos de forma manual
Borrar capítulos terminados de forma automática
- Ubicación personalizada
Servicios de seguimiento
Vaciar la caché de capítulos
Usado: %1$s
@@ -205,9 +203,7 @@
Se puede utilizar para restaurar la biblioteca actual
Restaurar copia de seguridad
Restaurar la biblioteca a partir de una copia de seguridad
- Ubicación de la copia de respaldo
- Frecuencia de la copia de seguridad automática
- Copias de seguridad automáticas máximas
+ Frecuencia de respaldo automático
Copia de seguridad creada
Restauración completada
¿De qué quieres hacer una copia de seguridad\?
@@ -328,7 +324,6 @@
Capítulo %1$s y %2$d más
Capítulos %1$s
Ocultar el contenido de las notificaciones
- Buscando nuevos capítulos
Desactivar la optimización de batería
Correo electrónico
Mejora la cadencia de las actualizaciones y las copias de respaldo que se hagan en segundo plano
@@ -398,7 +393,7 @@
No se ha encontrado la fuente
Desactivar
Es necesario reiniciar la aplicación para que surja efecto
- Networking
+ Red
Estado desconocido
Ambos
Vertical
@@ -486,7 +481,7 @@
Mostrar el número de elementos
Fecha de obtención del capítulo
Tipo de rotación
- Crea carpetas según el título de las entradas
+ Crea carpetas según el título de la obra
Guardar las páginas en carpetas independientes
Acciones
Escala de grises
@@ -554,7 +549,7 @@
Advertencia
Las actualizaciones grandes pueden implicar un mayor uso de la batería y que los distintos servicios bloqueen o ralenticen el acceso a tu dispositivo. Toca aquí para más información.
Idioma
- También deberías guardar las copias de seguridad en otros lugares. Las copias de seguridad pueden contener datos confidenciales, incluidas las contraseñas almacenadas.
+ Es una buena idea tener copias de respaldo fuera de tu dispositivo. También incluyen contraseñas y otros datos privados que seguramente no quieras compartir.
Solo con Wi-Fi
Cada 3 días
Advertencia: Las descargas grandes pueden llevar a que las fuentes se vuelvan cada vez más lentas y en casos extremos que los servidores limiten o impidan el acceso a Tachiyomi. Toca aquí para más información.
@@ -653,7 +648,7 @@
Temas de colores y formatos de fecha
Volcar datos del cuelgue y estado de ahorro de batería
Pantalla segura y desbloqueo biométrico
- Copias de seguridad manuales y automáticas, y el espacio de almacenamiento
+ Copias de seguridad manuales y automáticas, almacenamiento
Fuentes, extensiones y búsqueda global
¡Vaya!
Reiniciar la aplicación
@@ -730,7 +725,7 @@
Intervalo de descarga personalizado
Comprobar de forma mensual (28 días)
Aceptar
- ¿Quitar el rastreo de %s\?
+ ¿Quieres desvincular %s?
Esto eliminará el seguimiento localmente.
Quitar también de %s
Borrar los ya descargados
@@ -754,18 +749,24 @@
Ajustes de la aplicación
Ordenar categorías
¿Quieres ordenar las categorías de forma alfabética\?
- Ningún archivo seleccionado
+ No has elegido ningún archivo
Nunca
- Reducir el ghosting en las pantallas de tinta electrónica
- Última copia de seguridad automática: %s
- Parpadeo en blanco al cambiar de página
+ Esta transición minimiza las manchas y el efecto de retención de imagen en pantallas de tinta electrónica
+ Última copia automática: %s
+ Parpadear a blanco al cambiar de página
Datos y almacenamiento
Almacenamiento utilizado
Puntuación del rastreador
Aplicar
Volver a la configuración predeterminada
Crear
- Sin ningún scanlators
- Scanlator
- Omitir a los scanlators
+ Sin escanducciones
+ Escanductor
+ Excluir escanducciones
+ Seleccionado
+ Sin seleccionar
+ Más opciones
+ Subir un nivel
+ Ubicación del almacenamiento
+ Se utiliza para las copias de seguridad automáticas, las descargas de capítulos y la fuente local.
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/eu/strings.xml b/i18n/src/commonMain/resources/MR/eu/strings.xml
index 9d5e9a0b3..a56f0df97 100644
--- a/i18n/src/commonMain/resources/MR/eu/strings.xml
+++ b/i18n/src/commonMain/resources/MR/eu/strings.xml
@@ -118,7 +118,6 @@
Alboko betegarria
Erakutsi beti kapituluaren trantsizioa
Azkenik irakurritako kapitulua
- Deskarga kokapena
Ezabatu kapituluak
Atzetik hasita laugarren irakurritako kapitulua
Saioa hasi gabeko jarraitzaileak:
@@ -223,7 +222,6 @@
Irakurria bezala eskuz markatu ondoren
Baimendu laster-markadun kapituluak ezabatzea
Irakurri ondoren automatikoki ezabatu
- Kokapen pertsonalizatua
Zerbitzu hobetuak
Lagundu itzultzen
Ez da aurkitu fitxategiak hautatzeko aplikaziorik
@@ -431,7 +429,6 @@
Ziur zaude\? Historia guztia galduko da.
Iturrien migrazio gida
Hautatu sartu nahi dituzun datuak
- Kapitulu berriak bilatzen
Kapitulu berriak aurkituak
Ez da ezer irakurri azkenaldian
Deskargarik ez
@@ -458,9 +455,7 @@
Altuena
Babeskopia erabili
Berreskuratu liburutegia babeskopia fitxategitik
- Babeskopiaren kokapena
Babeskopien maiztasuna
- Gehienezko babeskopiak
Alfabetikoki
Oharra
Autentifikatu aldaketa berresteko
diff --git a/i18n/src/commonMain/resources/MR/fa/plurals.xml b/i18n/src/commonMain/resources/MR/fa/plurals.xml
index 560caa806..d6516ab44 100644
--- a/i18n/src/commonMain/resources/MR/fa/plurals.xml
+++ b/i18n/src/commonMain/resources/MR/fa/plurals.xml
@@ -52,4 +52,16 @@
- قسمت خوانده نشده بعدی
- %d قسمت خوانده نشده بعدی
+
+ - قسمت بعدی
+ - %d قسمت بعدی
+
+
+ - %1$s قسمت گم شده
+ - %1$s قسمت گم شده
+
+
+ - 1 روز
+ - %d روز
+
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/fa/strings.xml b/i18n/src/commonMain/resources/MR/fa/strings.xml
index 48505584c..35996b2cc 100644
--- a/i18n/src/commonMain/resources/MR/fa/strings.xml
+++ b/i18n/src/commonMain/resources/MR/fa/strings.xml
@@ -14,7 +14,6 @@
قسمت %1$s و %2$d قسمت دیگر
قسمت %1$s
قسمتهای جدید پیدا شدند
- درحال بررسی برای قسمتهای جدید
دانلود قسمت ها با خطا مواجه شد. با مراجعه به بخش دانلودها می توانید دوباره تلاش کنید
کپی
تغییر منبع
@@ -120,9 +119,7 @@
هیچ نتیجه ای یافت نشد
نتیجه بیشتری یافت نشد
تب ها
- حداکثر تعداد نسخههای پشتیبان
زمان پشتیبان گیری
- محل پشتیبان گیری
بازگرداندن کتابخانه از فایل پشتیبان
برگرداندن نسخه پشتیبان
می تواند برای بازگرداندن کتابخانه فعلی استفاده شود
@@ -144,8 +141,6 @@
برای این مجموعه
بازکردن عکس با خطا مواجه شد
قصد خواندن دارم(Plan to read)
- مکان سفارشی
- مکان دانلود
هم اندازه حالت هوشمند
Multiply
Overlay
@@ -601,4 +596,22 @@
شما باید از پشتیبانی ها در جا های دیگر هم کپی داشته باشید.
بروزرسانی دسته بندی
کپی کردن به کلیپبرد
+ فرمت RARv5 پشتیبانی نشده
+ متوقف شده
+ باز گشایی %s
+ پاک کردن قسمت های دانلود شده
+ ذخیره
+ باز نشانی به حالت اولیه
+ منظم کردن دسته بندی ها
+ گزینه های بیشتر
+ انتخاب شده
+ انتخاب نشده
+ مجموعه ها را به پایین منطقل کن
+ برو به بالا
+ امتیاز رهگیز
+ داده های و ذخیره سازی
+ آیا مایلید که دسته بندی ها را به ترتیب الفبا منظم کنید؟
+ باشه
+ به روز رسانی مورد انتظار بعدی
+ هشدار: حجم زیاد بارگیری ممکن است باعث اهسته تر شدن سرعت ویا مسدود کردن Tachiyomi از منبع شود. برای اطلاعات بیشتر لمس کنید.
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/fi/strings.xml b/i18n/src/commonMain/resources/MR/fi/strings.xml
index ac27efe69..bb54521b9 100644
--- a/i18n/src/commonMain/resources/MR/fi/strings.xml
+++ b/i18n/src/commonMain/resources/MR/fi/strings.xml
@@ -192,10 +192,8 @@
Vihreä
Sininen
Alpha
- Lataus kansio
Manuaalisesti luetuksi merkitsemisen jälkeen
Lukemisen jälkeen
- Mukautettu kansio
Pois käytöstä
Viimeksi luettu luku
Toiseksi viimeinen luku
@@ -207,7 +205,6 @@
Voidaan käyttää nykyisen kirjaston palauttamiseen
Palauta kirjasto varmuuskopiointi-tiedostosta
Varmuuskopioinnin tiheys
- Varmuuskopioiden enimmäismäärä
Varmuuskopio luotu
Palautus valmis
Mitä haluat varmuuskopioida\?
@@ -260,7 +257,6 @@
Kategoriat poistettu
Luo varmuuskopio
Palauta varmuuskopio
- Varmuuskopio kansio
Paikalliset lähteet
Muut
Viimeisimmät
@@ -323,7 +319,6 @@
Luku %1$s ja %2$d lisää
Luvut %1$s
Piilota ilmoitusten sisältö
- Etsitään uusia lukuja
Lukitse käyttämättömänä
Salaa näyttö
Turvallinen ruutu piilottaa sovelluksen sisällön sovelluksia vaihdettaessa ja estää kuvakaappauksen ottamisen
diff --git a/i18n/src/commonMain/resources/MR/fil/strings.xml b/i18n/src/commonMain/resources/MR/fil/strings.xml
index c1c0b0be9..82ae744d6 100644
--- a/i18n/src/commonMain/resources/MR/fil/strings.xml
+++ b/i18n/src/commonMain/resources/MR/fil/strings.xml
@@ -115,10 +115,8 @@
Pangalawa sa huling nabasa
Huling nabasang kabanata
Sarado
- Pinili kong lugar
Pagkamarkahang nabasa na
Pagkatapos basahin, kusang burahin
- Lokasyon sa pag-download
Kapal ng gilid
Pagbabasa
Ipakita palagi ang paglipat-kabanata
@@ -229,9 +227,7 @@
Hindi naglalaman ang backup ng kahit anong mga entry sa Aklatan.
Invalid na backup
Nai-backup na
- Pinakamarami na awtomatikong pag-backup
Awtomatikong dalas ng pag-backup
- Lokasyon ng backup
I-restore ang Aklatan mula sa backup
I-restore ang backup
Magagamit para ma-restore ang kasalukuyang Aklatan
@@ -276,7 +272,6 @@
Kabanata %1$s at karagdagang %2$d pa
Kabanata %1$s
May mga bagong kabanata
- Naghahanap ng mga bagong kabanata
Di ma-download ang mga kabanata dahil sa mababang espasyo
Di ma-download ang mga kabanata. Subukan mo uli ito sa Dina-download
Kopyahin
@@ -768,4 +763,10 @@
Scanlator
Ibukod ang mga scanlator
Lumikha
+ Lokasyon ng storage
+ Ginagamit para sa automatikong pa-backup, pag-download ng mga kabanata, at lokal na source.
+ Ibang opsiyon
+ Napili
+ Di napili
+ Mag-navigate pataas
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/fr/strings.xml b/i18n/src/commonMain/resources/MR/fr/strings.xml
index 11311ee49..ce6307a12 100644
--- a/i18n/src/commonMain/resources/MR/fr/strings.xml
+++ b/i18n/src/commonMain/resources/MR/fr/strings.xml
@@ -105,7 +105,6 @@
V
B
O
- Répertoire de téléchargement
Suppression automatique après lecture
Désactivé
Dernier chapitre lu
@@ -186,7 +185,6 @@
Aucune connexion disponible
Êtes-vous sûr(e) \? Les chapitres lus et la progression des entrées non présentes dans la bibliothèque seront perdues
Supprimer les chapitres sélectionnés \?
- Répertoire personnalisé
Impossible de télécharger le chapitre en raison d\'une erreur inattendue
Cinquième chapitre avant le dernier lu
Connecté
@@ -208,7 +206,6 @@
En pause
Ouvrir le fichier
Restaurer
- Dossier de sauvegarde
Restauration terminée
Que voulez-vous sauvegarder \?
Supprimer les chapitres téléchargés ?
@@ -219,7 +216,6 @@
Restaurer une sauvegarde
Restaurer la bibliothèque à partir d\'un fichier de sauvegarde
Fréquence de sauvegarde
- Nombre maximal de sauvegardes
Sauvegarde créée
Restauration de sauvegarde en cours
Création de sauvegarde en cours
@@ -327,7 +323,6 @@
Chapitre %1$s et %2$d autres
Chapitres %1$s
Cacher le contenu des notifications
- Recherche de nouveaux chapitres
Désactiver la fonction d\'optimisation de la batterie
Facilite les mises à jour et sauvegardes de la bibliothèque en arrière-plan
La fonction d\'optimisation de la batterie est déjà désactivée
@@ -742,4 +737,20 @@
Déplacer la série vers le bas
Supprimez également de %s
Impossible de joindre %s
+ Paramètres de l\'application
+ Supprimer le(s) téléchargement(s)
+ Appliquer
+ Réintialiser les valeurs par défaut
+ Trier les catégories
+ Plus d\'options
+ Sélectionné
+ Pas sélectionné(e)
+ Scanlator
+ Faire l\'écran clignoter sur le changement de page
+ Naviguer vers le haut
+ Score du service de suivi
+ Données et stockage
+ Voulez-vous trier les catégories par ordre alphabétique ?
+ Se connecter au service de suivi
+ « %1$s » au lieu de « %2$s »
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/gl/strings.xml b/i18n/src/commonMain/resources/MR/gl/strings.xml
index 0babeef68..e46e0b145 100644
--- a/i18n/src/commonMain/resources/MR/gl/strings.xml
+++ b/i18n/src/commonMain/resources/MR/gl/strings.xml
@@ -10,12 +10,10 @@
Cola de baixadas
Último capítulo lido
Deshabilitado
- Ubicación personalizada
Permitir eliminar os capítulos marcados como favoritos
Eliminar automaticamente despois de ler
Despois de marcar manualmente como lido
Eliminar capítulos
- Localización das baixadas
Recheo lateral
Lendo
Modo de lectura
@@ -274,7 +272,6 @@
Imaxe gardada
Restaurar a copia de seguridade
Frecuencia das copias de seguridade
- Máximo de copias de seguridade
Fontes faltantes:
Invalidar o índice de baixadas
Garda os rexistros de erros nun ficheiro para compartilo cos desenvolvedores
@@ -370,7 +367,6 @@
Clasificación por idades
Servizos mellorados
Estes servizos proporcionan funcións melloradas para fontes concretas. Faise un seguemento automático dos elementos ao engadilos á biblioteca.
- Localización da copia de seguridade
Xa se está facendo unha copia de seguridade
Compartir os rexistros de erros
Error ao compartir a portada
@@ -592,7 +588,6 @@
Fonte local
En seguimento
Lendo
- Procurando capítulos novos
Non hai ningunha conexión Wi-Fi dispoñible
%s pechouse por un problema inesperado. Aconsellámoste que compartas os rexistros de erros na canle de soporte no Discord (en inglés).
Reinicia a aplicación
diff --git a/i18n/src/commonMain/resources/MR/he/strings.xml b/i18n/src/commonMain/resources/MR/he/strings.xml
index 0b08ea497..3e28e22e7 100644
--- a/i18n/src/commonMain/resources/MR/he/strings.xml
+++ b/i18n/src/commonMain/resources/MR/he/strings.xml
@@ -27,7 +27,6 @@
פרק %1$s ו-%2$d נוספים
פרק %1$s
נמצאו פרקים חדשים
- מחפש פרקים חדשים
לא ניתן להוריד פרקים. אפשר לנסות שוב בדף ההורדות
העתק
העברה
@@ -206,9 +205,7 @@
מה אתה רוצה לגבות\?
השחזור הושלם
גיבוי נוצר
- מספר גיבויים מקסימלי
תדירות גיבוי
- מיקום גיבוי
שחזר ספרייה מקובץ גיבוי
שחזור גיבוי
ניתן לשימוש על מנת לשחזר את הספרייה הנוכחית
@@ -221,10 +218,8 @@
הפרק השלישי מהסוף שנקרא
הפרק השני מהסוף שנקרא
פרק שנקרא בפעם האחרונה
- מיקום מותאם אישית
אוטומטי לאחר סיום הקריאה
אחרי שמסומן ידנית כנקרא
- מיקום ההורדה
הצג תמיד מעברי פרקים
אלפא
כחול
diff --git a/i18n/src/commonMain/resources/MR/hi/strings.xml b/i18n/src/commonMain/resources/MR/hi/strings.xml
index 040bb7f72..2c41fa2cb 100644
--- a/i18n/src/commonMain/resources/MR/hi/strings.xml
+++ b/i18n/src/commonMain/resources/MR/hi/strings.xml
@@ -122,10 +122,8 @@
G
B
A
- डाउनलोड निर्देशिका
\'पढ़ें\' के रूप में खुद से चिह्नित करने के बाद
पढ़ने के बाद स्वचालित रूप से हटाएं
- इच्छा अनुसार निर्देशिका
बंद करें
अंतिम पढ़ा अध्याय
दूसरा से अंतिम पढ़ा गया अध्याय
@@ -138,9 +136,7 @@
वर्तमान पुस्तकालय को पुनर्स्थापित करने के लिए उपयोग किया जा सकता है
बैकअप पुनर्स्थापित करे
बैकअप फ़ाइल से लाइब्रेरी पुनर्स्थापित करें
- बैकअप निर्देशिका
बैकअप फ़्रीक्वेंसी
- अधिकतम बैकअप
बैकअप बनाया गया है
पुनर्स्थापना पूर्ण हुआ
आप बैकअप के लिए क्या चाहते हैं?
@@ -327,7 +323,6 @@
अध्याय %1$s और %2$d अधिक
अध्याय %1$s
अधिसूचना सामग्री छुपाएं
- नए अध्यायों के लिए जांच
बैटरी अनुकूलन को अक्षम करना
पृष्ठभूमि पुस्तकालय अपडेट और बैकअप के साथ मदद करता है
बैटरी अनुकूलन पहले से ही अक्षम है
diff --git a/i18n/src/commonMain/resources/MR/hr/strings.xml b/i18n/src/commonMain/resources/MR/hr/strings.xml
index 4f4aa4532..091f32522 100644
--- a/i18n/src/commonMain/resources/MR/hr/strings.xml
+++ b/i18n/src/commonMain/resources/MR/hr/strings.xml
@@ -148,9 +148,7 @@
%02d min, %02d s
Obnavljanje je završeno
Sigurnosna kopija je stvorena
- Maksimalni broj sigurnosnih kopija
Učestalost automatskog spremanja sigurnosnih kopija
- Mjesto spremanja sigurnosnih kopija
Obnovi biblioteku iz sigurnosne kopije
Obnovi sigurnosnu kopiju
Može se koristiti za obnavljanje trenutačne biblioteke
@@ -164,10 +162,8 @@
Predzadnje pročitano poglavlje
Zadnje pročitano poglavlje
Deaktivirano
- Prilagođeno mjesto
Automatski izbriši nakon čitanja
Nakon ručnog označivanja kao pročitano
- Mjesto preuzimanja
Odmak od ruba
Čitanje
Uvijek prikaži prijelaze između poglavlja
@@ -241,7 +237,6 @@
Poglavlje %1$s i još %2$d
Poglavlje %1$s
Pronađena su nova poglavlja
- Traženje novih poglavlja
Neuspjelo preuzimanje poglavlja. Pokušaj ponovo u odjeljku preuzimanja
Kopiraj
Migriraj
@@ -768,4 +763,10 @@
Korištenje memorije
Rezultat tragača
Isključi amaterske prevoditelje
+ Mjesto spremanja
+ Koristi se za automatske sigurnosne kopije, preuzimanje poglavlja i lokalni izvor.
+ Više opcija
+ Odabrano
+ Neodabrano
+ Navigiraj prema gore
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/hu/plurals.xml b/i18n/src/commonMain/resources/MR/hu/plurals.xml
index 1ed5bf5a5..535bbf3a1 100644
--- a/i18n/src/commonMain/resources/MR/hu/plurals.xml
+++ b/i18n/src/commonMain/resources/MR/hu/plurals.xml
@@ -60,4 +60,8 @@
- Hiányzó %1$s fejezet
- Hiányzó %1$s fejezetek
+
+ - 1 nap
+ - %d nap
+
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/hu/strings.xml b/i18n/src/commonMain/resources/MR/hu/strings.xml
index 3d0cc6ccd..97faaa878 100644
--- a/i18n/src/commonMain/resources/MR/hu/strings.xml
+++ b/i18n/src/commonMain/resources/MR/hu/strings.xml
@@ -50,7 +50,6 @@
Hangerőszabályzó gombokkal
Gombok felcserélése
Háttérszín
- Letöltések helye
Verzió
Összeomlás-jelentések küldése
Befejezett
@@ -340,7 +339,6 @@
Utolsó előtti előtti befejezett fejezet
Utolsó előtti befejezett fejezet
Kikapcsolva
- Egyedi hely
Tiltott kategóriák
Könyvjelzőzött fejezetek törlésének engedélyezése
Automatikus törlés olvasás után
@@ -452,8 +450,6 @@
Nem lehetett a fejezeteket letölteni. Próbálja újra a letöltések menüpontban
Válaszon ki egy forrást, ahonnan importálni szeretne
Nem lehetett letölteni kevés tárhely miatt
- Biztonsági mentés helye
- Maximális biztonsági mentések száma
Biztonsági mentés létrehozása
Biztonsági mentés sikertelen
Sütik törlése
@@ -517,7 +513,6 @@
Biztonsági mentés már folyamatban van
Nincs telepítve
Figyelmeztetés: a tömeges letöltések a források lelassulásához és/vagy a Tachiyomi leállásához vezethetnek. Koppintson további információért.
- Új fejezetek keresése
%1$d frissítés kihagyva
Koppintson további információért
Nem sikerült a fedlap frissítése
@@ -715,4 +710,46 @@
Jobbra csúsztatási cselekmény
Forgatott széles oldalak megfordítása
Ok
+ Tárolási hely
+ Érints ide, ha Cloudflare segítségre van szükséged
+ Soha
+ Átlépve, mert a sorozatot nem kell frissíteni
+ E-ink képernyőkön csökkenti a visszamaradó képet
+ %s feloldása
+ Automatikus biztonsági mentésekhez, fejezetek letöltéséhez, és helyi forráshoz használt.
+ Frissítés beállítása minden
+ Könyvtár szinkronizálása
+ Biztonsági mentés készítése nem sikerült
+ Intervallumok
+ Visszaállítás alapértelmezettre
+ Felhasználói ágens (user agent) szöveg nem lehet üres
+ Kategória alapján
+ További lehetőségek
+ Könyvtár szinkronizálása elkészült
+ Utolsó automatikus biztonsági mentés: %s
+ Intervallum testreszabása
+ Kiválasztott
+ Nincs szkennelő-fordító találat
+ Nem kiválasztott
+ Sorozat alulra küldése
+ Szkennelő-fordító
+ Villantson fehéren lap változtatáskor
+ Nincs internet kapcsolat
+ Tárolóhely felhasználás
+ Könyvtár frissítése ... (%s)
+ Bejegyzések
+ Felnavigálás
+ Adat és tárolás
+ Szeretnéd a kategóriákat betűrendbe rendezni?
+ Átlépve, mert ma nem várható kiadás
+ Nincs fájl kiválasztva
+ Érvénytelen felhasználói ágens (user agent) szöveg
+ Forrás beállítások
+ Applikáció beállítások
+ Vannak eredmények
+ Relatív időbélyegek
+ HTTP %d, nézd meg a honlapot WebViewban
+ \"%1$s\", ahelyett hogy \"%2$s\"
+ %s nem elérhető
+ Szkennelő-fordítók tiltása
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/in/strings.xml b/i18n/src/commonMain/resources/MR/in/strings.xml
index 2424833ee..57178454c 100644
--- a/i18n/src/commonMain/resources/MR/in/strings.xml
+++ b/i18n/src/commonMain/resources/MR/in/strings.xml
@@ -110,7 +110,7 @@
Kiri
Kanan
Tengah
- rotasi bawaan
+ Rotasi bawaan
Bebas
Terkunci tegak
Terkunci mendatar
@@ -118,10 +118,8 @@
G
B
A
- Lokasi unduhan
Setelah secara manual ditandai telah dibaca
Otomatis hapus setelah dibaca
- Lokasi kustom
Tidak Aktif
Bab terakhir yang dibaca
Bab kedua dari terakhir dibaca
@@ -134,9 +132,7 @@
Dapat digunakan untuk memulihkan isi pustaka saat ini
Pulihkan cadangan
Pulihkan isi pustaka dari berkas cadangan
- Tempat pencadangan
Frekuensi pencadangan otomatis
- Jumlah maksimum pencadangan otomatis
Cadangan dibuat
Pemulihan selesai
Apa saja yang ingin Anda cadangkan\?
@@ -325,7 +321,6 @@
Gagal untuk menembus Cloudflare
Harap perbarui aplikasi WebView untuk kompatibilitas yang lebih baik
Pembaruan bab
- Memeriksa bab baru
Nonaktifkan optimisasi baterai
Optimalisasi baterai sudah dimatikan
Alamat surel
@@ -768,4 +763,10 @@
Skor pelacak
Data dan penyimpanan
Kecualikan pemindai
+ Opsi lebih lanjut
+ Dipilih
+ Tidak dipilih
+ Navigasi ke atas
+ Lokasi penyimpanan
+ Digunakan untuk pencadangan otomatis, pengunduhan bab, dan sumber lokal.
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/it/strings.xml b/i18n/src/commonMain/resources/MR/it/strings.xml
index f9191305f..2171a2e97 100644
--- a/i18n/src/commonMain/resources/MR/it/strings.xml
+++ b/i18n/src/commonMain/resources/MR/it/strings.xml
@@ -102,10 +102,8 @@
G
B
A
- Posizione dei download
Dopo averli contrassegnati manualmente come letti
Cancella automaticamente dopo la lettura
- Posizione personalizzata
Disabilitato
Ultimo capitolo letto
Penultimo capitolo letto
@@ -209,9 +207,7 @@
Può essere utilizzato per ripristinare la libreria attuale
Ripristina backup
Ripristina la libreria da un file di backup
- Posizione dei backup
Frequenza dei backup automatici
- Massimo numero di backup automatici
Backup creato
Ripristino completato
Di cosa vuoi fare il backup\?
@@ -327,7 +323,6 @@
Capitoli %1$s
Capitolo %1$s e altri %2$d
Capitolo %1$s
- Cercando nuovi capitoli
Indirizzo e-mail
Ottimizzazione batteria già disattivata
Facilita gli aggiornamenti e i backup in secondo piano
diff --git a/i18n/src/commonMain/resources/MR/ja/plurals.xml b/i18n/src/commonMain/resources/MR/ja/plurals.xml
index 8c6bfcfac..cac385e17 100644
--- a/i18n/src/commonMain/resources/MR/ja/plurals.xml
+++ b/i18n/src/commonMain/resources/MR/ja/plurals.xml
@@ -4,22 +4,22 @@
- %1$s分後
- - %1$d新しい章
+ - %1$d件の新しい章
- 残り%1$s件
- - %1$sで完成済み %2$s件のエラーが発生しました
+ - %1$sで完了しました (%2$s件のエラー)
- %d件のカテゴリー
- - %d件の拡張機能の更新が利用可能
+ - %d件の拡張機能の更新が利用可能です
- - 第%1$s章とその他%2$d章
+ - %1$s章と他%2$d章
- %d件の項目
@@ -31,7 +31,7 @@
- %d個のトラッカー
- - ソースには存在しないか、フィルターによって排除されたため、%d章がスキップされました
+ - %d章をスキップします。ソースに章が存在しないか、フィルタリングされています。
- %1$d日前
@@ -43,7 +43,7 @@
- 次の%d章
- - %1$s章が欠けています
+ - %1$s章が存在しません
- %d日
diff --git a/i18n/src/commonMain/resources/MR/ja/strings.xml b/i18n/src/commonMain/resources/MR/ja/strings.xml
index e78c82161..5f8249a50 100644
--- a/i18n/src/commonMain/resources/MR/ja/strings.xml
+++ b/i18n/src/commonMain/resources/MR/ja/strings.xml
@@ -100,9 +100,9 @@
白
ブラック
既定のビューアモード
- ページに分ける(左から右)
- ページに分ける(右から左)
- ページに分ける(上から下)
+ ページ分割 (左から右)
+ ページ分割 (右から左)
+ ページ分割 (上から下)
縦長のストリップ
ページに分ける
スケールの種類
@@ -125,10 +125,8 @@
G
B
A
- ダウンロードフォルダ
手動で既読にした後
読んだ後自動で削除
- カスタムディレクトリ
無効
最後に読んだ章の2番目
新しい章をダウンロード
@@ -136,9 +134,7 @@
現在のライブラリを復元するために使用できます
バックアップを復元
バックアップファイルからライブラリを復元する
- バックアップディレクトリ
自動バックアップの頻度
- 最大の自動バックアップ数
バックアップが作成されました
チャプタキャッシュをクリア
消去中にエラーが発生しました
@@ -204,7 +200,7 @@
次をクリップボードにコピーしました:
\n%1$s
第%1$s章
- ダウンロード中(%1$d/%2$d)
+ ダウンロード中 (%1$d/%2$d)
エラー
一時停止済み
ソースタイトル
@@ -295,7 +291,7 @@
ログアウト
ログアウトしました
一時停止
- 他
+ その他
その他
最新章の更新順
章を見る
@@ -373,7 +369,6 @@
章の更新
WebViewアプリを更新して互換性を向上させてください
WebViewが必要です
- 新しい章を確認中
ライブラリを更新中
ビューアモード
詳細を非表示
@@ -391,7 +386,7 @@
ライブラリ内
ローカルソースガイド
ピン留め済み
- 最近に使用済み
+ 最近に使用
現在のビューアモードを、ビューアが立ち上がるとしばらく表示します
ビューアモードを表示
ソースが見つかりませんでした
@@ -472,7 +467,7 @@
前へ
ビューアが立ち上がるとしばらく表示します
タップ可能なゾーンを表示
- DNS over HTTPS(DoH)
+ DNS over HTTPS (DoH)
含まれているカテゴリーに入っていても、除外対象カテゴリーにある項目は更新されません。
自動ダウンロード
下記を除外: %s
@@ -522,7 +517,7 @@
ダウンロードを開始します
ダイナミック
一部のスマホメーカーはバックグラウンドサービスを終了する追加のアプリ制限を施しています。修正する方法についてはこのWebサイトをご覧ください。
- 背景活動
+ バックグラウンドアクティビティ
MIUI最適化が有効な場合はバックアップ・復元が正常に機能しない恐れがあります。
最低
低い
@@ -585,7 +580,7 @@
タップでもっと詳しく
スキップ済み
%1$d件の更新に失敗しました
- 縦向き(反転)
+ 縦向き (反転)
シリーズをトップに移動
無効
バックアップできるライブラリ項目はありません
@@ -675,12 +670,12 @@
ローカル
開始済み
閲覧時間
- 項目
- グローバルアップデート対象
- 総計
+ 作品
+ グローバルアップデート
+ 合計
閲覧済み
トラッカー
- 追跡中の作品
+ トラッキング中の作品
使用中
N/A
%d時間
@@ -688,9 +683,9 @@
%d秒
統計情報
概要
- 読了した作品
+ 読み終わった作品
ダウンロード済み
- 平均点数
+ 平均
%d日
後で
カテゴリが空です
@@ -732,7 +727,7 @@
%s からも削除
ダウンロードを削除
10+チェック後半
- 落とした\? 20歳以上後半と2ヶ月
+ 落とした? 20歳以上後半と2ヶ月
チェック期間を過ぎました
OK
ライブラリを同期しています
@@ -750,7 +745,7 @@
相対的なタイムスタンプ
「%2$s」の代わりに「%1$s」を使用
カテゴリの並べ替え
- ライブラリの更新中…(%s)
+ ライブラリの更新中… (%s)
カテゴリをアルファベット順で並べ替えますか?
ソース設定
アプリ設定
@@ -768,4 +763,10 @@
スキャンレーターが見つかりませんでした
スキャンレーター
スキャンレーターを除外
+ その他のオプション
+ 選択済み
+ 未選択
+ 上に移動
+ 保存場所
+ 自動バックアップ、章のダウンロード、ローカル ソースの保存位置となります。
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/jv/strings.xml b/i18n/src/commonMain/resources/MR/jv/strings.xml
index 743d80f42..ae0ef92e8 100644
--- a/i18n/src/commonMain/resources/MR/jv/strings.xml
+++ b/i18n/src/commonMain/resources/MR/jv/strings.xml
@@ -13,7 +13,6 @@
Versi
DNS liwat HTTPS
Dipateni
- Lokasi donlot
T
B
I
@@ -312,4 +311,7 @@
Diwiwiti
Diundhuh
Telusuri…
+ Ngehapus downloadan
+ Dipilih
+ Gak dipilih
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/ka-rGE/strings.xml b/i18n/src/commonMain/resources/MR/ka-rGE/strings.xml
index a34b277fc..9d4038b90 100644
--- a/i18n/src/commonMain/resources/MR/ka-rGE/strings.xml
+++ b/i18n/src/commonMain/resources/MR/ka-rGE/strings.xml
@@ -173,10 +173,8 @@
ყოველთვის აჩვენე თავებს შორის გადასვლა
კითხვა
ცარიელი არეა გვერდებზე
- გადმოწერის ადგილი დისკზე
წაშალე წაკითხულად მონიშვნის შემდეგ
წაკკითხვის შემდეგ წაშალე
- ინდივიდუალური ადგილმდებარეობა
გამორთული
ბოლო წაკითხული თავი
ბოლოს წინა წაკითხული თავი
@@ -190,9 +188,7 @@
შესაძლებელია გამოყენებულ იქნას ახლანდელი ბიბლიოთეკის ასადგენად
რეზერვის აღდგენა
ბიბლიოთეკის აღდგენა რეზერვიდან
- რეზერვის ლოკაცია
რეზერვის შექმნის სიხშირე
- მაქსიმალური რეზერვი
რეზერვი შექმნილია
არასწორი სარეზერვო ფაილი
მარქაფი ბიბლიოთეკის ჩანაწერებს არ შეიცავს.
@@ -314,7 +310,6 @@
მიგრაცია
კოპირება
ვერ მოხერხდა თავების გადმოწერა. შეგიძლია სცადო თავიდან გადმოწერების სექციაში
- ახალი თავების ძებნა
ახალი თავები მოიძებნა
თავი %1$s
თავი %1$s და %2$d მეტი
diff --git a/i18n/src/commonMain/resources/MR/kk/strings.xml b/i18n/src/commonMain/resources/MR/kk/strings.xml
index 6721346ce..190113347 100644
--- a/i18n/src/commonMain/resources/MR/kk/strings.xml
+++ b/i18n/src/commonMain/resources/MR/kk/strings.xml
@@ -291,9 +291,7 @@
Сұр
Әдепкі оқу режимі
Ең жоғары
- Жүктеу орны
Саналмайтын санаттар
- Реттелетін орын
Қолмен оқылған деп белгіленгеннен кейін
Оқығаннан кейін автоматты түрде жою
Бетбелгіленген тарауларды жоюға рұқсат беру
@@ -408,7 +406,6 @@
Туындылар мұқабасын жаңарту
Cloudflare айналып өтілмеді
Жақсырақ үйлесімділік үшін WebView-ді жаңартыңыз
- Сақтық көшірме бумасы
Бақылау қызметіне кірілмеген:
Соңғы
Сұрыптау
@@ -419,7 +416,6 @@
Күн
Шығып жатыр
Қалпына келтіру әлдеқашан орындалуда
- Сақтық көшірме саны
Сақтық көшірмесіне нені қалайсыз\?
Сақтық көшірмесін қалпына келтіру
Сақтық көшірмесі әлдеқашан орындалуда
@@ -587,7 +583,6 @@
Қолданбаны өшіріп қосу
Тараулар жүктелмеді. Жүктеулер кезегіне барып, сол жерден байқап көре аласыз
Жадта орын аз болғандықтан тараулар жүктелмейді
- Жаңа тараулар бар ма екенін тексеру
%1$s тарау мен %2$d
Бұны істер алдыңда жазбаны кітапханаңызға қосыңыз
Туынды аяқталған үшін өткізіп жіберілді
diff --git a/i18n/src/commonMain/resources/MR/kn/strings.xml b/i18n/src/commonMain/resources/MR/kn/strings.xml
index 8e7407d7b..1ea09b5a9 100644
--- a/i18n/src/commonMain/resources/MR/kn/strings.xml
+++ b/i18n/src/commonMain/resources/MR/kn/strings.xml
@@ -115,9 +115,7 @@
%02d ನಿಮಿಷ, %02d ಸೆಕೆಂಡು
ಮರುಸ್ಥಾಪನೆ ಪೂರ್ಣಗೊಂಡಿದೆ
ಬ್ಯಾಕಪ್ ರಚಿಸಲಾಗಿದೆ
- ಗರಿಷ್ಠ ಬ್ಯಾಕಪ್ಗಳು
ಬ್ಯಾಕಪ್ ಆವರ್ತನ
- ಬ್ಯಾಕಪ್ ಸ್ಥಳ
ಬ್ಯಾಕಪ್ ಫೈಲ್ನಿಂದ ಗ್ರಂಥಾಲಯವನ್ನು ಮರುಸ್ಥಾಪಿಸಿ
ಬ್ಯಾಕಪ್ ಮರುಸ್ಥಾಪಿಸಿ
ಪ್ರಸ್ತುತ ಗ್ರಂಥಾಲಯವನ್ನು ಪುನಃಸ್ಥಾಪಿಸಲು ಬಳಸಬಹುದು
@@ -132,10 +130,8 @@
ಕೊನೆಯ ಅಧ್ಯಾಯದಿಂದ ಎರಡನೆಯದು
ಕೊನೆಯದಾಗಿ ಓದಿದ ಅಧ್ಯಾಯ
ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ
- ಕಸ್ಟಮ್ ಸ್ಥಳ
ಓದಿದ ನಂತರ
ಓದಿದಂತೆ ಗುರುತಿಸಿದಾಗ ತೆಗೆದುಹಾಕಿ
- ಡೌನ್ಲೋಡ್ ಸ್ಥಳ
ಸೈಡ್ ಪ್ಯಾಡಿಂಗ್
ಓದುತ್ತಿರುವ
ಅಧ್ಯಾಯ ಪರಿವರ್ತನೆಯನ್ನು ಯಾವಾಗಲೂ ತೋರಿಸಿ
@@ -254,7 +250,6 @@
ಅಧ್ಯಾಯ %1$s ಮತ್ತು %2$d ಹೆಚ್ಚು
ಅಧ್ಯಾಯ %1$s
ಹೊಸ ಅಧ್ಯಾಯಗಳು ಕಂಡುಬಂದಿವೆ
- ಹೊಸ ಅಧ್ಯಾಯಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ
ಅಧ್ಯಾಯಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಡೌನ್ಲೋಡ್ಗಳ ವಿಭಾಗದಲ್ಲಿ ನೀವು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಬಹುದು
ನಕಲಿಸಿ
ಸ್ಥಳಾಂತರಿಸಿ
diff --git a/i18n/src/commonMain/resources/MR/ko/strings.xml b/i18n/src/commonMain/resources/MR/ko/strings.xml
index 371f76e50..af2e5cf34 100644
--- a/i18n/src/commonMain/resources/MR/ko/strings.xml
+++ b/i18n/src/commonMain/resources/MR/ko/strings.xml
@@ -137,9 +137,7 @@
백업 생성
백업 복원
백업 파일에서 서재 복원
- 백업 위치
백업 주기
- 최대 백업
백업 생성됨
복원 완료
백업 복원중
@@ -243,8 +241,6 @@
G
B
A
- 다운로드 폴더
- 사용자 정의 위치
끝에서 두번째 회차
끝에서 세번째 회차
끝에서 네번째 회차
@@ -476,7 +472,6 @@
기록이 삭제되었습니다
저장 공간이 부족하여 회차를 다운로드 할 수 없습니다
경고: 대량 다운로드는 소스가 느려지거나 Tachiyomi를 차단할 수 있습니다. 탭하여 자세히 알아보기.
- 새로운 회차 확인 중
대규모 업데이트는 소스에 피해를 입히고 업데이트가 느려지고 배터리 사용량이 증가할 수 있습니다. 탭하여 자세히 알아보기.
%1$s화
%1$d개의 업데이트가 실패했습니다
diff --git a/i18n/src/commonMain/resources/MR/lt/strings.xml b/i18n/src/commonMain/resources/MR/lt/strings.xml
index 92c7f2bf2..7905d0f18 100644
--- a/i18n/src/commonMain/resources/MR/lt/strings.xml
+++ b/i18n/src/commonMain/resources/MR/lt/strings.xml
@@ -320,24 +320,20 @@
Leisti naikinti žymėtus skyrius
Penktas nuo paskutinio skaityto
Automatinis atsisiuntimas
- Maksimalus atsarginių kopijų skaičius
Sukurta atsarginė kopija
aukštas
- Atsisiuntimo vieta
Naikinti skyrius
Mažiausias
Rankinių būdu pažymėtas, kaip skaitytas
Perskaičius automatiškai naikinti
Patobulintos paslaugos
Atkurti biblioteką iš atsarginės failo kopijos
- Atsarginės kopijos vieta
Atsarginėje kopijoje nėra jokių bibliotekos įrašų.
Netinkamas atsarginės kopijos failas
Aukščiausias
Kurti atsarginę kopiją
Atkurti atsarginę kopiją
Neįtrauktos kategorijos
- Pasirinktina vieta
Paskiausiai skaitytas skyrius
Įrašai neįtrauktose kategorijose nebus atsisiųsti, net jei jie taip pat yra įtraukti į kategorijas.
Palieskite, kad sužinotumėte daugiau
@@ -358,7 +354,6 @@
Priskirti šiai serijai
Baigta:
Dabartinis:
- Ieškoma naujų skyrių
Nepavyko atnaujinti %1$d
Prieš atlikdami šį veiksmą, pridėkite įrašą į savo biblioteką
Praleista, nes nėra perskaitytų skyrių
diff --git a/i18n/src/commonMain/resources/MR/lv/strings.xml b/i18n/src/commonMain/resources/MR/lv/strings.xml
index e1686922c..22ec8a73d 100644
--- a/i18n/src/commonMain/resources/MR/lv/strings.xml
+++ b/i18n/src/commonMain/resources/MR/lv/strings.xml
@@ -163,7 +163,6 @@
Vēl turpinās
Nosaukums
Izdzēst nodaļas
- Lejuplādes vieta
Automātiska lejupielāde
Atjaunot dublējumu
Sekotāji, kas nav pieteikušies:
@@ -348,7 +347,6 @@
Augstākais
Brīdinājums
Izlaist izlasītās nodaļas
- Pielāgota lokācija
Invertēts
Reizināt
Ekrāns
@@ -372,7 +370,6 @@
Uzlabo lasītāja veiktspēju, sadalot garus lejupielādētus attēlus
Pakalpojumi, kas nodrošina uzlabotus līdzekļus konkrētiem avotiem. Pievienojot bibliotēkai, ieraksts tiks automātiski izsekots.
Izveidot dublējumu
- Dublējuma atrašanās vieta
Nederīgs dublējuma fails
Dublējumu biežums
Kopijas vajadzētu glabāt arī citās vietās.
@@ -400,7 +397,6 @@
Nav ko tīrīt
Atspējot akumulatora optimizāciju
Atjaunot bibliotēku no dublējuma faila
- Maksimālais dublējumu skaits
Notīrīt sīkfailus
Izvēlēties DNS pār HTTPS (DoH)
Sīkfaili notīrīti
@@ -513,7 +509,6 @@
Lasīšanas režīms
Nākošā nodaļa nav atrasta
Nu, šis ir neveikli
- Pārbauda, vai nav jaunu nodaļu
%1$d atjauninājums(-i) izlaists(-i)
Atvērt vietnē GitHub
Šī Android versija vairs netiek atbalstīta
diff --git a/i18n/src/commonMain/resources/MR/ms/strings.xml b/i18n/src/commonMain/resources/MR/ms/strings.xml
index 1cb6c1a59..c9d4ea92d 100644
--- a/i18n/src/commonMain/resources/MR/ms/strings.xml
+++ b/i18n/src/commonMain/resources/MR/ms/strings.xml
@@ -121,10 +121,8 @@
G
B
A
- Lokasi muat turun
Selepas secara manual ditandakan sebagai dibaca
Selepas membaca padam secara automatik
- Lokasi tersuai
Dinyahkan
Bab terakhir dibaca
Bab kedua terakhir dibaca
@@ -137,9 +135,7 @@
Boleh digunakan untuk memulihkan pustaka semasa
Pulihkan sandaran
Pulihkan pustaka daripada fail sandaran
- Lokasi sandaran
Kekerapan sandaran
- Sandaran maksimum
Sandaran dicipta
Pemulihan selesai
Apakah yang ingin anda sandarkan?
@@ -327,7 +323,6 @@
Bab %1$s dan %2$d lagi
Bab %1$s
Sembunyikan kandungan pemberitahuan
- Mencari bab baharu
Nyahdaya pengoptimuman bateri
Membantu dengan pengemaskinian latar belakang pustaka dan sandaran
Pengoptimuman bateri sudah dinyahdayakan
diff --git a/i18n/src/commonMain/resources/MR/nb-rNO/strings.xml b/i18n/src/commonMain/resources/MR/nb-rNO/strings.xml
index 71d9d6e9c..90f0c92fe 100644
--- a/i18n/src/commonMain/resources/MR/nb-rNO/strings.xml
+++ b/i18n/src/commonMain/resources/MR/nb-rNO/strings.xml
@@ -140,10 +140,8 @@
G
B
A
- Nedlastingsmappe
Etter manuelt markert som lest
Slett automatisk etter lesing
- Egendefinert mappe
Avskrudd
Sist leste kapittel
Nest sist leste kapittel
@@ -156,9 +154,7 @@
Kan brukes til å gjenopprette nåværende bibliotek
Gjenopprett sikkerhetskopi
Gjenopprett bibliotek fra sikkerhetskopifil
- Sikkerhetskopi-mappe
Sikkerhetskopieringsfrekvens
- Maks antall sikkerhetskopier
Sikkerhetskopi opprettet
Gjenoppretting fullført
Hva ønsker du å sikkerhetskopiere\?
@@ -363,7 +359,6 @@
Loddrett
vannrett
Ingen
- Søker etter nye kapitler
Kilden ikke funnet
For denne serien
Ukjent status
@@ -754,4 +749,24 @@
Programinnstillinger
Relative tidsstempler
\"%1$s\" istedenfor \"%2$s\"
+ Lagringsplass
+ Opprett
+ Aldri
+ Reduserer etterbilde på e-ink skjermer
+ Brukt for automatiske sikkerhetskopier, nedlastede kapitler og lokal kilde.
+ Bruk
+ Gjenopprett standardinnstillinger
+ Flere valg
+ Siste automatisk sikkerhetskopi: %s
+ Valgt
+ Ingen skanningsoversettere funnet
+ Ikke valgt
+ Skanningsoversetter
+ Blink hvitt ved sidebytte
+ Lagringsbruk
+ Naviger opp
+ Sporer poengsum
+ Data og lagring
+ Ingen fil valgt
+ Ekskluder skanningsoversettere
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/ne/strings.xml b/i18n/src/commonMain/resources/MR/ne/strings.xml
index 5e977a022..40f3508f7 100644
--- a/i18n/src/commonMain/resources/MR/ne/strings.xml
+++ b/i18n/src/commonMain/resources/MR/ne/strings.xml
@@ -295,7 +295,6 @@
G
पढ्ने मोड
स्क्रोलमा मेनु लुकाउनका लागि संवेदनशीलता
- डाउनलोड स्थान
अन्तिम पढिएको अध्याय भन्दा पहिले १ अध्याय
स्वत: डाउनलोड गर्नुहोस्
ट्र्याकिङ गाइड
@@ -348,7 +347,6 @@
उच्च
सबैभन्दा कम
अध्यायहरू हटाउनुहोस्
- कस्टम स्थान
आफै पढिएको रूपमा चिन्ह लगाइएपछि
पढिसकेपछि स्वचालित रूपमा हटाउनुहोस्
CBZ अभिलेख को रूपमा सेभ गर्नुहोस्
@@ -371,7 +369,6 @@
डेटा
खाली गर्दा त्रुटि भयो
स्थिति
- नयाँ अध्यायहरूको लागि जाँच गर्दै
डाउनलोड गर्दै…
अपडेट स्थापना गर्न ट्याप गर्नुहोस्
अप्रत्याशित त्रुटिका कारण अध्याय डाउनलोड गर्न सकिएन
@@ -394,9 +391,7 @@
ब्याकअप रिस्टोर गर्नुहोस्
ब्याकअप फाइलबाट पुस्तकालय रिस्टोर गर्नुहोस्
ब्याकअपमा कुनै पनि पुस्तकालयका इन्ट्री समावेश छैन।
- ब्याकअप स्थान
स्वचालित ब्याकअप फ्रिक्वेन्सी
- अधिकतम स्वचालित ब्याकअपहरू
प्रयोग गरिएको: %1$s
क्यास खाली गरियो। %1$d फाइलहरू हटाएका छन्
अध्याय %1$s र %2$d अरू
diff --git a/i18n/src/commonMain/resources/MR/nl/strings.xml b/i18n/src/commonMain/resources/MR/nl/strings.xml
index cf5c4d9d7..f894c0132 100644
--- a/i18n/src/commonMain/resources/MR/nl/strings.xml
+++ b/i18n/src/commonMain/resources/MR/nl/strings.xml
@@ -101,8 +101,6 @@
G
B
A
- Downloadlocatie
- Aangepaste locatie
Laatst gelezen hoofdstuk
Een-na-laatste gelezen hoofdstuk
Twee-na-laatste gelezen hoofdstuk
@@ -112,9 +110,7 @@
Kan worden gebruikt om de huidige bibliotheek te herstellen
Back-up herstellen
Herstellen van back-up bestand
- Back-uplocatie
Frequentie van automatische back-ups
- Maximaal aantal automatische back-ups
Back-up gemaakt
Herstellen voltooid
Wat wil je back-uppen?
@@ -337,7 +333,6 @@
Hoofdstukken %1$s
Hoofdstuk %1$s en %2$d meer
Hoofdstuk %1$s
- Zoeken naar nieuwe hoofdstukken
Hfst. %1$s - %2$s
Bibliotheek bijwerken
Tracking toevoegen
diff --git a/i18n/src/commonMain/resources/MR/nn/strings.xml b/i18n/src/commonMain/resources/MR/nn/strings.xml
index 71ca74d36..4579d3fb0 100644
--- a/i18n/src/commonMain/resources/MR/nn/strings.xml
+++ b/i18n/src/commonMain/resources/MR/nn/strings.xml
@@ -190,7 +190,6 @@
Spor
Lag reservekopi
Gjenopprett reservekopi
- Reservekopifil-mappe
Reservekopi oppretta
Ugyldig reservekopifil
Reservekopi inneheld ingen manga.
diff --git a/i18n/src/commonMain/resources/MR/pl/strings.xml b/i18n/src/commonMain/resources/MR/pl/strings.xml
index 9e28dfc11..96c824b8c 100644
--- a/i18n/src/commonMain/resources/MR/pl/strings.xml
+++ b/i18n/src/commonMain/resources/MR/pl/strings.xml
@@ -160,10 +160,8 @@
G
B
A
- Lokalizacja pobierania
Po ręcznym oznaczeniu jako przeczytane
Usuwaj rozdziały automatycznie po przeczytaniu
- Niestandardowa lokalizacja
Wyłączone
Ostatnio czytany rozdział
Przedostatnio czytany rozdział
@@ -178,9 +176,7 @@
Może być użyta do przywrócenia aktualnej biblioteki
Przywróć kopię zapasową
Przywraca bibliotekę z pliku kopii zapasowej
- Lokalizacja kopii zapasowych
Częstotliwość tworzenia kopii
- Maks. ilość kopii automatycznych
Co zawrzeć w kopii zapasowej?
Przywracanie kopii zapasowej
Tworzenie kopii zapasowej
@@ -365,7 +361,6 @@
WebView jest wymagany do poprawnego działania aplikacji
Rozdziały %1$s
Rozdział %1$s i %2$d więcej
- Poszukiwanie nowych rozdziałów
Tryb czytania
Źródła lokalne - poradnik
Pokazuj zawartość w strefie odcięcia
@@ -736,4 +731,7 @@
W miesiącu (28 dni)
OK
To usunie śledzenie lokalne.
+ Zatwierdź
+ Przywróć do domyślnych
+ Przenieś serię na dół
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/pt-rBR/strings.xml b/i18n/src/commonMain/resources/MR/pt-rBR/strings.xml
index 861bb7a70..cde48563d 100644
--- a/i18n/src/commonMain/resources/MR/pt-rBR/strings.xml
+++ b/i18n/src/commonMain/resources/MR/pt-rBR/strings.xml
@@ -120,10 +120,8 @@
G
B
A
- Local de download
Após marcado como lido manualmente
Excluir automaticamente após a leitura
- Local personalizado
Desativado
Último capítulo lido
Penúltimo capítulo lido
@@ -136,9 +134,7 @@
Pode ser usado para restaurar a biblioteca atual
Restaurar backup
Restaura a biblioteca de um arquivo de backup
- Local de backup
Frequência de backup automático
- Máximo de backups automáticos
Backup criado
Restauração concluída
Do que você deseja fazer backup\?
@@ -327,7 +323,6 @@
Capítulo %1$s e mais %2$d
Capítulos %1$s
Ocultar conteúdo da notificação
- Verificando por novos capítulos
Desativar a otimização de bateria
Ajuda com as atualizações e os backups da biblioteca em segundo plano
A otimização de bateria já está desativada
@@ -768,4 +763,10 @@
Scanlator
Excluir scanlators
Criar
+ Selecionado
+ Não selecionado
+ Local de armazenamento
+ Usado para backups automáticos, downloads de capítulos e na fonte local.
+ Mais opções
+ Navegar para cima
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/pt/strings.xml b/i18n/src/commonMain/resources/MR/pt/strings.xml
index 1ee6c095e..a5a8f59fe 100644
--- a/i18n/src/commonMain/resources/MR/pt/strings.xml
+++ b/i18n/src/commonMain/resources/MR/pt/strings.xml
@@ -87,10 +87,8 @@
Livre
Vertical bloqueado
Horizontal bloqueado
- Localização das Transferências
Após marcado como lido manualmente
Eliminar automaticamente após a leitura
- Localização personalizada
Desativado
Último capítulo
Penúltimo capítulo lido
@@ -226,11 +224,9 @@
Velocidade de animação de toque duplo
Paginação
R
- Localização de cópia de segurança
Cópia de segurança criada
Restauro completo
O que pretende fazer cópia de segurança\?
- Máximo de cópias de segurança
Capítulos transferidos
Confiar
Não confiável
@@ -326,7 +322,6 @@
Capítulo %1$s e %2$d mais
Capítulos %1$s
Esconder conteúdo das notificações
- Verificando por novos capítulos
Desativar otimização de bateria
Ajuda com a atualização e cópia de segurança da biblioteca em segundo plano
A otimização de bateria já está desativada
diff --git a/i18n/src/commonMain/resources/MR/ro/strings.xml b/i18n/src/commonMain/resources/MR/ro/strings.xml
index c0ce88489..47afbd831 100644
--- a/i18n/src/commonMain/resources/MR/ro/strings.xml
+++ b/i18n/src/commonMain/resources/MR/ro/strings.xml
@@ -145,10 +145,8 @@
G
B
A
- Locația descărcărilor
După ce a fost marcat manual ca citit
După citire ștergeți automat
- Locație personalizată
Deactivat
Ultimul capitol citit
Penultimul capitol citit
@@ -161,9 +159,7 @@
Poate fii folosit pentru a restaura biblioteca curentă
Restaurează copia de rezervă
Restaurează biblioteca din fișierul copiei de rezervă
- Locația copiei de rezervă
Frecventă de creere a copiilor de rezervă
- Numărul maxim de copii de rezervă
Backup creat
Restaurare completă
Doriți să creați o copie de rezervă\?
@@ -327,7 +323,6 @@
Capitolul %1$s și %2$d în plus
Capitolele %1$s
Ascunde conținutul notificării
- Verificând pentru capitole noi
Dezactivați optimizarea bateriei
Ajută la actualizările și copiile de rezervă ale bibliotecii în fundal
Optimizarea bateriei este deja dezactivată
diff --git a/i18n/src/commonMain/resources/MR/ru/strings.xml b/i18n/src/commonMain/resources/MR/ru/strings.xml
index 1eb0b2e28..7f78bef3c 100644
--- a/i18n/src/commonMain/resources/MR/ru/strings.xml
+++ b/i18n/src/commonMain/resources/MR/ru/strings.xml
@@ -61,7 +61,6 @@
Использовать это изображение как обложку\?
Cookies очищены
Обложка обновлена
- Пользовательская папка
Пользовательский фильтр
Не удалось загрузить изображение
Это действие удалит дату прочтения этой главы. Вы уверены\?
@@ -126,7 +125,6 @@
Удалить историю для серий, которые не находятся в библиотеке
Пользовательская яркость
Пользовательский светофильтр
- Папка загрузок
Загружать новые главы
Отправлять отчёты об ошибках
Анимированные переходы страниц
@@ -209,9 +207,7 @@
Источник на устройстве
Серии библиотеки
Больше нет результатов
- Папка резервной копии
Частота автоматических резервных копий
- Количество автоматических резервных копий
Создать резервную копию
Можно использовать для восстановления текущей библиотеки
Обрезать поля
@@ -325,7 +321,6 @@
Главы %1$s
Глава %1$s
Отображение
- Проверка наличия новых глав
Обновление библиотеки
Оптимизация батареи уже выключена
Помогает с обновлением библиотеки и резервной копией в фоне
@@ -768,4 +763,10 @@
Переводчики не найдены
Переводчик
Исключить переводчиков
+ Выбрано
+ Не выбрано
+ Другие опции
+ Перейти вверх
+ Путь хранилища
+ Используется для автоматических резевных копии, загрузок глав и источнике на устройстве.
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/sa/strings.xml b/i18n/src/commonMain/resources/MR/sa/strings.xml
index a5e057ba0..ba0d9e5a6 100644
--- a/i18n/src/commonMain/resources/MR/sa/strings.xml
+++ b/i18n/src/commonMain/resources/MR/sa/strings.xml
@@ -303,13 +303,11 @@
उच्चतमम्
पुटचिह्नकृतानाम् अध्यायानां नाशयितुम् अनुमन्यताम्
वर्जितवर्गाः
- स्वकृतस्थलम्
अशक्तं कृतम्
अन्तिमपठितः अध्यायः
अन्तिमपठितात् अध्यायात् पूर्वम्
अन्तिमपठितात् अध्यायात् द्वितीयपूर्वम्
सेवाः
- अवारोपणस्थलम्
पठितमिति स्वीयचिह्नितात् परम्
पठनात् परं स्वयञ्चालितं नाशयतु
CBZ-लेखागारम् इव अमुकनाम्ना रक्षतु
@@ -326,9 +324,7 @@
प्रतिलेखनं निर्मातु
एतत् उपयुज्य वर्तमानग्रन्थालयं समादातुं शक्यते
प्रतिलेखनं समाददातु
- प्रतिलेखनस्थलम्
प्रतिलेखनस्य आवर्तनता
- अधिकतमप्रतिलेखनानि
प्रतिलेखनं पूर्वमेव प्रगतौ अस्ति
%02d निमेषाः %02d क्षणाः च
प्रतिलेखनस्य समादानम् अनुत्तीर्णम्
@@ -515,7 +511,6 @@
अध्यायः %1$s – %2$s
अग्रिमाध्यायः नास्ति
पूर्वाध्यायः नास्ति
- नूतनाध्यायेभ्यः मार्गति
%1$s: %2$s पुटः च %3$d
पठिताः अध्यायाः न सन्ति
नूतननवीकरणानि न उपलभ्यानि
diff --git a/i18n/src/commonMain/resources/MR/sah/strings.xml b/i18n/src/commonMain/resources/MR/sah/strings.xml
index e33dbadb3..c8300a91c 100644
--- a/i18n/src/commonMain/resources/MR/sah/strings.xml
+++ b/i18n/src/commonMain/resources/MR/sah/strings.xml
@@ -237,9 +237,7 @@
Хаппаас куопуйа маангата суох.
Хаппаас куопуйа алдьаммыт билэтэ
Хаппаас куопуйа оҥоһуллунна
- Муҥутугар дылы хаппаас куопуйалар
Хаппаас куопуйа оҥоһуутун түргэнэ
- Хаппаас куопуйа сурунаала
Бэбэлэтиэкэни хаппаас куопуйа билэтиттэн төнүҥнэрии
Хаппаас куопуйаны куолутунан туруоруу
Билиҥни бибилиотеканы төнүннэрэргэ туттуохха сөп
@@ -254,10 +252,8 @@
Бүтэһик түһүмэх иннинээҕи
Бүтэһигинэн ааҕыллыбыт түһүмэх
Араарыллыбыт
- Туттааччы ыйдарыыта
Ааҕы кэннэ
Ааҕыллыбыт диэн суруллубутун кэннэ
- Хачайдааһын сурунаала
Уларыйыы киирэрин гына эбилиги хос холбоо
Кээс сотторуутугар сыыһааһын буолла
Кээс ыраастанна. %1$d билэ сотторуллубут этэ
diff --git a/i18n/src/commonMain/resources/MR/sc/strings.xml b/i18n/src/commonMain/resources/MR/sc/strings.xml
index c54c10a42..9153343cf 100644
--- a/i18n/src/commonMain/resources/MR/sc/strings.xml
+++ b/i18n/src/commonMain/resources/MR/sc/strings.xml
@@ -146,10 +146,8 @@
G
B
A
- Cartella de sos iscarrigamentos
A pustis de l\'àere marcadu manualmente comente lèghidu
Iscantzella in automàticu a pustis de sa leghidura
- Cartella personalizada
Disabilitadu
Leghe s\'ùrtimu capìtulu
Penùrtimu capìtulu lèghidu
@@ -162,9 +160,7 @@
Podet èssere impreada pro ripristinare sa biblioteca atuale
Riprìstina una còpia de seguresa
Riprìstina sa biblioteca dae una còpia de seguresa
- Cartella de sa còpia de seguresa
Frecuèntzia de sarvatàgiu de sas còpias de seguresa
- Màssimu de còpias de seguresa
Còpia de seguresa creada
Riprìstinu acabadu
De ite cheres fàghere una còpia de seguresa\?
@@ -327,7 +323,6 @@
Capìtulu %1$s e àteros %2$d
Capìtulos %1$s
Cua su cuntenutu de sas notìficas
- Chirchende capìtulos noos
Disabìlita s\'otimizatzione de sa bateria
Agiudat cun sos agiornamentos de sa biblioteca e sas còpias de seguresa
S\'otimizatzione de sa bateria est giai disabilitada
@@ -749,4 +744,29 @@
HTTP %d, verìfica su situ in WebView
\"%1$s\" in càmbiu de \"%2$s\"
Non s\'est pòdidu atzèdere a %s
+ Positzione de archiviatzione
+ Crea
+ Mai
+ Mìnimat s\'efetu pantasma in ischermos cun tinta eletrònica
+ Impreadu pro sas còpias de seguresa automàticas, sos iscarrigamentos de sos capìtulos e s\'orìgine locale.
+ Àplica
+ Riprìstina a sos valores predefinidos
+ Òrdina sas categorias
+ Prus optziones
+ Ùrtima còpia de seguresa automàtica: %s
+ Seletzionadu
+ Perunu iscandutore agatadu
+ Non seletzionadu
+ Iscandutore (iscansidore+tradutore)
+ Lampìgia in biancu in su càmbiu de pàgina
+ Impreu de sa memòria
+ Agiornende sa biblioteca… (%s)
+ Nàviga cara a subra
+ Votu de s\'arrastadore
+ Datos e archiviatzione
+ Boles ordinare sas categorias in manera alfabètica?
+ Perunu archìviu seletzionadu
+ Impostatziones de sas fontes
+ Impostatziones de s\'aplicatzione
+ Esclude sos iscandutores (iscansidores+tradutores)
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/sdh/strings.xml b/i18n/src/commonMain/resources/MR/sdh/strings.xml
index 6172e7469..9b4a4a81c 100644
--- a/i18n/src/commonMain/resources/MR/sdh/strings.xml
+++ b/i18n/src/commonMain/resources/MR/sdh/strings.xml
@@ -55,7 +55,6 @@
هیچ مانگایەکت لەم دواییانە نەخوێندووەتەوە
زانیاری زیادکراو
یارمەتی
- گەڕان بە دوای چاپتەری نوێدا
تۆماری ڕابردووەکەت بەتاڵە
گەڕان لە ناو سازکارییەکان
وەک نەخوێندراوێک ئاماژەی پێبکە
@@ -189,7 +188,6 @@
کردنە ناو کۆکراوەکان
تکایە مانگا بۆ کۆکراوەکان زیاد بکە پێش کردنی ئەمە
زیادکردنی مانگا بۆ کۆکراوەکان؟
- شوێنی داونلۆد
داونلۆدکردن
تەنها داونلۆدکراوەکان
ئەمە ڕێگری ناکات لە دەرکەوتنی بابەتی سەروو 18 ی نا فەرمی لە بەرنامەکە.
diff --git a/i18n/src/commonMain/resources/MR/sk/strings.xml b/i18n/src/commonMain/resources/MR/sk/strings.xml
index b095dc1f1..46fbb2b33 100644
--- a/i18n/src/commonMain/resources/MR/sk/strings.xml
+++ b/i18n/src/commonMain/resources/MR/sk/strings.xml
@@ -156,10 +156,8 @@
G
B
A
- Kam stahovať
Po manuálnom označení ako prečítané
Po prečítaní automaticky odstrániť
- Vlastný adresár
Zakázané
Naposledy čítaná kapitola
Predposledná prečítaná kapitola
@@ -172,9 +170,7 @@
Možno použiť na obnovenie aktuálnej knižnice
Obnoviť zálohu
Obnoviť knižnicu zo záložného súboru
- Adresár na zálohy
Frekvencia zálohovania
- Maximálny počet záloh
Záloha bola vytvorená
Obnovenie dokončené
Čo chcete zálohovať\?
@@ -306,7 +302,6 @@
Nepodarilo sa obísť službu Cloudflare
Pozastavené
Neprečítané
- Hľadám nové kapitoly
Skryť obsah upozornení
Zakázať všetko
Povoliť všetko
diff --git a/i18n/src/commonMain/resources/MR/sq/strings.xml b/i18n/src/commonMain/resources/MR/sq/strings.xml
index eeed53f50..ceda2b70d 100644
--- a/i18n/src/commonMain/resources/MR/sq/strings.xml
+++ b/i18n/src/commonMain/resources/MR/sq/strings.xml
@@ -341,10 +341,8 @@
Modaliteti i leximit
Më e larta
E ulët
- Shkarko vendndodhjen
Fshi kapitujt
Kategoritë e përjashtuara
- Vendndodhja e personalizuar
Vendndodhja e pavlefshme: %s
Kapitulli i fundit i lexuar
Kapitulli i katërt deri tek i fundit i lexuar
@@ -401,7 +399,6 @@
Shërbime që ofrojnë veçori të përmirësuara për burime specifike. Regjistrimet gjurmohen automatikisht kur shtohen në bibliotekën tuaj.
Pista
Frekuenca rezervë
- Rezervimet maksimale
Gjurmuesit nuk kanë hyrë në:
%02d min, %02d sek
Rezervimi/rivendosja mund të mos funksionojë siç duhet nëse Optimizimi MIUI është i çaktivizuar.
@@ -502,7 +499,6 @@
Krijo kopje rezervë
Mund të përdoret për të rivendosur bibliotekën aktuale
Rivendos kopjen rezervë
- Vendndodhja rezervë
U krijua një kopje rezervë
Burimet që mungojnë:
Rivendosja përfundoi
@@ -629,7 +625,6 @@
Rinisni aplikacionin
Kapitujt nuk mund të shkarkoheshin për shkak të hapësirës së ulët të ruajtjes
Paralajmërim: shkarkimet e mëdha me shumicë mund të çojnë në ngadalësimin e burimeve dhe/ose bllokimin e Tachiyomi. Trokit për të mësuar më shumë.
- Duke kontrolluar për kapituj të rinj
U gjetën kapituj të rinj
Trokit për të mësuar më shumë
Përditësimi i kopertinës dështoi
diff --git a/i18n/src/commonMain/resources/MR/sr/strings.xml b/i18n/src/commonMain/resources/MR/sr/strings.xml
index 8106d435b..8cab68641 100644
--- a/i18n/src/commonMain/resources/MR/sr/strings.xml
+++ b/i18n/src/commonMain/resources/MR/sr/strings.xml
@@ -145,10 +145,8 @@
G
B
A
- Локација преузимања
Када су означена као прочитана
Аутоматски обриши након читања
- Друга локација
Онемогућено
Последње прочитано поглавље
Претпоследње прочитано поглавље
@@ -161,9 +159,7 @@
Може се користити за враћање на тренутно стање колекције
Врати се на резервну копију
Врати се на колекцију из резервне копије
- Локација резервних копија
Учесталост прављења резервних копија
- Максималан број резервних копија
Направљена је резервна копија
Враћање је завршено
Шта све желите да буде у резервној копији\?
@@ -276,7 +272,6 @@
Поглавље %1$s и још %2$d
Поглавље %1$s
Пронађена су нова поглавља
- Тражење нових поглавља
Неуспешно преузимање поглавља. Покушајте поново у секцији за преузимања
Копирај
Мигрирај
diff --git a/i18n/src/commonMain/resources/MR/sv/strings.xml b/i18n/src/commonMain/resources/MR/sv/strings.xml
index d871040a1..747b406f0 100644
--- a/i18n/src/commonMain/resources/MR/sv/strings.xml
+++ b/i18n/src/commonMain/resources/MR/sv/strings.xml
@@ -145,10 +145,8 @@
G
B
A
- Nedladdningsplats
Efter manuellt markerad som läst
Ta bort automatiskt efter läsning
- Anpassad plats
Inaktiverad
Senaste lästa kapitel
Näst sist lästa kapitel
@@ -161,9 +159,7 @@
Kan användas för att återställa biblioteket
Återställ säkerhetskopia
Återställ biblioteket från en säkerhetskopia
- Säkerhetskopieringsplats
Automatisk säkerhetskopieringsfrekvens
- Max antal automatiska säkerhetskopior
Säkerhetskopia skapad
Återställning slutförd
Vad vill du säkerhetskopiera\?
@@ -327,7 +323,6 @@
Kapitel %1$s och %2$d till
Kapitlen %1$s
Dölj notisinnehåll
- Letar efter nya kapitel
Inaktivera batterioptimering
Hjälper till med uppdateringar och säkerhetskopior i bakgrunden
Batterioptimering är redan inaktiverat
@@ -768,4 +763,10 @@
Data och lagring
Ingen fil vald
Exkludera scanlatorer
+ Lagringsplats
+ Används för automatisk säkerhetskopiering, kapitelnedladdningar och lokal källa.
+ Mer alternativ
+ Vald
+ Inte vald
+ Navigera upp
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/th/strings.xml b/i18n/src/commonMain/resources/MR/th/strings.xml
index ea8c8cdb4..524645175 100644
--- a/i18n/src/commonMain/resources/MR/th/strings.xml
+++ b/i18n/src/commonMain/resources/MR/th/strings.xml
@@ -146,10 +146,8 @@
เขียว
น้ำเงิน
โปร่งใส
- ตําแหน่งที่ดาวน์โหลด
หลังจากทําเครื่องหมายว่าอ่านแล้วด้วยตนเอง
ลบอัตโนมัติหลังจากที่อ่านแล้ว
- ตําแหน่งกําหนดเอง
ปิดการใช้งาน
ตอนที่อ่านล่าสุด
ตอนรองก่อนตอนที่อ่านล่าสุด
@@ -162,9 +160,7 @@
สามารถใช้ในการเรียกคืนค่าคลังปัจจุบัน
เรียกคืนค่าการสำรองข้อมูล
เรียกคืนค่าคลังจากแฟ้มข้อมูลสำรอง
- ตําแหน่งที่ตั้งข้อมูลสํารอง
ความถี่ในการสำรองข้อมูลอัตโนมัติ
- จำนวนการสำรองข้อมูลอัตโนมัติสูงสุด
สร้างการสำรองข้อมูลแล้ว
คืนค่าเสร็จสมบูรณ์
ต้องการสำรองข้อมูลใดบ้าง\?
@@ -475,7 +471,6 @@
ซิงค์ทางเดียวเพื่ออัปเดตความคืบหน้าของตอนกับตัวติดตามภายนอก ตั้งค่าการติดตามรายการในแต่ละรายการได้จากปุ่มติดตาม
รายการในหมวดหมู่ที่ยกเว้นไว้จะไม่ถูกดาวน์โหลดแม้ว่าจะอยู่ในหมวดหมู่ที่รวมอยู่ด้วยก็ตาม
ดาวน์โหลดอัตโนมัติ
- กำลังตรวจสอบตอนหาใหม่
ไม่สามารถดาวน์โหลดตอนได้เนื่องจากพื้นที่จัดเก็บเหลือน้อย
ไม่รองรับ Android เวอร์ชันนี้อีกต่อไป
ไม่พบแอปเลือกแฟ้ม
@@ -768,4 +763,10 @@
ผู้แปล
คะแนนจากตัวติดตาม
ผู้แปลที่เว้นไว้
+ ตำแหน่งที่จัดเก็บ
+ ใช้สำหรับการสำรองข้อมูลอัตโนมัติ การดาวน์โหลดตอน และแหล่งที่มาในเครื่อง
+ ตัวเลือกเพิ่มเติม
+ เลือกแล้ว
+ ยังไม่ได้เลือก
+ ขึ้นไปข้างบน
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/tr/strings.xml b/i18n/src/commonMain/resources/MR/tr/strings.xml
index 1dadacd74..620e77364 100644
--- a/i18n/src/commonMain/resources/MR/tr/strings.xml
+++ b/i18n/src/commonMain/resources/MR/tr/strings.xml
@@ -145,10 +145,8 @@
Y
M
A
- İndirme konumu
Elle okundu olarak imlenince
Okunduktan sonra kendiliğinden sil
- Özel konum
Devre dışı
Son okunan bölüm
Okunan sondan ikinci bölüm
@@ -161,9 +159,7 @@
Şu anki kitaplığı geri yüklemek için kullanılabilir
Yedeği geri yükle
Kitaplığı yedek dosyasından geri yükle
- Yedekleme konumu
Kendiliğinden yedekleme sıklığı
- En fazla kendiliğinden yedek
Yedek oluşturuldu
Geri yükleme tamamlandı
Neyi yedeklemek istiyorsunuz?
@@ -327,7 +323,6 @@
Bölüm %1$s ve %2$d daha
Bölüm %1$s
Bildirim içeriğini gizle
- Yeni bölümler aranıyor
Pil iyileştirmeyi devre dışı bırak
Arka plan kitaplık güncellemelerine ve yedeklemelerine yardım eder
Pil iyileştirme zaten devre dışı
@@ -768,4 +763,10 @@
Veri ve depolama
Tarevirileri hariç tut
Oluştur
+ Seçilmedi
+ Diğer seçenekler
+ Seçili
+ Depolama yeri
+ Kendiliğinden yedeklemeler, bölüm indirmeleri ve yerel kaynak için kullanılır.
+ Yukarı git
\ No newline at end of file
diff --git a/i18n/src/commonMain/resources/MR/uk/strings.xml b/i18n/src/commonMain/resources/MR/uk/strings.xml
index b2ebae4be..5ed5a3f12 100644
--- a/i18n/src/commonMain/resources/MR/uk/strings.xml
+++ b/i18n/src/commonMain/resources/MR/uk/strings.xml
@@ -145,10 +145,8 @@
G
B
A
- Директорія завантажень
Після того, як було відмічено прочитаним вручну
Автоматично видаляти після прочитання
- Користувацька директорія
Вимкнено
Останній прочитаний розділ
Передостанній прочитаний розділ
@@ -161,9 +159,7 @@
Можна використовувати для відновлення поточної бібліотеки
Відновити резервну копію
Відновити бібліотеку з резервної копії
- Директорія резервної копії
Частота автоматичних бекапів
- Максимальна кількість автоматичних бекапів
Резервна копія створена
Відновлення завершено
Що ви хочете зберегти до резервної копії\?
@@ -327,7 +323,6 @@
Розділ %1$s та ще %2$d
Розділи %1$s
Приховати вміст сповіщень
- Перевірка нових розділів
Вимкнути збереження батареї
Допомагає фоновому оновленню бібліотеки та резервним копіям
Збереження батареї вже вимкнено
diff --git a/i18n/src/commonMain/resources/MR/uz/strings.xml b/i18n/src/commonMain/resources/MR/uz/strings.xml
index f7e264530..b0edbd333 100644
--- a/i18n/src/commonMain/resources/MR/uz/strings.xml
+++ b/i18n/src/commonMain/resources/MR/uz/strings.xml
@@ -335,12 +335,10 @@
Boblarni o\'chirish
Noto\'g\'ri joylashuv: %s
Past
- Foydalanuvchi papkasi
«O\'qilgan» deb belgilangandan so\'ng o\'chirish
Avtomatik
Portret
O\'zgarmas portret
- Yuklamalar papkasi
Aylantirish vaqtida menyu yashirish sezuvchanligi
O\'zgarmas landshaft
Kattalashtirish
diff --git a/i18n/src/commonMain/resources/MR/vi/strings.xml b/i18n/src/commonMain/resources/MR/vi/strings.xml
index c2d0ad164..d94f2b7d9 100644
--- a/i18n/src/commonMain/resources/MR/vi/strings.xml
+++ b/i18n/src/commonMain/resources/MR/vi/strings.xml
@@ -106,10 +106,8 @@
G
B
A
- Đường dẫn tải xuống
Sau khi đánh dấu thủ công là đã đọc
Tự động xóa sau khi đọc
- Đường dẫn tùy chỉnh
Vô hiệu hóa
Chương đã đọc gần nhất
Hai chương đã đọc gần nhất
@@ -241,9 +239,7 @@
Có thể sử dụng để khôi phục thư viện hiện tại
Khôi phục sao lưu
Khôi phục thư viện từ tập tin sao lưu
- Nơi lưu trữ
Lịch sao lưu
- Số sao lưu tối đa
Sao lưu đã được tạo
Khôi phục hoàn tất
Bạn có muốn sao lưu không\?
@@ -290,7 +286,6 @@
Vui lòng cập nhật WebView để tương thích tốt hơn
Bỏ qua Cloudflare thất bại
Chương %1$s
- Kiểm tra các chương cập nhật mới
Đang cập nhật thư viện
Đã tạm ngưng
Bạn đã đăng xuất
diff --git a/i18n/src/commonMain/resources/MR/zh-rCN/strings.xml b/i18n/src/commonMain/resources/MR/zh-rCN/strings.xml
index 15b841174..73b5d1e1c 100644
--- a/i18n/src/commonMain/resources/MR/zh-rCN/strings.xml
+++ b/i18n/src/commonMain/resources/MR/zh-rCN/strings.xml
@@ -145,10 +145,8 @@
G
B
A
- 下载路径
手动标记为已读后
阅毕自动删除
- 自定义路径
关闭
最后阅读的章节
倒数第二已读章节
@@ -161,9 +159,7 @@
可用于还原当前书架数据
还原备份
从备份文件中还原
- 备份路径
自动备份频率
- 最大自动备份数
已创建备份
还原完毕
需要备份什么?
@@ -327,7 +323,6 @@
第 %1$s 章
第 %1$s 章及另外 %2$d 章
第 %1$s 章
- 正在检查新章节
关闭电池优化
有助于后台更新书架和备份
电池优化已被关闭
diff --git a/i18n/src/commonMain/resources/MR/zh-rTW/strings.xml b/i18n/src/commonMain/resources/MR/zh-rTW/strings.xml
index 59a113b81..699a6c910 100644
--- a/i18n/src/commonMain/resources/MR/zh-rTW/strings.xml
+++ b/i18n/src/commonMain/resources/MR/zh-rTW/strings.xml
@@ -108,15 +108,12 @@
G
B
A
- 下載位置
手動標示為已讀後
- 自訂位置
已停用
自動下載新章節
歷程平台
建立備份
還原備份
- 備份位置
自動備份頻率
已建立備份
還原成功
@@ -267,7 +264,6 @@
\n
\n若選擇信任該憑證,即表示你願意承擔上述風險。
最後閱畢的章節
- 最大自動備份數量
您確定要這樣做嗎?未收藏的漫畫的閱讀進度和章節會被刪除
新上架
歷程
@@ -390,7 +386,6 @@
垂直
水平
反轉輕觸區域
- 正在檢查是否有新章節
捲動式 (頁間留空)
無
%02d 分 %02d 秒
@@ -768,4 +763,10 @@
掃譯者
排除掃譯者
建立
+ 更多選項
+ 已勾選
+ 尚未勾選
+ 向上瀏覽
+ 儲存位置
+ 供自動備份、章節下載和本機來源使用。
\ No newline at end of file
From 24e1b4034efe24cc042404e2237f01ca1f2cd9b3 Mon Sep 17 00:00:00 2001
From: Ivan Iskandar <12537387+ivaniskandar@users.noreply.github.com>
Date: Sat, 2 Dec 2023 23:46:59 +0700
Subject: [PATCH 11/21] Move workers to foreground service context a bit more
safely (#10202)
The system will crash the app if the worker that calls setForeground() finished
before the service runner be able to call Service.startForeground(). This edge
case is not handled by WorkManager and there is no way to check if the required
calls are done.
So here we suspend the worker by an arbitrary duration assuming the transition
to foreground service is done by then.
---
.../tachiyomi/data/backup/BackupCreateJob.kt | 12 ++++------
.../tachiyomi/data/backup/BackupRestoreJob.kt | 7 ++----
.../tachiyomi/data/download/DownloadJob.kt | 18 ++++++---------
.../data/library/LibraryUpdateJob.kt | 7 ++----
.../data/library/MetadataUpdateJob.kt | 7 ++----
.../data/updater/AppUpdateDownloadJob.kt | 9 ++------
.../util/system/WorkManagerExtensions.kt | 22 +++++++++++++++++++
7 files changed, 41 insertions(+), 41 deletions(-)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreateJob.kt
index bc37b8c75..f6fe367f3 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreateJob.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreateJob.kt
@@ -17,6 +17,7 @@ import com.hippo.unifile.UniFile
import eu.kanade.tachiyomi.data.notification.Notifications
import eu.kanade.tachiyomi.util.system.cancelNotification
import eu.kanade.tachiyomi.util.system.isRunning
+import eu.kanade.tachiyomi.util.system.setForegroundSafely
import eu.kanade.tachiyomi.util.system.workManager
import logcat.LogPriority
import tachiyomi.core.util.system.logcat
@@ -39,19 +40,14 @@ class BackupCreateJob(private val context: Context, workerParams: WorkerParamete
if (isAutoBackup && BackupRestoreJob.isRunning(context)) return Result.retry()
- val backupPreferences = Injekt.get()
-
val uri = inputData.getString(LOCATION_URI_KEY)?.toUri()
?: getAutomaticBackupLocation()
?: return Result.failure()
- val flags = inputData.getInt(BACKUP_FLAGS_KEY, BackupCreateFlags.AutomaticDefaults)
+ setForegroundSafely()
- try {
- setForeground(getForegroundInfo())
- } catch (e: IllegalStateException) {
- logcat(LogPriority.ERROR, e) { "Not allowed to run on foreground service" }
- }
+ val flags = inputData.getInt(BACKUP_FLAGS_KEY, BackupCreateFlags.AutomaticDefaults)
+ val backupPreferences = Injekt.get()
return try {
val location = BackupCreator(context).createBackup(uri, flags, isAutoBackup)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt
index f9b41c330..e4595a4b5 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt
@@ -12,6 +12,7 @@ import androidx.work.workDataOf
import eu.kanade.tachiyomi.data.notification.Notifications
import eu.kanade.tachiyomi.util.system.cancelNotification
import eu.kanade.tachiyomi.util.system.isRunning
+import eu.kanade.tachiyomi.util.system.setForegroundSafely
import eu.kanade.tachiyomi.util.system.workManager
import kotlinx.coroutines.CancellationException
import logcat.LogPriority
@@ -29,11 +30,7 @@ class BackupRestoreJob(private val context: Context, workerParams: WorkerParamet
?: return Result.failure()
val sync = inputData.getBoolean(SYNC_KEY, false)
- try {
- setForeground(getForegroundInfo())
- } catch (e: IllegalStateException) {
- logcat(LogPriority.ERROR, e) { "Not allowed to run on foreground service" }
- }
+ setForegroundSafely()
return try {
val restorer = BackupRestorer(context, notifier)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadJob.kt
index d0d58a843..93826afe0 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadJob.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadJob.kt
@@ -16,11 +16,10 @@ import eu.kanade.tachiyomi.data.notification.Notifications
import eu.kanade.tachiyomi.util.system.isConnectedToWifi
import eu.kanade.tachiyomi.util.system.isOnline
import eu.kanade.tachiyomi.util.system.notificationBuilder
+import eu.kanade.tachiyomi.util.system.setForegroundSafely
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
-import logcat.LogPriority
-import tachiyomi.core.util.system.logcat
import tachiyomi.domain.download.service.DownloadPreferences
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
@@ -51,21 +50,18 @@ class DownloadJob(context: Context, workerParams: WorkerParameters) : CoroutineW
}
override suspend fun doWork(): Result {
- try {
- setForeground(getForegroundInfo())
- } catch (e: IllegalStateException) {
- logcat(LogPriority.ERROR, e) { "Not allowed to set foreground job" }
+ var active = checkConnectivity() && downloadManager.downloaderStart()
+
+ if (!active) {
+ return Result.failure()
}
- var networkCheck = checkConnectivity()
- var active = networkCheck
- downloadManager.downloaderStart()
+ setForegroundSafely()
// Keep the worker running when needed
while (active) {
delay(100)
- networkCheck = checkConnectivity()
- active = !isStopped && networkCheck && downloadManager.isRunning
+ active = !isStopped && downloadManager.isRunning && checkConnectivity()
}
return Result.success()
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt
index 2df3b804e..d733f176e 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt
@@ -30,6 +30,7 @@ import eu.kanade.tachiyomi.util.storage.getUriCompat
import eu.kanade.tachiyomi.util.system.createFileInCacheDir
import eu.kanade.tachiyomi.util.system.isConnectedToWifi
import eu.kanade.tachiyomi.util.system.isRunning
+import eu.kanade.tachiyomi.util.system.setForegroundSafely
import eu.kanade.tachiyomi.util.system.workManager
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.async
@@ -108,11 +109,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
}
}
- try {
- setForeground(getForegroundInfo())
- } catch (e: IllegalStateException) {
- logcat(LogPriority.ERROR, e) { "Not allowed to set foreground job" }
- }
+ setForegroundSafely()
libraryPreferences.lastUpdatedTimestamp().set(Date().time)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/MetadataUpdateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/MetadataUpdateJob.kt
index 61178bc19..fc8de7617 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/library/MetadataUpdateJob.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/MetadataUpdateJob.kt
@@ -18,6 +18,7 @@ import eu.kanade.tachiyomi.data.notification.Notifications
import eu.kanade.tachiyomi.source.UnmeteredSource
import eu.kanade.tachiyomi.util.prepUpdateCover
import eu.kanade.tachiyomi.util.system.isRunning
+import eu.kanade.tachiyomi.util.system.setForegroundSafely
import eu.kanade.tachiyomi.util.system.workManager
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.async
@@ -53,11 +54,7 @@ class MetadataUpdateJob(private val context: Context, workerParams: WorkerParame
private var mangaToUpdate: List = mutableListOf()
override suspend fun doWork(): Result {
- try {
- setForeground(getForegroundInfo())
- } catch (e: IllegalStateException) {
- logcat(LogPriority.ERROR, e) { "Not allowed to set foreground job" }
- }
+ setForegroundSafely()
addMangaToQueue()
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt
index 581f15a12..a242485c4 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt
@@ -17,13 +17,12 @@ import eu.kanade.tachiyomi.network.await
import eu.kanade.tachiyomi.network.newCachelessCallWithProgress
import eu.kanade.tachiyomi.util.storage.getUriCompat
import eu.kanade.tachiyomi.util.storage.saveTo
+import eu.kanade.tachiyomi.util.system.setForegroundSafely
import eu.kanade.tachiyomi.util.system.workManager
-import logcat.LogPriority
import okhttp3.internal.http2.ErrorCode
import okhttp3.internal.http2.StreamResetException
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.lang.withIOContext
-import tachiyomi.core.util.system.logcat
import tachiyomi.i18n.MR
import uy.kohesive.injekt.injectLazy
import java.io.File
@@ -43,11 +42,7 @@ class AppUpdateDownloadJob(private val context: Context, workerParams: WorkerPar
return Result.failure()
}
- try {
- setForeground(getForegroundInfo())
- } catch (e: IllegalStateException) {
- logcat(LogPriority.ERROR, e) { "Not allowed to run on foreground service" }
- }
+ setForegroundSafely()
withIOContext {
downloadApk(title, url)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/WorkManagerExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/WorkManagerExtensions.kt
index 02d721725..e565921db 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/util/system/WorkManagerExtensions.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/WorkManagerExtensions.kt
@@ -1,8 +1,12 @@
package eu.kanade.tachiyomi.util.system
import android.content.Context
+import androidx.work.CoroutineWorker
import androidx.work.WorkInfo
import androidx.work.WorkManager
+import kotlinx.coroutines.delay
+import logcat.LogPriority
+import tachiyomi.core.util.system.logcat
val Context.workManager: WorkManager
get() = WorkManager.getInstance(this)
@@ -11,3 +15,21 @@ fun WorkManager.isRunning(tag: String): Boolean {
val list = this.getWorkInfosByTag(tag).get()
return list.any { it.state == WorkInfo.State.RUNNING }
}
+
+/**
+ * Makes this worker run in the context of a foreground service.
+ *
+ * Note that this function is a no-op if the process is subject to foreground
+ * service restrictions.
+ *
+ * Moving to foreground service context requires the worker to run a bit longer,
+ * allowing Service.startForeground() to be called and avoiding system crash.
+ */
+suspend fun CoroutineWorker.setForegroundSafely() {
+ try {
+ setForeground(getForegroundInfo())
+ delay(500)
+ } catch (e: IllegalStateException) {
+ logcat(LogPriority.ERROR, e) { "Not allowed to set foreground job" }
+ }
+}
From e5263d0345c059d9c11bed7d711f03b31bb2ad34 Mon Sep 17 00:00:00 2001
From: arkon
Date: Sat, 2 Dec 2023 14:44:41 -0500
Subject: [PATCH 12/21] Handle content URIs for covers
Co-authored-by: jmir1
---
.../tachiyomi/data/coil/MangaCoverFetcher.kt | 23 +++++++++++++++++--
.../tachiyomi/source/local/LocalSource.kt | 4 ++--
2 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverFetcher.kt b/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverFetcher.kt
index f3c8cc60a..561d32b91 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverFetcher.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverFetcher.kt
@@ -1,5 +1,6 @@
package eu.kanade.tachiyomi.data.coil
+import androidx.core.net.toUri
import coil.ImageLoader
import coil.decode.DataSource
import coil.decode.ImageSource
@@ -10,6 +11,7 @@ import coil.fetch.SourceResult
import coil.network.HttpException
import coil.request.Options
import coil.request.Parameters
+import com.hippo.unifile.UniFile
import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.coil.MangaCoverFetcher.Companion.USE_CUSTOM_COVER
import eu.kanade.tachiyomi.network.await
@@ -24,6 +26,7 @@ import okio.Path.Companion.toOkioPath
import okio.Source
import okio.buffer
import okio.sink
+import okio.source
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.model.MangaCover
@@ -69,8 +72,9 @@ class MangaCoverFetcher(
// diskCacheKey is thumbnail_url
if (url == null) error("No cover specified")
return when (getResourceType(url)) {
- Type.URL -> httpLoader()
Type.File -> fileLoader(File(url.substringAfter("file://")))
+ Type.URI -> fileUriLoader(url)
+ Type.URL -> httpLoader()
null -> error("Invalid image")
}
}
@@ -83,6 +87,18 @@ class MangaCoverFetcher(
)
}
+ private fun fileUriLoader(uri: String): FetchResult {
+ val source = UniFile.fromUri(options.context, uri.toUri())!!
+ .openInputStream()
+ .source()
+ .buffer()
+ return SourceResult(
+ source = ImageSource(source = source, context = options.context),
+ mimeType = "image/*",
+ dataSource = DataSource.DISK,
+ )
+ }
+
private suspend fun httpLoader(): FetchResult {
// Only cache separately if it's a library item
val libraryCoverCacheFile = if (isLibraryManga) {
@@ -256,12 +272,15 @@ class MangaCoverFetcher(
cover.isNullOrEmpty() -> null
cover.startsWith("http", true) || cover.startsWith("Custom-", true) -> Type.URL
cover.startsWith("/") || cover.startsWith("file://") -> Type.File
+ cover.startsWith("content") -> Type.URI
else -> null
}
}
private enum class Type {
- File, URL
+ File,
+ URI,
+ URL,
}
class MangaFactory(
diff --git a/source-local/src/androidMain/kotlin/tachiyomi/source/local/LocalSource.kt b/source-local/src/androidMain/kotlin/tachiyomi/source/local/LocalSource.kt
index 1305001f5..6177e7746 100644
--- a/source-local/src/androidMain/kotlin/tachiyomi/source/local/LocalSource.kt
+++ b/source-local/src/androidMain/kotlin/tachiyomi/source/local/LocalSource.kt
@@ -127,7 +127,7 @@ actual class LocalSource(
// Try to find the cover
coverManager.find(mangaDir.name.orEmpty())?.let {
- thumbnail_url = it.filePath
+ thumbnail_url = it.uri.toString()
}
}
}
@@ -140,7 +140,7 @@ actual class LocalSource(
// Manga details related
override suspend fun getMangaDetails(manga: SManga): SManga = withIOContext {
coverManager.find(manga.url)?.let {
- manga.thumbnail_url = it.filePath
+ manga.thumbnail_url = it.uri.toString()
}
// Augment manga details based on metadata files
From ea1684133b155f44afbf31709be1df364a238735 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 3 Dec 2023 09:51:43 -0500
Subject: [PATCH 13/21] Update dependency com.android.tools.build:gradle to
v8.2.0 (#10212)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
gradle/androidx.versions.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle/androidx.versions.toml b/gradle/androidx.versions.toml
index cc110cdf6..09c6b0e77 100644
--- a/gradle/androidx.versions.toml
+++ b/gradle/androidx.versions.toml
@@ -1,5 +1,5 @@
[versions]
-agp_version = "8.1.4"
+agp_version = "8.2.0"
lifecycle_version = "2.6.2"
paging_version = "3.2.1"
From 6a48fed17060dabf38ab1a5f0d5cce2c5c979097 Mon Sep 17 00:00:00 2001
From: arkon
Date: Sun, 3 Dec 2023 14:25:09 -0500
Subject: [PATCH 14/21] Remove storage permission check when manually creating
backups
Co-authored-by: jmir1
---
.../eu/kanade/tachiyomi/data/backup/BackupCreator.kt | 6 ------
.../kanade/tachiyomi/util/system/ContextExtensions.kt | 11 -----------
2 files changed, 17 deletions(-)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt
index de907c91e..b578742a9 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt
@@ -1,6 +1,5 @@
package eu.kanade.tachiyomi.data.backup
-import android.Manifest
import android.content.Context
import android.net.Uri
import com.hippo.unifile.UniFile
@@ -31,7 +30,6 @@ import eu.kanade.tachiyomi.data.backup.models.backupTrackMapper
import eu.kanade.tachiyomi.source.ConfigurableSource
import eu.kanade.tachiyomi.source.preferenceKey
import eu.kanade.tachiyomi.source.sourcePreferences
-import eu.kanade.tachiyomi.util.system.hasPermission
import kotlinx.serialization.protobuf.ProtoBuf
import logcat.LogPriority
import okio.buffer
@@ -73,10 +71,6 @@ class BackupCreator(
* @param isAutoBackup backup called from scheduled backup job
*/
suspend fun createBackup(uri: Uri, flags: Int, isAutoBackup: Boolean): String {
- if (!context.hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
- throw IllegalStateException(context.stringResource(MR.strings.missing_storage_permission))
- }
-
val databaseManga = getFavorites.await()
val backup = Backup(
backupMangas(databaseManga, flags),
diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt
index 44635e98d..05c0971fd 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt
@@ -10,7 +10,6 @@ import android.net.Uri
import android.os.Build
import android.os.PowerManager
import androidx.appcompat.view.ContextThemeWrapper
-import androidx.core.content.PermissionChecker
import androidx.core.content.getSystemService
import androidx.core.net.toUri
import com.hippo.unifile.UniFile
@@ -53,16 +52,6 @@ fun Context.copyToClipboard(label: String, content: String) {
}
}
-/**
- * Checks if the give permission is granted.
- *
- * @param permission the permission to check.
- * @return true if it has permissions.
- */
-fun Context.hasPermission(
- permission: String,
-) = PermissionChecker.checkSelfPermission(this, permission) == PermissionChecker.PERMISSION_GRANTED
-
val Context.powerManager: PowerManager
get() = getSystemService()!!
From 3aead3a2a924ae080b8fa5dbfdef15b91010d2c9 Mon Sep 17 00:00:00 2001
From: arkon
Date: Sun, 3 Dec 2023 14:26:44 -0500
Subject: [PATCH 15/21] Clean up startDownloadNow function a bit
Fixes #9330, I think. If it was even still an issue.
---
.../data/download/DownloadManager.kt | 32 +++++++++----------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt
index dca4fac23..3e447f4ab 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt
@@ -68,7 +68,13 @@ class DownloadManager(
* Tells the downloader to begin downloads.
*/
fun startDownloads() {
- DownloadJob.start(context)
+ if (downloader.isRunning) return
+
+ if (DownloadJob.isRunning(context)) {
+ downloader.start()
+ } else {
+ DownloadJob.start(context)
+ }
}
/**
@@ -97,22 +103,16 @@ class DownloadManager(
return queueState.value.find { it.chapter.id == chapterId }
}
- fun startDownloadNow(chapterId: Long?) {
- if (chapterId == null) return
- val download = getQueuedDownloadOrNull(chapterId)
+ fun startDownloadNow(chapterId: Long) {
+ val existingDownload = getQueuedDownloadOrNull(chapterId)
// If not in queue try to start a new download
- val toAdd = download ?: runBlocking { Download.fromChapterId(chapterId) } ?: return
- val queue = queueState.value.toMutableList()
- download?.let { queue.remove(it) }
- queue.add(0, toAdd)
- reorderQueue(queue)
- if (!downloader.isRunning) {
- if (DownloadJob.isRunning(context)) {
- downloader.start()
- } else {
- DownloadJob.start(context)
- }
+ val toAdd = existingDownload ?: runBlocking { Download.fromChapterId(chapterId) } ?: return
+ queueState.value.toMutableList().apply {
+ existingDownload?.let { remove(it) }
+ add(0, toAdd)
+ reorderQueue(this)
}
+ startDownloads()
}
/**
@@ -146,7 +146,7 @@ class DownloadManager(
addAll(0, downloads)
reorderQueue(this)
}
- if (!DownloadJob.isRunning(context)) DownloadJob.start(context)
+ if (!DownloadJob.isRunning(context)) startDownloads()
}
/**
From ccadfc8fe53ff1b8ab66b0e91a4fa5a21481bcda Mon Sep 17 00:00:00 2001
From: arkon
Date: Sun, 3 Dec 2023 14:58:08 -0500
Subject: [PATCH 16/21] Force recreate download index cache on upgrade
Fixes #10187
---
app/build.gradle.kts | 2 +-
app/src/main/java/eu/kanade/tachiyomi/Migrations.kt | 5 +++++
.../java/eu/kanade/tachiyomi/data/download/DownloadCache.kt | 2 +-
3 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 0fd4cd1fa..2f701d5a5 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -22,7 +22,7 @@ android {
defaultConfig {
applicationId = "eu.kanade.tachiyomi"
- versionCode = 110
+ versionCode = 111
versionName = "0.14.7"
buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"")
diff --git a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt
index c55ce35da..1c7887dca 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt
@@ -416,6 +416,11 @@ object Migrations {
newKey = { Preference.appStateKey(it) },
)
}
+ if (oldVersion < 111) {
+ File(context.cacheDir, "dl_index_cache")
+ .takeIf { it.exists() }
+ ?.delete()
+ }
return true
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt
index 9fe7dbfee..17930a89e 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt
@@ -94,7 +94,7 @@ class DownloadCache(
.stateIn(scope, SharingStarted.WhileSubscribed(), false)
private val diskCacheFile: File
- get() = File(context.cacheDir, "dl_index_cache")
+ get() = File(context.cacheDir, "dl_index_cache_v2")
private val rootDownloadsDirLock = Mutex()
private var rootDownloadsDir = RootDirectory(provider.downloadsDir)
From 5b2a099203cae59d266a3d417f128b36ddad9858 Mon Sep 17 00:00:00 2001
From: arkon
Date: Sun, 3 Dec 2023 15:34:52 -0500
Subject: [PATCH 17/21] Migrate ReaderColorFilterView to Compose
---
.../presentation/reader/BrightnessOverlay.kt | 27 ----------
.../reader/ReaderContentOverlay.kt | 43 ++++++++++++++++
.../reader/settings/ColorFilterPage.kt | 25 ++-------
.../tachiyomi/ui/reader/ReaderActivity.kt | 51 +++++--------------
.../ui/reader/ReaderColorFilterView.kt | 36 -------------
.../ui/reader/setting/ReaderPreferences.kt | 21 ++++++++
app/src/main/res/layout/reader_activity.xml | 6 ---
7 files changed, 81 insertions(+), 128 deletions(-)
delete mode 100644 app/src/main/java/eu/kanade/presentation/reader/BrightnessOverlay.kt
create mode 100644 app/src/main/java/eu/kanade/presentation/reader/ReaderContentOverlay.kt
delete mode 100644 app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderColorFilterView.kt
diff --git a/app/src/main/java/eu/kanade/presentation/reader/BrightnessOverlay.kt b/app/src/main/java/eu/kanade/presentation/reader/BrightnessOverlay.kt
deleted file mode 100644
index b945906a4..000000000
--- a/app/src/main/java/eu/kanade/presentation/reader/BrightnessOverlay.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-package eu.kanade.presentation.reader
-
-import androidx.annotation.IntRange
-import androidx.compose.foundation.Canvas
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.graphicsLayer
-import kotlin.math.abs
-
-@Composable
-fun BrightnessOverlay(
- @IntRange(from = -100, to = 100) value: Int,
-) {
- if (value >= 0) return
-
- Canvas(
- modifier = Modifier
- .fillMaxSize()
- .graphicsLayer {
- alpha = abs(value) / 100f
- },
- ) {
- drawRect(Color.Black)
- }
-}
diff --git a/app/src/main/java/eu/kanade/presentation/reader/ReaderContentOverlay.kt b/app/src/main/java/eu/kanade/presentation/reader/ReaderContentOverlay.kt
new file mode 100644
index 000000000..a1ef26222
--- /dev/null
+++ b/app/src/main/java/eu/kanade/presentation/reader/ReaderContentOverlay.kt
@@ -0,0 +1,43 @@
+package eu.kanade.presentation.reader
+
+import androidx.annotation.ColorInt
+import androidx.annotation.IntRange
+import androidx.compose.foundation.Canvas
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.BlendMode
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.graphicsLayer
+import kotlin.math.abs
+
+@Composable
+fun ReaderContentOverlay(
+ @IntRange(from = -100, to = 100) brightness: Int,
+ @ColorInt color: Int?,
+ colorBlendMode: BlendMode? = BlendMode.SrcOver,
+) {
+ if (brightness < 0) {
+ Canvas(
+ modifier = Modifier
+ .fillMaxSize()
+ .graphicsLayer {
+ alpha = abs(brightness) / 100f
+ },
+ ) {
+ drawRect(Color.Black)
+ }
+ }
+
+ if (color != null) {
+ Canvas(
+ modifier = Modifier
+ .fillMaxSize(),
+ ) {
+ drawRect(
+ color = Color(color),
+ blendMode = colorBlendMode,
+ )
+ }
+ }
+}
diff --git a/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt b/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt
index 1e7324956..1c5a9c6fb 100644
--- a/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt
+++ b/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt
@@ -1,6 +1,5 @@
package eu.kanade.presentation.reader.settings
-import android.os.Build
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.material3.FilterChip
import androidx.compose.material3.Text
@@ -10,6 +9,7 @@ import androidx.core.graphics.alpha
import androidx.core.graphics.blue
import androidx.core.graphics.green
import androidx.core.graphics.red
+import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences.Companion.ColorFilterMode
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel
import tachiyomi.core.preference.getAndSet
import tachiyomi.i18n.MR
@@ -21,25 +21,6 @@ import tachiyomi.presentation.core.util.collectAsState
@Composable
internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) {
- val colorFilterModes = buildList {
- addAll(
- listOf(
- MR.strings.label_default,
- MR.strings.filter_mode_multiply,
- MR.strings.filter_mode_screen,
- ),
- )
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
- addAll(
- listOf(
- MR.strings.filter_mode_overlay,
- MR.strings.filter_mode_lighten,
- MR.strings.filter_mode_darken,
- ),
- )
- }
- }.map { stringResource(it) }
-
val customBrightness by screenModel.preferences.customBrightness().collectAsState()
CheckboxItem(
label = stringResource(MR.strings.pref_custom_brightness),
@@ -118,11 +99,11 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel)
val colorFilterMode by screenModel.preferences.colorFilterMode().collectAsState()
SettingsChipRow(MR.strings.pref_color_filter_mode) {
- colorFilterModes.mapIndexed { index, it ->
+ ColorFilterMode.mapIndexed { index, it ->
FilterChip(
selected = colorFilterMode == index,
onClick = { screenModel.preferences.colorFilterMode().set(index) },
- label = { Text(it) },
+ label = { Text(stringResource(it.first)) },
)
}
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
index f5b647e85..dbd732fa1 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
@@ -34,17 +34,16 @@ import androidx.core.transition.doOnEnd
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
-import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
import com.google.android.material.elevation.SurfaceColors
import com.google.android.material.transition.platform.MaterialContainerTransform
import dev.chrisbanes.insetter.applyInsetter
import eu.kanade.domain.base.BasePreferences
-import eu.kanade.presentation.reader.BrightnessOverlay
import eu.kanade.presentation.reader.DisplayRefreshHost
import eu.kanade.presentation.reader.OrientationSelectDialog
import eu.kanade.presentation.reader.PageIndicatorText
+import eu.kanade.presentation.reader.ReaderContentOverlay
import eu.kanade.presentation.reader.ReaderPageActionsDialog
import eu.kanade.presentation.reader.ReadingModeSelectDialog
import eu.kanade.presentation.reader.appbars.ReaderAppBars
@@ -331,11 +330,24 @@ class ReaderActivity : BaseActivity() {
val isFullscreen by readerPreferences.fullscreen().collectAsState()
val flashOnPageChange by readerPreferences.flashOnPageChange().collectAsState()
+ val colorOverlayEnabled by readerPreferences.colorFilter().collectAsState()
+ val colorOverlay by readerPreferences.colorFilterValue().collectAsState()
+ val colorOverlayMode by readerPreferences.colorFilterMode().collectAsState()
+ val colorOverlayBlendMode = remember(colorOverlayMode) {
+ ReaderPreferences.ColorFilterMode.getOrNull(colorOverlayMode)?.second
+ }
+
val cropBorderPaged by readerPreferences.cropBorders().collectAsState()
val cropBorderWebtoon by readerPreferences.cropBordersWebtoon().collectAsState()
val isPagerType = ReadingMode.isPagerType(viewModel.getMangaReadingMode())
val cropEnabled = if (isPagerType) cropBorderPaged else cropBorderWebtoon
+ ReaderContentOverlay(
+ brightness = state.brightnessOverlayValue,
+ color = colorOverlay.takeIf { colorOverlayEnabled },
+ colorBlendMode = colorOverlayBlendMode,
+ )
+
ReaderAppBars(
visible = state.menuVisible,
fullscreen = isFullscreen,
@@ -378,10 +390,6 @@ class ReaderActivity : BaseActivity() {
onClickSettings = viewModel::openSettingsDialog,
)
- BrightnessOverlay(
- value = state.brightnessOverlayValue,
- )
-
if (flashOnPageChange) {
DisplayRefreshHost(
hostState = displayRefreshHost,
@@ -805,14 +813,6 @@ class ReaderActivity : BaseActivity() {
.onEach(::setCustomBrightness)
.launchIn(lifecycleScope)
- readerPreferences.colorFilter().changes()
- .onEach(::setColorFilter)
- .launchIn(lifecycleScope)
-
- readerPreferences.colorFilterMode().changes()
- .onEach { setColorFilter(readerPreferences.colorFilter().get()) }
- .launchIn(lifecycleScope)
-
merge(readerPreferences.grayscale().changes(), readerPreferences.invertedColors().changes())
.onEach { setLayerPaint(readerPreferences.grayscale().get(), readerPreferences.invertedColors().get()) }
.launchIn(lifecycleScope)
@@ -884,20 +884,6 @@ class ReaderActivity : BaseActivity() {
}
}
- /**
- * Sets the color filter overlay according to [enabled].
- */
- private fun setColorFilter(enabled: Boolean) {
- if (enabled) {
- readerPreferences.colorFilterValue().changes()
- .sample(100)
- .onEach(::setColorFilterValue)
- .launchIn(lifecycleScope)
- } else {
- binding.colorOverlay.isVisible = false
- }
- }
-
/**
* Sets the brightness of the screen. Range is [-75, 100].
* From -75 to -1 a semi-transparent black view is overlaid with the minimum brightness.
@@ -919,15 +905,6 @@ class ReaderActivity : BaseActivity() {
viewModel.setBrightnessOverlayValue(value)
}
-
- /**
- * Sets the color filter [value].
- */
- private fun setColorFilterValue(value: Int) {
- binding.colorOverlay.isVisible = true
- binding.colorOverlay.setFilterColor(value, readerPreferences.colorFilterMode().get())
- }
-
private fun setLayerPaint(grayscale: Boolean, invertedColors: Boolean) {
val paint = if (grayscale || invertedColors) getCombinedPaint(grayscale, invertedColors) else null
binding.viewerContainer.setLayerType(LAYER_TYPE_HARDWARE, paint)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderColorFilterView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderColorFilterView.kt
deleted file mode 100644
index 6266ab239..000000000
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderColorFilterView.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-package eu.kanade.tachiyomi.ui.reader
-
-import android.content.Context
-import android.graphics.Canvas
-import android.graphics.Paint
-import android.graphics.PorterDuff
-import android.util.AttributeSet
-import android.view.View
-import androidx.core.graphics.toXfermode
-
-class ReaderColorFilterView(
- context: Context,
- attrs: AttributeSet? = null,
-) : View(context, attrs) {
-
- private val colorFilterPaint: Paint = Paint()
-
- fun setFilterColor(color: Int, filterMode: Int) {
- colorFilterPaint.color = color
- colorFilterPaint.xfermode = when (filterMode) {
- 1 -> PorterDuff.Mode.MULTIPLY
- 2 -> PorterDuff.Mode.SCREEN
- 3 -> PorterDuff.Mode.OVERLAY
- 4 -> PorterDuff.Mode.LIGHTEN
- 5 -> PorterDuff.Mode.DARKEN
- else -> PorterDuff.Mode.SRC_OVER
- }.toXfermode()
-
- invalidate()
- }
-
- override fun onDraw(canvas: Canvas) {
- super.onDraw(canvas)
- canvas.drawPaint(colorFilterPaint)
- }
-}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
index f4992dbc0..4de0ecd94 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
@@ -1,5 +1,7 @@
package eu.kanade.tachiyomi.ui.reader.setting
+import android.os.Build
+import androidx.compose.ui.graphics.BlendMode
import dev.icerock.moko.resources.StringResource
import tachiyomi.core.preference.PreferenceStore
import tachiyomi.core.preference.getEnum
@@ -178,5 +180,24 @@ class ReaderPreferences(
MR.strings.zoom_start_right,
MR.strings.zoom_start_center,
)
+
+ val ColorFilterMode = buildList {
+ addAll(
+ listOf(
+ MR.strings.label_default to BlendMode.SrcOver,
+ MR.strings.filter_mode_multiply to BlendMode.Modulate,
+ MR.strings.filter_mode_screen to BlendMode.Screen,
+ ),
+ )
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ addAll(
+ listOf(
+ MR.strings.filter_mode_overlay to BlendMode.Overlay,
+ MR.strings.filter_mode_lighten to BlendMode.Lighten,
+ MR.strings.filter_mode_darken to BlendMode.Darken,
+ ),
+ )
+ }
+ }
}
}
diff --git a/app/src/main/res/layout/reader_activity.xml b/app/src/main/res/layout/reader_activity.xml
index da843c09f..ed289767a 100644
--- a/app/src/main/res/layout/reader_activity.xml
+++ b/app/src/main/res/layout/reader_activity.xml
@@ -21,12 +21,6 @@
-
-
Date: Sun, 3 Dec 2023 15:56:45 -0500
Subject: [PATCH 18/21] Try to fall back to showing URI for storage location if
concrete file path isn't available
Closes #9977
---
.../presentation/more/settings/screen/SettingsDataScreen.kt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt
index b1bd8879c..a4fb1b685 100644
--- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt
@@ -105,7 +105,8 @@ object SettingsDataScreen : SearchableSettings {
return Preference.PreferenceItem.TextPreference(
title = stringResource(MR.strings.pref_storage_location),
subtitle = remember(storageDir) {
- (UniFile.fromUri(context, storageDir.toUri())?.filePath)
+ val file = UniFile.fromUri(context, storageDir.toUri())
+ file?.filePath ?: file?.uri?.toString()
} ?: stringResource(MR.strings.invalid_location, storageDir),
onClick = {
try {
From 427fbfdf5e58478bd9b6d35e3137f2a22db9fd96 Mon Sep 17 00:00:00 2001
From: arkon
Date: Sun, 3 Dec 2023 15:56:51 -0500
Subject: [PATCH 19/21] Minor cleanup
---
.../presentation/reader/ReaderContentOverlay.kt | 16 +++++++++++-----
.../kanade/tachiyomi/ui/reader/ReaderActivity.kt | 8 +++-----
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/app/src/main/java/eu/kanade/presentation/reader/ReaderContentOverlay.kt b/app/src/main/java/eu/kanade/presentation/reader/ReaderContentOverlay.kt
index a1ef26222..4f72ac9af 100644
--- a/app/src/main/java/eu/kanade/presentation/reader/ReaderContentOverlay.kt
+++ b/app/src/main/java/eu/kanade/presentation/reader/ReaderContentOverlay.kt
@@ -5,6 +5,7 @@ import androidx.annotation.IntRange
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.BlendMode
import androidx.compose.ui.graphics.Color
@@ -15,14 +16,19 @@ import kotlin.math.abs
fun ReaderContentOverlay(
@IntRange(from = -100, to = 100) brightness: Int,
@ColorInt color: Int?,
- colorBlendMode: BlendMode? = BlendMode.SrcOver,
+ colorBlendMode: BlendMode?,
+ modifier: Modifier = Modifier,
) {
if (brightness < 0) {
+ val brightnessAlpha = remember(brightness) {
+ abs(brightness) / 100f
+ }
+
Canvas(
- modifier = Modifier
+ modifier = modifier
.fillMaxSize()
.graphicsLayer {
- alpha = abs(brightness) / 100f
+ alpha = brightnessAlpha
},
) {
drawRect(Color.Black)
@@ -31,12 +37,12 @@ fun ReaderContentOverlay(
if (color != null) {
Canvas(
- modifier = Modifier
+ modifier = modifier
.fillMaxSize(),
) {
drawRect(
color = Color(color),
- blendMode = colorBlendMode,
+ blendMode = colorBlendMode ?: BlendMode.SrcOver,
)
}
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
index dbd732fa1..c67a49084 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
@@ -88,7 +88,6 @@ import tachiyomi.core.util.lang.launchIO
import tachiyomi.core.util.lang.launchNonCancellable
import tachiyomi.core.util.lang.withUIContext
import tachiyomi.core.util.system.logcat
-import tachiyomi.domain.manga.model.Manga
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.util.collectAsState
import uy.kohesive.injekt.Injekt
@@ -183,7 +182,7 @@ class ReaderActivity : BaseActivity() {
.map { it.manga }
.distinctUntilChanged()
.filterNotNull()
- .onEach(::setManga)
+ .onEach { updateViewer() }
.launchIn(lifecycleScope)
viewModel.state
@@ -486,10 +485,9 @@ class ReaderActivity : BaseActivity() {
}
/**
- * Called from the presenter when a manga is ready. Used to instantiate the appropriate viewer
- * and the toolbar title.
+ * Called from the presenter when a manga is ready. Used to instantiate the appropriate viewer.
*/
- private fun setManga(manga: Manga) {
+ private fun updateViewer() {
val prevViewer = viewModel.state.value.viewer
val newViewer = ReadingMode.toViewer(viewModel.getMangaReadingMode(), this)
From 1f259f92986c3e4c86d6068eec257f6bd32f69b4 Mon Sep 17 00:00:00 2001
From: arkon
Date: Sun, 3 Dec 2023 16:31:10 -0500
Subject: [PATCH 20/21] Fix sharing saved pages from notification
Related to #8327
Deleting doesn't seem to do anything still, but at least doesn't throw an exception.
Also removed behavior of dismissing notification after sharing/deleting pages/backups
in case you want to do something again afterwards. Users can manually dismiss the
notification whenever they want.
---
.../tachiyomi/data/backup/BackupNotifier.kt | 6 +-
.../data/notification/NotificationReceiver.kt | 57 +++++++------------
.../tachiyomi/ui/reader/SaveImageNotifier.kt | 4 +-
3 files changed, 22 insertions(+), 45 deletions(-)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt
index 835796898..71bdbcc08 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt
@@ -79,11 +79,7 @@ class BackupNotifier(private val context: Context) {
addAction(
R.drawable.ic_share_24dp,
context.stringResource(MR.strings.action_share),
- NotificationReceiver.shareBackupPendingBroadcast(
- context,
- unifile.uri,
- Notifications.ID_BACKUP_COMPLETE,
- ),
+ NotificationReceiver.shareBackupPendingBroadcast(context, unifile.uri),
)
show(Notifications.ID_BACKUP_COMPLETE)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt b/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt
index db72f71ad..8133cdaa1 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt
@@ -7,6 +7,7 @@ import android.content.Intent
import android.net.Uri
import android.os.Build
import androidx.core.net.toUri
+import com.hippo.unifile.UniFile
import eu.kanade.tachiyomi.data.backup.BackupRestoreJob
import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
@@ -14,7 +15,6 @@ import eu.kanade.tachiyomi.data.updater.AppUpdateDownloadJob
import eu.kanade.tachiyomi.ui.main.MainActivity
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
import eu.kanade.tachiyomi.util.storage.DiskUtil
-import eu.kanade.tachiyomi.util.storage.getUriCompat
import eu.kanade.tachiyomi.util.system.cancelNotification
import eu.kanade.tachiyomi.util.system.getParcelableExtraCompat
import eu.kanade.tachiyomi.util.system.notificationManager
@@ -35,7 +35,6 @@ import tachiyomi.i18n.MR
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
-import java.io.File
import eu.kanade.tachiyomi.BuildConfig.APPLICATION_ID as ID
/**
@@ -64,15 +63,13 @@ class NotificationReceiver : BroadcastReceiver() {
ACTION_SHARE_IMAGE ->
shareImage(
context,
- intent.getStringExtra(EXTRA_FILE_LOCATION)!!,
- intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1),
+ intent.getStringExtra(EXTRA_URI)!!.toUri(),
)
// Delete image from path and dismiss notification
ACTION_DELETE_IMAGE ->
deleteImage(
context,
- intent.getStringExtra(EXTRA_FILE_LOCATION)!!,
- intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1),
+ intent.getStringExtra(EXTRA_URI)!!.toUri(),
)
// Share backup file
ACTION_SHARE_BACKUP ->
@@ -80,7 +77,6 @@ class NotificationReceiver : BroadcastReceiver() {
context,
intent.getParcelableExtraCompat(EXTRA_URI)!!,
"application/x-protobuf+gzip",
- intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1),
)
ACTION_CANCEL_RESTORE -> cancelRestore(context)
// Cancel library update and dismiss notification
@@ -137,12 +133,10 @@ class NotificationReceiver : BroadcastReceiver() {
* Called to start share intent to share image
*
* @param context context of application
- * @param path path of file
- * @param notificationId id of notification
+ * @param uri path of file
*/
- private fun shareImage(context: Context, path: String, notificationId: Int) {
- dismissNotification(context, notificationId)
- context.startActivity(File(path).getUriCompat(context).toShareIntent(context))
+ private fun shareImage(context: Context, uri: Uri) {
+ context.startActivity(uri.toShareIntent(context))
}
/**
@@ -150,10 +144,8 @@ class NotificationReceiver : BroadcastReceiver() {
*
* @param context context of application
* @param path path of file
- * @param notificationId id of notification
*/
- private fun shareFile(context: Context, uri: Uri, fileMimeType: String, notificationId: Int) {
- dismissNotification(context, notificationId)
+ private fun shareFile(context: Context, uri: Uri, fileMimeType: String) {
context.startActivity(uri.toShareIntent(context, fileMimeType))
}
@@ -180,17 +172,11 @@ class NotificationReceiver : BroadcastReceiver() {
/**
* Called to delete image
*
- * @param path path of file
- * @param notificationId id of notification
+ * @param uri path of file
*/
- private fun deleteImage(context: Context, path: String, notificationId: Int) {
- dismissNotification(context, notificationId)
-
- // Delete file
- val file = File(path)
- file.delete()
-
- DiskUtil.scanMedia(context, file.toUri())
+ private fun deleteImage(context: Context, uri: Uri) {
+ UniFile.fromUri(context, uri)?.delete()
+ DiskUtil.scanMedia(context, uri)
}
/**
@@ -409,18 +395,17 @@ class NotificationReceiver : BroadcastReceiver() {
}
/**
- * Returns [PendingIntent] that starts a service which cancels the notification and starts a share activity
+ * Returns [PendingIntent] that starts a share activity
*
* @param context context of application
- * @param path location path of file
+ * @param uri location path of file
* @param notificationId id of notification
* @return [PendingIntent]
*/
- internal fun shareImagePendingBroadcast(context: Context, path: String, notificationId: Int): PendingIntent {
+ internal fun shareImagePendingBroadcast(context: Context, uri: Uri): PendingIntent {
val intent = Intent(context, NotificationReceiver::class.java).apply {
action = ACTION_SHARE_IMAGE
- putExtra(EXTRA_FILE_LOCATION, path)
- putExtra(EXTRA_NOTIFICATION_ID, notificationId)
+ putExtra(EXTRA_URI, uri.toString())
}
return PendingIntent.getBroadcast(
context,
@@ -434,15 +419,13 @@ class NotificationReceiver : BroadcastReceiver() {
* Returns [PendingIntent] that starts a service which removes an image from disk
*
* @param context context of application
- * @param path location path of file
- * @param notificationId id of notification
+ * @param uri location path of file
* @return [PendingIntent]
*/
- internal fun deleteImagePendingBroadcast(context: Context, path: String, notificationId: Int): PendingIntent {
+ internal fun deleteImagePendingBroadcast(context: Context, uri: Uri): PendingIntent {
val intent = Intent(context, NotificationReceiver::class.java).apply {
action = ACTION_DELETE_IMAGE
- putExtra(EXTRA_FILE_LOCATION, path)
- putExtra(EXTRA_NOTIFICATION_ID, notificationId)
+ putExtra(EXTRA_URI, uri.toString())
}
return PendingIntent.getBroadcast(
context,
@@ -625,14 +608,12 @@ class NotificationReceiver : BroadcastReceiver() {
*
* @param context context of application
* @param uri uri of backup file
- * @param notificationId id of notification
* @return [PendingIntent]
*/
- internal fun shareBackupPendingBroadcast(context: Context, uri: Uri, notificationId: Int): PendingIntent {
+ internal fun shareBackupPendingBroadcast(context: Context, uri: Uri): PendingIntent {
val intent = Intent(context, NotificationReceiver::class.java).apply {
action = ACTION_SHARE_BACKUP
putExtra(EXTRA_URI, uri)
- putExtra(EXTRA_NOTIFICATION_ID, notificationId)
}
return PendingIntent.getBroadcast(
context,
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt
index 56813b714..de5b5f011 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt
@@ -81,13 +81,13 @@ class SaveImageNotifier(private val context: Context) {
addAction(
R.drawable.ic_share_24dp,
context.stringResource(MR.strings.action_share),
- NotificationReceiver.shareImagePendingBroadcast(context, uri.path!!, notificationId),
+ NotificationReceiver.shareImagePendingBroadcast(context, uri),
)
// Delete action
addAction(
R.drawable.ic_delete_24dp,
context.stringResource(MR.strings.action_delete),
- NotificationReceiver.deleteImagePendingBroadcast(context, uri.path!!, notificationId),
+ NotificationReceiver.deleteImagePendingBroadcast(context, uri),
)
updateNotification()
From 734cb0be6eeeb484d367ba1cfdbf8cd0076157d3 Mon Sep 17 00:00:00 2001
From: arkon
Date: Sun, 3 Dec 2023 16:52:07 -0500
Subject: [PATCH 21/21] Show average scores in tracker search results
Closes #8280
---
.../java/eu/kanade/presentation/track/TrackerSearch.kt | 8 ++++++++
.../eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt | 2 ++
.../kanade/tachiyomi/data/track/anilist/AnilistModels.kt | 2 ++
.../eu/kanade/tachiyomi/data/track/bangumi/BangumiApi.kt | 3 +++
.../java/eu/kanade/tachiyomi/data/track/kitsu/KitsuApi.kt | 2 +-
.../eu/kanade/tachiyomi/data/track/kitsu/KitsuModels.kt | 2 ++
.../eu/kanade/tachiyomi/data/track/model/TrackSearch.kt | 2 +-
.../tachiyomi/data/track/myanimelist/MyAnimeListApi.kt | 4 +++-
.../kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt | 1 +
9 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt b/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt
index f2aa4fb16..ea5a81010 100644
--- a/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt
+++ b/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt
@@ -193,6 +193,7 @@ fun TrackerSearch(
type = it.publishing_type.toLowerCase(Locale.current).capitalize(Locale.current),
startDate = it.start_date,
status = it.publishing_status.toLowerCase(Locale.current).capitalize(Locale.current),
+ score = it.score,
description = it.summary.trim(),
selected = it == selected,
onClick = { onSelectedChange(it) },
@@ -218,6 +219,7 @@ private fun SearchResultItem(
type: String,
startDate: String,
status: String,
+ score: Float,
description: String,
selected: Boolean,
onClick: () -> Unit,
@@ -279,6 +281,12 @@ private fun SearchResultItem(
text = status,
)
}
+ if (score != -1f) {
+ SearchResultItemDetails(
+ title = stringResource(MR.strings.score),
+ text = score.toString(),
+ )
+ }
}
}
if (description.isNotBlank()) {
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt
index b1142c74d..c1d0a855b 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt
@@ -153,6 +153,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
|month
|day
|}
+ |averageScore
|}
|}
|}
@@ -309,6 +310,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
struct["status"]!!.jsonPrimitive.contentOrNull ?: "",
parseDate(struct, "startDate"),
struct["chapters"]!!.jsonPrimitive.intOrNull ?: 0,
+ struct["averageScore"]?.jsonPrimitive?.intOrNull ?: -1,
)
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistModels.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistModels.kt
index e0103371e..eb2f15ab2 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistModels.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistModels.kt
@@ -19,6 +19,7 @@ data class ALManga(
val publishing_status: String,
val start_date_fuzzy: Long,
val total_chapters: Int,
+ val average_score: Int,
) {
fun toTrack() = TrackSearch.create(TrackerManager.ANILIST).apply {
@@ -27,6 +28,7 @@ data class ALManga(
total_chapters = this@ALManga.total_chapters
cover_url = image_url_lge
summary = description?.htmlDecode() ?: ""
+ score = average_score.toFloat()
tracking_url = AnilistApi.mangaUrl(media_id)
publishing_status = this@ALManga.publishing_status
publishing_type = format
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiApi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiApi.kt
index 6762fdcaf..29db49ec5 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiApi.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiApi.kt
@@ -11,6 +11,7 @@ import eu.kanade.tachiyomi.network.parseAs
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.contentOrNull
+import kotlinx.serialization.json.floatOrNull
import kotlinx.serialization.json.int
import kotlinx.serialization.json.jsonArray
import kotlinx.serialization.json.jsonObject
@@ -108,11 +109,13 @@ class BangumiApi(
} else {
0
}
+ val rating = obj["rating"]?.jsonObject?.get("score")?.jsonPrimitive?.floatOrNull ?: -1f
return TrackSearch.create(trackId).apply {
media_id = obj["id"]!!.jsonPrimitive.long
title = obj["name_cn"]!!.jsonPrimitive.content
cover_url = coverUrl
summary = obj["name"]!!.jsonPrimitive.content
+ score = rating
tracking_url = obj["url"]!!.jsonPrimitive.content
total_chapters = totalChapters
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuApi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuApi.kt
index 2d54b266b..5406be0ad 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuApi.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuApi.kt
@@ -279,7 +279,7 @@ class KitsuApi(private val client: OkHttpClient, interceptor: KitsuInterceptor)
private const val algoliaAppId = "AWQO5J657S"
private const val algoliaFilter =
"&facetFilters=%5B%22kind%3Amanga%22%5D&attributesToRetrieve=" +
- "%5B%22synopsis%22%2C%22canonicalTitle%22%2C%22chapterCount%22%2C%22" +
+ "%5B%22synopsis%22%2C%22averageRating%22%2C%22canonicalTitle%22%2C%22chapterCount%22%2C%22" +
"posterImage%22%2C%22startDate%22%2C%22subtype%22%2C%22endDate%22%2C%20%22id%22%5D"
fun mangaUrl(remoteId: Long): String {
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuModels.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuModels.kt
index 1cbf16c71..156f6d8f3 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuModels.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuModels.kt
@@ -28,6 +28,7 @@ class KitsuSearchManga(obj: JsonObject) {
null
}
private val synopsis = obj["synopsis"]?.jsonPrimitive?.contentOrNull
+ private val rating = obj["averageRating"]?.jsonPrimitive?.contentOrNull?.toFloatOrNull()
private var startDate = obj["startDate"]?.jsonPrimitive?.contentOrNull?.let {
val outputDf = SimpleDateFormat("yyyy-MM-dd", Locale.US)
outputDf.format(Date(it.toLong() * 1000))
@@ -42,6 +43,7 @@ class KitsuSearchManga(obj: JsonObject) {
cover_url = original ?: ""
summary = synopsis ?: ""
tracking_url = KitsuApi.mangaUrl(media_id)
+ score = rating ?: -1f
publishing_status = if (endDate == null) {
"Publishing"
} else {
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/model/TrackSearch.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/model/TrackSearch.kt
index 2f930b50c..7151aab62 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/track/model/TrackSearch.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/model/TrackSearch.kt
@@ -20,7 +20,7 @@ class TrackSearch : Track {
override var total_chapters: Int = 0
- override var score: Float = 0f
+ override var score: Float = -1f
override var status: Int = 0
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListApi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListApi.kt
index db89bcc11..444c5512f 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListApi.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListApi.kt
@@ -16,6 +16,7 @@ import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.boolean
import kotlinx.serialization.json.contentOrNull
import kotlinx.serialization.json.float
+import kotlinx.serialization.json.floatOrNull
import kotlinx.serialization.json.int
import kotlinx.serialization.json.jsonArray
import kotlinx.serialization.json.jsonObject
@@ -103,7 +104,7 @@ class MyAnimeListApi(
.appendPath(id.toString())
.appendQueryParameter(
"fields",
- "id,title,synopsis,num_chapters,main_picture,status,media_type,start_date",
+ "id,title,synopsis,num_chapters,mean,main_picture,status,media_type,start_date",
)
.build()
with(json) {
@@ -117,6 +118,7 @@ class MyAnimeListApi(
title = obj["title"]!!.jsonPrimitive.content
summary = obj["synopsis"]?.jsonPrimitive?.content ?: ""
total_chapters = obj["num_chapters"]!!.jsonPrimitive.int
+ score = obj["mean"]?.jsonPrimitive?.floatOrNull ?: -1f
cover_url =
obj["main_picture"]?.jsonObject?.get("large")?.jsonPrimitive?.content
?: ""
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt
index 8ae22f3c9..0a5bba772 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt
@@ -107,6 +107,7 @@ class ShikimoriApi(
total_chapters = obj["chapters"]!!.jsonPrimitive.int
cover_url = baseUrl + obj["image"]!!.jsonObject["preview"]!!.jsonPrimitive.content
summary = ""
+ score = obj["score"]!!.jsonPrimitive.float
tracking_url = baseUrl + obj["url"]!!.jsonPrimitive.content
publishing_status = obj["status"]!!.jsonPrimitive.content
publishing_type = obj["kind"]!!.jsonPrimitive.content