From 55552698770c1171f3e6c927604d20222d89ddc3 Mon Sep 17 00:00:00 2001 From: Jannik Date: Wed, 30 Jun 2021 20:17:15 +0200 Subject: [PATCH 1/3] sort tmdb results with String.compareTo --- .../mosad/teapod/util/TMDBApiController.kt | 42 ++++++++++++++++++- 1 file changed, 40 insertions(+), 2 deletions(-) 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 9d51653..205d221 100644 --- a/app/src/main/java/org/mosad/teapod/util/TMDBApiController.kt +++ b/app/src/main/java/org/mosad/teapod/util/TMDBApiController.kt @@ -38,10 +38,48 @@ 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(response) + println(url) + println(response) return@withContext if (response.get("total_results").asInt > 0) { - response.get("results").asJsonArray.first().asJsonObject.let { + val results = response.get("results").asJsonArray + var result = results.asJsonArray.first() + var bestMatch = Int.MAX_VALUE + + 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 { val id = getStringNotNull(it, "id").toInt() val overview = getStringNotNull(it, "overview") val posterPath = getStringNotNullPrefix(it, "poster_path", imageUrl) -- 2.44.0 From e0a6485ed759f9497d8e8fa99ba1e4745bcf7c53 Mon Sep 17 00:00:00 2001 From: Jannik Date: Sat, 3 Jul 2021 15:51:52 +0200 Subject: [PATCH 2/3] 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) -- 2.44.0 From ba7d82bc2b087032fcddf86fa28a5df6af4355fe Mon Sep 17 00:00:00 2001 From: Jannik Date: Sat, 3 Jul 2021 15:58:20 +0200 Subject: [PATCH 3/3] replace deprecated OnNavigationItemSelectedListener --- .../java/org/mosad/teapod/ui/activity/main/MainActivity.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/mosad/teapod/ui/activity/main/MainActivity.kt b/app/src/main/java/org/mosad/teapod/ui/activity/main/MainActivity.kt index a301b55..7aaa2c6 100644 --- a/app/src/main/java/org/mosad/teapod/ui/activity/main/MainActivity.kt +++ b/app/src/main/java/org/mosad/teapod/ui/activity/main/MainActivity.kt @@ -31,7 +31,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.commit import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.callbacks.onDismiss -import com.google.android.material.bottomnavigation.BottomNavigationView +import com.google.android.material.navigation.NavigationBarView import kotlinx.coroutines.* import org.mosad.teapod.R import org.mosad.teapod.databinding.ActivityMainBinding @@ -51,7 +51,7 @@ import org.mosad.teapod.util.exitAndRemoveTask import java.net.SocketTimeoutException import kotlin.system.measureTimeMillis -class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemSelectedListener { +class MainActivity : AppCompatActivity(), NavigationBarView.OnItemSelectedListener { private lateinit var binding: ActivityMainBinding private var activeBaseFragment: Fragment = HomeFragment() // the currently active fragment, home at the start @@ -72,7 +72,7 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS theme.applyStyle(getThemeResource(), true) binding = ActivityMainBinding.inflate(layoutInflater) - binding.navView.setOnNavigationItemSelectedListener(this) + binding.navView.setOnItemSelectedListener(this) setContentView(binding.root) supportFragmentManager.commit { -- 2.44.0