124 lines
4.2 KiB
Kotlin
124 lines
4.2 KiB
Kotlin
package ani.dantotsu.media
|
|
|
|
import android.graphics.Bitmap
|
|
import ani.dantotsu.connections.anilist.api.FuzzyDate
|
|
import ani.dantotsu.connections.anilist.api.MediaEdge
|
|
import ani.dantotsu.connections.anilist.api.MediaList
|
|
import ani.dantotsu.connections.anilist.api.MediaType
|
|
import ani.dantotsu.media.anime.Anime
|
|
import ani.dantotsu.media.manga.Manga
|
|
import java.io.Serializable
|
|
import ani.dantotsu.connections.anilist.api.Media as ApiMedia
|
|
|
|
data class Media(
|
|
val anime: Anime? = null,
|
|
val manga: Manga? = null,
|
|
val id: Int,
|
|
|
|
var idMAL: Int? = null,
|
|
var typeMAL: String? = null,
|
|
|
|
val name: String?,
|
|
val nameRomaji: String,
|
|
val userPreferredName: String,
|
|
|
|
var cover: String? = null,
|
|
var banner: String? = null,
|
|
var relation: String? = null,
|
|
var popularity: Int? = null,
|
|
|
|
var isAdult: Boolean,
|
|
var isFav: Boolean = false,
|
|
var notify: Boolean = false,
|
|
|
|
var userListId: Int? = null,
|
|
var isListPrivate: Boolean = false,
|
|
var notes: String? = null,
|
|
var userProgress: Int? = null,
|
|
var userStatus: String? = null,
|
|
var userScore: Int = 0,
|
|
var userRepeat: Int = 0,
|
|
var userUpdatedAt: Long? = null,
|
|
var userStartedAt: FuzzyDate = FuzzyDate(),
|
|
var userCompletedAt: FuzzyDate = FuzzyDate(),
|
|
var inCustomListsOf: MutableMap<String, Boolean>?= null,
|
|
var userFavOrder: Int? = null,
|
|
|
|
val status: String? = null,
|
|
var format: String? = null,
|
|
var source: String? = null,
|
|
var countryOfOrigin: String? = null,
|
|
val meanScore: Int? = null,
|
|
var genres: ArrayList<String> = arrayListOf(),
|
|
var tags: ArrayList<String> = arrayListOf(),
|
|
var description: String? = null,
|
|
var synonyms: ArrayList<String> = arrayListOf(),
|
|
var trailer: String? = null,
|
|
var startDate: FuzzyDate? = null,
|
|
var endDate: FuzzyDate? = null,
|
|
|
|
var characters: ArrayList<Character>? = null,
|
|
var prequel: Media? = null,
|
|
var sequel: Media? = null,
|
|
var relations: ArrayList<Media>? = null,
|
|
var recommendations: ArrayList<Media>? = null,
|
|
|
|
var vrvId: String? = null,
|
|
var crunchySlug: String? = null,
|
|
|
|
var nameMAL: String? = null,
|
|
var shareLink: String? = null,
|
|
var selected: Selected? = null,
|
|
|
|
var idKitsu: String?=null,
|
|
|
|
var cameFromContinue: Boolean = false
|
|
) : Serializable {
|
|
|
|
constructor(apiMedia: ApiMedia) : this(
|
|
id = apiMedia.id,
|
|
idMAL = apiMedia.idMal,
|
|
popularity = apiMedia.popularity,
|
|
name = apiMedia.title!!.english,
|
|
nameRomaji = apiMedia.title!!.romaji,
|
|
userPreferredName = apiMedia.title!!.userPreferred,
|
|
cover = apiMedia.coverImage?.large,
|
|
banner = apiMedia.bannerImage,
|
|
status = apiMedia.status.toString(),
|
|
isFav = apiMedia.isFavourite!!,
|
|
isAdult = apiMedia.isAdult ?: false,
|
|
isListPrivate = apiMedia.mediaListEntry?.private ?: false,
|
|
userProgress = apiMedia.mediaListEntry?.progress,
|
|
userScore = apiMedia.mediaListEntry?.score?.toInt() ?: 0,
|
|
userStatus = apiMedia.mediaListEntry?.status?.toString(),
|
|
meanScore = apiMedia.meanScore,
|
|
startDate = apiMedia.startDate,
|
|
endDate = apiMedia.endDate,
|
|
anime = if (apiMedia.type == MediaType.ANIME) Anime(
|
|
totalEpisodes = apiMedia.episodes,
|
|
nextAiringEpisode = apiMedia.nextAiringEpisode?.episode?.minus(1)
|
|
) else null,
|
|
manga = if (apiMedia.type == MediaType.MANGA) Manga(totalChapters = apiMedia.chapters) else null,
|
|
format = apiMedia.format?.toString(),
|
|
)
|
|
|
|
constructor(mediaList: MediaList) : this(mediaList.media!!) {
|
|
this.userProgress = mediaList.progress
|
|
this.isListPrivate = mediaList.private ?: false
|
|
this.userScore = mediaList.score?.toInt() ?: 0
|
|
this.userStatus = mediaList.status?.toString()
|
|
this.userUpdatedAt = mediaList.updatedAt?.toLong()
|
|
}
|
|
|
|
constructor(mediaEdge: MediaEdge) : this(mediaEdge.node!!) {
|
|
this.relation = mediaEdge.relationType?.toString()
|
|
}
|
|
|
|
fun mainName() = name ?: nameMAL ?: nameRomaji
|
|
fun mangaName() = if (countryOfOrigin != "JP") mainName() else nameRomaji
|
|
}
|
|
|
|
object MediaSingleton {
|
|
var media: Media? = null
|
|
var bitmap: Bitmap? = null
|
|
}
|