diff --git a/multisrc/overrides/wpmangareader/alphascans/src/AlphaScans.kt b/multisrc/overrides/wpmangareader/alphascans/src/AlphaScans.kt new file mode 100644 index 000000000..1f08b0b30 --- /dev/null +++ b/multisrc/overrides/wpmangareader/alphascans/src/AlphaScans.kt @@ -0,0 +1,130 @@ +package eu.kanade.tachiyomi.extension.en.alphascans + +import android.app.Application +import android.content.SharedPreferences +import androidx.preference.PreferenceScreen +import androidx.preference.SwitchPreferenceCompat +import eu.kanade.tachiyomi.multisrc.wpmangareader.WPMangaReader +import eu.kanade.tachiyomi.source.ConfigurableSource +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import rx.Observable +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get + +open class AlphaScans : WPMangaReader("Alpha Scans", "https://alpha-scans.org", "en"), ConfigurableSource { + + private val preferences: SharedPreferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + + // Permanent Url start + override fun fetchPopularManga(page: Int): Observable { + return super.fetchPopularManga(page).tempUrlToPermIfNeeded() + } + + override fun fetchLatestUpdates(page: Int): Observable { + return super.fetchLatestUpdates(page).tempUrlToPermIfNeeded() + } + + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { + return super.fetchSearchManga(page, query, filters).tempUrlToPermIfNeeded() + } + + private fun Observable.tempUrlToPermIfNeeded(): Observable { + return this.map { mangasPage -> + MangasPage( + mangasPage.mangas.map { it.tempUrlToPermIfNeeded() }, + mangasPage.hasNextPage + ) + } + } + + private fun SManga.tempUrlToPermIfNeeded(): SManga { + val turnTempUrlToPerm = preferences.getBoolean(getPermanentMangaUrlPreferenceKey(), true) + if (!turnTempUrlToPerm) return this + + val sMangaTitleFirstWord = this.title.split(" ")[0] + if (!this.url.contains("/$sMangaTitleFirstWord", ignoreCase = true)) { + this.url = this.url.replaceFirst(TEMP_TO_PERM_URL_REGEX, "$1") + } + return this + } + + override fun fetchChapterList(manga: SManga): Observable> { + val sManga = manga.tempUrlToPermIfNeeded() + return super.fetchChapterList(sManga).map { sChapterList -> + sChapterList.map { it.tempUrlToPermIfNeeded(sManga) } + } + } + + private fun SChapter.tempUrlToPermIfNeeded(manga: SManga): SChapter { + val turnTempUrlToPerm = preferences.getBoolean(getPermanentChapterUrlPreferenceKey(), true) + if (!turnTempUrlToPerm) return this + + val sChapterNameFirstWord = this.name.split(" ")[0] + val sMangaTitleFirstWord = manga.title.split(" ")[0] + if ( + !this.url.contains("/$sChapterNameFirstWord", ignoreCase = true) && + !this.url.contains("/$sMangaTitleFirstWord", ignoreCase = true) + ) { + this.url = this.url.replaceFirst(TEMP_TO_PERM_URL_REGEX, "$1") + } + return this + } + + override fun setupPreferenceScreen(screen: PreferenceScreen) { + val permanentMangaUrlPref = SwitchPreferenceCompat(screen.context).apply { + key = getPermanentMangaUrlPreferenceKey() + title = PREF_PERM_MANGA_URL_TITLE + summary = PREF_PERM_MANGA_URL_SUMMARY + setDefaultValue(true) + + setOnPreferenceChangeListener { _, newValue -> + val checkValue = newValue as Boolean + preferences.edit() + .putBoolean(getPermanentMangaUrlPreferenceKey(), checkValue) + .commit() + } + } + val permanentChapterUrlPref = SwitchPreferenceCompat(screen.context).apply { + key = getPermanentChapterUrlPreferenceKey() + title = PREF_PERM_CHAPTER_URL_TITLE + summary = PREF_PERM_CHAPTER_URL_SUMMARY + setDefaultValue(true) + + setOnPreferenceChangeListener { _, newValue -> + val checkValue = newValue as Boolean + preferences.edit() + .putBoolean(getPermanentChapterUrlPreferenceKey(), checkValue) + .commit() + } + } + screen.addPreference(permanentMangaUrlPref) + screen.addPreference(permanentChapterUrlPref) + } + + private fun getPermanentMangaUrlPreferenceKey(): String { + return PREF_PERM_MANGA_URL_KEY_PREFIX + lang + } + + private fun getPermanentChapterUrlPreferenceKey(): String { + return PREF_PERM_CHAPTER_URL_KEY_PREFIX + lang + } + // Permanent Url for Manga/Chapter End + + companion object { + private const val PREF_PERM_MANGA_URL_KEY_PREFIX = "pref_permanent_manga_url_" + private const val PREF_PERM_MANGA_URL_TITLE = "Permanent Manga URL" + private const val PREF_PERM_MANGA_URL_SUMMARY = "Turns all manga urls into permanent ones." + + private const val PREF_PERM_CHAPTER_URL_KEY_PREFIX = "pref_permanent_chapter_url" + private const val PREF_PERM_CHAPTER_URL_TITLE = "Permanent Chapter URL" + private const val PREF_PERM_CHAPTER_URL_SUMMARY = "Turns all chapter urls into permanent one." + + private val TEMP_TO_PERM_URL_REGEX = Regex("""(/)\d+-""") + } +} diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/wpmangareader/WPMangaReaderGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/wpmangareader/WPMangaReaderGenerator.kt index f64537777..11072571f 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/wpmangareader/WPMangaReaderGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/wpmangareader/WPMangaReaderGenerator.kt @@ -15,7 +15,7 @@ class WPMangaReaderGenerator : ThemeSourceGenerator { override val sources = listOf( MultiLang("Flame Scans", "https://flamescans.org", listOf("ar", "en"), className = "FlameScansFactory", pkgName = "flamescans"), SingleLang("Anitation Arts", "https://anitationarts.org", "en", overrideVersionCode = 1), - SingleLang("Alpha Scans", "https://alpha-scans.org", "en"), + SingleLang("Alpha Scans", "https://alpha-scans.org", "en", overrideVersionCode = 1), SingleLang("BeastScans", "https://beastscans.com", "en"), SingleLang("iiMANGA", "https://iimanga.com", "ar"), SingleLang("Magus Manga", "https://magusmanga.com", "ar"),