diff --git a/src/sr/animesrbija/AndroidManifest.xml b/src/sr/animesrbija/AndroidManifest.xml index 3307882a7..b82c0687d 100644 --- a/src/sr/animesrbija/AndroidManifest.xml +++ b/src/sr/animesrbija/AndroidManifest.xml @@ -1,2 +1,23 @@ - - \ No newline at end of file + + + + + + + + + + + + + + + + diff --git a/src/sr/animesrbija/build.gradle b/src/sr/animesrbija/build.gradle index 285f646b2..e1c834f64 100644 --- a/src/sr/animesrbija/build.gradle +++ b/src/sr/animesrbija/build.gradle @@ -1,13 +1,18 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -ext { - extName = 'Anime Srbija' - pkgNameSuffix = 'sr.animesrbija' - extClass = '.AnimeSrbija' - extVersionCode = 3 - isNsfw = false - libVersion = '13' -} - -apply from: "$rootDir/common.gradle" +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.serialization) +} + +ext { + extName = 'Anime Srbija' + pkgNameSuffix = 'sr.animesrbija' + extClass = '.AnimeSrbija' + extVersionCode = 4 +} + +dependencies { + implementation("dev.datlag.jsunpacker:jsunpacker:1.0.1") +} + +apply from: "$rootDir/common.gradle" diff --git a/src/sr/animesrbija/res/mipmap-hdpi/ic_launcher.png b/src/sr/animesrbija/res/mipmap-hdpi/ic_launcher.png index 8f59e2dac..0de568f3f 100644 Binary files a/src/sr/animesrbija/res/mipmap-hdpi/ic_launcher.png and b/src/sr/animesrbija/res/mipmap-hdpi/ic_launcher.png differ diff --git a/src/sr/animesrbija/res/mipmap-mdpi/ic_launcher.png b/src/sr/animesrbija/res/mipmap-mdpi/ic_launcher.png index 8f59e2dac..91221f2bb 100644 Binary files a/src/sr/animesrbija/res/mipmap-mdpi/ic_launcher.png and b/src/sr/animesrbija/res/mipmap-mdpi/ic_launcher.png differ diff --git a/src/sr/animesrbija/res/mipmap-xhdpi/ic_launcher.png b/src/sr/animesrbija/res/mipmap-xhdpi/ic_launcher.png index 8f59e2dac..c389bc192 100644 Binary files a/src/sr/animesrbija/res/mipmap-xhdpi/ic_launcher.png and b/src/sr/animesrbija/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/src/sr/animesrbija/res/mipmap-xxhdpi/ic_launcher.png b/src/sr/animesrbija/res/mipmap-xxhdpi/ic_launcher.png index 8f59e2dac..4ba909269 100644 Binary files a/src/sr/animesrbija/res/mipmap-xxhdpi/ic_launcher.png and b/src/sr/animesrbija/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/src/sr/animesrbija/res/mipmap-xxxhdpi/ic_launcher.png b/src/sr/animesrbija/res/mipmap-xxxhdpi/ic_launcher.png index 8f59e2dac..c5988eeb6 100644 Binary files a/src/sr/animesrbija/res/mipmap-xxxhdpi/ic_launcher.png and b/src/sr/animesrbija/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/src/sr/animesrbija/res/web_hi_res_512.png b/src/sr/animesrbija/res/web_hi_res_512.png deleted file mode 100644 index 8f59e2dac..000000000 Binary files a/src/sr/animesrbija/res/web_hi_res_512.png and /dev/null differ diff --git a/src/sr/animesrbija/src/eu/kanade/tachiyomi/animeextension/sr/animesrbija/AnimeSrbija.kt b/src/sr/animesrbija/src/eu/kanade/tachiyomi/animeextension/sr/animesrbija/AnimeSrbija.kt index f44adf80f..f3a049ff9 100644 --- a/src/sr/animesrbija/src/eu/kanade/tachiyomi/animeextension/sr/animesrbija/AnimeSrbija.kt +++ b/src/sr/animesrbija/src/eu/kanade/tachiyomi/animeextension/sr/animesrbija/AnimeSrbija.kt @@ -1,23 +1,31 @@ package eu.kanade.tachiyomi.animeextension.sr.animesrbija +import eu.kanade.tachiyomi.animeextension.sr.animesrbija.dto.AnimeDetailsDto +import eu.kanade.tachiyomi.animeextension.sr.animesrbija.dto.EpisodeVideo +import eu.kanade.tachiyomi.animeextension.sr.animesrbija.dto.EpisodesDto +import eu.kanade.tachiyomi.animeextension.sr.animesrbija.dto.LatestUpdatesDto +import eu.kanade.tachiyomi.animeextension.sr.animesrbija.dto.PagePropsDto +import eu.kanade.tachiyomi.animeextension.sr.animesrbija.dto.SearchAnimeDto +import eu.kanade.tachiyomi.animeextension.sr.animesrbija.dto.SearchPageDto +import eu.kanade.tachiyomi.animeextension.sr.animesrbija.extractors.FilemoonExtractor import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.AnimesPage import eu.kanade.tachiyomi.animesource.model.SAnime import eu.kanade.tachiyomi.animesource.model.SEpisode import eu.kanade.tachiyomi.animesource.model.Video -import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource +import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.util.asJsoup -import okhttp3.Headers.Companion.toHeaders -import okhttp3.MediaType.Companion.toMediaType -import okhttp3.OkHttpClient +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json import okhttp3.Request -import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.Response import org.jsoup.nodes.Document -import org.jsoup.nodes.Element +import rx.Observable +import uy.kohesive.injekt.injectLazy -class AnimeSrbija : ParsedAnimeHttpSource() { +class AnimeSrbija : AnimeHttpSource() { override val name = "Anime Srbija" @@ -27,130 +35,137 @@ class AnimeSrbija : ParsedAnimeHttpSource() { override val supportsLatest = true - override val client: OkHttpClient = network.cloudflareClient + private val json: Json by injectLazy() - // Popular Anime - override fun popularAnimeFromElement(element: Element): SAnime { - val anime = SAnime.create() - anime.setUrlWithoutDomain(element.select("a").last()!!.attr("href")) - anime.thumbnail_url = element.select("img").attr("src") - anime.title = element.select("img").attr("title") + // ============================== Popular =============================== + override fun popularAnimeParse(response: Response): AnimesPage { + val doc = response.asJsoup() + val animes = doc.parseAs().anime.map(::parseAnime) - return anime + val hasNextPage = doc.selectFirst("ul.pagination span.next-page:not(.disabled)") != null + return AnimesPage(animes, hasNextPage) } - override fun popularAnimeNextPageSelector(): String? { - return ".next" + override fun popularAnimeRequest(page: Int) = GET("$baseUrl/filter?sort=popular&page=$page") + + // ============================== Episodes ============================== + override fun episodeListParse(response: Response): List { + val data = response.asJsoup().parseAs() + return data.episodes.map { + SEpisode.create().apply { + setUrlWithoutDomain("/epizoda/${it.slug}") + name = "Epizoda ${it.number}" + episode_number = it.number.toFloat() + if (it.filler) scanlator = "filler" + } + } } - override fun popularAnimeRequest(page: Int): Request { - return GET("$baseUrl/anime-lista/page/$page/?order=popular") + // ============================ Video Links ============================= + override fun videoListParse(response: Response): List