From e0a6485ed759f9497d8e8fa99ba1e4745bcf7c53 Mon Sep 17 00:00:00 2001 From: Jannik Date: Sat, 3 Jul 2021 15:51:52 +0200 Subject: [PATCH] tmdb api improvements * sort tmdb results by name * remove season information in media title before searching --- app/build.gradle | 4 +- .../mosad/teapod/util/TMDBApiController.kt | 64 ++++++------------- 2 files changed, 21 insertions(+), 47 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a3c27a1..17b14a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "org.mosad.teapod" minSdkVersion 23 targetSdkVersion 30 - versionCode 4180 //00.04.100 - versionName "0.4.2-alpha2" + versionCode 4190 //00.04.190 + versionName "0.4.2-beta1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" resValue "string", "build_time", buildTime() diff --git a/app/src/main/java/org/mosad/teapod/util/TMDBApiController.kt b/app/src/main/java/org/mosad/teapod/util/TMDBApiController.kt index 205d221..140b1d7 100644 --- a/app/src/main/java/org/mosad/teapod/util/TMDBApiController.kt +++ b/app/src/main/java/org/mosad/teapod/util/TMDBApiController.kt @@ -4,9 +4,9 @@ import android.util.Log import com.google.gson.JsonObject import com.google.gson.JsonParser import kotlinx.coroutines.* +import org.mosad.teapod.util.DataTypes.MediaType import java.net.URL import java.net.URLEncoder -import org.mosad.teapod.util.DataTypes.MediaType class TMDBApiController { @@ -21,7 +21,11 @@ class TMDBApiController { private val imageUrl = "https://image.tmdb.org/t/p/w500" suspend fun search(title: String, type: MediaType): TMDBResponse { - val searchTerm = title.replace("(Sub)", "").trim() + // remove unneeded text from the media title before searching + val searchTerm = title.replace("(Sub)", "") + .replace(Regex("-?\\s?[0-9]+.\\s?(Staffel|Season)"), "") + .replace(Regex("(Staffel|Season)\\s?[0-9]+"), "") + .trim() return when (type) { MediaType.MOVIE -> searchMovie(searchTerm) @@ -38,48 +42,14 @@ class TMDBApiController { private suspend fun searchTVShow(title: String): TMDBResponse = withContext(Dispatchers.IO) { val url = URL("$searchTVUrl$preparedParameters&query=${URLEncoder.encode(title, "UTF-8")}") val response = JsonParser.parseString(url.readText()).asJsonObject - println(url) - println(response) +// println(response) - return@withContext if (response.get("total_results").asInt > 0) { - val results = response.get("results").asJsonArray - var result = results.asJsonArray.first() - var bestMatch = Int.MAX_VALUE + val sortedResults = response.get("results").asJsonArray.toList().sortedBy { + getStringNotNull(it.asJsonObject, "name") + } - results.forEach { it -> - val name = getStringNotNull(it.asJsonObject, "name") - val rating = name.compareTo(title) - - println("name: $name, title: $title") - - when { - rating < 0 -> { - println("rating < ($rating): $it") - - if ((rating * -1) < bestMatch) { - bestMatch = (rating * -1) - result = it - println("best < ($bestMatch): $it") - } - } - rating == 0 -> { - println("rating == ($rating): $it") - bestMatch = 0 - result = it - println("best == ($bestMatch): $it") - } - else -> { - println("rating > ($rating): $it") - if (rating < bestMatch) { - bestMatch = rating - result = it - println("best > ($bestMatch): $it") - } - } - } - } - - result.asJsonObject.let { + return@withContext if (sortedResults.isNotEmpty()) { + sortedResults.first().asJsonObject.let { val id = getStringNotNull(it, "id").toInt() val overview = getStringNotNull(it, "overview") val posterPath = getStringNotNullPrefix(it, "poster_path", imageUrl) @@ -96,10 +66,14 @@ class TMDBApiController { private suspend fun searchMovie(title: String): TMDBResponse = withContext(Dispatchers.IO) { val url = URL("$searchMovieUrl$preparedParameters&query=${URLEncoder.encode(title, "UTF-8")}") val response = JsonParser.parseString(url.readText()).asJsonObject - //println(response) +// println(response) - return@withContext if (response.get("total_results").asInt > 0) { - response.get("results").asJsonArray.first().asJsonObject.let { + val sortedResults = response.get("results").asJsonArray.toList().sortedBy { + getStringNotNull(it.asJsonObject, "name") + } + + return@withContext if (sortedResults.isNotEmpty()) { + sortedResults.first().asJsonObject.let { val id = getStringNotNull(it,"id").toInt() val overview = getStringNotNull(it,"overview") val posterPath = getStringNotNullPrefix(it, "poster_path", imageUrl)