Remove 4 dead extensions (#6937)
* Remove Mahua USS * Remove Manga-1001.com * Remove Manga Siginagi * Remove MangaOwl.To
@ -1,10 +0,0 @@
 | 
			
		||||
ext {
 | 
			
		||||
    extName = 'Mahua USS'
 | 
			
		||||
    extClass = '.MahuaUSS'
 | 
			
		||||
    themePkg = 'madara'
 | 
			
		||||
    baseUrl = 'https://manhuauss.com'
 | 
			
		||||
    overrideVersionCode = 0
 | 
			
		||||
    isNsfw = false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
apply from: "$rootDir/common.gradle"
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 6.9 KiB  | 
| 
		 Before Width: | Height: | Size: 3.4 KiB  | 
| 
		 Before Width: | Height: | Size: 12 KiB  | 
| 
		 Before Width: | Height: | Size: 25 KiB  | 
| 
		 Before Width: | Height: | Size: 43 KiB  | 
@ -1,14 +0,0 @@
 | 
			
		||||
package eu.kanade.tachiyomi.extension.en.mahuauss
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
 | 
			
		||||
 | 
			
		||||
class MahuaUSS : Madara(
 | 
			
		||||
    "Mahua USS",
 | 
			
		||||
    "https://manhuauss.com",
 | 
			
		||||
    "en",
 | 
			
		||||
) {
 | 
			
		||||
    override val useLoadMoreRequest = LoadMoreStrategy.Never
 | 
			
		||||
    override val useNewChapterEndpoint = true
 | 
			
		||||
 | 
			
		||||
    override val fetchGenres = false // Exist, but don't filter anything
 | 
			
		||||
}
 | 
			
		||||
@ -1,9 +0,0 @@
 | 
			
		||||
ext {
 | 
			
		||||
    extName = 'Manga-1001.com'
 | 
			
		||||
    extClass = '.MangaDash1001Com'
 | 
			
		||||
    themePkg = 'madara'
 | 
			
		||||
    baseUrl = 'https://manga-1001.com'
 | 
			
		||||
    overrideVersionCode = 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
apply from: "$rootDir/common.gradle"
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 2.8 KiB  | 
| 
		 Before Width: | Height: | Size: 1.6 KiB  | 
| 
		 Before Width: | Height: | Size: 3.9 KiB  | 
| 
		 Before Width: | Height: | Size: 6.7 KiB  | 
| 
		 Before Width: | Height: | Size: 9.0 KiB  | 
@ -1,7 +0,0 @@
 | 
			
		||||
package eu.kanade.tachiyomi.extension.en.mangadash1001com
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
 | 
			
		||||
 | 
			
		||||
class MangaDash1001Com : Madara("Manga-1001.com", "https://manga-1001.com", "en") {
 | 
			
		||||
    override val useNewChapterEndpoint = false
 | 
			
		||||
}
 | 
			
		||||
@ -1,7 +0,0 @@
 | 
			
		||||
ext {
 | 
			
		||||
    extName = 'MangaOwl.To'
 | 
			
		||||
    extClass = '.MangaOwlToFactory'
 | 
			
		||||
    extVersionCode = 2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
apply from: "$rootDir/common.gradle"
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 2.5 KiB  | 
| 
		 Before Width: | Height: | Size: 1.4 KiB  | 
| 
		 Before Width: | Height: | Size: 3.3 KiB  | 
| 
		 Before Width: | Height: | Size: 5.9 KiB  | 
| 
		 Before Width: | Height: | Size: 9.3 KiB  | 
@ -1,168 +0,0 @@
 | 
			
		||||
package eu.kanade.tachiyomi.extension.en.mangaowlto
 | 
			
		||||
 | 
			
		||||
import android.app.Application
 | 
			
		||||
import android.content.SharedPreferences
 | 
			
		||||
import androidx.preference.ListPreference
 | 
			
		||||
import androidx.preference.PreferenceScreen
 | 
			
		||||
import eu.kanade.tachiyomi.network.GET
 | 
			
		||||
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.SChapter
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.SManga
 | 
			
		||||
import eu.kanade.tachiyomi.source.online.HttpSource
 | 
			
		||||
import kotlinx.serialization.decodeFromString
 | 
			
		||||
import kotlinx.serialization.json.Json
 | 
			
		||||
import okhttp3.HttpUrl.Companion.toHttpUrl
 | 
			
		||||
import okhttp3.Request
 | 
			
		||||
import okhttp3.Response
 | 
			
		||||
import uy.kohesive.injekt.Injekt
 | 
			
		||||
import uy.kohesive.injekt.api.get
 | 
			
		||||
import uy.kohesive.injekt.injectLazy
 | 
			
		||||
 | 
			
		||||
class MangaOwlTo(
 | 
			
		||||
    private val collection: String,
 | 
			
		||||
    extraName: String,
 | 
			
		||||
    private val genresList: List<Genre>,
 | 
			
		||||
) : ConfigurableSource, HttpSource() {
 | 
			
		||||
    override val name: String = "MangaOwl.To $extraName"
 | 
			
		||||
    override val lang = "en"
 | 
			
		||||
    override val supportsLatest = true
 | 
			
		||||
 | 
			
		||||
    private val preferences: SharedPreferences =
 | 
			
		||||
        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
 | 
			
		||||
 | 
			
		||||
    private val defaultDomain: String =
 | 
			
		||||
        preferences.getString(MIRROR_PREF_KEY, MIRROR_PREF_DEFAULT_VALUE)!!
 | 
			
		||||
 | 
			
		||||
    override val baseUrl = "https://$defaultDomain"
 | 
			
		||||
 | 
			
		||||
    private val apiUrl = "https://api.$defaultDomain/v1"
 | 
			
		||||
 | 
			
		||||
    override fun setupPreferenceScreen(screen: PreferenceScreen) {
 | 
			
		||||
        val mirrorPref = ListPreference(screen.context).apply {
 | 
			
		||||
            key = MIRROR_PREF_KEY
 | 
			
		||||
            title = "Mirror (Requires Restart)"
 | 
			
		||||
            entries = MIRROR_PREF_ENTRIES
 | 
			
		||||
            entryValues = MIRROR_PREF_ENTRY_VALUES
 | 
			
		||||
            setDefaultValue(MIRROR_PREF_DEFAULT_VALUE)
 | 
			
		||||
            summary = "%s"
 | 
			
		||||
        }
 | 
			
		||||
        screen.addPreference(mirrorPref)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private val json: Json by injectLazy()
 | 
			
		||||
 | 
			
		||||
    override fun popularMangaRequest(page: Int) =
 | 
			
		||||
        GET("$apiUrl/stories?type=$collection&ordering=-view_count&page=$page".toHttpUrl(), headers)
 | 
			
		||||
 | 
			
		||||
    override fun popularMangaParse(response: Response) =
 | 
			
		||||
        json.decodeFromString<MangaOwlToStories>(response.body.string()).toMangasPage()
 | 
			
		||||
 | 
			
		||||
    // Latest
 | 
			
		||||
 | 
			
		||||
    override fun latestUpdatesRequest(page: Int) =
 | 
			
		||||
        GET("$apiUrl/stories?type=$collection&ordering=-modified_at&page=$page".toHttpUrl(), headers)
 | 
			
		||||
 | 
			
		||||
    override fun latestUpdatesParse(response: Response) = popularMangaParse(response)
 | 
			
		||||
 | 
			
		||||
    // Search
 | 
			
		||||
 | 
			
		||||
    override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
 | 
			
		||||
        return if (query.isNotEmpty() || filters.isEmpty()) {
 | 
			
		||||
            // Search won't work together with filter
 | 
			
		||||
            val url = "$apiUrl/search".toHttpUrl().newBuilder()
 | 
			
		||||
                .addQueryParameter("q", query)
 | 
			
		||||
                .addQueryParameter("page", page.toString())
 | 
			
		||||
                .build()
 | 
			
		||||
            GET(url, headers)
 | 
			
		||||
        } else {
 | 
			
		||||
            val url = "$apiUrl/stories?type=$collection".toHttpUrl().newBuilder()
 | 
			
		||||
            filters.forEach { filter ->
 | 
			
		||||
                when (filter) {
 | 
			
		||||
                    is SortFilter -> if (!filter.toUriPart().isNullOrEmpty()) {
 | 
			
		||||
                        url.addQueryParameter("ordering", filter.toUriPart())
 | 
			
		||||
                    }
 | 
			
		||||
                    is StatusFilter -> if (!filter.toUriPart().isNullOrEmpty()) {
 | 
			
		||||
                        url.addQueryParameter("status", filter.toUriPart())
 | 
			
		||||
                    }
 | 
			
		||||
                    is GenresFilter ->
 | 
			
		||||
                        filter.state
 | 
			
		||||
                            .filter { it.state }
 | 
			
		||||
                            .forEach { url.addQueryParameter("genres", it.uriPart) }
 | 
			
		||||
                    else -> {}
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            url.addQueryParameter("page", page.toString())
 | 
			
		||||
            GET(url.build(), headers)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun searchMangaParse(response: Response) = popularMangaParse(response)
 | 
			
		||||
 | 
			
		||||
    // Manga summary page
 | 
			
		||||
    override fun mangaDetailsRequest(manga: SManga): Request {
 | 
			
		||||
        return GET("$apiUrl/stories/${manga.url}", headers)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun mangaDetailsParse(response: Response) =
 | 
			
		||||
        json.decodeFromString<MangaOwlToStory>(response.body.string()).toSManga()
 | 
			
		||||
 | 
			
		||||
    override fun getMangaUrl(manga: SManga): String {
 | 
			
		||||
        return "$baseUrl/comic/${manga.url}"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Chapters
 | 
			
		||||
    override fun chapterListRequest(manga: SManga) = mangaDetailsRequest(manga)
 | 
			
		||||
 | 
			
		||||
    override fun chapterListParse(response: Response) =
 | 
			
		||||
        json.decodeFromString<MangaOwlToStory>(response.body.string()).chaptersList
 | 
			
		||||
 | 
			
		||||
    override fun getChapterUrl(chapter: SChapter): String {
 | 
			
		||||
        return "$baseUrl${chapter.url}"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Pages
 | 
			
		||||
    override fun pageListRequest(chapter: SChapter): Request {
 | 
			
		||||
        val id = chapter.url.substringAfterLast("/")
 | 
			
		||||
        return GET("$apiUrl/chapters/$id/images?page_size=1000", headers)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun pageListParse(response: Response) =
 | 
			
		||||
        json.decodeFromString<MangaOwlToChapterPages>(response.body.string()).toPages()
 | 
			
		||||
 | 
			
		||||
    override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException()
 | 
			
		||||
 | 
			
		||||
    // Filters
 | 
			
		||||
    override fun getFilterList() = FilterList(
 | 
			
		||||
        Filter.Header("Search query won't use filters"),
 | 
			
		||||
        GenresFilter(genresList),
 | 
			
		||||
        StatusFilter(),
 | 
			
		||||
        SortFilter(),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    companion object {
 | 
			
		||||
        private const val MIRROR_PREF_KEY = "MIRROR"
 | 
			
		||||
        private val MIRROR_PREF_ENTRIES get() = arrayOf(
 | 
			
		||||
            "mangaowl.to",
 | 
			
		||||
            "mangabuddy.to",
 | 
			
		||||
            "mangafreak.to",
 | 
			
		||||
            "toonily.to",
 | 
			
		||||
            "manganato.so",
 | 
			
		||||
            "mangakakalot.so", // Redirected from mangago.to
 | 
			
		||||
        )
 | 
			
		||||
        private val MIRROR_PREF_ENTRY_VALUES get() = arrayOf(
 | 
			
		||||
            "mangaowl.to",
 | 
			
		||||
            "mangabuddy.to",
 | 
			
		||||
            "mangafreak.to",
 | 
			
		||||
            "toonily.to",
 | 
			
		||||
            "manganato.so",
 | 
			
		||||
            "mangago.to", // API for domain mangakakalot.so
 | 
			
		||||
        )
 | 
			
		||||
        private val MIRROR_PREF_DEFAULT_VALUE get() = MIRROR_PREF_ENTRY_VALUES[0]
 | 
			
		||||
 | 
			
		||||
        const val ONGOING = "ongoing"
 | 
			
		||||
        const val COMPLETED = "completed"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,113 +0,0 @@
 | 
			
		||||
package eu.kanade.tachiyomi.extension.en.mangaowlto
 | 
			
		||||
 | 
			
		||||
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 kotlinx.serialization.SerialName
 | 
			
		||||
import kotlinx.serialization.Serializable
 | 
			
		||||
import java.text.ParseException
 | 
			
		||||
import java.text.SimpleDateFormat
 | 
			
		||||
import java.util.Locale
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
class MangaOwlToStories(
 | 
			
		||||
    private val next: String?,
 | 
			
		||||
    private val results: List<MangaOwlToStory>,
 | 
			
		||||
) {
 | 
			
		||||
    fun toMangasPage() = MangasPage(
 | 
			
		||||
        mangas = results.map { it.toSManga() },
 | 
			
		||||
        hasNextPage = !next.isNullOrEmpty(),
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
class MangaOwlToStory(
 | 
			
		||||
    private val name: String,
 | 
			
		||||
    private val slug: String,
 | 
			
		||||
    @SerialName("status") private val titleStatus: String?, // ongoing & completed
 | 
			
		||||
    @SerialName("thumbnail") private val thumbnailUrl: String,
 | 
			
		||||
    @SerialName("al_name") private val altName: String?,
 | 
			
		||||
    private val rating: Float?,
 | 
			
		||||
    @SerialName("view_count") private val views: Int,
 | 
			
		||||
    private val description: String?,
 | 
			
		||||
    private val genres: List<MangaOwlToGenre> = emptyList(),
 | 
			
		||||
    private val authors: List<MangaOwlToAuthor> = emptyList(),
 | 
			
		||||
    private val chapters: List<MangaOwlToChapter> = emptyList(),
 | 
			
		||||
) {
 | 
			
		||||
    private val fullDescription: String
 | 
			
		||||
        get() = buildString {
 | 
			
		||||
            append(description)
 | 
			
		||||
            altName?.let { append("\n\n $it") }
 | 
			
		||||
            append("\n\nRating: $rating")
 | 
			
		||||
            append("\nViews: $views")
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    val chaptersList: List<SChapter>
 | 
			
		||||
        get() = chapters.reversed().map { it.toSChapter(slug) }
 | 
			
		||||
 | 
			
		||||
    fun toSManga(): SManga = SManga.create().apply {
 | 
			
		||||
        title = name
 | 
			
		||||
        author = authors.joinToString { it.name }
 | 
			
		||||
        description = fullDescription.trim()
 | 
			
		||||
        genre = genres.joinToString { it.name }
 | 
			
		||||
        status = when (titleStatus) {
 | 
			
		||||
            MangaOwlTo.ONGOING -> SManga.ONGOING
 | 
			
		||||
            MangaOwlTo.COMPLETED -> SManga.COMPLETED
 | 
			
		||||
            else -> SManga.UNKNOWN
 | 
			
		||||
        }
 | 
			
		||||
        thumbnail_url = thumbnailUrl
 | 
			
		||||
        url = slug
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
class MangaOwlToGenre(
 | 
			
		||||
    val name: String,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
class MangaOwlToAuthor(
 | 
			
		||||
    val name: String,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
class MangaOwlToChapter(
 | 
			
		||||
    private val id: Int,
 | 
			
		||||
    @SerialName("name") private val title: String,
 | 
			
		||||
    @SerialName("created_at") private val createdAt: String,
 | 
			
		||||
) {
 | 
			
		||||
    fun toSChapter(slug: String): SChapter = SChapter.create().apply {
 | 
			
		||||
        name = title
 | 
			
		||||
        date_upload = parseDate()
 | 
			
		||||
        url = "/reading/$slug/$id"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    companion object {
 | 
			
		||||
        private val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'", Locale.US)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun parseDate(): Long = try {
 | 
			
		||||
        dateFormat.parse(createdAt)!!.time
 | 
			
		||||
    } catch (_: ParseException) {
 | 
			
		||||
        0L
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
class MangaOwlToChapterPages(
 | 
			
		||||
    @SerialName("results") private val pages: List<MangaOwlToPage> = emptyList(),
 | 
			
		||||
) {
 | 
			
		||||
    fun toPages() =
 | 
			
		||||
        pages.mapIndexed { idx, page ->
 | 
			
		||||
            Page(
 | 
			
		||||
                index = idx,
 | 
			
		||||
                imageUrl = page.imageUrl,
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
class MangaOwlToPage(
 | 
			
		||||
    @SerialName("image") val imageUrl: String,
 | 
			
		||||
)
 | 
			
		||||
@ -1,103 +0,0 @@
 | 
			
		||||
package eu.kanade.tachiyomi.extension.en.mangaowlto
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.source.Source
 | 
			
		||||
import eu.kanade.tachiyomi.source.SourceFactory
 | 
			
		||||
 | 
			
		||||
class MangaOwlToFactory : SourceFactory {
 | 
			
		||||
    override fun createSources(): List<Source> = listOf(
 | 
			
		||||
        MangaOwlTo(
 | 
			
		||||
            collection = "manga",
 | 
			
		||||
            extraName = "Manga",
 | 
			
		||||
            genresList = listOf(
 | 
			
		||||
                Genre("Action", "13"),
 | 
			
		||||
                Genre("Adult", "29"),
 | 
			
		||||
                Genre("Adventure", "31"),
 | 
			
		||||
                Genre("Comedy", "14"),
 | 
			
		||||
                Genre("Cooking", "37"),
 | 
			
		||||
                Genre("Doujinshi", "39"),
 | 
			
		||||
                Genre("Drama", "17"),
 | 
			
		||||
                Genre("Ecchi", "15"),
 | 
			
		||||
                Genre("Fantasy", "16"),
 | 
			
		||||
                Genre("Gender bender", "35"),
 | 
			
		||||
                Genre("Harem", "27"),
 | 
			
		||||
                Genre("Historical", "18"),
 | 
			
		||||
                Genre("Horror", "28"),
 | 
			
		||||
                Genre("Isekai", "40"),
 | 
			
		||||
                Genre("Josei", "23"),
 | 
			
		||||
                Genre("Manhua", "38"),
 | 
			
		||||
                Genre("Manhwa", "36"),
 | 
			
		||||
                Genre("Martial arts", "30"),
 | 
			
		||||
                Genre("Mature", "20"),
 | 
			
		||||
                Genre("Mecha", "33"),
 | 
			
		||||
                Genre("Medical", "41"),
 | 
			
		||||
                Genre("Mystery", "7"),
 | 
			
		||||
                Genre("One shot", "1"),
 | 
			
		||||
                Genre("Psychological", "8"),
 | 
			
		||||
                Genre("Romance", "10"),
 | 
			
		||||
                Genre("School life", "3"),
 | 
			
		||||
                Genre("Sci fi", "19"),
 | 
			
		||||
                Genre("Seinen", "25"),
 | 
			
		||||
                Genre("Shoujo ai", "5"),
 | 
			
		||||
                Genre("Shoujo", "12"),
 | 
			
		||||
                Genre("Shounen ai", "4"),
 | 
			
		||||
                Genre("Shounen", "9"),
 | 
			
		||||
                Genre("Slice of life", "26"),
 | 
			
		||||
                Genre("Smut", "32"),
 | 
			
		||||
                Genre("Sports", "21"),
 | 
			
		||||
                Genre("Supernatural", "24"),
 | 
			
		||||
                Genre("Tragedy", "22"),
 | 
			
		||||
                Genre("Webtoons", "34"),
 | 
			
		||||
                Genre("Yaoi", "2"),
 | 
			
		||||
                Genre("Yuri", "6"),
 | 
			
		||||
            ),
 | 
			
		||||
        ),
 | 
			
		||||
        MangaOwlTo(
 | 
			
		||||
            collection = "comic",
 | 
			
		||||
            extraName = "Comic",
 | 
			
		||||
            genresList = listOf(
 | 
			
		||||
                Genre("215 Ink", "189"),
 | 
			
		||||
                Genre("Ablaze", "98"),
 | 
			
		||||
                Genre("Action Lab", "204"),
 | 
			
		||||
                Genre("Aftershock Comics", "68"),
 | 
			
		||||
                Genre("American Mythology", "130"),
 | 
			
		||||
                Genre("Antartic Press", "261"),
 | 
			
		||||
                Genre("Archie", "178"),
 | 
			
		||||
                Genre("Aspen", "487"),
 | 
			
		||||
                Genre("Avatar Press", "177"),
 | 
			
		||||
                Genre("Black Mask", "107"),
 | 
			
		||||
                Genre("Boom Studios", "65"),
 | 
			
		||||
                Genre("Comics Experience", "159"),
 | 
			
		||||
                Genre("Dark Horse", "92"),
 | 
			
		||||
                Genre("DC Comics", "133"),
 | 
			
		||||
                Genre("Devils Due", "290"),
 | 
			
		||||
                Genre("Dynamite", "173"),
 | 
			
		||||
                Genre("Europe Comics", "67"),
 | 
			
		||||
                Genre("Heavy Metal", "55"),
 | 
			
		||||
                Genre("Humanoids", "85"),
 | 
			
		||||
                Genre("IDW", "110"),
 | 
			
		||||
                Genre("Image Comics", "60"),
 | 
			
		||||
                Genre("Inverse", "384"),
 | 
			
		||||
                Genre("Lion Forge", "162"),
 | 
			
		||||
                Genre("Mad Cave", "96"),
 | 
			
		||||
                Genre("MAD", "485"),
 | 
			
		||||
                Genre("Magnetic Press", "114"),
 | 
			
		||||
                Genre("Marvel Comics", "45"),
 | 
			
		||||
                Genre("One Shots & TPBs", "136"),
 | 
			
		||||
                Genre("Oni Press", "338"),
 | 
			
		||||
                Genre("Rebellion", "50"),
 | 
			
		||||
                Genre("Red 5", "88"),
 | 
			
		||||
                Genre("SAF Comics", "378"),
 | 
			
		||||
                Genre("Soleil", "156"),
 | 
			
		||||
                Genre("Source Point Press", "57"),
 | 
			
		||||
                Genre("Space Goat Productions", "421"),
 | 
			
		||||
                Genre("Top Cow", "138"),
 | 
			
		||||
                Genre("Top Shelf", "101"),
 | 
			
		||||
                Genre("Upshot", "396"),
 | 
			
		||||
                Genre("Valiant", "87"),
 | 
			
		||||
                Genre("Vault", "360"),
 | 
			
		||||
                Genre("Vertigo", "457"),
 | 
			
		||||
                Genre("Zenescope", "119"),
 | 
			
		||||
            ),
 | 
			
		||||
        ),
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
@ -1,35 +0,0 @@
 | 
			
		||||
package eu.kanade.tachiyomi.extension.en.mangaowlto
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.Filter
 | 
			
		||||
 | 
			
		||||
class Genre(val name: String, val uriPart: String)
 | 
			
		||||
 | 
			
		||||
class GenreCheckBox(name: String, val uriPart: String) : Filter.CheckBox(name)
 | 
			
		||||
 | 
			
		||||
class GenresFilter(genres: List<Genre>) :
 | 
			
		||||
    Filter.Group<GenreCheckBox>("Genres", genres.map { GenreCheckBox(it.name, it.uriPart) })
 | 
			
		||||
 | 
			
		||||
class SortFilter : UriPartFilter(
 | 
			
		||||
    "Sort by",
 | 
			
		||||
    arrayOf(
 | 
			
		||||
        Pair("Default", null),
 | 
			
		||||
        Pair("Most view", "-view_count"),
 | 
			
		||||
        Pair("Added", "created_at"),
 | 
			
		||||
        Pair("Last update", "-modified_at"),
 | 
			
		||||
        Pair("High rating", "rating"),
 | 
			
		||||
    ),
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
class StatusFilter : UriPartFilter(
 | 
			
		||||
    "Status",
 | 
			
		||||
    arrayOf(
 | 
			
		||||
        Pair("Any", null),
 | 
			
		||||
        Pair("Completed", MangaOwlTo.COMPLETED),
 | 
			
		||||
        Pair("Ongoing", MangaOwlTo.ONGOING),
 | 
			
		||||
    ),
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
open class UriPartFilter(displayName: String, private val pairs: Array<Pair<String, String?>>) :
 | 
			
		||||
    Filter.Select<String>(displayName, pairs.map { it.first }.toTypedArray()) {
 | 
			
		||||
    fun toUriPart() = pairs[state].second
 | 
			
		||||
}
 | 
			
		||||
@ -1,10 +0,0 @@
 | 
			
		||||
ext {
 | 
			
		||||
    extName = 'Manga Siginagi'
 | 
			
		||||
    extClass = '.MangaSiginagi'
 | 
			
		||||
    themePkg = 'mangathemesia'
 | 
			
		||||
    baseUrl = 'https://mangasiginagi.com'
 | 
			
		||||
    overrideVersionCode = 0
 | 
			
		||||
    isNsfw = true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
apply from: "$rootDir/common.gradle"
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 2.7 KiB  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB  | 
| 
		 Before Width: | Height: | Size: 3.9 KiB  | 
| 
		 Before Width: | Height: | Size: 7.1 KiB  | 
| 
		 Before Width: | Height: | Size: 11 KiB  | 
@ -1,12 +0,0 @@
 | 
			
		||||
package eu.kanade.tachiyomi.extension.tr.mangasiginagi
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia
 | 
			
		||||
import java.text.SimpleDateFormat
 | 
			
		||||
import java.util.Locale
 | 
			
		||||
 | 
			
		||||
class MangaSiginagi : MangaThemesia(
 | 
			
		||||
    "Manga Siginagi",
 | 
			
		||||
    "https://mangasiginagi.com",
 | 
			
		||||
    "tr",
 | 
			
		||||
    dateFormat = SimpleDateFormat("MMMM d, yyy", Locale("tr")),
 | 
			
		||||
)
 | 
			
		||||