From e4ac01605fc6c98ea5014b940c4d6586cd2056fb Mon Sep 17 00:00:00 2001 From: Jannik Date: Fri, 1 Jan 2021 13:08:25 +0100 Subject: [PATCH] fix crash after clicking on the highlight play button --- .../java/org/mosad/teapod/parser/AoDParser.kt | 8 +++++ .../mosad/teapod/player/PlayerViewModel.kt | 5 ++- .../teapod/ui/fragments/MediaFragment.kt | 31 ++++++++----------- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt b/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt index 322443c..46d73b0 100644 --- a/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt +++ b/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt @@ -125,6 +125,14 @@ object AoDParser { return media } + fun markAsWatched(mediaId: Int, episodeId: Int) = GlobalScope.launch { + val episode = getMediaById(mediaId).getEpisodeById(episodeId) + episode.watched = true + sendCallback(episode.watchedCallback) + + Log.d(javaClass.name, "Marked episode ${episode.id} as watched") + } + // TODO don't use jsoup here fun sendCallback(callbackPath: String) = GlobalScope.launch(Dispatchers.IO) { val headers = mutableMapOf( diff --git a/app/src/main/java/org/mosad/teapod/player/PlayerViewModel.kt b/app/src/main/java/org/mosad/teapod/player/PlayerViewModel.kt index 037ea08..35117f4 100644 --- a/app/src/main/java/org/mosad/teapod/player/PlayerViewModel.kt +++ b/app/src/main/java/org/mosad/teapod/player/PlayerViewModel.kt @@ -106,7 +106,10 @@ class PlayerViewModel(application: Application) : AndroidViewModel(application) ) playMedia(mediaSource, replace, seekPosition) - MediaFragment.instance.updateWatchedState(currentEpisode) // watchedCallback for the new episode + // if episodes has not been watched, mark as watched + if (!episode.watched) { + AoDParser.markAsWatched(media.id, episode.id) + } } fun playMedia(source: MediaSource, replace: Boolean = false, seekPosition: Long = 0) { diff --git a/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt b/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt index 5dc630a..aeb6fa4 100644 --- a/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt +++ b/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt @@ -32,14 +32,6 @@ class MediaFragment(private val mediaId: Int) : Fragment() { private lateinit var tmdb: TMDBResponse private lateinit var nextEpisode: Episode - companion object { - lateinit var instance: MediaFragment - } - - init { - instance = this - } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { binding = FragmentMediaBinding.inflate(inflater, container, false) return binding.root @@ -61,6 +53,19 @@ class MediaFragment(private val mediaId: Int) : Fragment() { } } + override fun onResume() { + super.onResume() + + // only notify adapter, if initialized + if (this::adapterRecEpisodes.isInitialized) { + // TODO find a better solution for this + media.episodes.forEachIndexed() { index, episode -> + adapterRecEpisodes.updateWatchedState(episode.watched, index) + } + adapterRecEpisodes.notifyDataSetChanged() + } + } + /** * if tmdb data is present, use it, else use the aod data */ @@ -169,14 +174,4 @@ class MediaFragment(private val mediaId: Int) : Fragment() { (activity as MainActivity).startPlayer(media.id, ep.id) } - fun updateWatchedState(ep: Episode) { - AoDParser.sendCallback(ep.watchedCallback) - - // only notify adapter, if initialized - if (this::adapterRecEpisodes.isInitialized) { - adapterRecEpisodes.updateWatchedState(true, media.episodes.indexOf(ep)) - adapterRecEpisodes.notifyDataSetChanged() - } - } - } \ No newline at end of file