Skip to content

Commit 27c1bef

Browse files
committed
fix
1 parent 51bda23 commit 27c1bef

File tree

5 files changed

+112
-17
lines changed

5 files changed

+112
-17
lines changed

app/src/main/java/com/wirelessalien/android/moviedb/App.kt

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,87 @@
2020
package com.wirelessalien.android.moviedb
2121

2222
import android.app.Application
23+
import android.content.Context
2324
import com.google.android.material.color.DynamicColors
25+
import com.wirelessalien.android.moviedb.helper.ConfigHelper
26+
import kotlinx.coroutines.CoroutineScope
27+
import kotlinx.coroutines.Dispatchers
28+
import kotlinx.coroutines.launch
29+
import kotlinx.coroutines.withContext
30+
import okhttp3.OkHttpClient
31+
import okhttp3.Request
32+
import org.json.JSONException
33+
import org.json.JSONObject
34+
import java.io.IOException
2435

2536
class App : Application() {
2637
override fun onCreate() {
2738
super.onCreate()
2839
DynamicColors.applyToActivitiesIfAvailable(this)
40+
fetchAndStoreGenres()
2941
}
30-
}
42+
43+
private fun fetchAndStoreGenres() {
44+
val sharedPreferences = applicationContext.getSharedPreferences("GenreList", Context.MODE_PRIVATE)
45+
val movieGenresFetched = sharedPreferences.contains("movieGenreListResponse")
46+
val tvGenresFetched = sharedPreferences.contains("tvGenreListResponse")
47+
48+
if (!movieGenresFetched || !tvGenresFetched) {
49+
CoroutineScope(Dispatchers.IO).launch {
50+
if (!movieGenresFetched) {
51+
fetchGenreList("movie")
52+
}
53+
if (!tvGenresFetched) {
54+
fetchGenreList("tv")
55+
}
56+
}
57+
}
58+
}
59+
60+
private suspend fun fetchGenreList(genreType: String) {
61+
val apiKey = ConfigHelper.getConfigValue(applicationContext, "api_key")
62+
val response = fetchGenreListFromNetwork(genreType, apiKey)
63+
handleResponse(response, genreType)
64+
}
65+
66+
private suspend fun fetchGenreListFromNetwork(genreType: String, apiKey: String?): String? {
67+
return withContext(Dispatchers.IO) {
68+
val client = OkHttpClient()
69+
val request = Request.Builder()
70+
.url("https://api.themoviedb.org/3/genre/$genreType/list?api_key=$apiKey")
71+
.build()
72+
73+
try {
74+
val response = client.newCall(request).execute()
75+
if (response.isSuccessful) {
76+
response.body?.string()
77+
} else {
78+
null
79+
}
80+
} catch (e: IOException) {
81+
e.printStackTrace()
82+
null
83+
}
84+
}
85+
}
86+
87+
private fun handleResponse(response: String?, genreType: String) {
88+
if (!response.isNullOrEmpty()) {
89+
val sharedPreferences = applicationContext.getSharedPreferences("GenreList", Context.MODE_PRIVATE)
90+
val prefsEditor = sharedPreferences.edit()
91+
try {
92+
val reader = JSONObject(response)
93+
val genreArray = reader.getJSONArray("genres")
94+
for (i in 0 until genreArray.length()) {
95+
val websiteData = genreArray.getJSONObject(i)
96+
prefsEditor.putString(websiteData.getString("id"), websiteData.getString("name"))
97+
}
98+
prefsEditor.putString("${genreType}GenreJSONArrayList", genreArray.toString())
99+
prefsEditor.putString("${genreType}GenreListResponse", response)
100+
prefsEditor.apply()
101+
} catch (je: JSONException) {
102+
je.printStackTrace()
103+
}
104+
}
105+
}
106+
}

app/src/main/java/com/wirelessalien/android/moviedb/adapter/EpisodeAdapter.kt

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,13 @@ class EpisodeAdapter(
9999
private var tmdbObject: JSONObject
100100
) : RecyclerView.Adapter<EpisodeViewHolder?>() {
101101

102+
private var bottomSheet: EpisodeDetailsBottomSheet? = null
102103
private var episodeRatings: Map<Int, Double> = HashMap()
103104
private var watchedEpisodes: Map<Int, Boolean> = HashMap()
104105
private var mediaObject: JSONObject? = null
105106
private val tktaccessToken = PreferenceManager.getDefaultSharedPreferences(context).getString("trakt_access_token", null)
106107
private lateinit var clientId: String
107-
// private var isInCollection: Boolean = false
108+
// private var isInCollection: Boolean = false
108109
private var isInWatchList: Boolean = false
109110
private var isInRating: Boolean = false
110111
private lateinit var defaultSharedPreferences: SharedPreferences
@@ -229,7 +230,7 @@ class EpisodeAdapter(
229230
binding.btnAddDetailsToLocalDb.visibility = View.VISIBLE
230231
binding.btnWatchedToLocalDb.visibility = View.VISIBLE
231232
binding.btnAddRatingToTmdb.visibility = View.GONE
232-
// binding.btnAddToTraktCollection.visibility = View.GONE
233+
// binding.btnAddToTraktCollection.visibility = View.GONE
233234
binding.btnAddToTraktHistory.visibility = View.GONE
234235
binding.btnAddToTraktList.visibility = View.GONE
235236
binding.btnAddToTraktWatchlist.visibility = View.GONE
@@ -697,18 +698,30 @@ class EpisodeAdapter(
697698
}
698699

699700
holder.binding.relativeLayout.setOnClickListener {
700-
val bottomSheet = EpisodeDetailsBottomSheet.newInstance(tvShowId, seasonNumber, episode.episodeNumber)
701-
bottomSheet.show((context as FragmentActivity).supportFragmentManager, EpisodeDetailsBottomSheet.TAG)
701+
if (bottomSheet?.isAdded == true) {
702+
bottomSheet?.updateEpisode(tvShowId, seasonNumber, episode.episodeNumber)
703+
} else {
704+
bottomSheet = EpisodeDetailsBottomSheet.newInstance(tvShowId, seasonNumber, episode.episodeNumber)
705+
bottomSheet?.show((context as FragmentActivity).supportFragmentManager, EpisodeDetailsBottomSheet.TAG)
706+
}
702707
}
703708

704709
holder.binding.relativeLayout2.setOnClickListener {
705-
val bottomSheet = EpisodeDetailsBottomSheet.newInstance(tvShowId, seasonNumber, episode.episodeNumber)
706-
bottomSheet.show((context as FragmentActivity).supportFragmentManager, EpisodeDetailsBottomSheet.TAG)
710+
if (bottomSheet?.isAdded == true) {
711+
bottomSheet?.updateEpisode(tvShowId, seasonNumber, episode.episodeNumber)
712+
} else {
713+
bottomSheet = EpisodeDetailsBottomSheet.newInstance(tvShowId, seasonNumber, episode.episodeNumber)
714+
bottomSheet?.show((context as FragmentActivity).supportFragmentManager, EpisodeDetailsBottomSheet.TAG)
715+
}
707716
}
708717

709718
holder.binding.description.setOnClickListener {
710-
val bottomSheet = EpisodeDetailsBottomSheet.newInstance(tvShowId, seasonNumber, episode.episodeNumber)
711-
bottomSheet.show((context as FragmentActivity).supportFragmentManager, EpisodeDetailsBottomSheet.TAG)
719+
if (bottomSheet?.isAdded == true) {
720+
bottomSheet?.updateEpisode(tvShowId, seasonNumber, episode.episodeNumber)
721+
} else {
722+
bottomSheet = EpisodeDetailsBottomSheet.newInstance(tvShowId, seasonNumber, episode.episodeNumber)
723+
bottomSheet?.show((context as FragmentActivity).supportFragmentManager, EpisodeDetailsBottomSheet.TAG)
724+
}
712725
}
713726
}
714727

app/src/main/java/com/wirelessalien/android/moviedb/adapter/ShowBaseAdapter.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,6 @@ class ShowBaseAdapter(
529529
bottomSheetBinding!!.episodeOverview,
530530
bottomSheetBinding!!.episodeAirDate,
531531
bottomSheetBinding!!.imageView,
532-
mShowArrayList.getOrNull(0)?.optString("upcoming_date") ?: "",
533532
preference.getBoolean(HD_IMAGE_SIZE, false),
534533
apiKey ?: ""
535534
)
@@ -563,7 +562,6 @@ class ShowBaseAdapter(
563562
episodeOverview: TextView,
564563
episodeAirDate: TextView,
565564
episodeImageView: ImageView,
566-
airDate: String,
567565
loadHdImage : Boolean,
568566
apiKey: String
569567
) {
@@ -583,9 +581,7 @@ class ShowBaseAdapter(
583581
val overview = jsonResponse.optString("overview", "No overview available.")
584582
val stillPath = jsonResponse.optString("still_path")
585583

586-
val dateToFormat = airDate.ifEmpty {
587-
jsonResponse.optString("air_date", "")
588-
}
584+
val dateToFormat = jsonResponse.optString("air_date", "")
589585

590586
val formats = listOf(
591587
"yyyy-MM-dd",

app/src/main/java/com/wirelessalien/android/moviedb/adapter/ShowTraktAdapter.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,7 @@ class ShowTraktAdapter(
686686
val name = jsonResponse.optString("name", "N/A")
687687
val overview = jsonResponse.optString("overview", "No overview available.")
688688
val stillPath = jsonResponse.optString("still_path")
689-
val airDate = jsonResponse.optString("air_date")
689+
val dateToFormat = jsonResponse.optString("air_date", "")
690690

691691
val formats = listOf(
692692
"yyyy-MM-dd",
@@ -698,14 +698,14 @@ class ShowTraktAdapter(
698698
for (format in formats) {
699699
try {
700700
val formatter = SimpleDateFormat(format, Locale.getDefault())
701-
parsedDate = formatter.parse(airDate)
701+
parsedDate = formatter.parse(dateToFormat)
702702
if (parsedDate != null) break
703703
} catch (e: ParseException) {
704704
continue
705705
}
706706
}
707707

708-
var formattedAirDate : String = airDate
708+
var formattedAirDate : String = dateToFormat
709709
if (parsedDate != null) {
710710
val localFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.getDefault())
711711
formattedAirDate = localFormat.format(parsedDate)

app/src/main/java/com/wirelessalien/android/moviedb/fragment/EpisodeDetailsBottomSheet.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,16 @@ class EpisodeDetailsBottomSheet : BottomSheetDialogFragment() {
8787
}
8888
}
8989

90+
fun updateEpisode(tvShowId: Int, seasonNumber: Int, episodeNumber: Int) {
91+
this.tvShowId = tvShowId
92+
this.seasonNumber = seasonNumber
93+
this.episodeNumber = episodeNumber
94+
arguments?.putInt(ARG_TV_SHOW_ID, tvShowId)
95+
arguments?.putInt(ARG_SEASON_NUMBER, seasonNumber)
96+
arguments?.putInt(ARG_EPISODE_NUMBER, episodeNumber)
97+
fetchEpisodeDetails()
98+
}
99+
90100
private fun fetchEpisodeDetails() {
91101
val apiKey = ConfigHelper.getConfigValue(requireContext(), "api_key")
92102
val language = BaseActivity.getLanguageParameter(requireContext()).replace("&language=", "")

0 commit comments

Comments
 (0)