MediaFragment: update playhead progress/fully watched on resume
This commit is contained in:
		| @ -89,6 +89,7 @@ class MediaFragment(private val mediaIdStr: String) : Fragment() { | |||||||
|                     binding.textTitle.text = model.upNextSeries.panel.title |                     binding.textTitle.text = model.upNextSeries.panel.title | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|  |                 // needs to be called after model.updateOnResume() | ||||||
|                 if (fragments.elementAtOrNull(0) is MediaFragmentEpisodes) { |                 if (fragments.elementAtOrNull(0) is MediaFragmentEpisodes) { | ||||||
|                     (fragments[0] as MediaFragmentEpisodes).updateWatchedState() |                     (fragments[0] as MediaFragmentEpisodes).updateWatchedState() | ||||||
|                 } |                 } | ||||||
|  | |||||||
| @ -54,23 +54,10 @@ class MediaFragmentEpisodes : Fragment() { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     override fun onResume() { |     @SuppressLint("NotifyDataSetChanged") | ||||||
|         super.onResume() |  | ||||||
|  |  | ||||||
|         // if adapterRecEpisodes is initialized, update the watched state for the episodes |  | ||||||
|         if (this::adapterRecEpisodes.isInitialized) { |  | ||||||
|             // TODO reimplement, if needed |  | ||||||
|             // update via playheads? |  | ||||||
| //            model.media.playlist.forEachIndexed { index, episodeInfo -> |  | ||||||
| //                adapterRecEpisodes.updateWatchedState(episodeInfo.watched, index) |  | ||||||
| //            } |  | ||||||
| //            adapterRecEpisodes.notifyDataSetChanged() |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     fun updateWatchedState() { |     fun updateWatchedState() { | ||||||
|         // TODO update watched state of all episodes |         // model.currentPlayheads is a val mutable map -> notify dataset changed | ||||||
|         // use a mutable list for playheads and notify dataset changed |         adapterRecEpisodes.notifyDataSetChanged() | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private fun showSeasonSelection(v: View) { |     private fun showSeasonSelection(v: View) { | ||||||
|  | |||||||
| @ -3,7 +3,6 @@ package org.mosad.teapod.ui.activity.main.viewmodel | |||||||
| import android.app.Application | import android.app.Application | ||||||
| import androidx.lifecycle.AndroidViewModel | import androidx.lifecycle.AndroidViewModel | ||||||
| import androidx.lifecycle.viewModelScope | import androidx.lifecycle.viewModelScope | ||||||
| import kotlinx.coroutines.Job |  | ||||||
| import kotlinx.coroutines.joinAll | import kotlinx.coroutines.joinAll | ||||||
| import kotlinx.coroutines.launch | import kotlinx.coroutines.launch | ||||||
| import org.mosad.teapod.parser.crunchyroll.* | import org.mosad.teapod.parser.crunchyroll.* | ||||||
| @ -31,7 +30,7 @@ class MediaFragmentViewModel(application: Application) : AndroidViewModel(applic | |||||||
|     val currentEpisodesCrunchy = arrayListOf<Episode>() // used for EpisodeItemAdapter (easier updates) |     val currentEpisodesCrunchy = arrayListOf<Episode>() // used for EpisodeItemAdapter (easier updates) | ||||||
|  |  | ||||||
|     // additional media info |     // additional media info | ||||||
|     var currentPlayheads: PlayheadsMap = emptyMap() |     val currentPlayheads: MutableMap<String, PlayheadObject> = mutableMapOf() | ||||||
|     var isWatchlist = false |     var isWatchlist = false | ||||||
|         internal set |         internal set | ||||||
|     var upNextSeries = NoneUpNextSeriesItem |     var upNextSeries = NoneUpNextSeriesItem | ||||||
| @ -85,7 +84,8 @@ class MediaFragmentViewModel(application: Application) : AndroidViewModel(applic | |||||||
|             viewModelScope.launch { |             viewModelScope.launch { | ||||||
|                 // get playheads (including fully watched state) |                 // get playheads (including fully watched state) | ||||||
|                 val episodeIDs = episodesCrunchy.items.map { it.id } |                 val episodeIDs = episodesCrunchy.items.map { it.id } | ||||||
|                 currentPlayheads = Crunchyroll.playheads(episodeIDs) |                 currentPlayheads.clear() | ||||||
|  |                 currentPlayheads.putAll(Crunchyroll.playheads(episodeIDs)) | ||||||
|             }, |             }, | ||||||
|             viewModelScope.launch { loadTmdbInfo() } // use tmdb search to get media info |             viewModelScope.launch { loadTmdbInfo() } // use tmdb search to get media info | ||||||
|         ).joinAll() |         ).joinAll() | ||||||
| @ -152,13 +152,14 @@ class MediaFragmentViewModel(application: Application) : AndroidViewModel(applic | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     suspend fun updateOnResume() { |     suspend fun updateOnResume() { | ||||||
|         listOf( |         joinAll( | ||||||
|             viewModelScope.launch { |             viewModelScope.launch { | ||||||
|                 val episodeIDs = episodesCrunchy.items.map { it.id } |                 val episodeIDs = episodesCrunchy.items.map { it.id } | ||||||
|                 currentPlayheads = Crunchyroll.playheads(episodeIDs) |                 currentPlayheads.clear() | ||||||
|  |                 currentPlayheads.putAll(Crunchyroll.playheads(episodeIDs)) | ||||||
|             }, |             }, | ||||||
|             viewModelScope.launch { upNextSeries = Crunchyroll.upNextSeries(seriesCrunchy.id) } |             viewModelScope.launch { upNextSeries = Crunchyroll.upNextSeries(seriesCrunchy.id) } | ||||||
|         ).joinAll() |         ) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user