From 85400101e25d230012aa7e51836e63fd4f55e95e Mon Sep 17 00:00:00 2001 From: Krunal Patel Date: Fri, 9 Dec 2022 13:39:20 +0530 Subject: [PATCH 1/2] Fix playlist thumbnail change when remove first video --- .../github/libretube/api/PlaylistsHelper.kt | 8 +++++- .../ui/fragments/PlaylistFragment.kt | 28 +++++++++++++++---- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt b/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt index 58d99586e..5ed62c748 100644 --- a/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt +++ b/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt @@ -175,7 +175,13 @@ object PlaylistsHelper { awaitQuery { DatabaseHolder.Database.localPlaylistsDao().removePlaylistVideo(transaction.videos[index]) } - if (transaction.videos.size > 1) return + if (transaction.videos.size > 1) { + if (index == 0) { + transaction.videos[1].thumbnailUrl?.let { transaction.playlist.thumbnailUrl = it } + DatabaseHolder.Database.localPlaylistsDao().updatePlaylist(transaction.playlist) + } + return + } // remove thumbnail if playlist now empty awaitQuery { transaction.playlist.thumbnailUrl = "" diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt index 2df77a88d..2c0c497c0 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt @@ -15,6 +15,7 @@ import androidx.recyclerview.widget.RecyclerView import com.github.libretube.R import com.github.libretube.api.PlaylistsHelper import com.github.libretube.api.RetrofitInstance +import com.github.libretube.api.obj.StreamItem import com.github.libretube.constants.IntentData import com.github.libretube.databinding.FragmentPlaylistBinding import com.github.libretube.db.DatabaseHolder @@ -46,6 +47,7 @@ class PlaylistFragment : BaseFragment() { private var playlistAdapter: PlaylistAdapter? = null private var isLoading = true private var isBookmarked = false + private val playlistFeed = mutableListOf() private val playerViewModel: PlayerViewModel by activityViewModels() @@ -108,6 +110,7 @@ class PlaylistFragment : BaseFragment() { Log.e(TAG(), "HttpException, unexpected response") return@launchWhenCreated } + playlistFeed.addAll(response.relatedStreams.orEmpty()) binding.playlistScrollview.visibility = View.VISIBLE nextPage = response.nextpage playlistName = response.name @@ -133,7 +136,7 @@ class PlaylistFragment : BaseFragment() { } binding.playAll.setOnClickListener { - if (response.relatedStreams.orEmpty().isEmpty()) return@setOnClickListener + if (playlistFeed.isEmpty()) return@setOnClickListener NavigationHelper.navigateVideo( requireContext(), response.relatedStreams!!.first().url?.toID(), @@ -165,7 +168,7 @@ class PlaylistFragment : BaseFragment() { } playlistAdapter = PlaylistAdapter( - response.relatedStreams.orEmpty().toMutableList(), + playlistFeed, playlistId!!, playlistType ) @@ -173,12 +176,27 @@ class PlaylistFragment : BaseFragment() { // listen for playlist items to become deleted playlistAdapter!!.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { - override fun onChanged() { - binding.playlistInfo.text = - binding.playlistInfo.text.split(TextUtils.SEPARATOR).first() + TextUtils.SEPARATOR + getString( + override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) { + if (positionStart == 0) { + ImageHelper.loadImage( + playlistFeed.firstOrNull()?.thumbnail ?: "", + binding.thumbnail + ) + } + + val info = binding.playlistInfo.text.split(TextUtils.SEPARATOR) + val countInfo = getString( R.string.videoCount, playlistAdapter!!.itemCount.toString() ) + binding.playlistInfo.text = ( + if (info.size == 2) { + info[0] + TextUtils.SEPARATOR + } else { + "" + } + ) + countInfo + super.onItemRangeRemoved(positionStart, itemCount) } }) From 44cc6d42b25260dc8bd17775b4afd01a25a4faea Mon Sep 17 00:00:00 2001 From: Krunal Patel Date: Fri, 9 Dec 2022 21:56:42 +0530 Subject: [PATCH 2/2] Use await query for db update --- .../java/com/github/libretube/api/PlaylistsHelper.kt | 4 +++- .../github/libretube/ui/fragments/PlaylistFragment.kt | 9 ++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt b/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt index 5ed62c748..15b357617 100644 --- a/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt +++ b/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt @@ -178,7 +178,9 @@ object PlaylistsHelper { if (transaction.videos.size > 1) { if (index == 0) { transaction.videos[1].thumbnailUrl?.let { transaction.playlist.thumbnailUrl = it } - DatabaseHolder.Database.localPlaylistsDao().updatePlaylist(transaction.playlist) + awaitQuery { + DatabaseHolder.Database.localPlaylistsDao().updatePlaylist(transaction.playlist) + } } return } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt index 2c0c497c0..644b53861 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt @@ -185,17 +185,16 @@ class PlaylistFragment : BaseFragment() { } val info = binding.playlistInfo.text.split(TextUtils.SEPARATOR) - val countInfo = getString( - R.string.videoCount, - playlistAdapter!!.itemCount.toString() - ) binding.playlistInfo.text = ( if (info.size == 2) { info[0] + TextUtils.SEPARATOR } else { "" } - ) + countInfo + ) + getString( + R.string.videoCount, + playlistAdapter!!.itemCount.toString() + ) super.onItemRangeRemoved(positionStart, itemCount) } })