From fef069e34a9a1aac4df85064a48a5b0e2081f320 Mon Sep 17 00:00:00 2001 From: Sirus <5435333+Sirush@users.noreply.github.com> Date: Fri, 8 May 2026 21:54:56 +0200 Subject: [PATCH 01/13] Add anime source API interfaces and models --- .../animesource/AnimeCatalogueSource.kt | 48 +++ .../tachiyomi/animesource/AnimeSource.kt | 66 ++++ .../animesource/AnimeSourceFactory.kt | 5 + .../animesource/ConfigurableAnimeSource.kt | 20 ++ .../tachiyomi/animesource/UnmeteredSource.kt | 3 + .../animesource/model/AnimeFilter.kt | 43 +++ .../animesource/model/AnimeFilterList.kt | 17 + .../animesource/model/AnimeUpdateStrategy.kt | 7 + .../tachiyomi/animesource/model/AnimesPage.kt | 3 + .../tachiyomi/animesource/model/Hoster.kt | 81 +++++ .../tachiyomi/animesource/model/SAnime.kt | 60 ++++ .../tachiyomi/animesource/model/SAnimeImpl.kt | 26 ++ .../tachiyomi/animesource/model/SEpisode.kt | 32 ++ .../animesource/model/SEpisodeImpl.kt | 16 + .../tachiyomi/animesource/model/Video.kt | 204 +++++++++++ .../animesource/online/AnimeHttpSource.kt | 317 ++++++++++++++++++ .../online/ParsedAnimeHttpSource.kt | 114 +++++++ .../online/ResolvableAnimeSource.kt | 20 ++ 18 files changed, 1082 insertions(+) create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeCatalogueSource.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeSource.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeSourceFactory.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/ConfigurableAnimeSource.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/UnmeteredSource.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/AnimeFilter.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/AnimeFilterList.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/AnimeUpdateStrategy.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/AnimesPage.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/Hoster.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/SAnime.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/SAnimeImpl.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/SEpisode.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/SEpisodeImpl.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/Video.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/online/AnimeHttpSource.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/online/ParsedAnimeHttpSource.kt create mode 100644 source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/online/ResolvableAnimeSource.kt diff --git a/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeCatalogueSource.kt b/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeCatalogueSource.kt new file mode 100644 index 0000000000..5320a3551b --- /dev/null +++ b/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeCatalogueSource.kt @@ -0,0 +1,48 @@ +package eu.kanade.tachiyomi.animesource + +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.AnimesPage +import rx.Observable +import tachiyomi.core.common.util.lang.awaitSingle + +interface AnimeCatalogueSource : AnimeSource { + + override val lang: String + + val supportsLatest: Boolean + + @Suppress("DEPRECATION") + suspend fun getPopularAnime(page: Int): AnimesPage { + return fetchPopularAnime(page).awaitSingle() + } + + @Suppress("DEPRECATION") + suspend fun getSearchAnime(page: Int, query: String, filters: AnimeFilterList): AnimesPage { + return fetchSearchAnime(page, query, filters).awaitSingle() + } + + @Suppress("DEPRECATION") + suspend fun getLatestUpdates(page: Int): AnimesPage { + return fetchLatestUpdates(page).awaitSingle() + } + + fun getFilterList(): AnimeFilterList + + @Deprecated( + "Use the non-RxJava API instead", + ReplaceWith("getPopularAnime"), + ) + fun fetchPopularAnime(page: Int): Observable + + @Deprecated( + "Use the non-RxJava API instead", + ReplaceWith("getSearchAnime"), + ) + fun fetchSearchAnime(page: Int, query: String, filters: AnimeFilterList): Observable + + @Deprecated( + "Use the non-RxJava API instead", + ReplaceWith("getLatestUpdates"), + ) + fun fetchLatestUpdates(page: Int): Observable +} diff --git a/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeSource.kt b/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeSource.kt new file mode 100644 index 0000000000..843038b0a9 --- /dev/null +++ b/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeSource.kt @@ -0,0 +1,66 @@ +package eu.kanade.tachiyomi.animesource + +import eu.kanade.tachiyomi.animesource.model.Hoster +import eu.kanade.tachiyomi.animesource.model.SAnime +import eu.kanade.tachiyomi.animesource.model.SEpisode +import eu.kanade.tachiyomi.animesource.model.Video +import rx.Observable +import tachiyomi.core.common.util.lang.awaitSingle + +interface AnimeSource { + + val id: Long + + val name: String + + val lang: String + get() = "" + + @Suppress("DEPRECATION") + suspend fun getAnimeDetails(anime: SAnime): SAnime { + return fetchAnimeDetails(anime).awaitSingle() + } + + @Suppress("DEPRECATION") + suspend fun getEpisodeList(anime: SAnime): List { + return fetchEpisodeList(anime).awaitSingle() + } + + suspend fun getHosterList(episode: SEpisode): List = throw IllegalStateException("Not used") + + suspend fun getVideoList(hoster: Hoster): List