mirror of
https://github.com/mihonapp/mihon.git
synced 2024-10-24 21:12:35 -04:00
7be6863910
This allows us to swap out the implementation in the future and on different platforms without major changes to the extensions themselves.
190 lines
6.8 KiB
Kotlin
190 lines
6.8 KiB
Kotlin
package eu.kanade.tachiyomi
|
|
|
|
import android.app.Application
|
|
import android.os.Build
|
|
import androidx.core.content.ContextCompat
|
|
import androidx.sqlite.db.SupportSQLiteDatabase
|
|
import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory
|
|
import com.squareup.sqldelight.android.AndroidSqliteDriver
|
|
import com.squareup.sqldelight.db.SqlDriver
|
|
import data.History
|
|
import data.Mangas
|
|
import eu.kanade.data.AndroidDatabaseHandler
|
|
import eu.kanade.data.DatabaseHandler
|
|
import eu.kanade.data.dateAdapter
|
|
import eu.kanade.data.listOfStringsAdapter
|
|
import eu.kanade.data.updateStrategyAdapter
|
|
import eu.kanade.domain.backup.service.BackupPreferences
|
|
import eu.kanade.domain.base.BasePreferences
|
|
import eu.kanade.domain.download.service.DownloadPreferences
|
|
import eu.kanade.domain.library.service.LibraryPreferences
|
|
import eu.kanade.domain.source.service.SourcePreferences
|
|
import eu.kanade.domain.track.service.TrackPreferences
|
|
import eu.kanade.domain.ui.UiPreferences
|
|
import eu.kanade.tachiyomi.core.preference.AndroidPreferenceStore
|
|
import eu.kanade.tachiyomi.core.preference.PreferenceStore
|
|
import eu.kanade.tachiyomi.core.provider.AndroidBackupFolderProvider
|
|
import eu.kanade.tachiyomi.core.provider.AndroidDownloadFolderProvider
|
|
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
|
import eu.kanade.tachiyomi.data.cache.ChapterCache
|
|
import eu.kanade.tachiyomi.data.cache.CoverCache
|
|
import eu.kanade.tachiyomi.data.download.DownloadManager
|
|
import eu.kanade.tachiyomi.data.saver.ImageSaver
|
|
import eu.kanade.tachiyomi.data.track.TrackManager
|
|
import eu.kanade.tachiyomi.data.track.job.DelayedTrackingStore
|
|
import eu.kanade.tachiyomi.extension.ExtensionManager
|
|
import eu.kanade.tachiyomi.network.JavaScriptEngine
|
|
import eu.kanade.tachiyomi.network.NetworkHelper
|
|
import eu.kanade.tachiyomi.network.NetworkPreferences
|
|
import eu.kanade.tachiyomi.source.SourceManager
|
|
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
|
import eu.kanade.tachiyomi.util.system.isDevFlavor
|
|
import io.requery.android.database.sqlite.RequerySQLiteOpenHelperFactory
|
|
import kotlinx.serialization.json.Json
|
|
import nl.adaptivity.xmlutil.serialization.UnknownChildHandler
|
|
import nl.adaptivity.xmlutil.serialization.XML
|
|
import uy.kohesive.injekt.api.InjektModule
|
|
import uy.kohesive.injekt.api.InjektRegistrar
|
|
import uy.kohesive.injekt.api.addSingleton
|
|
import uy.kohesive.injekt.api.addSingletonFactory
|
|
import uy.kohesive.injekt.api.get
|
|
|
|
class AppModule(val app: Application) : InjektModule {
|
|
|
|
override fun InjektRegistrar.registerInjectables() {
|
|
addSingleton(app)
|
|
|
|
addSingletonFactory<SqlDriver> {
|
|
AndroidSqliteDriver(
|
|
schema = Database.Schema,
|
|
context = app,
|
|
name = "tachiyomi.db",
|
|
factory = if (BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
|
// Support database inspector in Android Studio
|
|
FrameworkSQLiteOpenHelperFactory()
|
|
} else {
|
|
RequerySQLiteOpenHelperFactory()
|
|
},
|
|
callback = object : AndroidSqliteDriver.Callback(Database.Schema) {
|
|
override fun onOpen(db: SupportSQLiteDatabase) {
|
|
super.onOpen(db)
|
|
setPragma(db, "foreign_keys = ON")
|
|
setPragma(db, "journal_mode = WAL")
|
|
setPragma(db, "synchronous = NORMAL")
|
|
}
|
|
private fun setPragma(db: SupportSQLiteDatabase, pragma: String) {
|
|
val cursor = db.query("PRAGMA $pragma")
|
|
cursor.moveToFirst()
|
|
cursor.close()
|
|
}
|
|
},
|
|
)
|
|
}
|
|
addSingletonFactory {
|
|
Database(
|
|
driver = get(),
|
|
historyAdapter = History.Adapter(
|
|
last_readAdapter = dateAdapter,
|
|
),
|
|
mangasAdapter = Mangas.Adapter(
|
|
genreAdapter = listOfStringsAdapter,
|
|
update_strategyAdapter = updateStrategyAdapter,
|
|
),
|
|
)
|
|
}
|
|
addSingletonFactory<DatabaseHandler> { AndroidDatabaseHandler(get(), get()) }
|
|
|
|
addSingletonFactory {
|
|
Json {
|
|
ignoreUnknownKeys = true
|
|
explicitNulls = false
|
|
}
|
|
}
|
|
addSingletonFactory {
|
|
XML {
|
|
unknownChildHandler = UnknownChildHandler { _, _, _, _, _ -> emptyList() }
|
|
autoPolymorphic = true
|
|
}
|
|
}
|
|
|
|
addSingletonFactory { ChapterCache(app) }
|
|
addSingletonFactory { CoverCache(app) }
|
|
|
|
addSingletonFactory { NetworkHelper(app) }
|
|
addSingletonFactory { JavaScriptEngine(app) }
|
|
|
|
addSingletonFactory { SourceManager(app, get(), get()) }
|
|
addSingletonFactory { ExtensionManager(app) }
|
|
|
|
addSingletonFactory { DownloadManager(app) }
|
|
|
|
addSingletonFactory { TrackManager(app) }
|
|
addSingletonFactory { DelayedTrackingStore(app) }
|
|
|
|
addSingletonFactory { ImageSaver(app) }
|
|
|
|
// Asynchronously init expensive components for a faster cold start
|
|
ContextCompat.getMainExecutor(app).execute {
|
|
get<NetworkHelper>()
|
|
|
|
get<SourceManager>()
|
|
|
|
get<Database>()
|
|
|
|
get<DownloadManager>()
|
|
}
|
|
}
|
|
}
|
|
|
|
class PreferenceModule(val application: Application) : InjektModule {
|
|
override fun InjektRegistrar.registerInjectables() {
|
|
addSingletonFactory<PreferenceStore> {
|
|
AndroidPreferenceStore(application)
|
|
}
|
|
addSingletonFactory {
|
|
NetworkPreferences(
|
|
preferenceStore = get(),
|
|
verboseLogging = isDevFlavor,
|
|
)
|
|
}
|
|
addSingletonFactory {
|
|
SourcePreferences(get())
|
|
}
|
|
addSingletonFactory {
|
|
SecurityPreferences(get())
|
|
}
|
|
addSingletonFactory {
|
|
LibraryPreferences(get())
|
|
}
|
|
addSingletonFactory {
|
|
ReaderPreferences(get())
|
|
}
|
|
addSingletonFactory {
|
|
TrackPreferences(get())
|
|
}
|
|
addSingletonFactory {
|
|
AndroidDownloadFolderProvider(application)
|
|
}
|
|
addSingletonFactory {
|
|
DownloadPreferences(
|
|
folderProvider = get<AndroidDownloadFolderProvider>(),
|
|
preferenceStore = get(),
|
|
)
|
|
}
|
|
addSingletonFactory {
|
|
AndroidBackupFolderProvider(application)
|
|
}
|
|
addSingletonFactory {
|
|
BackupPreferences(
|
|
folderProvider = get<AndroidBackupFolderProvider>(),
|
|
preferenceStore = get(),
|
|
)
|
|
}
|
|
addSingletonFactory {
|
|
UiPreferences(get())
|
|
}
|
|
addSingletonFactory {
|
|
BasePreferences(application, get())
|
|
}
|
|
}
|
|
}
|