From 2821450458fa0afe2f304aa0c2c060c535fa1459 Mon Sep 17 00:00:00 2001 From: Yjin <35057681+e-shl@users.noreply.github.com> Date: Fri, 2 Sep 2022 23:48:27 +0500 Subject: [PATCH] [RU]NewManga optional show paid chapters (#13324) --- src/ru/newbie/build.gradle | 2 +- .../tachiyomi/extension/ru/newbie/Newbie.kt | 43 ++++++++++++++++--- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/ru/newbie/build.gradle b/src/ru/newbie/build.gradle index c9d468a35..762e1ee19 100644 --- a/src/ru/newbie/build.gradle +++ b/src/ru/newbie/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'NewManga(Newbie)' pkgNameSuffix = 'ru.newbie' extClass = '.Newbie' - extVersionCode = 10 + extVersionCode = 11 } dependencies { diff --git a/src/ru/newbie/src/eu/kanade/tachiyomi/extension/ru/newbie/Newbie.kt b/src/ru/newbie/src/eu/kanade/tachiyomi/extension/ru/newbie/Newbie.kt index 05fa76bce..31eae5022 100644 --- a/src/ru/newbie/src/eu/kanade/tachiyomi/extension/ru/newbie/Newbie.kt +++ b/src/ru/newbie/src/eu/kanade/tachiyomi/extension/ru/newbie/Newbie.kt @@ -12,10 +12,13 @@ import SeriesWrapperDto import SubSearchDto import android.annotation.SuppressLint import android.annotation.TargetApi +import android.app.Application +import android.content.SharedPreferences import android.os.Build import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.asObservableSuccess +import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.MangasPage @@ -36,13 +39,15 @@ import okhttp3.Response import okhttp3.ResponseBody.Companion.toResponseBody import org.jsoup.Jsoup import rx.Observable +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy import java.text.DecimalFormat import java.text.SimpleDateFormat import java.util.Date import java.util.Locale -class Newbie : HttpSource() { +class Newbie : ConfigurableSource, HttpSource() { override val name = "NewManga(Newbie)" override val id: Long = 8033757373676218584 @@ -51,6 +56,10 @@ class Newbie : HttpSource() { override val lang = "ru" + private val preferences: SharedPreferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + override val supportsLatest = true private var branches = mutableMapOf>() @@ -278,6 +287,8 @@ class Newbie : HttpSource() { @SuppressLint("DefaultLocale") private fun chapterName(book: BookDto): String { var chapterName = "${book.tom}. Глава ${DecimalFormat("#,###.##").format(book.number).replace(",", ".")}" + if (!book.is_available) + chapterName += " \uD83D\uDCB2 " if (book.name?.isNotBlank() == true) { chapterName += " ${book.name.capitalize()}" } @@ -313,10 +324,11 @@ class Newbie : HttpSource() { } override fun chapterListParse(response: Response): List { - val body = response.body!!.string() - val chapters = json.decodeFromString>>(body) - - return chapters.items.filter { it.is_available }.map { chapter -> + var chapters = json.decodeFromString>>(response.body!!.string()).items + if (!preferences.getBoolean(PAID_PREF, false)) { + chapters = chapters.filter { it.is_available } + } + return chapters.map { chapter -> SChapter.create().apply { chapter_number = chapter.number name = chapterName(chapter) @@ -340,8 +352,7 @@ class Newbie : HttpSource() { } private fun pageListParse(response: Response, chapter: SChapter): List { - val body = response.body?.string()!! - val pages = json.decodeFromString>(body) + val pages = json.decodeFromString>(response.body?.string()!!) val result = mutableListOf() pages.forEach { page -> (1..page.slices!!).map { i -> @@ -607,9 +618,27 @@ class Newbie : HttpSource() { CheckFilter("18+", "ADULT_18") ) + override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) { + val paidChapterShow = androidx.preference.CheckBoxPreference(screen.context).apply { + key = PAID_PREF + title = PAID_PREF_Title + summary = "Показывает не купленные\uD83D\uDCB2 главы(может вызвать ошибки при обновлении/автозагрузке)" + setDefaultValue(false) + + setOnPreferenceChangeListener { _, newValue -> + val checkValue = newValue as Boolean + preferences.edit().putBoolean(key, checkValue).commit() + } + } + screen.addPreference(paidChapterShow) + } + companion object { private const val API_URL = "https://api.newmanga.org/v2" private const val IMAGE_URL = "https://storage.newmanga.org" + + private const val PAID_PREF = "PaidChapter" + private const val PAID_PREF_Title = "Показывать платные главы" } private val json: Json by injectLazy()