package eu.kanade.tachiyomi.extension.ar.mangaswat import android.app.Application import android.content.SharedPreferences import android.widget.Toast import androidx.preference.PreferenceScreen import eu.kanade.tachiyomi.extension.BuildConfig import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia import eu.kanade.tachiyomi.network.interceptor.rateLimit import eu.kanade.tachiyomi.source.model.Page import kotlinx.serialization.Serializable import kotlinx.serialization.decodeFromString import okhttp3.Headers import okhttp3.OkHttpClient import org.jsoup.nodes.Document import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.text.SimpleDateFormat import java.util.Locale class MangaSwat : MangaThemesia( "MangaSwat", "https://swatmanga.me", "ar", dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.US), ) { private val defaultBaseUrl = "https://swatmanga.me" override val baseUrl by lazy { getPrefBaseUrl() } private val preferences: SharedPreferences by lazy { Injekt.get().getSharedPreferences("source_$id", 0x0000) } override val client: OkHttpClient = super.client.newBuilder() .rateLimit(1) .build() override fun headersBuilder(): Headers.Builder = super.headersBuilder() .add("Referer", "$baseUrl/") override val seriesArtistSelector = "span:contains(الناشر) i" override val seriesAuthorSelector = "span:contains(المؤلف) i" override val seriesGenreSelector = "span:contains(التصنيف) a, .mgen a" override val seriesTypeSelector = "span:contains(النوع) a" override val seriesStatusSelector = "span:contains(الحالة)" override fun pageListParse(document: Document): List { val scriptContent = document.selectFirst("script:containsData(ts_reader)")!!.data() val jsonString = scriptContent.substringAfter("ts_reader.run(").substringBefore(");") val tsReader = json.decodeFromString(jsonString) val imageUrls = tsReader.sources.firstOrNull()?.images ?: return emptyList() return imageUrls.mapIndexed { index, imageUrl -> Page(index, imageUrl = imageUrl) } } override fun chapterListSelector() = "div.bxcl li, ul div:has(span.lchx)" @Serializable data class TSReader( val sources: List, ) @Serializable data class ReaderImageSource( val source: String, val images: List, ) companion object { private const val RESTART_TACHIYOMI = "Restart Tachiyomi to apply new setting." private const val BASE_URL_PREF_TITLE = "Override BaseUrl" private const val BASE_URL_PREF = "overrideBaseUrl_v${BuildConfig.VERSION_CODE}" private const val BASE_URL_PREF_SUMMARY = "For temporary uses. Updating the extension will erase this setting." } override fun setupPreferenceScreen(screen: PreferenceScreen) { val baseUrlPref = androidx.preference.EditTextPreference(screen.context).apply { key = BASE_URL_PREF title = BASE_URL_PREF_TITLE summary = BASE_URL_PREF_SUMMARY this.setDefaultValue(defaultBaseUrl) dialogTitle = BASE_URL_PREF_TITLE setOnPreferenceChangeListener { _, _ -> Toast.makeText(screen.context, RESTART_TACHIYOMI, Toast.LENGTH_LONG).show() true } } screen.addPreference(baseUrlPref) super.setupPreferenceScreen(screen) } private fun getPrefBaseUrl(): String = preferences.getString(BASE_URL_PREF, defaultBaseUrl)!! }