replace tmdb multi search with type search (movie/tv)
multi search often retuns a wrong result, therfore use movie or tv show search
This commit is contained in:
@ -69,19 +69,35 @@ class TMDBApiController {
|
||||
}
|
||||
|
||||
/**
|
||||
* Search for a media(movie or tv show) in tmdb
|
||||
* @param query The query text
|
||||
* @return A TMDBSearch object, or NoneTMDBSearch if nothing was found
|
||||
* Search for a movie in tmdb
|
||||
* @param query The query text (movie title)
|
||||
* @return A TMDBSearch<TMDBSearchResultMovie> object, or
|
||||
* NoneTMDBSearchMovie if nothing was found
|
||||
*/
|
||||
@ExperimentalSerializationApi
|
||||
suspend fun searchMulti(query: String): TMDBSearch {
|
||||
suspend fun searchMovie(query: String): TMDBSearch<TMDBSearchResultMovie> {
|
||||
val searchEndpoint = "/search/multi"
|
||||
val parameters = listOf("query" to query, "include_adult" to false)
|
||||
|
||||
val result = request(searchEndpoint, parameters)
|
||||
return result.component1()?.obj()?.let {
|
||||
json.decodeFromString(it.toString())
|
||||
} ?: NoneTMDBSearch
|
||||
} ?: NoneTMDBSearchMovie
|
||||
}
|
||||
|
||||
/**
|
||||
* Search for a tv show in tmdb
|
||||
* @param query The query text (tv show title)
|
||||
* @return A TMDBSearch<TMDBSearchResultTVShow> object, or
|
||||
* NoneTMDBSearchTVShow if nothing was found
|
||||
*/
|
||||
suspend fun searchTVShow(query: String): TMDBSearch<TMDBSearchResultTVShow> {
|
||||
val searchEndpoint = "/search/tv"
|
||||
val parameters = listOf("query" to query, "include_adult" to false)
|
||||
|
||||
val result = request(searchEndpoint, parameters)
|
||||
return result.component1()?.obj()?.let {
|
||||
json.decodeFromString(it.toString())
|
||||
} ?: NoneTMDBSearchTVShow
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -22,38 +22,8 @@
|
||||
|
||||
package org.mosad.teapod.util.tmdb
|
||||
|
||||
import android.os.Build
|
||||
import androidx.annotation.RequiresApi
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.json.JsonNames
|
||||
import java.text.DateFormat
|
||||
import java.time.LocalDate
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* New TMDB API data classes
|
||||
*/
|
||||
|
||||
@ExperimentalSerializationApi
|
||||
@Serializable
|
||||
data class TMDBSearch(
|
||||
val page: Int,
|
||||
val results: List<TMDBSearchResult>
|
||||
)
|
||||
|
||||
@ExperimentalSerializationApi
|
||||
@Serializable
|
||||
data class TMDBSearchResult(
|
||||
@SerialName("id") val id: Int,
|
||||
@SerialName("media_type") val mediaType: String,
|
||||
@JsonNames("name", "title") val name: String, // tv show = name, movie = title
|
||||
@SerialName("overview") val overview: String?,
|
||||
@SerialName("poster_path") val posterPath: String?,
|
||||
@SerialName("backdrop_path") val backdropPath: String?,
|
||||
)
|
||||
|
||||
@ExperimentalSerializationApi
|
||||
val NoneTMDBSearch = TMDBSearch(0, emptyList())
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
/**
|
||||
* These data classes represent the tmdb api json objects.
|
||||
@ -76,6 +46,42 @@ data class TMDBBase(
|
||||
override val backdropPath: String?
|
||||
) : TMDBResult
|
||||
|
||||
/**
|
||||
* search results for movie and tv show
|
||||
*/
|
||||
|
||||
@Serializable
|
||||
data class TMDBSearch<T>(
|
||||
val page: Int,
|
||||
val results: List<T>
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class TMDBSearchResultMovie(
|
||||
@SerialName("id") override val id: Int,
|
||||
@SerialName("title") override val name: String,
|
||||
@SerialName("overview") override val overview: String?,
|
||||
@SerialName("poster_path") override val posterPath: String?,
|
||||
@SerialName("backdrop_path") override val backdropPath: String?,
|
||||
) : TMDBResult
|
||||
|
||||
@Serializable
|
||||
data class TMDBSearchResultTVShow(
|
||||
@SerialName("id") override val id: Int,
|
||||
@SerialName("name") override val name: String,
|
||||
@SerialName("overview") override val overview: String?,
|
||||
@SerialName("poster_path") override val posterPath: String?,
|
||||
@SerialName("backdrop_path") override val backdropPath: String?,
|
||||
) : TMDBResult
|
||||
|
||||
val NoneTMDBSearch = TMDBSearch<TMDBBase>(0, emptyList())
|
||||
val NoneTMDBSearchMovie = TMDBSearch<TMDBSearchResultMovie>(0, emptyList())
|
||||
val NoneTMDBSearchTVShow = TMDBSearch<TMDBSearchResultTVShow>(0, emptyList())
|
||||
|
||||
/**
|
||||
* detail return data types
|
||||
*/
|
||||
|
||||
@Serializable
|
||||
data class TMDBMovie(
|
||||
@SerialName("id") override val id: Int,
|
||||
|
Reference in New Issue
Block a user