package eu.kanade.tachiyomi.source import eu.kanade.tachiyomi.source.model.FilterList 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 eu.kanade.tachiyomi.source.model.SMangaUpdate import rx.Observable /** * A basic interface for creating a source. It could be an online source, a local source, etc. */ interface Source { /** * ID for the source. Must be unique. */ val id: Long /** * Name of the source. */ val name: String val lang: String get() = "" /** * Whether the source has support for latest updates. */ val supportsLatest: Boolean /** * Returns the list of filters for the source. */ fun getFilterList(): FilterList = FilterList() /** * Get a page with a list of manga. * * @since tachiyomix 1.6 * @param page the page number to retrieve. */ suspend fun getPopularManga(page: Int): MangasPage /** * Get a page with a list of latest manga updates. * * @since tachiyomix 1.6 * @param page the page number to retrieve. */ suspend fun getLatestUpdates(page: Int): MangasPage /** * Get a page with a list of manga. * * @since tachiyomix 1.6 * @param page the page number to retrieve. * @param query the search query. * @param filters the list of filters to apply. */ suspend fun getSearchManga( page: Int, query: String, filters: FilterList, ): MangasPage /** * Fetches updated information for a manga. * * Depending on the provided flags or source availability, this may include * updated manga metadata, available chapters, or both. * * If a value is not requested, the existing provided value can be returned as-is. * The host app may apply any returned updates regardless of the flags, * so care should be taken to only return accurate and intentional changes. * * @since tachiyomix 1.6 * @param manga The manga to fetch updates for. * @param chapters Existing chapters of the manga * @param fetchDetails Whether to fetch updated manga details. * @param fetchChapters Whether to fetch available chapters. */ suspend fun getMangaUpdate( manga: SManga, chapters: List, fetchDetails: Boolean, fetchChapters: Boolean, ): SMangaUpdate /** * Get the list of pages a chapter has. Pages should be returned * in the expected order; the index is ignored. * * @since tachiyomix 1.6 * @param chapter the chapter. * @return the pages for the chapter. */ suspend fun getPageList(chapter: SChapter): List @Deprecated("Use the combined suspend API instead", ReplaceWith("getMangaUpdate")) fun fetchMangaDetails(manga: SManga): Observable = throw UnsupportedOperationException() @Deprecated("Use the combined suspend API instead", ReplaceWith("getMangaUpdate")) fun fetchChapterList(manga: SManga): Observable> = throw UnsupportedOperationException() @Deprecated("Use the suspend API instead", ReplaceWith("getPageList")) fun fetchPageList(chapter: SChapter): Observable> = throw UnsupportedOperationException() } // fun Source.icon(): Drawable? = Injekt.get().getAppIconForSource(this)