From cf02bee7d4e78c73284ec010f53e61b8348c3c1e Mon Sep 17 00:00:00 2001
From: Jannik <seil0@mosad.xyz>
Date: Sun, 16 Apr 2023 13:49:22 +0200
Subject: [PATCH] minor fixes

* fix episode count in MediaFragement
* fix tmdb language tag
* update media type detection to use the episode field as episodeNumber may be messinging from certain episodes of tv shows
---
 app/build.gradle                                       |  6 +++---
 .../org/mosad/teapod/parser/crunchyroll/DataTypes.kt   |  6 +++---
 .../teapod/ui/activity/main/fragments/MediaFragment.kt | 10 +++++-----
 .../activity/main/viewmodel/MediaFragmentViewModel.kt  |  4 ++--
 .../mosad/teapod/ui/activity/player/PlayerViewModel.kt |  2 +-
 .../org/mosad/teapod/util/tmdb/TMDBApiController.kt    |  2 +-
 app/src/main/res/drawable/placeholder_image_2_3.xml    |  7 +++++++
 app/src/main/res/layout/fragment_media.xml             |  4 ++--
 8 files changed, 24 insertions(+), 17 deletions(-)
 create mode 100644 app/src/main/res/drawable/placeholder_image_2_3.xml

diff --git a/app/build.gradle b/app/build.gradle
index a3b0a88..8b59569 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,9 +11,9 @@ android {
     defaultConfig {
         applicationId "org.mosad.teapod"
         minSdkVersion 23
-        targetSdkVersion 32
-        versionCode 100990 //01.00.000
-        versionName "1.1.0-beta1"
+        targetSdkVersion 33
+        versionCode 100991 //01.00.000
+        versionName "1.1.0-beta2"
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         resValue "string", "build_time", buildTime()
diff --git a/app/src/main/java/org/mosad/teapod/parser/crunchyroll/DataTypes.kt b/app/src/main/java/org/mosad/teapod/parser/crunchyroll/DataTypes.kt
index 5a43200..a03c366 100644
--- a/app/src/main/java/org/mosad/teapod/parser/crunchyroll/DataTypes.kt
+++ b/app/src/main/java/org/mosad/teapod/parser/crunchyroll/DataTypes.kt
@@ -245,11 +245,11 @@ data class SeriesItem(
     @SerialName("images") val images: Images,
     @SerialName("is_simulcast") val isSimulcast: Boolean,
     @SerialName("maturity_ratings") val maturityRatings: List<String>,
-    @SerialName("audio_locales") val audioLocales: List<String>
-
+    @SerialName("audio_locales") val audioLocales: List<String>,
+    @SerialName("episode_count") val episodeCount: Int
 )
 
-val NoneSeriesItem = SeriesItem("", "", "", Images(emptyList(), emptyList()), false, emptyList(), emptyList())
+val NoneSeriesItem = SeriesItem("", "", "", Images(emptyList(), emptyList()), false, emptyList(), emptyList(), 0)
 val NoneSeries = Series(1, listOf(NoneSeriesItem))
 
 /**
diff --git a/app/src/main/java/org/mosad/teapod/ui/activity/main/fragments/MediaFragment.kt b/app/src/main/java/org/mosad/teapod/ui/activity/main/fragments/MediaFragment.kt
index 91bd0dd..ae0f6ee 100644
--- a/app/src/main/java/org/mosad/teapod/ui/activity/main/fragments/MediaFragment.kt
+++ b/app/src/main/java/org/mosad/teapod/ui/activity/main/fragments/MediaFragment.kt
@@ -47,7 +47,6 @@ class MediaFragment(private val mediaIdStr: String) : Fragment() {
         playerFinishedCallback()
     }
 
-
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
         binding = FragmentMediaBinding.inflate(inflater, container, false)
         return binding.root
@@ -91,6 +90,7 @@ class MediaFragment(private val mediaIdStr: String) : Fragment() {
 
         // load poster and backdrop
         Glide.with(requireContext()).load(posterUrl)
+            .apply(RequestOptions.placeholderOf(ColorDrawable(Color.DKGRAY)))
             .into(binding.imagePoster)
         Glide.with(requireContext()).load(backdropUrl)
             .apply(RequestOptions.placeholderOf(ColorDrawable(Color.DKGRAY)))
@@ -147,14 +147,14 @@ class MediaFragment(private val mediaIdStr: String) : Fragment() {
                 // episodes count
                 binding.textEpisodesOrRuntime.text = resources.getQuantityString(
                     R.plurals.text_episodes_count,
-                    episodesCrunchy.total,
-                    episodesCrunchy.total
+                    seriesCrunchy.episodeCount,
+                    seriesCrunchy.episodeCount
                 )
             }
             is TMDBMovie -> {
-                val tmdbMovie = (tmdbResult as TMDBMovie?)
+                val tmdbMovie = tmdbResult as TMDBMovie
 
-                if (tmdbMovie?.runtime != null) {
+                if (tmdbMovie.runtime != null) {
                     binding.textEpisodesOrRuntime.text = resources.getQuantityString(
                         R.plurals.text_runtime,
                         tmdbMovie.runtime,
diff --git a/app/src/main/java/org/mosad/teapod/ui/activity/main/viewmodel/MediaFragmentViewModel.kt b/app/src/main/java/org/mosad/teapod/ui/activity/main/viewmodel/MediaFragmentViewModel.kt
index 4cfb28a..88f52c7 100644
--- a/app/src/main/java/org/mosad/teapod/ui/activity/main/viewmodel/MediaFragmentViewModel.kt
+++ b/app/src/main/java/org/mosad/teapod/ui/activity/main/viewmodel/MediaFragmentViewModel.kt
@@ -76,9 +76,9 @@ class MediaFragmentViewModel(application: Application) : AndroidViewModel(applic
         currentEpisodesCrunchy.clear()
         currentEpisodesCrunchy.addAll(episodesCrunchy.data)
 
-        // set media type
+        // set media type, for movies the episode field is empty
         mediaType = episodesCrunchy.data.firstOrNull()?.let {
-            if (it.episodeNumber != null) MediaType.TVSHOW else MediaType.MOVIE
+            if (it.episode.isNotEmpty()) MediaType.TVSHOW else MediaType.MOVIE
         } ?: MediaType.OTHER
 
         // load playheads and tmdb in parallel
diff --git a/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerViewModel.kt b/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerViewModel.kt
index 9e515c7..55ff137 100644
--- a/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerViewModel.kt
+++ b/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerViewModel.kt
@@ -246,7 +246,7 @@ class PlayerViewModel(application: Application) : AndroidViewModel(application)
                 }
             },
             viewModelScope.launch(Dispatchers.IO) {
-                currentIntroMetadata = NoneDatalabIntro //Crunchyroll.datalabIntro(currentEpisode.id)
+                currentIntroMetadata = Crunchyroll.datalabIntro(currentEpisode.id)
             }
         )
         Log.d(classTag, "streams: ${currentEpisode.streamsLink}")
diff --git a/app/src/main/java/org/mosad/teapod/util/tmdb/TMDBApiController.kt b/app/src/main/java/org/mosad/teapod/util/tmdb/TMDBApiController.kt
index 98380dc..7a0d85b 100644
--- a/app/src/main/java/org/mosad/teapod/util/tmdb/TMDBApiController.kt
+++ b/app/src/main/java/org/mosad/teapod/util/tmdb/TMDBApiController.kt
@@ -67,7 +67,7 @@ class TMDBApiController {
     ): T = coroutineScope {
         val path = "$apiUrl$endpoint"
         val params = concatenate(
-            listOf("api_key" to apiKey, "language" to Preferences.preferredSubtitleLocale.language),
+            listOf("api_key" to apiKey, "language" to Preferences.preferredSubtitleLocale.toLanguageTag()),
             parameters
         )
 
diff --git a/app/src/main/res/drawable/placeholder_image_2_3.xml b/app/src/main/res/drawable/placeholder_image_2_3.xml
new file mode 100644
index 0000000..eebc313
--- /dev/null
+++ b/app/src/main/res/drawable/placeholder_image_2_3.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="?colorSurfaceVariant"/>
+    <size
+        android:width="400px"
+        android:height="600px"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_media.xml b/app/src/main/res/layout/fragment_media.xml
index cdab818..15587ce 100644
--- a/app/src/main/res/layout/fragment_media.xml
+++ b/app/src/main/res/layout/fragment_media.xml
@@ -42,7 +42,7 @@
                             android:layout_height="match_parent"
                             android:contentDescription="@string/media_poster_backdrop_desc"
                             android:scaleType="fitCenter"
-                            tools:srcCompat="@drawable/placeholder_image" />
+                            tools:srcCompat="@android:color/darker_gray" />
 
                         <com.google.android.material.imageview.ShapeableImageView
                             android:id="@+id/image_poster"
@@ -53,7 +53,7 @@
                             android:layout_marginBottom="7dp"
                             android:scaleType="fitCenter"
                             app:shapeAppearance="@style/ShapeAppearance.Teapod.RoundedPoster"
-                            tools:src="@drawable/ic_launcher_background" />
+                            tools:src="@drawable/placeholder_image_2_3" />
 
                     </FrameLayout>