From 16b6b6c0712bf7ea52ab2de6a06f274189eb7712 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sat, 23 Apr 2022 10:31:10 +0300 Subject: [PATCH] Add dummy manga parser for development --- .idea/inspectionProfiles/Project_Default.xml | 4 +- app/build.gradle | 2 +- .../kotatsu/core/parser/DummyParser.kt | 40 +++++++++++++++++++ .../kotatsu/core/parser/MangaParser.kt | 14 +++++++ .../kotatsu/core/parser/MangaRepository.kt | 2 +- .../core/parser/RemoteMangaRepository.kt | 14 +++---- .../kotatsu/core/prefs/AppSettings.kt | 21 +++++++--- .../settings/ContentSettingsFragment.kt | 3 +- .../settings/onboard/OnboardViewModel.kt | 8 ++-- .../sources/SourcesSettingsViewModel.kt | 5 +-- .../kotatsu/core/parser/MangaParser.kt | 10 +++++ 11 files changed, 94 insertions(+), 29 deletions(-) create mode 100644 app/src/debug/java/org/koitharu/kotatsu/core/parser/DummyParser.kt create mode 100644 app/src/debug/java/org/koitharu/kotatsu/core/parser/MangaParser.kt create mode 100644 app/src/release/java/org/koitharu/kotatsu/core/parser/MangaParser.kt diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index fe5866281..a6fb1fbe4 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -1,8 +1,10 @@ diff --git a/app/build.gradle b/app/build.gradle index 9e32665c9..c48ed31fd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -65,7 +65,7 @@ android { } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) - implementation('com.github.nv95:kotatsu-parsers:dd9ace35d1') { + implementation('com.github.nv95:kotatsu-parsers:c1aa8a45dc') { exclude group: 'org.json', module: 'json' } diff --git a/app/src/debug/java/org/koitharu/kotatsu/core/parser/DummyParser.kt b/app/src/debug/java/org/koitharu/kotatsu/core/parser/DummyParser.kt new file mode 100644 index 000000000..4323e3a5f --- /dev/null +++ b/app/src/debug/java/org/koitharu/kotatsu/core/parser/DummyParser.kt @@ -0,0 +1,40 @@ +package org.koitharu.kotatsu.core.parser + +import java.util.* +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.* + +/** + * This parser is just for parser development, it should not be used in releases + */ +class DummyParser(override val context: MangaLoaderContext) : MangaParser(MangaSource.DUMMY) { + + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("", null) + + override val sortOrders: Set + get() = EnumSet.allOf(SortOrder::class.java) + + override suspend fun getDetails(manga: Manga): Manga { + TODO("Not yet implemented") + } + + override suspend fun getList( + offset: Int, + query: String?, + tags: Set?, + sortOrder: SortOrder? + ): List { + TODO("Not yet implemented") + } + + override suspend fun getPages(chapter: MangaChapter): List { + TODO("Not yet implemented") + } + + override suspend fun getTags(): Set { + TODO("Not yet implemented") + } +} \ No newline at end of file diff --git a/app/src/debug/java/org/koitharu/kotatsu/core/parser/MangaParser.kt b/app/src/debug/java/org/koitharu/kotatsu/core/parser/MangaParser.kt new file mode 100644 index 000000000..596d4c626 --- /dev/null +++ b/app/src/debug/java/org/koitharu/kotatsu/core/parser/MangaParser.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.core.parser + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.newParser + +fun MangaParser(source: MangaSource, loaderContext: MangaLoaderContext): MangaParser { + return if (source == MangaSource.DUMMY) { + DummyParser(loaderContext) + } else { + source.newParser(loaderContext) + } +} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/MangaRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/MangaRepository.kt index 1857064b3..87c5a3d6b 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/MangaRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/MangaRepository.kt @@ -32,7 +32,7 @@ interface MangaRepository { return if (source == MangaSource.LOCAL) { get() } else { - RemoteMangaRepository(source, get()) + RemoteMangaRepository(MangaParser(source, get())) } } } diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/RemoteMangaRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/RemoteMangaRepository.kt index a532f6e6e..14a113e24 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/RemoteMangaRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/RemoteMangaRepository.kt @@ -1,19 +1,15 @@ package org.koitharu.kotatsu.core.parser import org.koitharu.kotatsu.core.prefs.SourceSettings -import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaParser import org.koitharu.kotatsu.parsers.MangaParserAuthProvider import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.newParser -class RemoteMangaRepository( - override val source: MangaSource, - loaderContext: MangaLoaderContext, -) : MangaRepository { +class RemoteMangaRepository(private val parser: MangaParser) : MangaRepository { - private val parser: MangaParser = source.newParser(loaderContext) + override val source: MangaSource + get() = parser.source override val sortOrders: Set get() = parser.sortOrders @@ -28,7 +24,7 @@ class RemoteMangaRepository( offset: Int, query: String?, tags: Set?, - sortOrder: SortOrder? + sortOrder: SortOrder?, ): List = parser.getList(offset, query, tags, sortOrder) override suspend fun getDetails(manga: Manga): Manga = parser.getDetails(manga) @@ -48,4 +44,4 @@ class RemoteMangaRepository( } private fun getConfig() = parser.config as SourceSettings -} +} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt index 89cbc1aaf..e3b17c5dc 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt @@ -18,6 +18,7 @@ import java.util.* import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.channels.trySendBlocking import kotlinx.coroutines.flow.callbackFlow +import org.koitharu.kotatsu.BuildConfig import org.koitharu.kotatsu.core.model.ZoomMode import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.utils.ext.getEnumValue @@ -28,6 +29,16 @@ class AppSettings(context: Context) { private val prefs = PreferenceManager.getDefaultSharedPreferences(context) + private val remoteSources = EnumSet.allOf(MangaSource::class.java).apply { + remove(MangaSource.LOCAL) + if (!BuildConfig.DEBUG) { + remove(MangaSource.DUMMY) + } + } + + val remoteMangaSources: Set + get() = Collections.unmodifiableSet(remoteSources) + var listMode: ListMode get() = prefs.getEnumValue(KEY_LIST_MODE, ListMode.DETAILED_LIST) set(value) = prefs.edit { putEnumValue(KEY_LIST_MODE, value) } @@ -104,10 +115,9 @@ class AppSettings(context: Context) { get() = prefs.getString(KEY_APP_PASSWORD, null) set(value) = prefs.edit { if (value != null) putString(KEY_APP_PASSWORD, value) else remove(KEY_APP_PASSWORD) } - var sourcesOrder: List + var sourcesOrder: List get() = prefs.getString(KEY_SOURCES_ORDER, null) ?.split('|') - ?.mapNotNull(String::toIntOrNull) .orEmpty() set(value) = prefs.edit { putString(KEY_SOURCES_ORDER, value.joinToString("|")) @@ -178,11 +188,10 @@ class AppSettings(context: Context) { } fun getMangaSources(includeHidden: Boolean): List { - val list = MangaSource.values().toMutableList() - list.remove(MangaSource.LOCAL) + val list = remoteSources.toMutableList() val order = sourcesOrder list.sortBy { x -> - val e = order.indexOf(x.ordinal) + val e = order.indexOf(x.name) if (e == -1) order.size + x.ordinal else e } if (!includeHidden) { @@ -224,7 +233,7 @@ class AppSettings(context: Context) { const val KEY_DYNAMIC_THEME = "dynamic_theme" const val KEY_THEME_AMOLED = "amoled_theme" const val KEY_DATE_FORMAT = "date_format" - const val KEY_SOURCES_ORDER = "sources_order" + const val KEY_SOURCES_ORDER = "sources_order_2" const val KEY_SOURCES_HIDDEN = "sources_hidden" const val KEY_TRAFFIC_WARNING = "traffic_warning" const val KEY_PAGES_CACHE_CLEAR = "pages_cache_clear" diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/ContentSettingsFragment.kt b/app/src/main/java/org/koitharu/kotatsu/settings/ContentSettingsFragment.kt index 5e4c7555b..496fafcea 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/ContentSettingsFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/ContentSettingsFragment.kt @@ -12,7 +12,6 @@ import org.koitharu.kotatsu.base.ui.BasePreferenceFragment import org.koitharu.kotatsu.base.ui.dialog.StorageSelectDialog import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.local.data.LocalStorageManager -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.utils.ext.getStorageName import org.koitharu.kotatsu.utils.ext.viewLifecycleScope @@ -87,7 +86,7 @@ class ContentSettingsFragment : private fun bindRemoteSourcesSummary() { findPreference(AppSettings.KEY_REMOTE_SOURCES)?.run { - val total = MangaSource.values().size - 1 + val total = settings.remoteMangaSources.size summary = getString( R.string.enabled_d_of_d, total - settings.hiddenSources.size, total ) diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardViewModel.kt index b9f97f37d..f2a929017 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardViewModel.kt @@ -3,6 +3,7 @@ package org.koitharu.kotatsu.settings.onboard import androidx.collection.ArraySet import androidx.core.os.LocaleListCompat import androidx.lifecycle.MutableLiveData +import java.util.* import org.koitharu.kotatsu.base.ui.BaseViewModel import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.parsers.model.MangaSource @@ -11,17 +12,14 @@ import org.koitharu.kotatsu.parsers.util.toTitleCase import org.koitharu.kotatsu.settings.onboard.model.SourceLocale import org.koitharu.kotatsu.utils.ext.map import org.koitharu.kotatsu.utils.ext.mapToSet -import java.util.* class OnboardViewModel( private val settings: AppSettings, ) : BaseViewModel() { - private val allSources = MangaSource.values().filterNot { x -> x == MangaSource.LOCAL } + private val allSources = settings.remoteMangaSources - private val locales = allSources.mapTo(ArraySet()) { - it.locale - } + private val locales = allSources.mapTo(ArraySet()) { it.locale } private val selectedLocales = locales.toMutableSet() diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/sources/SourcesSettingsViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/settings/sources/SourcesSettingsViewModel.kt index 19388cbcc..01185ba2a 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/sources/SourcesSettingsViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/sources/SourcesSettingsViewModel.kt @@ -32,7 +32,7 @@ class SourcesSettingsViewModel( if ((snapshot[newPos] as? SourceConfigItem.SourceItem)?.isEnabled != true) return false snapshot.move(oldPos, newPos) settings.sourcesOrder = snapshot.mapNotNull { - (it as? SourceConfigItem.SourceItem)?.source?.ordinal + (it as? SourceConfigItem.SourceItem)?.source?.name } buildList() return true @@ -111,9 +111,6 @@ class SourcesSettingsViewModel( if (enabledSources?.size != sources.size) { result += SourceConfigItem.Header(R.string.available_sources) for ((key, list) in map) { - val locale = if (key != null) { - Locale(key) - } else null list.sortBy { it.ordinal } val isExpanded = key in expandedGroups result += SourceConfigItem.LocaleGroup( diff --git a/app/src/release/java/org/koitharu/kotatsu/core/parser/MangaParser.kt b/app/src/release/java/org/koitharu/kotatsu/core/parser/MangaParser.kt new file mode 100644 index 000000000..a8f4377e5 --- /dev/null +++ b/app/src/release/java/org/koitharu/kotatsu/core/parser/MangaParser.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.core.parser + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.newParser + +fun MangaParser(source: MangaSource, loaderContext: MangaLoaderContext): MangaParser { + return source.newParser(loaderContext) +} \ No newline at end of file