clean up some AoDParser related code
This commit is contained in:
parent
876ed97d6d
commit
801742d630
|
@ -11,7 +11,7 @@ android {
|
||||||
minSdkVersion 23
|
minSdkVersion 23
|
||||||
targetSdkVersion 30
|
targetSdkVersion 30
|
||||||
versionCode 4200 //00.04.200
|
versionCode 4200 //00.04.200
|
||||||
versionName "0.4.2"
|
versionName "0.5.0-alpha1"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
resValue "string", "build_time", buildTime()
|
resValue "string", "build_time", buildTime()
|
||||||
|
|
|
@ -49,7 +49,10 @@ object AoDParser {
|
||||||
private var loginSuccess = false
|
private var loginSuccess = false
|
||||||
|
|
||||||
private val mediaList = arrayListOf<Media>() // actual media (data)
|
private val mediaList = arrayListOf<Media>() // actual media (data)
|
||||||
val itemMediaList = arrayListOf<ItemMedia>() // gui media
|
private val aodMediaList = arrayListOf<IAoDMedia>()
|
||||||
|
|
||||||
|
// gui media
|
||||||
|
val guiMediaList = arrayListOf<ItemMedia>()
|
||||||
val highlightsList = arrayListOf<ItemMedia>()
|
val highlightsList = arrayListOf<ItemMedia>()
|
||||||
val newEpisodesList = arrayListOf<ItemMedia>()
|
val newEpisodesList = arrayListOf<ItemMedia>()
|
||||||
val newSimulcastsList = arrayListOf<ItemMedia>()
|
val newSimulcastsList = arrayListOf<ItemMedia>()
|
||||||
|
@ -110,8 +113,8 @@ object AoDParser {
|
||||||
* get a media by it's ID (int)
|
* get a media by it's ID (int)
|
||||||
* @return Media
|
* @return Media
|
||||||
*/
|
*/
|
||||||
suspend fun getMediaById(mediaId: Int): Media {
|
suspend fun getMediaById(aodId: Int): Media {
|
||||||
val media = mediaList.first { it.id == mediaId }
|
val media = mediaList.first { it.id == aodId }
|
||||||
|
|
||||||
if (media.episodes.isEmpty()) {
|
if (media.episodes.isEmpty()) {
|
||||||
loadStreams(media).join()
|
loadStreams(media).join()
|
||||||
|
@ -180,24 +183,39 @@ object AoDParser {
|
||||||
val resAnimes = Jsoup.connect(baseUrl + libraryPath).get()
|
val resAnimes = Jsoup.connect(baseUrl + libraryPath).get()
|
||||||
//println(resAnimes)
|
//println(resAnimes)
|
||||||
|
|
||||||
itemMediaList.clear()
|
guiMediaList.clear()
|
||||||
mediaList.clear()
|
mediaList.clear()
|
||||||
resAnimes.select("div.animebox").forEach {
|
val animes = resAnimes.select("div.animebox")
|
||||||
val type = if (it.select("p.animebox-link").select("a").text().lowercase(Locale.ROOT) == "zur serie") {
|
|
||||||
MediaType.TVSHOW
|
|
||||||
} else {
|
|
||||||
MediaType.MOVIE
|
|
||||||
}
|
|
||||||
val mediaTitle = it.select("h3.animebox-title").text()
|
|
||||||
val mediaLink = it.select("p.animebox-link").select("a").attr("href")
|
|
||||||
val mediaImage = it.select("p.animebox-image").select("img").attr("src")
|
|
||||||
val mediaShortText = it.select("p.animebox-shorttext").text()
|
|
||||||
val mediaId = mediaLink.substringAfterLast("/").toInt()
|
|
||||||
|
|
||||||
itemMediaList.add(ItemMedia(mediaId, mediaTitle, mediaImage))
|
guiMediaList.addAll(
|
||||||
mediaList.add(Media(mediaId, mediaLink, type).apply {
|
animes.map {
|
||||||
info.title = mediaTitle
|
ItemMedia(
|
||||||
info.posterUrl = mediaImage
|
id = it.select("p.animebox-link").select("a")
|
||||||
|
.attr("href").substringAfterLast("/").toInt(),
|
||||||
|
title = it.select("h3.animebox-title").text(),
|
||||||
|
posterUrl = it.select("p.animebox-image").select("img")
|
||||||
|
.attr("src")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// TODO legacy
|
||||||
|
resAnimes.select("div.animebox").forEach {
|
||||||
|
val id = it.select("p.animebox-link").select("a").attr("href")
|
||||||
|
.substringAfterLast("/").toInt()
|
||||||
|
val title = it.select("h3.animebox-title").text()
|
||||||
|
val image = it.select("p.animebox-image").select("img").attr("src")
|
||||||
|
val link = it.select("p.animebox-link").select("a").attr("href")
|
||||||
|
val type = when (it.select("p.animebox-link").select("a").text().lowercase(Locale.ROOT)) {
|
||||||
|
"zur serie" -> MediaType.TVSHOW
|
||||||
|
"zum film" -> MediaType.MOVIE
|
||||||
|
else -> MediaType.OTHER
|
||||||
|
}
|
||||||
|
val mediaShortText = it.select("p.animebox-shorttext").text()
|
||||||
|
|
||||||
|
mediaList.add(Media(id, link, type).apply {
|
||||||
|
info.title = title
|
||||||
|
info.posterUrl = image
|
||||||
info.shortDesc = mediaShortText
|
info.shortDesc = mediaShortText
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -410,9 +428,9 @@ object AoDParser {
|
||||||
/**
|
/**
|
||||||
* don't use Gson().fromJson() as we don't have any control over the api and it may change
|
* don't use Gson().fromJson() as we don't have any control over the api and it may change
|
||||||
*/
|
*/
|
||||||
private fun parsePlaylistAsync(playlistPath: String, language: String): Deferred<AoDObject> {
|
private fun parsePlaylistAsync(playlistPath: String, language: String): Deferred<AoDPlaylist> {
|
||||||
if (playlistPath == "[]") {
|
if (playlistPath == "[]") {
|
||||||
return CompletableDeferred(AoDObject(listOf(), language))
|
return CompletableDeferred(AoDPlaylist(listOf(), language))
|
||||||
}
|
}
|
||||||
|
|
||||||
return CoroutineScope(Dispatchers.IO).async(Dispatchers.IO) {
|
return CoroutineScope(Dispatchers.IO).async(Dispatchers.IO) {
|
||||||
|
@ -435,7 +453,7 @@ object AoDParser {
|
||||||
|
|
||||||
//Gson().fromJson(res.body(), AoDObject::class.java)
|
//Gson().fromJson(res.body(), AoDObject::class.java)
|
||||||
|
|
||||||
return@async AoDObject(JsonParser.parseString(res.body()).asJsonObject
|
return@async AoDPlaylist(JsonParser.parseString(res.body()).asJsonObject
|
||||||
.get("playlist").asJsonArray.map {
|
.get("playlist").asJsonArray.map {
|
||||||
Playlist(
|
Playlist(
|
||||||
sources = it.asJsonObject.get("sources").asJsonArray.map { source ->
|
sources = it.asJsonObject.get("sources").asJsonArray.map { source ->
|
||||||
|
|
|
@ -120,24 +120,24 @@ class HomeFragment : Fragment() {
|
||||||
activity?.showFragment(MediaFragment(highlightMedia.id))
|
activity?.showFragment(MediaFragment(highlightMedia.id))
|
||||||
}
|
}
|
||||||
|
|
||||||
adapterMyList.onItemClick = { mediaId, _ ->
|
adapterMyList.onItemClick = { id, _ ->
|
||||||
activity?.showFragment(MediaFragment(mediaId))
|
activity?.showFragment(MediaFragment(id))
|
||||||
}
|
}
|
||||||
|
|
||||||
adapterNewEpisodes.onItemClick = { mediaId, _ ->
|
adapterNewEpisodes.onItemClick = { id, _ ->
|
||||||
activity?.showFragment(MediaFragment(mediaId))
|
activity?.showFragment(MediaFragment(id))
|
||||||
}
|
}
|
||||||
|
|
||||||
adapterNewSimulcasts.onItemClick = { mediaId, _ ->
|
adapterNewSimulcasts.onItemClick = { id, _ ->
|
||||||
activity?.showFragment(MediaFragment(mediaId))
|
activity?.showFragment(MediaFragment(id))
|
||||||
}
|
}
|
||||||
|
|
||||||
adapterNewTitles.onItemClick = { mediaId, _ ->
|
adapterNewTitles.onItemClick = { id, _ ->
|
||||||
activity?.showFragment(MediaFragment(mediaId))
|
activity?.showFragment(MediaFragment(id))
|
||||||
}
|
}
|
||||||
|
|
||||||
adapterTopTen.onItemClick = { mediaId, _ ->
|
adapterTopTen.onItemClick = { id, _ ->
|
||||||
activity?.showFragment(MediaFragment(mediaId))
|
activity?.showFragment(MediaFragment(id))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ class HomeFragment : Fragment() {
|
||||||
|
|
||||||
private fun mapMyListToItemMedia(): List<ItemMedia> {
|
private fun mapMyListToItemMedia(): List<ItemMedia> {
|
||||||
return StorageController.myList.mapNotNull { elementId ->
|
return StorageController.myList.mapNotNull { elementId ->
|
||||||
AoDParser.itemMediaList.firstOrNull { it.id == elementId }.also {
|
AoDParser.guiMediaList.firstOrNull { it.id == elementId }.also {
|
||||||
// it the my list entry wasn't found in itemMediaList Log it
|
// it the my list entry wasn't found in itemMediaList Log it
|
||||||
if (it == null) {
|
if (it == null) {
|
||||||
Log.w(javaClass.name, "The element with the id $elementId was not found.")
|
Log.w(javaClass.name, "The element with the id $elementId was not found.")
|
||||||
|
|
|
@ -30,7 +30,7 @@ class LibraryFragment : Fragment() {
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
// create and set the adapter, needs context
|
// create and set the adapter, needs context
|
||||||
context?.let {
|
context?.let {
|
||||||
adapter = MediaItemAdapter(AoDParser.itemMediaList)
|
adapter = MediaItemAdapter(AoDParser.guiMediaList)
|
||||||
adapter.onItemClick = { mediaId, _ ->
|
adapter.onItemClick = { mediaId, _ ->
|
||||||
activity?.showFragment(MediaFragment(mediaId))
|
activity?.showFragment(MediaFragment(mediaId))
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ import org.mosad.teapod.ui.activity.main.viewmodel.MediaFragmentViewModel
|
||||||
import org.mosad.teapod.util.DataTypes.MediaType
|
import org.mosad.teapod.util.DataTypes.MediaType
|
||||||
import org.mosad.teapod.util.Episode
|
import org.mosad.teapod.util.Episode
|
||||||
import org.mosad.teapod.util.StorageController
|
import org.mosad.teapod.util.StorageController
|
||||||
import org.mosad.teapod.util.tmdb.Movie
|
import org.mosad.teapod.util.tmdb.TMDBMovie
|
||||||
import org.mosad.teapod.util.tmdb.TMDBApiController
|
import org.mosad.teapod.util.tmdb.TMDBApiController
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -138,7 +138,7 @@ class MediaFragment(private val mediaId: Int) : Fragment() {
|
||||||
fragments.add(MediaFragmentEpisodes())
|
fragments.add(MediaFragmentEpisodes())
|
||||||
pagerAdapter.notifyDataSetChanged()
|
pagerAdapter.notifyDataSetChanged()
|
||||||
} else if (media.type == MediaType.MOVIE) {
|
} else if (media.type == MediaType.MOVIE) {
|
||||||
val tmdbMovie = (tmdbResult as Movie?)
|
val tmdbMovie = (tmdbResult as TMDBMovie?)
|
||||||
|
|
||||||
if (tmdbMovie?.runtime != null) {
|
if (tmdbMovie?.runtime != null) {
|
||||||
binding.textEpisodesOrRuntime.text = resources.getQuantityString(
|
binding.textEpisodesOrRuntime.text = resources.getQuantityString(
|
||||||
|
@ -171,7 +171,7 @@ class MediaFragment(private val mediaId: Int) : Fragment() {
|
||||||
when (media.type) {
|
when (media.type) {
|
||||||
MediaType.MOVIE -> playEpisode(media.episodes.first())
|
MediaType.MOVIE -> playEpisode(media.episodes.first())
|
||||||
MediaType.TVSHOW -> playEpisode(nextEpisode)
|
MediaType.TVSHOW -> playEpisode(nextEpisode)
|
||||||
else -> Log.e(javaClass.name, "Wrong Type: $media.type")
|
else -> Log.e(javaClass.name, "Wrong Type: ${media.type}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ class SearchFragment : Fragment() {
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
// create and set the adapter, needs context
|
// create and set the adapter, needs context
|
||||||
context?.let {
|
context?.let {
|
||||||
adapter = MediaItemAdapter(AoDParser.itemMediaList)
|
adapter = MediaItemAdapter(AoDParser.guiMediaList)
|
||||||
adapter!!.onItemClick = { mediaId, _ ->
|
adapter!!.onItemClick = { mediaId, _ ->
|
||||||
binding.searchText.clearFocus()
|
binding.searchText.clearFocus()
|
||||||
activity?.showFragment(MediaFragment(mediaId))
|
activity?.showFragment(MediaFragment(mediaId))
|
||||||
|
|
|
@ -8,7 +8,7 @@ import org.mosad.teapod.util.*
|
||||||
import org.mosad.teapod.util.DataTypes.MediaType
|
import org.mosad.teapod.util.DataTypes.MediaType
|
||||||
import org.mosad.teapod.util.tmdb.TMDBApiController
|
import org.mosad.teapod.util.tmdb.TMDBApiController
|
||||||
import org.mosad.teapod.util.tmdb.TMDBResult
|
import org.mosad.teapod.util.tmdb.TMDBResult
|
||||||
import org.mosad.teapod.util.tmdb.TVSeason
|
import org.mosad.teapod.util.tmdb.TMDBTVSeason
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* handle media, next ep and tmdb
|
* handle media, next ep and tmdb
|
||||||
|
@ -22,7 +22,7 @@ class MediaFragmentViewModel(application: Application) : AndroidViewModel(applic
|
||||||
internal set
|
internal set
|
||||||
var tmdbResult: TMDBResult? = null // TODO rename
|
var tmdbResult: TMDBResult? = null // TODO rename
|
||||||
internal set
|
internal set
|
||||||
var tmdbTVSeason: TVSeason? =null
|
var tmdbTVSeason: TMDBTVSeason? =null
|
||||||
internal set
|
internal set
|
||||||
var mediaMeta: Meta? = null
|
var mediaMeta: Meta? = null
|
||||||
internal set
|
internal set
|
||||||
|
@ -67,24 +67,6 @@ class MediaFragmentViewModel(application: Application) : AndroidViewModel(applic
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
// TESTING
|
|
||||||
// if (media.type == MediaType.TVSHOW) {
|
|
||||||
// if (mediaMeta != null) {
|
|
||||||
// val tvShowMeta = mediaMeta as TVShowMeta
|
|
||||||
// val tmdbTVSeason = tmdbApiController.getTVSeasonDetails(tvShowMeta.tmdbId, tvShowMeta.tmdbSeasonNumber)
|
|
||||||
// } else {
|
|
||||||
// // for tv shows not in metaDB, try to guess/search
|
|
||||||
//
|
|
||||||
// val seasonNumber = guessSeasonFromTitle(media.info.title)
|
|
||||||
// Log.d("test", "season number: $seasonNumber")
|
|
||||||
//
|
|
||||||
// val tmdbTVSeason = tmdbApiController.getTVSeasonDetails(tmdbId, seasonNumber)
|
|
||||||
// Log.d("test", "Season Info: $tmdbTVSeason.")
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// TESTING END
|
|
||||||
|
|
||||||
if (media.type == MediaType.TVSHOW) {
|
if (media.type == MediaType.TVSHOW) {
|
||||||
nextEpisode = media.episodes.firstOrNull{ !it.watched } ?: media.episodes.first()
|
nextEpisode = media.episodes.firstOrNull{ !it.watched } ?: media.episodes.first()
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ data class ThirdPartyComponent(
|
||||||
* it is uses in the ItemMediaAdapter (RecyclerView)
|
* it is uses in the ItemMediaAdapter (RecyclerView)
|
||||||
*/
|
*/
|
||||||
data class ItemMedia(
|
data class ItemMedia(
|
||||||
val id: Int,
|
val id: Int, // aod path id
|
||||||
val title: String,
|
val title: String,
|
||||||
val posterUrl: String
|
val posterUrl: String
|
||||||
)
|
)
|
||||||
|
@ -101,9 +101,9 @@ data class Stream(
|
||||||
/**
|
/**
|
||||||
* this class is used to represent the aod json API?
|
* this class is used to represent the aod json API?
|
||||||
*/
|
*/
|
||||||
data class AoDObject(
|
data class AoDPlaylist(
|
||||||
val playlist: List<Playlist>,
|
val list: List<Playlist>,
|
||||||
val extLanguage: String
|
val language: String
|
||||||
)
|
)
|
||||||
|
|
||||||
data class Playlist(
|
data class Playlist(
|
||||||
|
|
|
@ -12,9 +12,9 @@ import jp.wasabeef.glide.transformations.RoundedCornersTransformation
|
||||||
import org.mosad.teapod.R
|
import org.mosad.teapod.R
|
||||||
import org.mosad.teapod.databinding.ItemEpisodeBinding
|
import org.mosad.teapod.databinding.ItemEpisodeBinding
|
||||||
import org.mosad.teapod.util.Episode
|
import org.mosad.teapod.util.Episode
|
||||||
import org.mosad.teapod.util.tmdb.TVEpisode
|
import org.mosad.teapod.util.tmdb.TMDBTVEpisode
|
||||||
|
|
||||||
class EpisodeItemAdapter(private val episodes: List<Episode>, private val tmdbEpisodes: List<TVEpisode>?) : RecyclerView.Adapter<EpisodeItemAdapter.EpisodeViewHolder>() {
|
class EpisodeItemAdapter(private val episodes: List<Episode>, private val tmdbEpisodes: List<TMDBTVEpisode>?) : RecyclerView.Adapter<EpisodeItemAdapter.EpisodeViewHolder>() {
|
||||||
|
|
||||||
var onImageClick: ((String, Int) -> Unit)? = null
|
var onImageClick: ((String, Int) -> Unit)? = null
|
||||||
|
|
||||||
|
|
|
@ -85,12 +85,12 @@ class TMDBApiController {
|
||||||
* @param movieId The tmdb ID of the movie
|
* @param movieId The tmdb ID of the movie
|
||||||
* @return A tmdb movie object, or null if not found
|
* @return A tmdb movie object, or null if not found
|
||||||
*/
|
*/
|
||||||
suspend fun getMovieDetails(movieId: Int): Movie? = withContext(Dispatchers.IO) {
|
suspend fun getMovieDetails(movieId: Int): TMDBMovie? = withContext(Dispatchers.IO) {
|
||||||
val url = URL("$detailsMovieUrl/$movieId?api_key=$apiKey&language=$language")
|
val url = URL("$detailsMovieUrl/$movieId?api_key=$apiKey&language=$language")
|
||||||
|
|
||||||
return@withContext try {
|
return@withContext try {
|
||||||
val json = url.readText()
|
val json = url.readText()
|
||||||
Gson().fromJson(json, Movie::class.java)
|
Gson().fromJson(json, TMDBMovie::class.java)
|
||||||
} catch (ex: FileNotFoundException) {
|
} catch (ex: FileNotFoundException) {
|
||||||
Log.w(javaClass.name, "Waring: The requested media was not found. Requested ID: $movieId", ex)
|
Log.w(javaClass.name, "Waring: The requested media was not found. Requested ID: $movieId", ex)
|
||||||
null
|
null
|
||||||
|
@ -103,12 +103,12 @@ class TMDBApiController {
|
||||||
* @param tvId The tmdb ID of the tv show
|
* @param tvId The tmdb ID of the tv show
|
||||||
* @return A tmdb tv show object, or null if not found
|
* @return A tmdb tv show object, or null if not found
|
||||||
*/
|
*/
|
||||||
suspend fun getTVShowDetails(tvId: Int): TVShow? = withContext(Dispatchers.IO) {
|
suspend fun getTVShowDetails(tvId: Int): TMDBTVShow? = withContext(Dispatchers.IO) {
|
||||||
val url = URL("$detailsTVUrl/$tvId?api_key=$apiKey&language=$language")
|
val url = URL("$detailsTVUrl/$tvId?api_key=$apiKey&language=$language")
|
||||||
|
|
||||||
return@withContext try {
|
return@withContext try {
|
||||||
val json = url.readText()
|
val json = url.readText()
|
||||||
Gson().fromJson(json, TVShow::class.java)
|
Gson().fromJson(json, TMDBTVShow::class.java)
|
||||||
} catch (ex: FileNotFoundException) {
|
} catch (ex: FileNotFoundException) {
|
||||||
Log.w(javaClass.name, "Waring: The requested media was not found. Requested ID: $tvId", ex)
|
Log.w(javaClass.name, "Waring: The requested media was not found. Requested ID: $tvId", ex)
|
||||||
null
|
null
|
||||||
|
@ -122,12 +122,12 @@ class TMDBApiController {
|
||||||
* @param seasonNumber The tmdb season number
|
* @param seasonNumber The tmdb season number
|
||||||
* @return A tmdb tv season object, or null if not found
|
* @return A tmdb tv season object, or null if not found
|
||||||
*/
|
*/
|
||||||
suspend fun getTVSeasonDetails(tvId: Int, seasonNumber: Int): TVSeason? = withContext(Dispatchers.IO) {
|
suspend fun getTVSeasonDetails(tvId: Int, seasonNumber: Int): TMDBTVSeason? = withContext(Dispatchers.IO) {
|
||||||
val url = URL("$detailsTVUrl/$tvId/season/$seasonNumber?api_key=$apiKey&language=$language")
|
val url = URL("$detailsTVUrl/$tvId/season/$seasonNumber?api_key=$apiKey&language=$language")
|
||||||
|
|
||||||
return@withContext try {
|
return@withContext try {
|
||||||
val json = url.readText()
|
val json = url.readText()
|
||||||
Gson().fromJson(json, TVSeason::class.java)
|
Gson().fromJson(json, TMDBTVSeason::class.java)
|
||||||
} catch (ex: FileNotFoundException) {
|
} catch (ex: FileNotFoundException) {
|
||||||
Log.w(javaClass.name, "Waring: The requested media was not found. Requested ID: $tvId, Season: $seasonNumber", ex)
|
Log.w(javaClass.name, "Waring: The requested media was not found. Requested ID: $tvId, Season: $seasonNumber", ex)
|
||||||
null
|
null
|
||||||
|
|
|
@ -37,7 +37,7 @@ abstract class TMDBResult{
|
||||||
abstract val backdropPath: String?
|
abstract val backdropPath: String?
|
||||||
}
|
}
|
||||||
|
|
||||||
data class Movie(
|
data class TMDBMovie(
|
||||||
override val id: Int,
|
override val id: Int,
|
||||||
override val name: String,
|
override val name: String,
|
||||||
override val overview: String?,
|
override val overview: String?,
|
||||||
|
@ -52,7 +52,7 @@ data class Movie(
|
||||||
// TODO generes
|
// TODO generes
|
||||||
): TMDBResult()
|
): TMDBResult()
|
||||||
|
|
||||||
data class TVShow(
|
data class TMDBTVShow(
|
||||||
override val id: Int,
|
override val id: Int,
|
||||||
override val name: String,
|
override val name: String,
|
||||||
override val overview: String,
|
override val overview: String,
|
||||||
|
@ -67,7 +67,7 @@ data class TVShow(
|
||||||
// TODO generes
|
// TODO generes
|
||||||
): TMDBResult()
|
): TMDBResult()
|
||||||
|
|
||||||
data class TVSeason(
|
data class TMDBTVSeason(
|
||||||
val id: Int,
|
val id: Int,
|
||||||
val name: String,
|
val name: String,
|
||||||
val overview: String,
|
val overview: String,
|
||||||
|
@ -76,12 +76,12 @@ data class TVSeason(
|
||||||
@SerializedName("air_date")
|
@SerializedName("air_date")
|
||||||
val airDate: String,
|
val airDate: String,
|
||||||
@SerializedName("episodes")
|
@SerializedName("episodes")
|
||||||
val episodes: List<TVEpisode>,
|
val episodes: List<TMDBTVEpisode>,
|
||||||
@SerializedName("season_number")
|
@SerializedName("season_number")
|
||||||
val seasonNumber: Int
|
val seasonNumber: Int
|
||||||
)
|
)
|
||||||
|
|
||||||
data class TVEpisode(
|
data class TMDBTVEpisode(
|
||||||
val id: Int,
|
val id: Int,
|
||||||
val name: String,
|
val name: String,
|
||||||
val overview: String,
|
val overview: String,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = "1.5.20"
|
ext.kotlin_version = "1.5.21"
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
|
Loading…
Reference in New Issue