feat: more thumbnails
This commit is contained in:
parent
5800dcf3e7
commit
6878d12b5c
4 changed files with 34 additions and 6 deletions
|
@ -75,7 +75,7 @@ class AnilistQueries {
|
||||||
media.cameFromContinue = false
|
media.cameFromContinue = false
|
||||||
|
|
||||||
val query =
|
val query =
|
||||||
"""{Media(id:${media.id}){id favourites popularity episodes chapters mediaListEntry{id status score(format:POINT_100)progress private notes repeat customLists updatedAt startedAt{year month day}completedAt{year month day}}reviews(perPage:3, sort:SCORE_DESC){nodes{id mediaId mediaType summary body(asHtml:true) rating ratingAmount userRating score private siteUrl createdAt updatedAt user{id name bannerImage avatar{medium large}}}}isFavourite siteUrl idMal nextAiringEpisode{episode airingAt}source countryOfOrigin format duration season seasonYear startDate{year month day}endDate{year month day}genres studios(isMain:true){nodes{id name siteUrl}}description trailer{site id}synonyms tags{name rank isMediaSpoiler}characters(sort:[ROLE,FAVOURITES_DESC],perPage:25,page:1){edges{role voiceActors { id name { first middle last full native userPreferred } image { large medium } languageV2 } node{id image{medium}name{userPreferred}isFavourite}}}relations{edges{relationType(version:2)node{id idMal mediaListEntry{progress private score(format:POINT_100)status}episodes chapters nextAiringEpisode{episode}popularity meanScore isAdult isFavourite format title{english romaji userPreferred}type status(version:2)bannerImage coverImage{large}}}}staffPreview:staff(perPage:8,sort:[RELEVANCE,ID]){edges{role node{id image{large medium}name{userPreferred}}}}recommendations(sort:RATING_DESC){nodes{mediaRecommendation{id idMal mediaListEntry{progress private score(format:POINT_100)status}episodes chapters nextAiringEpisode{episode}meanScore isAdult isFavourite format title{english romaji userPreferred}type status(version:2)bannerImage coverImage{large}}}}externalLinks{url site}}Page(page:1){pageInfo{total perPage currentPage lastPage hasNextPage}mediaList(isFollowing:true,sort:[STATUS],mediaId:${media.id}){id status score(format: POINT_100) progress progressVolumes user{id name avatar{large medium}}}}}"""
|
"""{Media(id:${media.id}){id favourites popularity episodes chapters streamingEpisodes {title thumbnail url site} mediaListEntry{id status score(format:POINT_100)progress private notes repeat customLists updatedAt startedAt{year month day}completedAt{year month day}}reviews(perPage:3, sort:SCORE_DESC){nodes{id mediaId mediaType summary body(asHtml:true) rating ratingAmount userRating score private siteUrl createdAt updatedAt user{id name bannerImage avatar{medium large}}}}isFavourite siteUrl idMal nextAiringEpisode{episode airingAt}source countryOfOrigin format duration season seasonYear startDate{year month day}endDate{year month day}genres studios(isMain:true){nodes{id name siteUrl}}description trailer{site id}synonyms tags{name rank isMediaSpoiler}characters(sort:[ROLE,FAVOURITES_DESC],perPage:25,page:1){edges{role voiceActors { id name { first middle last full native userPreferred } image { large medium } languageV2 } node{id image{medium}name{userPreferred}isFavourite}}}relations{edges{relationType(version:2)node{id idMal mediaListEntry{progress private score(format:POINT_100)status}episodes chapters nextAiringEpisode{episode}popularity meanScore isAdult isFavourite format title{english romaji userPreferred}type status(version:2)bannerImage coverImage{large}}}}staffPreview:staff(perPage:8,sort:[RELEVANCE,ID]){edges{role node{id image{large medium}name{userPreferred}}}}recommendations(sort:RATING_DESC){nodes{mediaRecommendation{id idMal mediaListEntry{progress private score(format:POINT_100)status}episodes chapters nextAiringEpisode{episode}meanScore isAdult isFavourite format title{english romaji userPreferred}type status(version:2)bannerImage coverImage{large}}}}externalLinks{url site}}Page(page:1){pageInfo{total perPage currentPage lastPage hasNextPage}mediaList(isFollowing:true,sort:[STATUS],mediaId:${media.id}){id status score(format: POINT_100) progress progressVolumes user{id name avatar{large medium}}}}}"""
|
||||||
runBlocking {
|
runBlocking {
|
||||||
val anilist = async {
|
val anilist = async {
|
||||||
var response = executeQuery<Query.Media>(query, force = true)
|
var response = executeQuery<Query.Media>(query, force = true)
|
||||||
|
@ -90,7 +90,7 @@ class AnilistQueries {
|
||||||
media.popularity = fetchedMedia.popularity
|
media.popularity = fetchedMedia.popularity
|
||||||
media.startDate = fetchedMedia.startDate
|
media.startDate = fetchedMedia.startDate
|
||||||
media.endDate = fetchedMedia.endDate
|
media.endDate = fetchedMedia.endDate
|
||||||
|
media.streamingEpisodes = fetchedMedia.streamingEpisodes
|
||||||
if (fetchedMedia.genres != null) {
|
if (fetchedMedia.genres != null) {
|
||||||
media.genres = arrayListOf()
|
media.genres = arrayListOf()
|
||||||
fetchedMedia.genres?.forEach { i ->
|
fetchedMedia.genres?.forEach { i ->
|
||||||
|
|
|
@ -143,7 +143,7 @@ data class Media(
|
||||||
@SerialName("externalLinks") var externalLinks: List<MediaExternalLink>?,
|
@SerialName("externalLinks") var externalLinks: List<MediaExternalLink>?,
|
||||||
|
|
||||||
// Data and links to legal streaming episodes on external sites
|
// Data and links to legal streaming episodes on external sites
|
||||||
// @SerialName("streamingEpisodes") var streamingEpisodes: List<MediaStreamingEpisode>?,
|
@SerialName("streamingEpisodes") var streamingEpisodes: List<MediaStreamingEpisode>?,
|
||||||
|
|
||||||
// The ranking of the media in a particular time span and format compared to other media
|
// The ranking of the media in a particular time span and format compared to other media
|
||||||
// @SerialName("rankings") var rankings: List<MediaRank>?,
|
// @SerialName("rankings") var rankings: List<MediaRank>?,
|
||||||
|
@ -239,7 +239,20 @@ data class AiringSchedule(
|
||||||
// The associate media of the airing episode
|
// The associate media of the airing episode
|
||||||
@SerialName("media") var media: Media?,
|
@SerialName("media") var media: Media?,
|
||||||
)
|
)
|
||||||
|
@Serializable
|
||||||
|
data class MediaStreamingEpisode(
|
||||||
|
// The title of the episode
|
||||||
|
@SerialName("title") var title: String?,
|
||||||
|
|
||||||
|
// The thumbnail image of the episode
|
||||||
|
@SerialName("thumbnail") var thumbnail: String?,
|
||||||
|
|
||||||
|
// The url of the episode
|
||||||
|
@SerialName("url") var url: String?,
|
||||||
|
|
||||||
|
// The site location of the streaming episode
|
||||||
|
@SerialName("site") var site: String?,
|
||||||
|
)
|
||||||
@Serializable
|
@Serializable
|
||||||
data class MediaCoverImage(
|
data class MediaCoverImage(
|
||||||
// The cover image url of the media at its largest size. If this size isn't available, large will be provided instead.
|
// The cover image url of the media at its largest size. If this size isn't available, large will be provided instead.
|
||||||
|
|
|
@ -4,6 +4,7 @@ import android.graphics.Bitmap
|
||||||
import ani.dantotsu.connections.anilist.api.FuzzyDate
|
import ani.dantotsu.connections.anilist.api.FuzzyDate
|
||||||
import ani.dantotsu.connections.anilist.api.MediaEdge
|
import ani.dantotsu.connections.anilist.api.MediaEdge
|
||||||
import ani.dantotsu.connections.anilist.api.MediaList
|
import ani.dantotsu.connections.anilist.api.MediaList
|
||||||
|
import ani.dantotsu.connections.anilist.api.MediaStreamingEpisode
|
||||||
import ani.dantotsu.connections.anilist.api.MediaType
|
import ani.dantotsu.connections.anilist.api.MediaType
|
||||||
import ani.dantotsu.connections.anilist.api.Query
|
import ani.dantotsu.connections.anilist.api.Query
|
||||||
import ani.dantotsu.media.anime.Anime
|
import ani.dantotsu.media.anime.Anime
|
||||||
|
@ -76,7 +77,7 @@ data class Media(
|
||||||
var nameMAL: String? = null,
|
var nameMAL: String? = null,
|
||||||
var shareLink: String? = null,
|
var shareLink: String? = null,
|
||||||
var selected: Selected? = null,
|
var selected: Selected? = null,
|
||||||
|
var streamingEpisodes: List<MediaStreamingEpisode>? = null,
|
||||||
var idKitsu: String? = null,
|
var idKitsu: String? = null,
|
||||||
|
|
||||||
var cameFromContinue: Boolean = false
|
var cameFromContinue: Boolean = false
|
||||||
|
|
|
@ -31,6 +31,7 @@ import androidx.viewpager2.widget.ViewPager2
|
||||||
import ani.dantotsu.FileUrl
|
import ani.dantotsu.FileUrl
|
||||||
import ani.dantotsu.R
|
import ani.dantotsu.R
|
||||||
import ani.dantotsu.addons.download.DownloadAddonManager
|
import ani.dantotsu.addons.download.DownloadAddonManager
|
||||||
|
import ani.dantotsu.connections.anilist.api.MediaStreamingEpisode
|
||||||
import ani.dantotsu.databinding.FragmentAnimeWatchBinding
|
import ani.dantotsu.databinding.FragmentAnimeWatchBinding
|
||||||
import ani.dantotsu.download.DownloadedType
|
import ani.dantotsu.download.DownloadedType
|
||||||
import ani.dantotsu.download.DownloadsManager
|
import ani.dantotsu.download.DownloadsManager
|
||||||
|
@ -230,6 +231,19 @@ class AnimeWatchFragment : Fragment() {
|
||||||
val episodes = loadedEpisodes[media.selected!!.sourceIndex]
|
val episodes = loadedEpisodes[media.selected!!.sourceIndex]
|
||||||
if (episodes != null) {
|
if (episodes != null) {
|
||||||
episodes.forEach { (i, episode) ->
|
episodes.forEach { (i, episode) ->
|
||||||
|
fun getThumbnail(episodes: List<MediaStreamingEpisode>): List<Pair<String, FileUrl?>> {
|
||||||
|
return episodes.mapNotNull { episode ->
|
||||||
|
val regex = Regex("""Episode\s*(\d+)\s*-\s*(.*)""")
|
||||||
|
val number = episode.title?.let {
|
||||||
|
val matchResult = regex.matchEntire(it)
|
||||||
|
matchResult?.destructured?.component1()
|
||||||
|
}
|
||||||
|
number?.let { number to FileUrl[episode.thumbnail] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val getThumbnail = getThumbnail(media.streamingEpisodes ?: emptyList())
|
||||||
|
|
||||||
if (media.anime?.fillerEpisodes != null) {
|
if (media.anime?.fillerEpisodes != null) {
|
||||||
if (media.anime!!.fillerEpisodes!!.containsKey(i)) {
|
if (media.anime!!.fillerEpisodes!!.containsKey(i)) {
|
||||||
episode.title =
|
episode.title =
|
||||||
|
@ -247,8 +261,8 @@ class AnimeWatchFragment : Fragment() {
|
||||||
) media.anime!!.kitsuEpisodes!![i]?.title
|
) media.anime!!.kitsuEpisodes!![i]?.title
|
||||||
?: episode.title else episode.title
|
?: episode.title else episode.title
|
||||||
?: media.anime!!.kitsuEpisodes!![i]?.title ?: episode.title
|
?: media.anime!!.kitsuEpisodes!![i]?.title ?: episode.title
|
||||||
episode.thumb = media.anime!!.kitsuEpisodes!![i]?.thumb
|
episode.thumb = getThumbnail.find { it.first == i }?.second
|
||||||
?: FileUrl[media.cover]
|
?: media.anime!!.kitsuEpisodes!![i]?.thumb ?: episode.thumb
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue