mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 02:34:39 +00:00
revert: Revert "Revert "Modularize the app""
This reverts commit f59f2346dc
.
This commit is contained in:
parent
9feba40ab7
commit
2b46f94a5a
290 changed files with 1655 additions and 881 deletions
|
@ -18,11 +18,13 @@
|
|||
|
||||
## Other
|
||||
- Some code refactors
|
||||
- Simplify some messy code
|
||||
- Rewrite version checker
|
||||
- Rewrite Migrator
|
||||
- Split the project into several modules
|
||||
- Update firebase bom to v33.1.0
|
||||
- Update dependency co.touchlab:kermit-crashlytics to v3.9.0
|
||||
- Update dependency com.google.android.gms:play-services-oss-licenses to v17.1.0
|
||||
- Update dependency com.google.gms:google-services to v4.4.2
|
||||
- Add crashlytics integration for Kermit
|
||||
- Replace ProgressBar with ProgressIndicator from Material3 to improve UI consistency
|
||||
- Rewrite version checker
|
||||
- Rewrite Migrator
|
||||
|
|
|
@ -39,14 +39,9 @@ val buildTime: String by lazy {
|
|||
val supportedAbis = setOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
|
||||
|
||||
android {
|
||||
compileSdk = AndroidConfig.compileSdk
|
||||
ndkVersion = AndroidConfig.ndk
|
||||
|
||||
defaultConfig {
|
||||
minSdk = AndroidConfig.minSdk
|
||||
targetSdk = AndroidConfig.targetSdk
|
||||
applicationId = "eu.kanade.tachiyomi"
|
||||
versionCode = 137
|
||||
versionCode = 138
|
||||
versionName = "1.8.4"
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
multiDexEnabled = true
|
||||
|
@ -145,14 +140,6 @@ android {
|
|||
kotlinCompilerExtensionVersion = compose.versions.compose.compiler.get()
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
isCoreLibraryDesugaringEnabled = true
|
||||
}
|
||||
kotlinOptions {
|
||||
jvmTarget = "17"
|
||||
}
|
||||
namespace = "eu.kanade.tachiyomi"
|
||||
|
||||
sqldelight {
|
||||
|
@ -167,6 +154,10 @@ android {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation(projects.core)
|
||||
implementation(projects.i18n)
|
||||
implementation(projects.sourceApi)
|
||||
|
||||
// Compose
|
||||
implementation(compose.bundles.compose)
|
||||
debugImplementation(compose.ui.tooling)
|
||||
|
@ -280,8 +271,8 @@ dependencies {
|
|||
|
||||
implementation(kotlin("stdlib", org.jetbrains.kotlin.config.KotlinCompilerVersion.VERSION))
|
||||
|
||||
implementation(kotlinx.coroutines.core)
|
||||
implementation(kotlinx.coroutines.android)
|
||||
implementation(platform(kotlinx.coroutines.bom))
|
||||
implementation(kotlinx.bundles.coroutines)
|
||||
|
||||
// Text distance
|
||||
implementation(libs.java.string.similarity)
|
||||
|
@ -296,8 +287,6 @@ dependencies {
|
|||
|
||||
implementation(kotlinx.immutable)
|
||||
|
||||
"coreLibraryDesugaring"(libs.desugar)
|
||||
|
||||
// Tests
|
||||
testImplementation(libs.bundles.test)
|
||||
testRuntimeOnly(libs.bundles.test.runtime)
|
||||
|
@ -306,13 +295,6 @@ dependencies {
|
|||
}
|
||||
|
||||
tasks {
|
||||
withType<Test> {
|
||||
useJUnitPlatform()
|
||||
testLogging {
|
||||
events("passed", "skipped", "failed")
|
||||
}
|
||||
}
|
||||
|
||||
// See https://kotlinlang.org/docs/reference/experimental.html#experimental-status-of-experimental-api(-markers)
|
||||
withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
|
||||
kotlinOptions.freeCompilerArgs += listOf(
|
||||
|
|
24
app/proguard-rules.pro
vendored
24
app/proguard-rules.pro
vendored
|
@ -1,19 +1,19 @@
|
|||
-dontobfuscate
|
||||
|
||||
-keep class eu.kanade.tachiyomi.source.** { public protected *; } # Avoid access modification
|
||||
-keep,allowoptimization class eu.kanade.** { public protected *; }
|
||||
-keep,allowoptimization class tachiyomi.** { public protected *; }
|
||||
-keep,allowoptimization class dev.yokai.** { public protected *; }
|
||||
-keep,allowoptimization class eu.kanade.**
|
||||
-keep,allowoptimization class tachiyomi.**
|
||||
-keep,allowoptimization class yokai.**
|
||||
|
||||
# Keep common dependencies used in extensions
|
||||
-keep class androidx.preference.** { public protected *; }
|
||||
-keep class kotlin.** { public protected *; }
|
||||
-keep,allowoptimization class androidx.preference.** { public protected *; }
|
||||
-keep,allowoptimization class kotlin.** { public protected *; }
|
||||
-keep,allowoptimization class kotlinx.coroutines.** { public protected *; }
|
||||
-keep class kotlinx.serialization.** { public protected *; }
|
||||
-keep class okhttp3.** { public protected *; }
|
||||
-keep,allowoptimization class kotlinx.serialization.** { public protected *; }
|
||||
-keep,allowoptimization class kotlin.time.** { public protected *; }
|
||||
-keep,allowoptimization class okhttp3.** { public protected *; }
|
||||
-keep,allowoptimization class okio.** { public protected *; }
|
||||
-keep,allowoptimization class rx.** { public protected *; }
|
||||
-keep class org.jsoup.** { public protected *; }
|
||||
-keep,allowoptimization class org.jsoup.** { public protected *; }
|
||||
-keep,allowoptimization class com.google.gson.** { public protected *; }
|
||||
-keep,allowoptimization class app.cash.quickjs.** { public protected *; }
|
||||
-keep,allowoptimization class uy.kohesive.injekt.** { public protected *; }
|
||||
|
@ -73,11 +73,11 @@
|
|||
kotlinx.serialization.KSerializer serializer(...);
|
||||
}
|
||||
|
||||
-keep,includedescriptorclasses class dev.yokai.**$$serializer { *; }
|
||||
-keepclassmembers class dev.yokai.** {
|
||||
-keep,includedescriptorclasses class yokai.**$$serializer { *; }
|
||||
-keepclassmembers class yokai.** {
|
||||
*** Companion;
|
||||
}
|
||||
-keepclasseswithmembers class dev.yokai.** {
|
||||
-keepclasseswithmembers class yokai.** {
|
||||
kotlinx.serialization.KSerializer serializer(...);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,56 +0,0 @@
|
|||
package dev.yokai.core.di
|
||||
|
||||
import dev.yokai.data.chapter.ChapterRepositoryImpl
|
||||
import dev.yokai.domain.extension.repo.ExtensionRepoRepository
|
||||
import dev.yokai.data.extension.repo.ExtensionRepoRepositoryImpl
|
||||
import dev.yokai.data.library.custom.CustomMangaRepositoryImpl
|
||||
import dev.yokai.data.manga.MangaRepositoryImpl
|
||||
import dev.yokai.domain.chapter.ChapterRepository
|
||||
import dev.yokai.domain.chapter.interactor.GetAvailableScanlators
|
||||
import dev.yokai.domain.chapter.interactor.GetChapters
|
||||
import dev.yokai.domain.extension.interactor.TrustExtension
|
||||
import dev.yokai.domain.extension.repo.interactor.CreateExtensionRepo
|
||||
import dev.yokai.domain.extension.repo.interactor.DeleteExtensionRepo
|
||||
import dev.yokai.domain.extension.repo.interactor.GetExtensionRepo
|
||||
import dev.yokai.domain.extension.repo.interactor.GetExtensionRepoCount
|
||||
import dev.yokai.domain.extension.repo.interactor.ReplaceExtensionRepo
|
||||
import dev.yokai.domain.extension.repo.interactor.UpdateExtensionRepo
|
||||
import dev.yokai.domain.library.custom.CustomMangaRepository
|
||||
import dev.yokai.domain.library.custom.interactor.CreateCustomManga
|
||||
import dev.yokai.domain.library.custom.interactor.DeleteCustomManga
|
||||
import dev.yokai.domain.library.custom.interactor.GetCustomManga
|
||||
import dev.yokai.domain.library.custom.interactor.RelinkCustomManga
|
||||
import dev.yokai.domain.manga.MangaRepository
|
||||
import dev.yokai.domain.manga.interactor.GetLibraryManga
|
||||
import uy.kohesive.injekt.api.InjektModule
|
||||
import uy.kohesive.injekt.api.InjektRegistrar
|
||||
import uy.kohesive.injekt.api.addFactory
|
||||
import uy.kohesive.injekt.api.addSingletonFactory
|
||||
import uy.kohesive.injekt.api.get
|
||||
|
||||
class DomainModule : InjektModule {
|
||||
override fun InjektRegistrar.registerInjectables() {
|
||||
addFactory { TrustExtension(get(), get()) }
|
||||
|
||||
addSingletonFactory<ExtensionRepoRepository> { ExtensionRepoRepositoryImpl(get()) }
|
||||
addFactory { CreateExtensionRepo(get()) }
|
||||
addFactory { DeleteExtensionRepo(get()) }
|
||||
addFactory { GetExtensionRepo(get()) }
|
||||
addFactory { GetExtensionRepoCount(get()) }
|
||||
addFactory { ReplaceExtensionRepo(get()) }
|
||||
addFactory { UpdateExtensionRepo(get(), get()) }
|
||||
|
||||
addSingletonFactory<CustomMangaRepository> { CustomMangaRepositoryImpl(get()) }
|
||||
addFactory { CreateCustomManga(get()) }
|
||||
addFactory { DeleteCustomManga(get()) }
|
||||
addFactory { GetCustomManga(get()) }
|
||||
addFactory { RelinkCustomManga(get()) }
|
||||
|
||||
addSingletonFactory<MangaRepository> { MangaRepositoryImpl(get()) }
|
||||
addFactory { GetLibraryManga(get()) }
|
||||
|
||||
addSingletonFactory<ChapterRepository> { ChapterRepositoryImpl(get()) }
|
||||
addFactory { GetAvailableScanlators(get()) }
|
||||
addFactory { GetChapters(get()) }
|
||||
}
|
||||
}
|
|
@ -34,13 +34,6 @@ import coil3.request.crossfade
|
|||
import coil3.util.DebugLogger
|
||||
import com.google.firebase.crashlytics.ktx.crashlytics
|
||||
import com.google.firebase.ktx.Firebase
|
||||
import dev.yokai.core.CrashlyticsLogWriter
|
||||
import dev.yokai.core.di.AppModule
|
||||
import dev.yokai.core.di.DomainModule
|
||||
import dev.yokai.core.di.PreferenceModule
|
||||
import dev.yokai.core.migration.Migrator
|
||||
import dev.yokai.core.migration.migrations.migrations
|
||||
import dev.yokai.domain.base.BasePreferences
|
||||
import eu.kanade.tachiyomi.appwidget.TachiyomiWidgetManager
|
||||
import eu.kanade.tachiyomi.core.preference.Preference
|
||||
import eu.kanade.tachiyomi.core.preference.PreferenceStore
|
||||
|
@ -67,6 +60,13 @@ import org.conscrypt.Conscrypt
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.core.CrashlyticsLogWriter
|
||||
import yokai.core.di.AppModule
|
||||
import yokai.core.di.DomainModule
|
||||
import yokai.core.di.PreferenceModule
|
||||
import yokai.core.migration.Migrator
|
||||
import yokai.core.migration.migrations.migrations
|
||||
import yokai.domain.base.BasePreferences
|
||||
import java.security.Security
|
||||
|
||||
open class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factory {
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
package eu.kanade.tachiyomi.core.storage.preference
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.State
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.remember
|
||||
import eu.kanade.tachiyomi.core.preference.Preference
|
||||
|
||||
@Composable
|
||||
fun <T> Preference<T>.collectAsState(): State<T> {
|
||||
val flow = remember(this) { changes() }
|
||||
return flow.collectAsState(initial = get())
|
||||
}
|
|
@ -4,7 +4,6 @@ import android.content.Context
|
|||
import android.net.Uri
|
||||
import co.touchlab.kermit.Logger
|
||||
import com.hippo.unifile.UniFile
|
||||
import dev.yokai.domain.storage.StorageManager
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.backup.BackupFileValidator
|
||||
import eu.kanade.tachiyomi.data.backup.create.creators.CategoriesBackupCreator
|
||||
|
@ -22,6 +21,7 @@ import okio.sink
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.storage.StorageManager
|
||||
import java.io.FileOutputStream
|
||||
|
||||
class BackupCreator(
|
||||
|
|
|
@ -14,7 +14,6 @@ import androidx.work.WorkerParameters
|
|||
import androidx.work.workDataOf
|
||||
import co.touchlab.kermit.Logger
|
||||
import com.hippo.unifile.UniFile
|
||||
import dev.yokai.domain.storage.StorageManager
|
||||
import eu.kanade.tachiyomi.data.backup.BackupNotifier
|
||||
import eu.kanade.tachiyomi.data.notification.Notifications
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
|
@ -24,6 +23,7 @@ import eu.kanade.tachiyomi.util.system.notificationManager
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.storage.StorageManager
|
||||
import java.util.concurrent.*
|
||||
|
||||
class BackupCreatorJob(private val context: Context, workerParams: WorkerParameters) :
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
package eu.kanade.tachiyomi.data.backup.models
|
||||
|
||||
import dev.yokai.core.metadata.ComicInfo
|
||||
import dev.yokai.core.metadata.ComicInfoPublishingStatus
|
||||
import dev.yokai.domain.library.custom.model.CustomMangaInfo
|
||||
import eu.kanade.tachiyomi.data.database.models.ChapterImpl
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.data.database.models.MangaImpl
|
||||
|
@ -12,6 +9,7 @@ import eu.kanade.tachiyomi.source.model.UpdateStrategy
|
|||
import eu.kanade.tachiyomi.util.chapter.ChapterUtil
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.protobuf.ProtoNumber
|
||||
import yokai.domain.library.custom.model.CustomMangaInfo
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
@Serializable
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package eu.kanade.tachiyomi.data.backup.restore.restorers
|
||||
|
||||
import dev.yokai.domain.library.custom.model.CustomMangaInfo
|
||||
import eu.kanade.tachiyomi.data.backup.models.BackupCategory
|
||||
import eu.kanade.tachiyomi.data.backup.models.BackupHistory
|
||||
import eu.kanade.tachiyomi.data.backup.models.BackupManga
|
||||
|
@ -18,6 +17,7 @@ import eu.kanade.tachiyomi.util.manga.MangaUtil
|
|||
import eu.kanade.tachiyomi.util.system.launchNow
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import yokai.domain.library.custom.model.CustomMangaInfo
|
||||
import kotlin.math.max
|
||||
|
||||
class MangaBackupRestorer(
|
||||
|
|
|
@ -1,5 +1,18 @@
|
|||
package eu.kanade.tachiyomi.data.database.models
|
||||
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
|
||||
fun SChapter.toChapter(): ChapterImpl {
|
||||
return ChapterImpl().apply {
|
||||
name = this@SChapter.name
|
||||
url = this@SChapter.url
|
||||
date_upload = this@SChapter.date_upload
|
||||
chapter_number = this@SChapter.chapter_number
|
||||
scanlator = this@SChapter.scanlator
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class ChapterImpl : Chapter {
|
||||
|
||||
override var id: Long? = null
|
||||
|
|
|
@ -12,7 +12,7 @@ import eu.kanade.tachiyomi.ui.reader.settings.ReadingModeType
|
|||
import eu.kanade.tachiyomi.util.manga.MangaCoverMetadata
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import java.util.Locale
|
||||
import java.util.*
|
||||
|
||||
interface Manga : SManga {
|
||||
|
||||
|
@ -34,6 +34,55 @@ interface Manga : SManga {
|
|||
|
||||
var filtered_scanlators: String?
|
||||
|
||||
val originalTitle: String
|
||||
get() = (this as? MangaImpl)?.ogTitle ?: title
|
||||
val originalAuthor: String?
|
||||
get() = (this as? MangaImpl)?.ogAuthor ?: author
|
||||
val originalArtist: String?
|
||||
get() = (this as? MangaImpl)?.ogArtist ?: artist
|
||||
val originalDescription: String?
|
||||
get() = (this as? MangaImpl)?.ogDesc ?: description
|
||||
val originalGenre: String?
|
||||
get() = (this as? MangaImpl)?.ogGenre ?: genre
|
||||
val originalStatus: Int
|
||||
get() = (this as? MangaImpl)?.ogStatus ?: status
|
||||
|
||||
val hasSameAuthorAndArtist: Boolean
|
||||
get() = author == artist || artist.isNullOrBlank() ||
|
||||
author?.contains(artist ?: "", true) == true
|
||||
|
||||
fun copyFrom(other: SManga) {
|
||||
if (other is Manga) {
|
||||
if (other.author != null) {
|
||||
author = other.originalAuthor
|
||||
}
|
||||
|
||||
if (other.artist != null) {
|
||||
artist = other.originalArtist
|
||||
}
|
||||
|
||||
if (other.description != null) {
|
||||
description = other.originalDescription
|
||||
}
|
||||
|
||||
if (other.genre != null) {
|
||||
genre = other.originalGenre
|
||||
}
|
||||
|
||||
if (other.thumbnail_url != null) {
|
||||
thumbnail_url = other.thumbnail_url
|
||||
}
|
||||
|
||||
status = other.originalStatus
|
||||
}
|
||||
|
||||
update_strategy = other.update_strategy
|
||||
|
||||
if (!initialized) {
|
||||
initialized = other.initialized
|
||||
}
|
||||
}
|
||||
|
||||
fun isBlank() = id == Long.MIN_VALUE
|
||||
fun isHidden() = status == -1
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.data.download
|
|||
|
||||
import android.content.Context
|
||||
import com.hippo.unifile.UniFile
|
||||
import dev.yokai.domain.storage.StorageManager
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
|
@ -16,7 +15,8 @@ import kotlinx.coroutines.flow.onEach
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import java.util.concurrent.TimeUnit
|
||||
import yokai.domain.storage.StorageManager
|
||||
import java.util.concurrent.*
|
||||
|
||||
/**
|
||||
* Cache where we dump the downloads directory from the filesystem. This class is needed because
|
||||
|
|
|
@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.data.download
|
|||
import android.content.Context
|
||||
import co.touchlab.kermit.Logger
|
||||
import com.hippo.unifile.UniFile
|
||||
import dev.yokai.domain.download.DownloadPreferences
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
|
@ -18,6 +17,7 @@ import kotlinx.coroutines.Dispatchers
|
|||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.download.DownloadPreferences
|
||||
|
||||
/**
|
||||
* This class is used to manage chapter downloads in the application. It must be instantiated once
|
||||
|
|
|
@ -2,8 +2,6 @@ package eu.kanade.tachiyomi.data.download
|
|||
|
||||
import android.content.Context
|
||||
import com.hippo.unifile.UniFile
|
||||
import dev.yokai.domain.download.DownloadPreferences
|
||||
import dev.yokai.domain.storage.StorageManager
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
|
@ -17,6 +15,8 @@ import kotlinx.coroutines.SupervisorJob
|
|||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.download.DownloadPreferences
|
||||
import yokai.domain.storage.StorageManager
|
||||
|
||||
/**
|
||||
* This class is used to provide the directories where the downloads should be saved.
|
||||
|
|
|
@ -6,10 +6,6 @@ import android.os.Looper
|
|||
import co.touchlab.kermit.Logger
|
||||
import com.hippo.unifile.UniFile
|
||||
import com.jakewharton.rxrelay.PublishRelay
|
||||
import dev.yokai.core.metadata.COMIC_INFO_FILE
|
||||
import dev.yokai.core.metadata.ComicInfo
|
||||
import dev.yokai.core.metadata.getComicInfo
|
||||
import dev.yokai.domain.download.DownloadPreferences
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.cache.ChapterCache
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
|
@ -52,11 +48,13 @@ import rx.Subscription
|
|||
import rx.android.schedulers.AndroidSchedulers
|
||||
import rx.schedulers.Schedulers
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.core.metadata.COMIC_INFO_FILE
|
||||
import yokai.core.metadata.ComicInfo
|
||||
import yokai.core.metadata.getComicInfo
|
||||
import yokai.domain.download.DownloadPreferences
|
||||
import java.io.BufferedOutputStream
|
||||
import java.io.File
|
||||
import java.util.zip.CRC32
|
||||
import java.util.zip.ZipEntry
|
||||
import java.util.zip.ZipOutputStream
|
||||
import java.util.zip.*
|
||||
|
||||
/**
|
||||
* This class is the one in charge of downloading chapters.
|
||||
|
|
|
@ -2,16 +2,6 @@ package eu.kanade.tachiyomi.data.library
|
|||
|
||||
import android.content.Context
|
||||
import com.hippo.unifile.UniFile
|
||||
import dev.yokai.core.metadata.COMIC_INFO_EDITS_FILE
|
||||
import dev.yokai.core.metadata.ComicInfo
|
||||
import dev.yokai.core.metadata.ComicInfoPublishingStatus
|
||||
import dev.yokai.core.metadata.copyFromComicInfo
|
||||
import dev.yokai.domain.library.custom.interactor.CreateCustomManga
|
||||
import dev.yokai.domain.library.custom.interactor.DeleteCustomManga
|
||||
import dev.yokai.domain.library.custom.interactor.GetCustomManga
|
||||
import dev.yokai.domain.library.custom.interactor.RelinkCustomManga
|
||||
import dev.yokai.domain.library.custom.model.CustomMangaInfo
|
||||
import dev.yokai.domain.library.custom.model.CustomMangaInfo.Companion.getMangaInfo
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.data.database.models.MangaImpl
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
@ -26,6 +16,16 @@ import nl.adaptivity.xmlutil.serialization.XML
|
|||
import nl.adaptivity.xmlutil.serialization.XmlSerialName
|
||||
import nl.adaptivity.xmlutil.serialization.XmlValue
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.core.metadata.COMIC_INFO_EDITS_FILE
|
||||
import yokai.core.metadata.ComicInfo
|
||||
import yokai.core.metadata.ComicInfoPublishingStatus
|
||||
import yokai.core.metadata.copyFromComicInfo
|
||||
import yokai.domain.library.custom.interactor.CreateCustomManga
|
||||
import yokai.domain.library.custom.interactor.DeleteCustomManga
|
||||
import yokai.domain.library.custom.interactor.GetCustomManga
|
||||
import yokai.domain.library.custom.interactor.RelinkCustomManga
|
||||
import yokai.domain.library.custom.model.CustomMangaInfo
|
||||
import yokai.domain.library.custom.model.CustomMangaInfo.Companion.getMangaInfo
|
||||
import java.nio.charset.StandardCharsets
|
||||
|
||||
class CustomMangaManager(val context: Context) {
|
||||
|
|
|
@ -20,7 +20,6 @@ import co.touchlab.kermit.Logger
|
|||
import coil3.imageLoader
|
||||
import coil3.request.CachePolicy
|
||||
import coil3.request.ImageRequest
|
||||
import dev.yokai.domain.manga.interactor.GetLibraryManga
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.cache.CoverCache
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
|
@ -75,12 +74,12 @@ import kotlinx.coroutines.sync.Semaphore
|
|||
import kotlinx.coroutines.sync.withPermit
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import yokai.domain.manga.interactor.GetLibraryManga
|
||||
import java.io.File
|
||||
import java.lang.ref.WeakReference
|
||||
import java.util.*
|
||||
import java.util.concurrent.CancellationException
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
import java.util.concurrent.*
|
||||
import java.util.concurrent.atomic.*
|
||||
|
||||
class LibraryUpdateJob(private val context: Context, workerParams: WorkerParameters) :
|
||||
CoroutineWorker(context, workerParams) {
|
||||
|
|
|
@ -11,7 +11,6 @@ import eu.kanade.tachiyomi.core.preference.getEnum
|
|||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.data.updater.AppDownloadInstallJob
|
||||
import eu.kanade.tachiyomi.extension.model.InstalledExtensionsOrder
|
||||
import eu.kanade.tachiyomi.network.NetworkHelper
|
||||
import eu.kanade.tachiyomi.ui.library.LibraryItem
|
||||
import eu.kanade.tachiyomi.ui.library.filter.FilterBottomSheet
|
||||
import eu.kanade.tachiyomi.ui.reader.settings.OrientationType
|
||||
|
@ -401,10 +400,6 @@ class PreferencesHelper(val context: Context, val preferenceStore: PreferenceSto
|
|||
|
||||
fun useLargeToolbar() = preferenceStore.getBoolean("use_large_toolbar", true)
|
||||
|
||||
fun dohProvider() = prefs.getInt(Keys.dohProvider, -1)
|
||||
|
||||
fun defaultUserAgent() = preferenceStore.getString("default_user_agent", NetworkHelper.DEFAULT_USER_AGENT)
|
||||
|
||||
fun showSeriesInShortcuts() = prefs.getBoolean(Keys.showSeriesInShortcuts, true)
|
||||
fun showSourcesInShortcuts() = prefs.getBoolean(Keys.showSourcesInShortcuts, true)
|
||||
fun openChapterInShortcuts() = prefs.getBoolean(Keys.openChapterInShortcuts, true)
|
||||
|
|
|
@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.data.updater
|
|||
import android.content.Context
|
||||
import android.os.Build
|
||||
import androidx.annotation.VisibleForTesting
|
||||
import dev.yokai.domain.base.models.Version
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
|
@ -15,6 +14,7 @@ import eu.kanade.tachiyomi.util.system.withIOContext
|
|||
import kotlinx.serialization.json.Json
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import yokai.domain.base.models.Version
|
||||
import java.util.*
|
||||
import java.util.concurrent.*
|
||||
|
||||
|
|
|
@ -5,8 +5,6 @@ import android.graphics.drawable.Drawable
|
|||
import android.os.Build
|
||||
import android.os.Parcelable
|
||||
import co.touchlab.kermit.Logger
|
||||
import dev.yokai.domain.base.BasePreferences
|
||||
import dev.yokai.domain.extension.interactor.TrustExtension
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.extension.api.ExtensionApi
|
||||
import eu.kanade.tachiyomi.extension.model.Extension
|
||||
|
@ -17,7 +15,6 @@ import eu.kanade.tachiyomi.extension.util.ExtensionInstaller
|
|||
import eu.kanade.tachiyomi.extension.util.ExtensionLoader
|
||||
import eu.kanade.tachiyomi.source.Source
|
||||
import eu.kanade.tachiyomi.ui.extension.ExtensionIntallInfo
|
||||
import eu.kanade.tachiyomi.util.system.e
|
||||
import eu.kanade.tachiyomi.util.system.launchNow
|
||||
import eu.kanade.tachiyomi.util.system.withIOContext
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
@ -28,6 +25,8 @@ import kotlinx.coroutines.flow.asStateFlow
|
|||
import kotlinx.parcelize.Parcelize
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import yokai.domain.base.BasePreferences
|
||||
import yokai.domain.extension.interactor.TrustExtension
|
||||
import java.util.*
|
||||
import java.util.concurrent.*
|
||||
|
||||
|
@ -155,7 +154,7 @@ class ExtensionManager(
|
|||
val extensions: List<Extension.Available> = try {
|
||||
api.findExtensions()
|
||||
} catch (e: Exception) {
|
||||
Logger.e(e)
|
||||
Logger.e(e) { "Failed to find available extensions" }
|
||||
emptyList()
|
||||
}
|
||||
|
||||
|
|
|
@ -18,8 +18,6 @@ import androidx.work.OneTimeWorkRequestBuilder
|
|||
import androidx.work.PeriodicWorkRequestBuilder
|
||||
import androidx.work.WorkManager
|
||||
import androidx.work.WorkerParameters
|
||||
import dev.yokai.domain.base.BasePreferences
|
||||
import dev.yokai.domain.base.BasePreferences.ExtensionInstaller
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
|
||||
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
||||
|
@ -39,6 +37,8 @@ import rikka.shizuku.Shizuku
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.base.BasePreferences
|
||||
import yokai.domain.base.BasePreferences.ExtensionInstaller
|
||||
import java.util.concurrent.*
|
||||
|
||||
class ExtensionUpdateJob(private val context: Context, workerParams: WorkerParameters) :
|
||||
|
|
|
@ -2,9 +2,6 @@ package eu.kanade.tachiyomi.extension.api
|
|||
|
||||
import android.content.Context
|
||||
import co.touchlab.kermit.Logger
|
||||
import dev.yokai.domain.extension.repo.interactor.GetExtensionRepo
|
||||
import dev.yokai.domain.extension.repo.interactor.UpdateExtensionRepo
|
||||
import dev.yokai.domain.extension.repo.model.ExtensionRepo
|
||||
import eu.kanade.tachiyomi.extension.ExtensionManager
|
||||
import eu.kanade.tachiyomi.extension.model.Extension
|
||||
import eu.kanade.tachiyomi.extension.model.LoadResult
|
||||
|
@ -21,6 +18,9 @@ import kotlinx.serialization.json.Json
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.extension.repo.interactor.GetExtensionRepo
|
||||
import yokai.domain.extension.repo.interactor.UpdateExtensionRepo
|
||||
import yokai.domain.extension.repo.model.ExtensionRepo
|
||||
|
||||
internal class ExtensionApi {
|
||||
|
||||
|
|
|
@ -12,7 +12,6 @@ import android.os.Environment
|
|||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.net.toUri
|
||||
import co.touchlab.kermit.Logger
|
||||
import dev.yokai.domain.base.BasePreferences
|
||||
import eu.kanade.tachiyomi.extension.ExtensionInstallerJob
|
||||
import eu.kanade.tachiyomi.extension.ExtensionManager
|
||||
import eu.kanade.tachiyomi.extension.ShizukuInstaller
|
||||
|
@ -47,6 +46,7 @@ import kotlinx.coroutines.launch
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.base.BasePreferences
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
|
|
|
@ -9,7 +9,6 @@ import android.os.Build
|
|||
import androidx.core.content.pm.PackageInfoCompat
|
||||
import co.touchlab.kermit.Logger
|
||||
import dalvik.system.PathClassLoader
|
||||
import dev.yokai.domain.extension.interactor.TrustExtension
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.extension.model.Extension
|
||||
|
@ -23,6 +22,7 @@ import kotlinx.coroutines.async
|
|||
import kotlinx.coroutines.awaitAll
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.extension.interactor.TrustExtension
|
||||
import java.io.File
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.attribute.BasicFileAttributes
|
||||
|
|
|
@ -5,11 +5,6 @@ import androidx.core.net.toFile
|
|||
import co.touchlab.kermit.Logger
|
||||
import com.github.junrar.Archive
|
||||
import com.hippo.unifile.UniFile
|
||||
import dev.yokai.core.metadata.COMIC_INFO_FILE
|
||||
import dev.yokai.core.metadata.ComicInfo
|
||||
import dev.yokai.core.metadata.copyFromComicInfo
|
||||
import dev.yokai.core.metadata.toComicInfo
|
||||
import dev.yokai.domain.storage.StorageManager
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.source.model.Filter
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
|
@ -37,10 +32,15 @@ import nl.adaptivity.xmlutil.serialization.XML
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.core.metadata.COMIC_INFO_FILE
|
||||
import yokai.core.metadata.ComicInfo
|
||||
import yokai.core.metadata.copyFromComicInfo
|
||||
import yokai.core.metadata.toComicInfo
|
||||
import yokai.domain.storage.StorageManager
|
||||
import java.io.FileInputStream
|
||||
import java.io.InputStream
|
||||
import java.nio.charset.StandardCharsets
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.concurrent.*
|
||||
|
||||
class LocalSource(private val context: Context) : CatalogueSource, UnmeteredSource {
|
||||
companion object {
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
package eu.kanade.tachiyomi.source
|
||||
|
||||
import android.graphics.drawable.Drawable
|
||||
import eu.kanade.tachiyomi.extension.ExtensionManager
|
||||
import eu.kanade.tachiyomi.extension.model.Extension
|
||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
|
||||
fun Source.includeLangInName(enabledLanguages: Set<String>, extensionManager: ExtensionManager? = null): Boolean {
|
||||
val httpSource = this as? HttpSource ?: return true
|
||||
val extManager = extensionManager ?: Injekt.get()
|
||||
val allExt = httpSource.getExtension(extManager)?.lang == "all"
|
||||
val onlyAll = httpSource.extOnlyHasAllLanguage(extManager)
|
||||
val isMultiLingual = enabledLanguages.filterNot { it == "all" }.size > 1
|
||||
return (isMultiLingual && allExt) || (lang == "all" && !onlyAll)
|
||||
}
|
||||
|
||||
fun Source.nameBasedOnEnabledLanguages(enabledLanguages: Set<String>, extensionManager: ExtensionManager? = null): String {
|
||||
return if (includeLangInName(enabledLanguages, extensionManager)) toString() else name
|
||||
}
|
||||
|
||||
fun Source.icon(): Drawable? = Injekt.get<ExtensionManager>().getAppIconForSource(this)
|
||||
|
||||
fun HttpSource.getExtension(extensionManager: ExtensionManager? = null): Extension.Installed? =
|
||||
(extensionManager ?: Injekt.get()).installedExtensionsFlow.value.find { it.sources.contains(this) }
|
||||
|
||||
fun HttpSource.extOnlyHasAllLanguage(extensionManager: ExtensionManager? = null) =
|
||||
getExtension(extensionManager)?.sources?.all { it.lang == "all" } ?: true
|
|
@ -1,100 +0,0 @@
|
|||
package eu.kanade.tachiyomi.source.model
|
||||
|
||||
import eu.kanade.tachiyomi.data.database.models.MangaImpl
|
||||
import java.io.Serializable
|
||||
|
||||
interface SManga : Serializable {
|
||||
|
||||
var url: String
|
||||
|
||||
var title: String
|
||||
|
||||
var artist: String?
|
||||
|
||||
var author: String?
|
||||
|
||||
var description: String?
|
||||
|
||||
var genre: String?
|
||||
|
||||
var status: Int
|
||||
|
||||
var thumbnail_url: String?
|
||||
|
||||
var update_strategy: UpdateStrategy
|
||||
|
||||
var initialized: Boolean
|
||||
|
||||
val originalTitle: String
|
||||
get() = (this as? MangaImpl)?.ogTitle ?: title
|
||||
val originalAuthor: String?
|
||||
get() = (this as? MangaImpl)?.ogAuthor ?: author
|
||||
val originalArtist: String?
|
||||
get() = (this as? MangaImpl)?.ogArtist ?: artist
|
||||
val originalDescription: String?
|
||||
get() = (this as? MangaImpl)?.ogDesc ?: description
|
||||
val originalGenre: String?
|
||||
get() = (this as? MangaImpl)?.ogGenre ?: genre
|
||||
val originalStatus: Int
|
||||
get() = (this as? MangaImpl)?.ogStatus ?: status
|
||||
|
||||
val hasSameAuthorAndArtist: Boolean
|
||||
get() = author == artist || artist.isNullOrBlank() ||
|
||||
author?.contains(artist ?: "", true) == true
|
||||
|
||||
fun copyFrom(other: SManga) {
|
||||
if (other.author != null) {
|
||||
author = other.originalAuthor
|
||||
}
|
||||
|
||||
if (other.artist != null) {
|
||||
artist = other.originalArtist
|
||||
}
|
||||
|
||||
if (other.description != null) {
|
||||
description = other.originalDescription
|
||||
}
|
||||
|
||||
if (other.genre != null) {
|
||||
genre = other.originalGenre
|
||||
}
|
||||
|
||||
if (other.thumbnail_url != null) {
|
||||
thumbnail_url = other.thumbnail_url
|
||||
}
|
||||
|
||||
status = other.originalStatus
|
||||
|
||||
update_strategy = other.update_strategy
|
||||
|
||||
if (!initialized) {
|
||||
initialized = other.initialized
|
||||
}
|
||||
}
|
||||
|
||||
fun copy() = create().also {
|
||||
it.url = url
|
||||
it.title = title
|
||||
it.artist = artist
|
||||
it.author = author
|
||||
it.description = description
|
||||
it.genre = genre
|
||||
it.status = status
|
||||
it.thumbnail_url = thumbnail_url
|
||||
it.initialized = initialized
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val UNKNOWN = 0
|
||||
const val ONGOING = 1
|
||||
const val COMPLETED = 2
|
||||
const val LICENSED = 3
|
||||
const val PUBLISHING_FINISHED = 4
|
||||
const val CANCELLED = 5
|
||||
const val ON_HIATUS = 6
|
||||
|
||||
fun create(): SManga {
|
||||
return MangaImpl()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package eu.kanade.tachiyomi.source.models
|
||||
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
|
||||
val SManga.originalTitle: String
|
||||
get() = if (this is Manga) this.originalTitle else title
|
|
@ -4,6 +4,7 @@ import android.net.Uri
|
|||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.data.database.models.toChapter
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.online.DelegatedHttpSource
|
||||
|
@ -13,7 +14,7 @@ import kotlinx.coroutines.async
|
|||
import kotlinx.coroutines.withContext
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import java.util.Locale
|
||||
import java.util.*
|
||||
|
||||
class Cubari : DelegatedHttpSource() {
|
||||
override val domainName: String = "cubari"
|
||||
|
|
|
@ -4,6 +4,7 @@ import android.net.Uri
|
|||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.data.database.models.toChapter
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.await
|
||||
|
@ -19,7 +20,7 @@ import okhttp3.CacheControl
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import java.util.Locale
|
||||
import java.util.*
|
||||
|
||||
class MangaDex : DelegatedHttpSource() {
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import eu.kanade.tachiyomi.R
|
|||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.data.database.models.MangaImpl
|
||||
import eu.kanade.tachiyomi.data.database.models.toChapter
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
|
|
|
@ -4,6 +4,7 @@ import android.net.Uri
|
|||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.data.database.models.toChapter
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.await
|
||||
|
|
|
@ -12,7 +12,6 @@ import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
|||
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
|
||||
import androidx.interpolator.view.animation.LinearOutSlowInInterpolator
|
||||
import androidx.viewbinding.ViewBinding
|
||||
import dev.yokai.domain.SplashState
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.ui.main.SearchActivity
|
||||
|
@ -22,6 +21,7 @@ import eu.kanade.tachiyomi.util.system.getThemeWithExtras
|
|||
import eu.kanade.tachiyomi.util.system.setLocaleByAppCompat
|
||||
import eu.kanade.tachiyomi.util.system.setThemeByPref
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.SplashState
|
||||
|
||||
abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ import android.view.ViewGroup
|
|||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
import androidx.compose.ui.platform.ViewCompositionStrategy
|
||||
import dev.yokai.presentation.theme.YokaiTheme
|
||||
import yokai.presentation.theme.YokaiTheme
|
||||
|
||||
abstract class BaseComposeController(bundle: Bundle? = null) :
|
||||
BaseController(bundle) {
|
||||
|
|
|
@ -17,9 +17,6 @@ import androidx.compose.ui.Modifier
|
|||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import dev.yokai.presentation.onboarding.InfoScreen
|
||||
import dev.yokai.presentation.theme.Size
|
||||
import dev.yokai.presentation.theme.YokaiTheme
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.ui.main.MainActivity
|
||||
|
@ -27,6 +24,9 @@ import eu.kanade.tachiyomi.util.CrashLogUtil
|
|||
import eu.kanade.tachiyomi.util.system.setThemeByPref
|
||||
import kotlinx.coroutines.launch
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.presentation.onboarding.InfoScreen
|
||||
import yokai.presentation.theme.Size
|
||||
import yokai.presentation.theme.YokaiTheme
|
||||
|
||||
class CrashActivity : AppCompatActivity() {
|
||||
internal val preferences: PreferencesHelper by injectLazy()
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
package eu.kanade.tachiyomi.ui.extension
|
||||
|
||||
import android.widget.TextView
|
||||
import dev.yokai.domain.base.BasePreferences
|
||||
import dev.yokai.domain.base.BasePreferences.ExtensionInstaller
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.davidea.flexibleadapter.items.IFlexible
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.ui.extension.ExtensionAdapter.OnButtonClickListener
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.base.BasePreferences
|
||||
import yokai.domain.base.BasePreferences.ExtensionInstaller
|
||||
|
||||
/**
|
||||
* Adapter that holds the catalogue cards.
|
||||
|
|
|
@ -12,8 +12,6 @@ import androidx.core.view.updatePaddingRelative
|
|||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import dev.yokai.domain.base.BasePreferences
|
||||
import dev.yokai.domain.base.BasePreferences.ExtensionInstaller
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.davidea.flexibleadapter.items.IFlexible
|
||||
import eu.kanade.tachiyomi.R
|
||||
|
@ -46,6 +44,8 @@ import eu.kanade.tachiyomi.util.view.withFadeTransaction
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.base.BasePreferences
|
||||
import yokai.domain.base.BasePreferences.ExtensionInstaller
|
||||
|
||||
class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
|
||||
LinearLayout(context, attrs),
|
||||
|
|
|
@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.ui.library
|
|||
import android.os.Build
|
||||
import android.view.HapticFeedbackConstants
|
||||
import android.view.View
|
||||
import dev.yokai.domain.ui.UiPreferences
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.davidea.flexibleadapter.items.IFlexible
|
||||
import eu.kanade.tachiyomi.R
|
||||
|
@ -18,7 +17,8 @@ import eu.kanade.tachiyomi.util.system.timeSpanFromNow
|
|||
import eu.kanade.tachiyomi.util.system.withDefContext
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import java.util.Locale
|
||||
import yokai.domain.ui.UiPreferences
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* Adapter storing a list of manga in a certain category.
|
||||
|
|
|
@ -51,7 +51,6 @@ import com.bluelinelabs.conductor.ControllerChangeType
|
|||
import com.github.florent37.viewtooltip.ViewTooltip
|
||||
import com.google.android.material.snackbar.BaseTransientBottomBar
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import dev.yokai.domain.ui.UiPreferences
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.davidea.flexibleadapter.SelectableAdapter
|
||||
import eu.davidea.flexibleadapter.items.IFlexible
|
||||
|
@ -130,7 +129,8 @@ import kotlinx.coroutines.flow.onEach
|
|||
import kotlinx.coroutines.launch
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import java.util.Locale
|
||||
import yokai.domain.ui.UiPreferences
|
||||
import java.util.*
|
||||
import kotlin.math.abs
|
||||
import kotlin.math.max
|
||||
import kotlin.math.roundToInt
|
||||
|
|
|
@ -11,7 +11,6 @@ import androidx.core.view.isVisible
|
|||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.recyclerview.widget.StaggeredGridLayoutManager
|
||||
import dev.yokai.domain.ui.UiPreferences
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.davidea.flexibleadapter.items.AbstractSectionableItem
|
||||
import eu.davidea.flexibleadapter.items.IFilterable
|
||||
|
@ -27,6 +26,7 @@ import eu.kanade.tachiyomi.widget.AutofitRecyclerView
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.ui.UiPreferences
|
||||
|
||||
class LibraryItem(
|
||||
val manga: LibraryManga,
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
package eu.kanade.tachiyomi.ui.library
|
||||
|
||||
import dev.yokai.domain.chapter.interactor.GetChapters
|
||||
import dev.yokai.domain.manga.interactor.GetLibraryManga
|
||||
import dev.yokai.util.isLewd
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.core.preference.minusAssign
|
||||
import eu.kanade.tachiyomi.core.preference.plusAssign
|
||||
|
@ -57,8 +54,11 @@ import kotlinx.coroutines.withContext
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.chapter.interactor.GetChapters
|
||||
import yokai.domain.manga.interactor.GetLibraryManga
|
||||
import yokai.util.isLewd
|
||||
import java.util.*
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.concurrent.*
|
||||
import kotlin.math.roundToInt
|
||||
import kotlin.random.Random
|
||||
|
||||
|
|
|
@ -67,10 +67,6 @@ import com.google.android.material.snackbar.Snackbar
|
|||
import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback
|
||||
import com.google.common.primitives.Floats.max
|
||||
import com.google.common.primitives.Ints.max
|
||||
import dev.yokai.core.migration.Migrator
|
||||
import dev.yokai.domain.base.BasePreferences
|
||||
import dev.yokai.presentation.extension.repo.ExtensionRepoController
|
||||
import dev.yokai.presentation.onboarding.OnboardingController
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
|
@ -143,20 +139,10 @@ import kotlinx.coroutines.flow.launchIn
|
|||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlinx.coroutines.withContext
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import kotlin.collections.List
|
||||
import kotlin.collections.MutableList
|
||||
import kotlin.collections.MutableMap
|
||||
import kotlin.collections.distinct
|
||||
import kotlin.collections.filterNotNull
|
||||
import kotlin.collections.firstOrNull
|
||||
import kotlin.collections.forEach
|
||||
import kotlin.collections.forEachIndexed
|
||||
import kotlin.collections.lastOrNull
|
||||
import kotlin.collections.listOf
|
||||
import kotlin.collections.map
|
||||
import kotlin.collections.maxByOrNull
|
||||
import kotlin.collections.orEmpty
|
||||
import kotlin.collections.plus
|
||||
import yokai.core.migration.Migrator
|
||||
import yokai.domain.base.BasePreferences
|
||||
import yokai.presentation.extension.repo.ExtensionRepoController
|
||||
import yokai.presentation.onboarding.OnboardingController
|
||||
import kotlin.collections.set
|
||||
import kotlin.math.abs
|
||||
import kotlin.math.min
|
||||
|
|
|
@ -8,7 +8,6 @@ import androidx.core.view.isVisible
|
|||
import com.bluelinelabs.conductor.Controller
|
||||
import com.bluelinelabs.conductor.RouterTransaction
|
||||
import com.bluelinelabs.conductor.changehandler.SimpleSwapChangeHandler
|
||||
import dev.yokai.domain.chapter.interactor.GetChapters
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
||||
|
@ -30,6 +29,7 @@ import kotlinx.coroutines.runBlocking
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.chapter.interactor.GetChapters
|
||||
|
||||
class SearchActivity : MainActivity() {
|
||||
private val getChapters: GetChapters by injectLazy()
|
||||
|
|
|
@ -10,10 +10,6 @@ import coil3.request.CachePolicy
|
|||
import coil3.request.ImageRequest
|
||||
import coil3.request.SuccessResult
|
||||
import com.hippo.unifile.UniFile
|
||||
import dev.yokai.domain.chapter.interactor.GetAvailableScanlators
|
||||
import dev.yokai.domain.chapter.interactor.GetChapters
|
||||
import dev.yokai.domain.library.custom.model.CustomMangaInfo
|
||||
import dev.yokai.domain.storage.StorageManager
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.cache.CoverCache
|
||||
|
@ -36,6 +32,7 @@ import eu.kanade.tachiyomi.source.LocalSource
|
|||
import eu.kanade.tachiyomi.source.Source
|
||||
import eu.kanade.tachiyomi.source.SourceManager
|
||||
import eu.kanade.tachiyomi.source.SourceNotFoundException
|
||||
import eu.kanade.tachiyomi.source.getExtension
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import eu.kanade.tachiyomi.ui.base.presenter.BaseCoroutinePresenter
|
||||
|
@ -74,11 +71,14 @@ import kotlinx.coroutines.withContext
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.chapter.interactor.GetAvailableScanlators
|
||||
import yokai.domain.chapter.interactor.GetChapters
|
||||
import yokai.domain.library.custom.model.CustomMangaInfo
|
||||
import yokai.domain.storage.StorageManager
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.OutputStream
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
import java.util.*
|
||||
|
||||
class MangaDetailsPresenter(
|
||||
val manga: Manga,
|
||||
|
|
|
@ -26,17 +26,18 @@ import androidx.core.widget.TextViewCompat
|
|||
import androidx.transition.TransitionSet
|
||||
import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat
|
||||
import coil3.request.CachePolicy
|
||||
import coil3.request.placeholder
|
||||
import coil3.request.error
|
||||
import coil3.request.placeholder
|
||||
import com.google.android.material.button.MaterialButton
|
||||
import com.google.android.material.chip.Chip
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.data.coil.loadManga
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.databinding.ChapterHeaderItemBinding
|
||||
import eu.kanade.tachiyomi.databinding.MangaHeaderItemBinding
|
||||
import eu.kanade.tachiyomi.source.SourceManager
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.nameBasedOnEnabledLanguages
|
||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||
import eu.kanade.tachiyomi.util.isLocal
|
||||
import eu.kanade.tachiyomi.util.lang.toNormalized
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package eu.kanade.tachiyomi.ui.migration
|
||||
|
||||
import dev.yokai.domain.ui.UiPreferences
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues
|
||||
|
@ -18,6 +17,7 @@ import kotlinx.coroutines.withContext
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.ui.UiPreferences
|
||||
|
||||
abstract class BaseMigrationPresenter<T : BaseMigrationInterface>(
|
||||
protected val sourceManager: SourceManager = Injekt.get(),
|
||||
|
|
|
@ -4,6 +4,7 @@ import android.graphics.Paint.STRIKE_THRU_TEXT_FLAG
|
|||
import android.view.View
|
||||
import eu.kanade.tachiyomi.databinding.MigrationSourceItemBinding
|
||||
import eu.kanade.tachiyomi.source.icon
|
||||
import eu.kanade.tachiyomi.source.nameBasedOnEnabledLanguages
|
||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
package eu.kanade.tachiyomi.ui.migration.manga.process
|
||||
|
||||
import android.view.MenuItem
|
||||
import dev.yokai.domain.library.custom.model.CustomMangaInfo.Companion.getMangaInfo
|
||||
import dev.yokai.domain.ui.UiPreferences
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.kanade.tachiyomi.data.cache.CoverCache
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
|
@ -24,7 +22,9 @@ import kotlinx.coroutines.withContext
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import java.util.Date
|
||||
import yokai.domain.library.custom.model.CustomMangaInfo.Companion.getMangaInfo
|
||||
import yokai.domain.ui.UiPreferences
|
||||
import java.util.*
|
||||
|
||||
class MigrationProcessAdapter(
|
||||
val controller: MigrationListController,
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package eu.kanade.tachiyomi.ui.more.stats
|
||||
|
||||
import dev.yokai.domain.manga.interactor.GetLibraryManga
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
import eu.kanade.tachiyomi.data.database.models.LibraryManga
|
||||
|
@ -21,6 +20,7 @@ import kotlinx.coroutines.runBlocking
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.manga.interactor.GetLibraryManga
|
||||
|
||||
/**
|
||||
* Presenter of [StatsController].
|
||||
|
|
|
@ -32,6 +32,7 @@ import eu.kanade.tachiyomi.data.database.models.Category
|
|||
import eu.kanade.tachiyomi.databinding.StatsDetailsChartBinding
|
||||
import eu.kanade.tachiyomi.databinding.StatsDetailsControllerBinding
|
||||
import eu.kanade.tachiyomi.source.Source
|
||||
import eu.kanade.tachiyomi.source.nameBasedOnEnabledLanguages
|
||||
import eu.kanade.tachiyomi.ui.base.SmallToolbarInterface
|
||||
import eu.kanade.tachiyomi.ui.base.controller.BaseCoroutineController
|
||||
import eu.kanade.tachiyomi.ui.library.FilteredLibraryController
|
||||
|
@ -59,8 +60,7 @@ import eu.kanade.tachiyomi.util.view.setOnQueryTextChangeListener
|
|||
import eu.kanade.tachiyomi.util.view.withFadeTransaction
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.launch
|
||||
import java.util.Calendar
|
||||
import java.util.Locale
|
||||
import java.util.*
|
||||
|
||||
class StatsDetailsController :
|
||||
BaseCoroutineController<StatsDetailsControllerBinding, StatsDetailsPresenter>(),
|
||||
|
|
|
@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.ui.more.stats.details
|
|||
import android.graphics.drawable.Drawable
|
||||
import android.text.format.DateUtils
|
||||
import androidx.annotation.DrawableRes
|
||||
import dev.yokai.domain.manga.interactor.GetLibraryManga
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
import eu.kanade.tachiyomi.data.database.models.Category
|
||||
|
@ -19,6 +18,7 @@ import eu.kanade.tachiyomi.source.LocalSource
|
|||
import eu.kanade.tachiyomi.source.Source
|
||||
import eu.kanade.tachiyomi.source.SourceManager
|
||||
import eu.kanade.tachiyomi.source.icon
|
||||
import eu.kanade.tachiyomi.source.nameBasedOnEnabledLanguages
|
||||
import eu.kanade.tachiyomi.ui.base.presenter.BaseCoroutinePresenter
|
||||
import eu.kanade.tachiyomi.ui.more.stats.StatsHelper
|
||||
import eu.kanade.tachiyomi.util.isLocal
|
||||
|
@ -32,9 +32,9 @@ import kotlinx.coroutines.runBlocking
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import java.util.Calendar
|
||||
import java.util.Locale
|
||||
import java.util.concurrent.TimeUnit
|
||||
import yokai.domain.manga.interactor.GetLibraryManga
|
||||
import java.util.*
|
||||
import java.util.concurrent.*
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
class StatsDetailsPresenter(
|
||||
|
|
|
@ -75,9 +75,6 @@ import com.google.android.material.snackbar.Snackbar
|
|||
import com.google.android.material.transition.platform.MaterialContainerTransform
|
||||
import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback
|
||||
import com.hippo.unifile.UniFile
|
||||
import dev.yokai.domain.base.BasePreferences
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences.LandscapeCutoutBehaviour
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.core.preference.toggle
|
||||
|
@ -161,6 +158,9 @@ import kotlinx.coroutines.flow.sample
|
|||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.base.BasePreferences
|
||||
import yokai.domain.ui.settings.ReaderPreferences
|
||||
import yokai.domain.ui.settings.ReaderPreferences.LandscapeCutoutBehaviour
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.text.DecimalFormat
|
||||
import java.text.DecimalFormatSymbols
|
||||
|
|
|
@ -9,9 +9,6 @@ import androidx.lifecycle.ViewModel
|
|||
import androidx.lifecycle.viewModelScope
|
||||
import co.touchlab.kermit.Logger
|
||||
import com.hippo.unifile.UniFile
|
||||
import dev.yokai.domain.chapter.interactor.GetChapters
|
||||
import dev.yokai.domain.download.DownloadPreferences
|
||||
import dev.yokai.domain.storage.StorageManager
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.cache.CoverCache
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
|
@ -76,8 +73,11 @@ import rx.schedulers.Schedulers
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.chapter.interactor.GetChapters
|
||||
import yokai.domain.download.DownloadPreferences
|
||||
import yokai.domain.storage.StorageManager
|
||||
import java.util.*
|
||||
import java.util.concurrent.CancellationException
|
||||
import java.util.concurrent.*
|
||||
|
||||
/**
|
||||
* Presenter used by the activity to perform background operations.
|
||||
|
|
|
@ -29,7 +29,6 @@ import com.davemorrissey.labs.subscaleview.ImageSource
|
|||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE
|
||||
import com.github.chrisbanes.photoview.PhotoView
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences.CutoutBehaviour
|
||||
import eu.kanade.tachiyomi.data.coil.cropBorders
|
||||
import eu.kanade.tachiyomi.data.coil.customDecoder
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig
|
||||
|
@ -39,6 +38,7 @@ import eu.kanade.tachiyomi.util.system.GLUtil
|
|||
import eu.kanade.tachiyomi.util.system.ImageUtil
|
||||
import eu.kanade.tachiyomi.util.system.animatorDurationScale
|
||||
import okio.BufferedSource
|
||||
import yokai.domain.ui.settings.ReaderPreferences.CutoutBehaviour
|
||||
|
||||
/**
|
||||
* A wrapper view for showing page image.
|
||||
|
|
|
@ -17,8 +17,8 @@ import androidx.compose.runtime.setValue
|
|||
import androidx.compose.ui.platform.AbstractComposeView
|
||||
import androidx.compose.ui.platform.ViewCompositionStrategy
|
||||
import androidx.core.view.isVisible
|
||||
import dev.yokai.presentation.component.CombinedCircularProgressIndicator
|
||||
import dev.yokai.presentation.theme.YokaiTheme
|
||||
import yokai.presentation.component.CombinedCircularProgressIndicator
|
||||
import yokai.presentation.theme.YokaiTheme
|
||||
|
||||
/**
|
||||
* A custom progress bar that always rotates while being determinate. By always rotating we give
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
package eu.kanade.tachiyomi.ui.reader.viewer.pager
|
||||
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences.CutoutBehaviour
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.ui.reader.settings.PageLayout
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.ViewerConfig
|
||||
|
@ -12,13 +10,14 @@ import eu.kanade.tachiyomi.ui.reader.viewer.navigation.EdgeNavigation
|
|||
import eu.kanade.tachiyomi.ui.reader.viewer.navigation.KindlishNavigation
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.navigation.LNavigation
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.navigation.RightAndLeftNavigation
|
||||
import eu.kanade.tachiyomi.util.system.DeviceUtil
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.flow.drop
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import yokai.domain.ui.settings.ReaderPreferences
|
||||
import yokai.domain.ui.settings.ReaderPreferences.CutoutBehaviour
|
||||
|
||||
/**
|
||||
* Configuration used by pager viewers.
|
||||
|
|
|
@ -12,7 +12,6 @@ import androidx.appcompat.widget.AppCompatTextView
|
|||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
import androidx.core.view.updatePaddingRelative
|
||||
import dev.yokai.presentation.theme.YokaiTheme
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition
|
||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
|
||||
|
@ -24,6 +23,7 @@ import kotlinx.coroutines.Job
|
|||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
import yokai.presentation.theme.YokaiTheme
|
||||
|
||||
/**
|
||||
* View of the ViewPager that contains a chapter transition.
|
||||
|
|
|
@ -11,7 +11,6 @@ import androidx.compose.material3.CircularProgressIndicator
|
|||
import androidx.compose.ui.platform.ComposeView
|
||||
import androidx.core.view.isNotEmpty
|
||||
import androidx.core.view.isVisible
|
||||
import dev.yokai.presentation.theme.YokaiTheme
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition
|
||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
|
||||
|
@ -21,6 +20,7 @@ import kotlinx.coroutines.Job
|
|||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
import yokai.presentation.theme.YokaiTheme
|
||||
|
||||
/**
|
||||
* Holder of the webtoon viewer that contains a chapter transition.
|
||||
|
|
|
@ -2,8 +2,6 @@ package eu.kanade.tachiyomi.ui.recents
|
|||
|
||||
import android.view.View
|
||||
import androidx.recyclerview.widget.ItemTouchHelper
|
||||
import dev.yokai.domain.recents.RecentsPreferences
|
||||
import dev.yokai.domain.ui.UiPreferences
|
||||
import eu.davidea.flexibleadapter.items.IFlexible
|
||||
import eu.kanade.tachiyomi.core.preference.Preference
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
|
@ -16,10 +14,12 @@ import kotlinx.coroutines.flow.drop
|
|||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.recents.RecentsPreferences
|
||||
import yokai.domain.ui.UiPreferences
|
||||
import java.text.DecimalFormat
|
||||
import java.text.DecimalFormatSymbols
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
import java.util.*
|
||||
|
||||
class RecentMangaAdapter(val delegate: RecentsInterface) :
|
||||
BaseChapterAdapter<IFlexible<*>>(delegate) {
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
package eu.kanade.tachiyomi.ui.recents
|
||||
|
||||
import dev.yokai.domain.chapter.interactor.GetChapters
|
||||
import dev.yokai.domain.recents.RecentsPreferences
|
||||
import dev.yokai.domain.ui.UiPreferences
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
|
@ -37,12 +34,12 @@ import kotlinx.coroutines.withContext
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.chapter.interactor.GetChapters
|
||||
import yokai.domain.recents.RecentsPreferences
|
||||
import yokai.domain.ui.UiPreferences
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Calendar
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
import java.util.TreeMap
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.*
|
||||
import java.util.concurrent.*
|
||||
import kotlin.math.abs
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
|
|
|
@ -2,11 +2,11 @@ package eu.kanade.tachiyomi.ui.setting
|
|||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import dev.yokai.domain.ComposableAlertDialog
|
||||
import dev.yokai.presentation.settings.ComposableSettings
|
||||
import eu.kanade.tachiyomi.ui.base.controller.BaseComposeController
|
||||
import eu.kanade.tachiyomi.util.compose.LocalAlertDialog
|
||||
import eu.kanade.tachiyomi.util.compose.LocalBackPress
|
||||
import yokai.domain.ComposableAlertDialog
|
||||
import yokai.presentation.settings.ComposableSettings
|
||||
|
||||
abstract class SettingsComposeController: BaseComposeController(), SettingsControllerInterface {
|
||||
override fun getTitle(): String? = __getTitle()
|
||||
|
|
|
@ -16,7 +16,6 @@ import androidx.preference.PreferenceGroup
|
|||
import androidx.preference.PreferenceScreen
|
||||
import com.bluelinelabs.conductor.ControllerChangeHandler
|
||||
import com.bluelinelabs.conductor.ControllerChangeType
|
||||
import dev.yokai.domain.base.BasePreferences
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.data.preference.changesIn
|
||||
|
@ -30,6 +29,7 @@ import eu.kanade.tachiyomi.util.view.scrollViewWith
|
|||
import eu.kanade.tachiyomi.widget.LinearLayoutManagerAccurateOffset
|
||||
import kotlinx.coroutines.MainScope
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.base.BasePreferences
|
||||
import java.util.*
|
||||
|
||||
abstract class SettingsLegacyController : PreferenceController(), SettingsControllerInterface, BackHandlerControllerInterface, BaseControllerPreferenceControllerCommonInterface {
|
||||
|
|
|
@ -16,8 +16,6 @@ import androidx.lifecycle.lifecycleScope
|
|||
import androidx.preference.PreferenceScreen
|
||||
import co.touchlab.kermit.Logger
|
||||
import com.hippo.unifile.UniFile
|
||||
import dev.yokai.domain.base.BasePreferences.ExtensionInstaller
|
||||
import dev.yokai.domain.extension.interactor.TrustExtension
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
|
@ -29,6 +27,7 @@ import eu.kanade.tachiyomi.data.preference.PreferenceKeys
|
|||
import eu.kanade.tachiyomi.data.preference.changesIn
|
||||
import eu.kanade.tachiyomi.extension.ShizukuInstaller
|
||||
import eu.kanade.tachiyomi.network.NetworkHelper
|
||||
import eu.kanade.tachiyomi.network.NetworkPreferences
|
||||
import eu.kanade.tachiyomi.network.PREF_DOH_360
|
||||
import eu.kanade.tachiyomi.network.PREF_DOH_ADGUARD
|
||||
import eu.kanade.tachiyomi.network.PREF_DOH_ALIDNS
|
||||
|
@ -78,11 +77,14 @@ import rikka.sui.Sui
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.base.BasePreferences.ExtensionInstaller
|
||||
import yokai.domain.extension.interactor.TrustExtension
|
||||
import java.io.File
|
||||
|
||||
class SettingsAdvancedController : SettingsLegacyController() {
|
||||
|
||||
private val network: NetworkHelper by injectLazy()
|
||||
private val networkPreferences: NetworkPreferences by injectLazy()
|
||||
|
||||
private val db: DatabaseHelper by injectLazy()
|
||||
|
||||
|
@ -278,7 +280,7 @@ class SettingsAdvancedController : SettingsLegacyController() {
|
|||
}
|
||||
}
|
||||
editTextPreference(activity) {
|
||||
bindTo(preferences.defaultUserAgent())
|
||||
bindTo(networkPreferences.defaultUserAgent())
|
||||
titleRes = R.string.user_agent_string
|
||||
|
||||
onChange {
|
||||
|
|
|
@ -6,8 +6,6 @@ import android.os.Build
|
|||
import android.provider.Settings
|
||||
import androidx.preference.PreferenceScreen
|
||||
import androidx.preference.SwitchPreferenceCompat
|
||||
import dev.yokai.domain.base.BasePreferences.ExtensionInstaller
|
||||
import dev.yokai.presentation.extension.repo.ExtensionRepoController
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.notification.Notifications
|
||||
|
@ -35,6 +33,8 @@ import eu.kanade.tachiyomi.util.lang.addBetaTag
|
|||
import eu.kanade.tachiyomi.util.view.snack
|
||||
import eu.kanade.tachiyomi.util.view.withFadeTransaction
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.base.BasePreferences.ExtensionInstaller
|
||||
import yokai.presentation.extension.repo.ExtensionRepoController
|
||||
|
||||
class SettingsBrowseController : SettingsLegacyController() {
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package eu.kanade.tachiyomi.ui.setting.controllers
|
||||
|
||||
import dev.yokai.presentation.settings.ComposableSettings
|
||||
import dev.yokai.presentation.settings.screen.SettingsDataScreen
|
||||
import eu.kanade.tachiyomi.ui.setting.SettingsComposeController
|
||||
import yokai.presentation.settings.ComposableSettings
|
||||
import yokai.presentation.settings.screen.SettingsDataScreen
|
||||
|
||||
class SettingsDataController : SettingsComposeController() {
|
||||
override fun getComposableSettings(): ComposableSettings = SettingsDataScreen
|
||||
|
|
|
@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.ui.setting.controllers
|
|||
import android.content.Intent
|
||||
import androidx.preference.PreferenceScreen
|
||||
import com.bluelinelabs.conductor.Controller
|
||||
import dev.yokai.domain.download.DownloadPreferences
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
import eu.kanade.tachiyomi.data.database.models.Category
|
||||
|
@ -22,6 +21,7 @@ import eu.kanade.tachiyomi.ui.setting.triStateListPreference
|
|||
import eu.kanade.tachiyomi.util.lang.addBetaTag
|
||||
import eu.kanade.tachiyomi.util.view.withFadeTransaction
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.download.DownloadPreferences
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
||||
|
||||
class SettingsDownloadController : SettingsLegacyController() {
|
||||
|
|
|
@ -9,7 +9,6 @@ import android.view.View
|
|||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.core.os.LocaleListCompat
|
||||
import androidx.preference.PreferenceScreen
|
||||
import dev.yokai.domain.base.BasePreferences
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.updater.AppDownloadInstallJob
|
||||
|
@ -30,7 +29,8 @@ import eu.kanade.tachiyomi.ui.setting.titleRes
|
|||
import eu.kanade.tachiyomi.util.lang.addBetaTag
|
||||
import eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder
|
||||
import eu.kanade.tachiyomi.util.system.systemLangContext
|
||||
import java.util.Locale
|
||||
import yokai.domain.base.BasePreferences
|
||||
import java.util.*
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
||||
|
||||
class SettingsGeneralController : SettingsLegacyController() {
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
package eu.kanade.tachiyomi.ui.setting.controllers
|
||||
|
||||
import androidx.preference.PreferenceScreen
|
||||
import dev.yokai.domain.manga.interactor.GetLibraryManga
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
import eu.kanade.tachiyomi.data.database.models.Category
|
||||
import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
|
||||
import eu.kanade.tachiyomi.data.preference.*
|
||||
import eu.kanade.tachiyomi.data.preference.DEVICE_BATTERY_NOT_LOW
|
||||
import eu.kanade.tachiyomi.data.preference.DEVICE_CHARGING
|
||||
import eu.kanade.tachiyomi.data.preference.DEVICE_ONLY_ON_WIFI
|
||||
import eu.kanade.tachiyomi.data.preference.DelayedLibrarySuggestionsJob
|
||||
import eu.kanade.tachiyomi.data.preference.MANGA_HAS_UNREAD
|
||||
import eu.kanade.tachiyomi.data.preference.MANGA_NON_COMPLETED
|
||||
import eu.kanade.tachiyomi.data.preference.MANGA_NON_READ
|
||||
import eu.kanade.tachiyomi.data.preference.changesIn
|
||||
import eu.kanade.tachiyomi.ui.category.CategoryController
|
||||
import eu.kanade.tachiyomi.ui.library.LibraryPresenter
|
||||
import eu.kanade.tachiyomi.ui.library.display.TabbedLibraryDisplaySheet
|
||||
|
@ -30,6 +36,7 @@ import eu.kanade.tachiyomi.util.view.withFadeTransaction
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.manga.interactor.GetLibraryManga
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
||||
|
||||
class SettingsLibraryController : SettingsLegacyController() {
|
||||
|
|
|
@ -3,9 +3,6 @@ package eu.kanade.tachiyomi.ui.setting.controllers
|
|||
import android.content.ComponentName
|
||||
import android.content.Intent
|
||||
import androidx.preference.PreferenceScreen
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences.CutoutBehaviour
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences.LandscapeCutoutBehaviour
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues
|
||||
import eu.kanade.tachiyomi.data.preference.changesIn
|
||||
|
@ -33,6 +30,9 @@ import eu.kanade.tachiyomi.util.system.DeviceUtil
|
|||
import eu.kanade.tachiyomi.util.system.isTablet
|
||||
import eu.kanade.tachiyomi.util.view.activityBinding
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.ui.settings.ReaderPreferences
|
||||
import yokai.domain.ui.settings.ReaderPreferences.CutoutBehaviour
|
||||
import yokai.domain.ui.settings.ReaderPreferences.LandscapeCutoutBehaviour
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
||||
|
||||
class SettingsReaderController : SettingsLegacyController() {
|
||||
|
|
|
@ -14,8 +14,6 @@ import androidx.core.net.toUri
|
|||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.preference.PreferenceScreen
|
||||
import com.hippo.unifile.UniFile
|
||||
import dev.yokai.domain.storage.StorageManager
|
||||
import dev.yokai.domain.storage.StoragePreferences
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.backup.BackupFileValidator
|
||||
import eu.kanade.tachiyomi.data.backup.create.BackupCreatorJob
|
||||
|
@ -47,6 +45,8 @@ import eu.kanade.tachiyomi.util.system.withUIContext
|
|||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.storage.StorageManager
|
||||
import yokai.domain.storage.StoragePreferences
|
||||
|
||||
@Deprecated("Migrating to compose")
|
||||
class SettingsDataLegacyController : SettingsLegacyController() {
|
||||
|
|
|
@ -23,9 +23,6 @@ import com.bluelinelabs.conductor.ControllerChangeHandler
|
|||
import com.bluelinelabs.conductor.ControllerChangeType
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import dev.yokai.domain.base.BasePreferences
|
||||
import dev.yokai.domain.base.BasePreferences.ExtensionInstaller
|
||||
import dev.yokai.presentation.extension.repo.ExtensionRepoController
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.davidea.flexibleadapter.items.IFlexible
|
||||
import eu.kanade.tachiyomi.R
|
||||
|
@ -71,8 +68,10 @@ import kotlinx.coroutines.flow.launchIn
|
|||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
import yokai.domain.base.BasePreferences
|
||||
import yokai.domain.base.BasePreferences.ExtensionInstaller
|
||||
import yokai.presentation.extension.repo.ExtensionRepoController
|
||||
import java.util.*
|
||||
import kotlin.math.max
|
||||
|
||||
/**
|
||||
|
|
|
@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.R
|
|||
import eu.kanade.tachiyomi.databinding.SourceItemBinding
|
||||
import eu.kanade.tachiyomi.source.LocalSource
|
||||
import eu.kanade.tachiyomi.source.icon
|
||||
import eu.kanade.tachiyomi.source.includeLangInName
|
||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||
import eu.kanade.tachiyomi.util.view.compatToolTipText
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package eu.kanade.tachiyomi.ui.source.browse
|
||||
|
||||
import co.touchlab.kermit.Logger
|
||||
import dev.yokai.domain.ui.UiPreferences
|
||||
import eu.davidea.flexibleadapter.items.IFlexible
|
||||
import eu.kanade.tachiyomi.data.cache.CoverCache
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
|
@ -40,6 +39,7 @@ import kotlinx.coroutines.flow.map
|
|||
import kotlinx.coroutines.flow.onEach
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import yokai.domain.ui.UiPreferences
|
||||
|
||||
/**
|
||||
* Presenter of [BrowseSourceController].
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package eu.kanade.tachiyomi.ui.source.globalsearch
|
||||
|
||||
import dev.yokai.domain.ui.UiPreferences
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.ui.UiPreferences
|
||||
|
||||
/**
|
||||
* Adapter that holds the manga items from search results.
|
||||
|
|
|
@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.util.chapter
|
|||
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.models.originalTitle
|
||||
|
||||
/**
|
||||
* -R> = regex conversion.
|
||||
|
|
|
@ -4,7 +4,7 @@ import androidx.compose.runtime.Composable
|
|||
import androidx.compose.runtime.ProvidableCompositionLocal
|
||||
import androidx.compose.runtime.compositionLocalOf
|
||||
import androidx.compose.runtime.staticCompositionLocalOf
|
||||
import dev.yokai.domain.ComposableAlertDialog
|
||||
import yokai.domain.ComposableAlertDialog
|
||||
|
||||
val <T> ProvidableCompositionLocal<T?>.currentOrThrow
|
||||
@Composable
|
||||
|
|
|
@ -17,14 +17,11 @@ import android.net.wifi.WifiManager
|
|||
import android.os.Build
|
||||
import android.os.PowerManager
|
||||
import android.provider.Settings
|
||||
import android.util.TypedValue
|
||||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import androidx.annotation.AttrRes
|
||||
import androidx.annotation.ColorInt
|
||||
import androidx.annotation.ColorRes
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.browser.customtabs.CustomTabColorSchemeParams
|
||||
import androidx.browser.customtabs.CustomTabsIntent
|
||||
|
@ -54,26 +51,6 @@ import kotlin.math.max
|
|||
|
||||
private const val TABLET_UI_MIN_SCREEN_WIDTH_DP = 720
|
||||
|
||||
/**
|
||||
* Display a toast in this context.
|
||||
*
|
||||
* @param resource the text resource.
|
||||
* @param duration the duration of the toast. Defaults to short.
|
||||
*/
|
||||
fun Context.toast(@StringRes resource: Int, duration: Int = Toast.LENGTH_SHORT) {
|
||||
Toast.makeText(this, resource, duration).show()
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a toast in this context.
|
||||
*
|
||||
* @param text the text to display.
|
||||
* @param duration the duration of the toast. Defaults to short.
|
||||
*/
|
||||
fun Context.toast(text: String?, duration: Int = Toast.LENGTH_SHORT) {
|
||||
Toast.makeText(this, text.orEmpty(), duration).show()
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to create a notification.
|
||||
*
|
||||
|
@ -125,30 +102,6 @@ fun Context.contextCompatDrawable(@DrawableRes resource: Int): Drawable? {
|
|||
return ContextCompat.getDrawable(this, resource)
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts to dp.
|
||||
*/
|
||||
val Int.pxToDp: Int
|
||||
get() = (this / Resources.getSystem().displayMetrics.density).toInt()
|
||||
|
||||
val Float.pxToDp: Float
|
||||
get() = (this / Resources.getSystem().displayMetrics.density)
|
||||
|
||||
/**
|
||||
* Converts to px.
|
||||
*/
|
||||
val Int.dpToPx: Int
|
||||
get() = this.toFloat().dpToPx.toInt()
|
||||
|
||||
val Int.spToPx: Int
|
||||
get() = this.toFloat().spToPx.toInt()
|
||||
|
||||
val Float.spToPx: Float
|
||||
get() = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, this, Resources.getSystem().displayMetrics)
|
||||
|
||||
val Float.dpToPx: Float
|
||||
get() = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, this, Resources.getSystem().displayMetrics)
|
||||
|
||||
/** Converts to px and takes into account LTR/RTL layout */
|
||||
fun Float.dpToPxEnd(resources: Resources): Float {
|
||||
return this * resources.displayMetrics.density * if (resources.isLTR) 1 else -1
|
||||
|
|
|
@ -9,12 +9,12 @@ import androidx.preference.PreferenceManager
|
|||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.StaggeredGridLayoutManager
|
||||
import dev.yokai.domain.ui.UiPreferences
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.ui.library.LibraryItem
|
||||
import eu.kanade.tachiyomi.util.system.dpToPx
|
||||
import eu.kanade.tachiyomi.util.system.pxToDp
|
||||
import eu.kanade.tachiyomi.util.system.rootWindowInsetsCompat
|
||||
import yokai.domain.ui.UiPreferences
|
||||
import kotlin.math.abs
|
||||
import kotlin.math.max
|
||||
import kotlin.math.pow
|
||||
|
|
|
@ -4,15 +4,15 @@ import android.content.Context
|
|||
import android.util.AttributeSet
|
||||
import androidx.core.widget.NestedScrollView
|
||||
import androidx.viewbinding.ViewBinding
|
||||
import dev.yokai.domain.recents.RecentsPreferences
|
||||
import dev.yokai.domain.ui.UiPreferences
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.ui.library.LibraryController
|
||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
||||
import eu.kanade.tachiyomi.ui.recents.RecentsController
|
||||
import eu.kanade.tachiyomi.util.view.RecyclerWindowInsetsListener
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import yokai.domain.recents.RecentsPreferences
|
||||
import yokai.domain.ui.UiPreferences
|
||||
import yokai.domain.ui.settings.ReaderPreferences
|
||||
|
||||
abstract class BaseTabbedScrollView<VB : ViewBinding> @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
|
||||
NestedScrollView(context, attrs) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package dev.yokai.core
|
||||
package yokai.core
|
||||
|
||||
import co.touchlab.kermit.DefaultFormatter
|
||||
import co.touchlab.kermit.LogWriter
|
|
@ -1,15 +1,13 @@
|
|||
package dev.yokai.core.di
|
||||
package yokai.core.di
|
||||
|
||||
import android.app.Application
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.sqlite.db.SupportSQLiteOpenHelper
|
||||
import app.cash.sqldelight.db.SqlDriver
|
||||
import app.cash.sqldelight.driver.android.AndroidSqliteDriver
|
||||
import dev.yokai.data.AndroidDatabaseHandler
|
||||
import dev.yokai.data.DatabaseHandler
|
||||
import dev.yokai.domain.SplashState
|
||||
import dev.yokai.domain.extension.interactor.TrustExtension
|
||||
import dev.yokai.domain.storage.StorageManager
|
||||
import com.chuckerteam.chucker.api.ChuckerCollector
|
||||
import com.chuckerteam.chucker.api.ChuckerInterceptor
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.core.storage.AndroidStorageFolderProvider
|
||||
import eu.kanade.tachiyomi.data.cache.ChapterCache
|
||||
import eu.kanade.tachiyomi.data.cache.CoverCache
|
||||
|
@ -35,6 +33,10 @@ import uy.kohesive.injekt.api.InjektRegistrar
|
|||
import uy.kohesive.injekt.api.addSingleton
|
||||
import uy.kohesive.injekt.api.addSingletonFactory
|
||||
import uy.kohesive.injekt.api.get
|
||||
import yokai.data.AndroidDatabaseHandler
|
||||
import yokai.data.DatabaseHandler
|
||||
import yokai.domain.SplashState
|
||||
import yokai.domain.storage.StorageManager
|
||||
|
||||
class AppModule(val app: Application) : InjektModule {
|
||||
|
||||
|
@ -89,7 +91,23 @@ class AppModule(val app: Application) : InjektModule {
|
|||
|
||||
addSingletonFactory { CoverCache(app) }
|
||||
|
||||
addSingletonFactory { NetworkHelper(app) }
|
||||
addSingletonFactory {
|
||||
NetworkHelper(
|
||||
app,
|
||||
get(),
|
||||
) { builder ->
|
||||
if (BuildConfig.DEBUG) {
|
||||
builder.addInterceptor(
|
||||
ChuckerInterceptor.Builder(app)
|
||||
.collector(ChuckerCollector(app))
|
||||
.maxContentLength(250000L)
|
||||
.redactHeaders(emptySet())
|
||||
.alwaysReadResponseBody(false)
|
||||
.build(),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
addSingletonFactory { JavaScriptEngine(app) }
|
||||
|
56
app/src/main/java/yokai/core/di/DomainModule.kt
Normal file
56
app/src/main/java/yokai/core/di/DomainModule.kt
Normal file
|
@ -0,0 +1,56 @@
|
|||
package yokai.core.di
|
||||
|
||||
import uy.kohesive.injekt.api.InjektModule
|
||||
import uy.kohesive.injekt.api.InjektRegistrar
|
||||
import uy.kohesive.injekt.api.addFactory
|
||||
import uy.kohesive.injekt.api.addSingletonFactory
|
||||
import uy.kohesive.injekt.api.get
|
||||
import yokai.data.chapter.ChapterRepositoryImpl
|
||||
import yokai.data.extension.repo.ExtensionRepoRepositoryImpl
|
||||
import yokai.data.library.custom.CustomMangaRepositoryImpl
|
||||
import yokai.data.manga.MangaRepositoryImpl
|
||||
import yokai.domain.chapter.ChapterRepository
|
||||
import yokai.domain.chapter.interactor.GetAvailableScanlators
|
||||
import yokai.domain.chapter.interactor.GetChapters
|
||||
import yokai.domain.extension.interactor.TrustExtension
|
||||
import yokai.domain.extension.repo.ExtensionRepoRepository
|
||||
import yokai.domain.extension.repo.interactor.CreateExtensionRepo
|
||||
import yokai.domain.extension.repo.interactor.DeleteExtensionRepo
|
||||
import yokai.domain.extension.repo.interactor.GetExtensionRepo
|
||||
import yokai.domain.extension.repo.interactor.GetExtensionRepoCount
|
||||
import yokai.domain.extension.repo.interactor.ReplaceExtensionRepo
|
||||
import yokai.domain.extension.repo.interactor.UpdateExtensionRepo
|
||||
import yokai.domain.library.custom.CustomMangaRepository
|
||||
import yokai.domain.library.custom.interactor.CreateCustomManga
|
||||
import yokai.domain.library.custom.interactor.DeleteCustomManga
|
||||
import yokai.domain.library.custom.interactor.GetCustomManga
|
||||
import yokai.domain.library.custom.interactor.RelinkCustomManga
|
||||
import yokai.domain.manga.MangaRepository
|
||||
import yokai.domain.manga.interactor.GetLibraryManga
|
||||
|
||||
class DomainModule : InjektModule {
|
||||
override fun InjektRegistrar.registerInjectables() {
|
||||
addFactory { TrustExtension(get(), get()) }
|
||||
|
||||
addSingletonFactory<ExtensionRepoRepository> { ExtensionRepoRepositoryImpl(get()) }
|
||||
addFactory { CreateExtensionRepo(get()) }
|
||||
addFactory { DeleteExtensionRepo(get()) }
|
||||
addFactory { GetExtensionRepo(get()) }
|
||||
addFactory { GetExtensionRepoCount(get()) }
|
||||
addFactory { ReplaceExtensionRepo(get()) }
|
||||
addFactory { UpdateExtensionRepo(get(), get()) }
|
||||
|
||||
addSingletonFactory<CustomMangaRepository> { CustomMangaRepositoryImpl(get()) }
|
||||
addFactory { CreateCustomManga(get()) }
|
||||
addFactory { DeleteCustomManga(get()) }
|
||||
addFactory { GetCustomManga(get()) }
|
||||
addFactory { RelinkCustomManga(get()) }
|
||||
|
||||
addSingletonFactory<MangaRepository> { MangaRepositoryImpl(get()) }
|
||||
addFactory { GetLibraryManga(get()) }
|
||||
|
||||
addSingletonFactory<ChapterRepository> { ChapterRepositoryImpl(get()) }
|
||||
addFactory { GetAvailableScanlators(get()) }
|
||||
addFactory { GetChapters(get()) }
|
||||
}
|
||||
}
|
|
@ -1,22 +1,23 @@
|
|||
package dev.yokai.core.di
|
||||
package yokai.core.di
|
||||
|
||||
import android.app.Application
|
||||
import dev.yokai.domain.base.BasePreferences
|
||||
import dev.yokai.domain.download.DownloadPreferences
|
||||
import dev.yokai.domain.recents.RecentsPreferences
|
||||
import dev.yokai.domain.source.SourcePreferences
|
||||
import dev.yokai.domain.storage.StoragePreferences
|
||||
import dev.yokai.domain.ui.UiPreferences
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences
|
||||
import eu.kanade.tachiyomi.core.preference.AndroidPreferenceStore
|
||||
import eu.kanade.tachiyomi.core.preference.PreferenceStore
|
||||
import eu.kanade.tachiyomi.core.storage.AndroidStorageFolderProvider
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.data.track.TrackPreferences
|
||||
import eu.kanade.tachiyomi.network.NetworkPreferences
|
||||
import uy.kohesive.injekt.api.InjektModule
|
||||
import uy.kohesive.injekt.api.InjektRegistrar
|
||||
import uy.kohesive.injekt.api.addSingletonFactory
|
||||
import uy.kohesive.injekt.api.get
|
||||
import yokai.domain.base.BasePreferences
|
||||
import yokai.domain.download.DownloadPreferences
|
||||
import yokai.domain.recents.RecentsPreferences
|
||||
import yokai.domain.source.SourcePreferences
|
||||
import yokai.domain.storage.StoragePreferences
|
||||
import yokai.domain.ui.UiPreferences
|
||||
import yokai.domain.ui.settings.ReaderPreferences
|
||||
|
||||
class PreferenceModule(val application: Application) : InjektModule {
|
||||
override fun InjektRegistrar.registerInjectables() {
|
||||
|
@ -36,6 +37,8 @@ class PreferenceModule(val application: Application) : InjektModule {
|
|||
|
||||
addSingletonFactory { DownloadPreferences(get()) }
|
||||
|
||||
addSingletonFactory { NetworkPreferences(get()) }
|
||||
|
||||
addSingletonFactory {
|
||||
PreferencesHelper(
|
||||
context = application,
|
|
@ -1,4 +1,4 @@
|
|||
package dev.yokai.core.metadata
|
||||
package yokai.core.metadata
|
||||
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
|
@ -1,4 +1,4 @@
|
|||
package dev.yokai.core.migration
|
||||
package yokai.core.migration
|
||||
|
||||
interface Migration {
|
||||
val version: Float
|
|
@ -1,3 +1,3 @@
|
|||
package dev.yokai.core.migration
|
||||
package yokai.core.migration
|
||||
|
||||
typealias MigrationCompletedListener = () -> Unit
|
|
@ -1,4 +1,4 @@
|
|||
package dev.yokai.core.migration
|
||||
package yokai.core.migration
|
||||
|
||||
import uy.kohesive.injekt.Injekt
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package dev.yokai.core.migration
|
||||
package yokai.core.migration
|
||||
|
||||
import co.touchlab.kermit.Logger
|
||||
import kotlinx.coroutines.CompletableDeferred
|
|
@ -1,4 +1,4 @@
|
|||
package dev.yokai.core.migration
|
||||
package yokai.core.migration
|
||||
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
import kotlinx.coroutines.CoroutineScope
|
|
@ -1,4 +1,4 @@
|
|||
package dev.yokai.core.migration
|
||||
package yokai.core.migration
|
||||
|
||||
class MigrationStrategyFactory(
|
||||
private val factory: MigrationJobFactory,
|
|
@ -1,4 +1,4 @@
|
|||
package dev.yokai.core.migration
|
||||
package yokai.core.migration
|
||||
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
import kotlinx.coroutines.CoroutineScope
|
|
@ -1,8 +1,8 @@
|
|||
package dev.yokai.core.migration.migrations
|
||||
package yokai.core.migration.migrations
|
||||
|
||||
import dev.yokai.core.migration.Migration
|
||||
import dev.yokai.core.migration.MigrationContext
|
||||
import eu.kanade.tachiyomi.App
|
||||
import yokai.core.migration.Migration
|
||||
import yokai.core.migration.MigrationContext
|
||||
import java.io.File
|
||||
|
||||
/**
|
|
@ -1,8 +1,8 @@
|
|||
package dev.yokai.core.migration.migrations
|
||||
package yokai.core.migration.migrations
|
||||
|
||||
import dev.yokai.core.migration.Migration
|
||||
import dev.yokai.core.migration.MigrationContext
|
||||
import eu.kanade.tachiyomi.App
|
||||
import yokai.core.migration.Migration
|
||||
import yokai.core.migration.MigrationContext
|
||||
import java.io.File
|
||||
|
||||
/**
|
|
@ -1,8 +1,8 @@
|
|||
package dev.yokai.core.migration.migrations
|
||||
package yokai.core.migration.migrations
|
||||
|
||||
import dev.yokai.core.migration.Migration
|
||||
import dev.yokai.core.migration.MigrationContext
|
||||
import eu.kanade.tachiyomi.ui.library.LibraryPresenter
|
||||
import yokai.core.migration.Migration
|
||||
import yokai.core.migration.MigrationContext
|
||||
|
||||
class CustomInfoMigration : Migration {
|
||||
override val version: Float = 66f
|
|
@ -1,14 +1,14 @@
|
|||
package dev.yokai.core.migration.migrations
|
||||
package yokai.core.migration.migrations
|
||||
|
||||
import androidx.preference.PreferenceManager
|
||||
import dev.yokai.core.migration.Migration
|
||||
import dev.yokai.core.migration.MigrationContext
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences.CutoutBehaviour
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences.LandscapeCutoutBehaviour
|
||||
import eu.kanade.tachiyomi.App
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig
|
||||
import yokai.core.migration.Migration
|
||||
import yokai.core.migration.MigrationContext
|
||||
import yokai.domain.ui.settings.ReaderPreferences
|
||||
import yokai.domain.ui.settings.ReaderPreferences.CutoutBehaviour
|
||||
import yokai.domain.ui.settings.ReaderPreferences.LandscapeCutoutBehaviour
|
||||
|
||||
class CutoutMigration : Migration {
|
||||
override val version: Float = 121f
|
|
@ -1,12 +1,12 @@
|
|||
package dev.yokai.core.migration.migrations
|
||||
package yokai.core.migration.migrations
|
||||
|
||||
import androidx.core.content.edit
|
||||
import androidx.preference.PreferenceManager
|
||||
import dev.yokai.core.migration.Migration
|
||||
import dev.yokai.core.migration.MigrationContext
|
||||
import eu.kanade.tachiyomi.App
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys
|
||||
import eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE
|
||||
import yokai.core.migration.Migration
|
||||
import yokai.core.migration.MigrationContext
|
||||
|
||||
class DoHMigration : Migration {
|
||||
override val version: Float = 71f
|
|
@ -1,9 +1,9 @@
|
|||
package dev.yokai.core.migration.migrations
|
||||
package yokai.core.migration.migrations
|
||||
|
||||
import dev.yokai.core.migration.Migration
|
||||
import dev.yokai.core.migration.MigrationContext
|
||||
import eu.kanade.tachiyomi.App
|
||||
import eu.kanade.tachiyomi.data.download.DownloadProvider
|
||||
import yokai.core.migration.Migration
|
||||
import yokai.core.migration.MigrationContext
|
||||
|
||||
class DownloadedChaptersMigration : Migration {
|
||||
override val version: Float = 54f
|
|
@ -1,10 +1,10 @@
|
|||
package dev.yokai.core.migration.migrations
|
||||
package yokai.core.migration.migrations
|
||||
|
||||
import dev.yokai.core.migration.Migration
|
||||
import dev.yokai.core.migration.MigrationContext
|
||||
import eu.kanade.tachiyomi.App
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.data.preference.plusAssign
|
||||
import yokai.core.migration.Migration
|
||||
import yokai.core.migration.MigrationContext
|
||||
|
||||
class EnabledLanguageMigration : Migration {
|
||||
override val version: Float = 83f
|
|
@ -1,11 +1,11 @@
|
|||
package dev.yokai.core.migration.migrations
|
||||
package yokai.core.migration.migrations
|
||||
|
||||
import dev.yokai.core.migration.Migration
|
||||
import dev.yokai.core.migration.MigrationContext
|
||||
import eu.kanade.tachiyomi.App
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
|
||||
import eu.kanade.tachiyomi.data.updater.AppUpdateJob
|
||||
import yokai.core.migration.Migration
|
||||
import yokai.core.migration.MigrationContext
|
||||
|
||||
/**
|
||||
* Restore jobs after upgrading to evernote's job scheduler.
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue