diff --git a/src/all/animeonsen/build.gradle b/src/all/animeonsen/build.gradle index 05c763c70..6a78e4b45 100644 --- a/src/all/animeonsen/build.gradle +++ b/src/all/animeonsen/build.gradle @@ -1,12 +1,14 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'kotlinx-serialization' +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.serialization) +} ext { extName = 'AnimeOnsen' pkgNameSuffix = 'all.animeonsen' extClass = '.AnimeOnsen' - extVersionCode = 6 + extVersionCode = 7 libVersion = '13' } diff --git a/src/all/animeonsen/src/eu/kanade/tachiyomi/animeextension/all/animeonsen/AnimeOnsen.kt b/src/all/animeonsen/src/eu/kanade/tachiyomi/animeextension/all/animeonsen/AnimeOnsen.kt index ecb4e4ff8..0cfd2887a 100644 --- a/src/all/animeonsen/src/eu/kanade/tachiyomi/animeextension/all/animeonsen/AnimeOnsen.kt +++ b/src/all/animeonsen/src/eu/kanade/tachiyomi/animeextension/all/animeonsen/AnimeOnsen.kt @@ -1,12 +1,12 @@ package eu.kanade.tachiyomi.animeextension.all.animeonsen import android.app.Application -import android.content.SharedPreferences import androidx.preference.ListPreference import androidx.preference.PreferenceScreen import eu.kanade.tachiyomi.animeextension.all.animeonsen.dto.AnimeDetails import eu.kanade.tachiyomi.animeextension.all.animeonsen.dto.AnimeListItem import eu.kanade.tachiyomi.animeextension.all.animeonsen.dto.AnimeListResponse +import eu.kanade.tachiyomi.animeextension.all.animeonsen.dto.EpisodeDto import eu.kanade.tachiyomi.animeextension.all.animeonsen.dto.SearchResponse import eu.kanade.tachiyomi.animeextension.all.animeonsen.dto.VideoData import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource @@ -21,16 +21,14 @@ import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.asObservableSuccess import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json -import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.boolean -import kotlinx.serialization.json.jsonObject import kotlinx.serialization.json.jsonPrimitive import okhttp3.Headers -import okhttp3.Request import okhttp3.Response import rx.Observable import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy import kotlin.Exception class AnimeOnsen : ConfigurableAnimeSource, AnimeHttpSource() { @@ -53,105 +51,43 @@ class AnimeOnsen : ConfigurableAnimeSource, AnimeHttpSource() { .build() } - private val preferences: SharedPreferences by lazy { + private val preferences by lazy { Injekt.get().getSharedPreferences("source_$id", 0x0000) } - private val json = Json { - ignoreUnknownKeys = true - } + private val json: Json by injectLazy() - override fun headersBuilder(): Headers.Builder = Headers.Builder() - .add("user-agent", AO_USER_AGENT) + override fun headersBuilder() = Headers.Builder().add("user-agent", AO_USER_AGENT) // ============================== Popular =============================== // The site doesn't have a popular anime tab, so we use the home page instead (latest anime). - override fun popularAnimeRequest(page: Int): Request = + override fun popularAnimeRequest(page: Int) = GET("$apiUrl/content/index?start=${(page - 1) * 20}&limit=20") override fun popularAnimeParse(response: Response): AnimesPage { - val responseJson = json.decodeFromString(response.body.string()) - val animes = responseJson.content.map { - it.toSAnime() - } + val responseJson = response.parseAs() + val animes = responseJson.content.map { it.toSAnime() } + // we can't (easily) serialize this thing because it returns a array with + // two types: a boolean and a integer. val hasNextPage = responseJson.cursor.next.firstOrNull()?.jsonPrimitive?.boolean == true return AnimesPage(animes, hasNextPage) } - // ============================== Episodes ============================== - override fun episodeListParse(response: Response): List { - val contentId = response.request.url.toString().substringBeforeLast("/episodes") - .substringAfterLast("/") - val responseJson = json.decodeFromString(response.body.string()) - return responseJson.keys.map { epNum -> - SEpisode.create().apply { - url = "$contentId/video/$epNum" - episode_number = epNum.toFloat() - val episodeName = - responseJson[epNum]!!.jsonObject["contentTitle_episode_en"]!!.jsonPrimitive.content - name = "Episode $epNum: $episodeName" - } - }.sortedByDescending { it.episode_number } - } - - override fun episodeListRequest(anime: SAnime): Request { - return GET("$apiUrl/content/${anime.url}/episodes") - } - - // ============================ Video Links ============================= - override fun videoListParse(response: Response): List