From 698415815686c387fd64fd9e45386f3d2fe51682 Mon Sep 17 00:00:00 2001 From: brahmkshatriya <69040506+brahmkshatriya@users.noreply.github.com> Date: Mon, 13 Jan 2025 20:13:37 +0530 Subject: [PATCH] Fix radio and login stuff --- .../echo/extensions/ExtensionLoader.kt | 22 +++++++------- .../playback/listeners/EffectsListener.kt | 10 ++++--- .../echo/playback/listeners/Radio.kt | 8 ++--- .../ui/player/viewholder/DefaultViewHolder.kt | 30 +++++++++---------- 4 files changed, 34 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/dev/brahmkshatriya/echo/extensions/ExtensionLoader.kt b/app/src/main/java/dev/brahmkshatriya/echo/extensions/ExtensionLoader.kt index f37cf877..70a852b7 100644 --- a/app/src/main/java/dev/brahmkshatriya/echo/extensions/ExtensionLoader.kt +++ b/app/src/main/java/dev/brahmkshatriya/echo/extensions/ExtensionLoader.kt @@ -40,7 +40,6 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.merge import kotlinx.coroutines.launch import kotlinx.coroutines.plus import kotlinx.coroutines.withContext @@ -90,6 +89,7 @@ class ExtensionLoader( } private suspend fun Extension<*>.setLoginUser(trigger: Boolean = false) { + println("Setting login user for $name") val user = userDao.getCurrentUser(id) get(throwableFlow) { withTimeout(TIMEOUT) { onSetLoginUser(user?.toUser()) } @@ -109,6 +109,9 @@ class ExtensionLoader( lyricsListFlow.getExtension(clientId)?.setLoginUser() extensionListFlow.getExtension(clientId)?.setLoginUser(true) } + private val combined = extensionListFlow + .combine(trackerListFlow) { a, b -> a.orEmpty() + b.orEmpty() } + .combine(lyricsListFlow) { a, b -> a + b.orEmpty() } private var initialized = false fun initialize() { @@ -123,25 +126,24 @@ class ExtensionLoader( } } launch { - val combined = merge( - trackerListFlow, lyricsListFlow, extensionListFlow, extensionFlow - ) userDao.observeCurrentUser() - .combine(combined) { it, _ -> it } + .combine(combined) { it, ext -> it to ext } .distinctUntilChanged() - .collect { it.map { launch { it.setUser() } } } + .collect { (users, extensions) -> + val ext = extensions.map { it.id }.toSet() + val extToRemove = userMap.keys - ext + extToRemove.forEach { userMap.remove(it) } + users.filter { it.clientId in ext }.map { launch { it.setUser() } } + } } //Inject other extensions launch { - val combined = merge( - extensionFlow.map { listOfNotNull(it) }, trackerListFlow, lyricsListFlow - ) combined.collect { list -> val trackerExtensions = trackerListFlow.value.orEmpty() val lyricsExtensions = lyricsListFlow.value.orEmpty() val musicExtensions = extensionListFlow.value.orEmpty() - list?.forEach { extension -> + list.forEach { extension -> extension.get(throwableFlow) { inject(extension.name, requiredTrackerExtensions, trackerExtensions) { setTrackerExtensions(it) diff --git a/app/src/main/java/dev/brahmkshatriya/echo/playback/listeners/EffectsListener.kt b/app/src/main/java/dev/brahmkshatriya/echo/playback/listeners/EffectsListener.kt index 7153c108..3f8335e5 100644 --- a/app/src/main/java/dev/brahmkshatriya/echo/playback/listeners/EffectsListener.kt +++ b/app/src/main/java/dev/brahmkshatriya/echo/playback/listeners/EffectsListener.kt @@ -67,11 +67,11 @@ class EffectsListener( class Effects(sessionId: Int) { private val equalizer = runCatching { Equalizer(0, sessionId) }.getOrNull() private val gain = runCatching { LoudnessEnhancer(sessionId) }.getOrNull() - private fun applyBassBoost(strength: Int) { + private fun applyBassBoost(strength: Int) = runCatching { if (strength == 0) { equalizer?.setEnabled(false) gain?.setEnabled(false) - return + return@runCatching } gain?.setEnabled(true) equalizer?.setEnabled(true) @@ -89,8 +89,10 @@ class EffectsListener( } fun release() { - equalizer?.release() - gain?.release() + runCatching { + equalizer?.release() + gain?.release() + } } fun applySettings(settings: SharedPreferences) { diff --git a/app/src/main/java/dev/brahmkshatriya/echo/playback/listeners/Radio.kt b/app/src/main/java/dev/brahmkshatriya/echo/playback/listeners/Radio.kt index a4cee128..5748c485 100644 --- a/app/src/main/java/dev/brahmkshatriya/echo/playback/listeners/Radio.kt +++ b/app/src/main/java/dev/brahmkshatriya/echo/playback/listeners/Radio.kt @@ -145,16 +145,12 @@ class Radio( private suspend fun startRadio() { if (!autoStartRadio) return val hasNext = withContext(Dispatchers.Main) { - player.hasNextMediaItem() || player.currentMediaItem != null + player.hasNextMediaItem() || player.currentMediaItem == null } if (hasNext) return when (val state = stateFlow.value) { is State.Loading -> {} - is State.Empty -> { - if (stateFlow.value != State.Empty) return - loadPlaylist() - } - + is State.Empty -> loadPlaylist() is State.Loaded -> { val toBePlayed = state.played + 1 if (toBePlayed == state.tracks.size) loadPlaylist() diff --git a/app/src/main/java/dev/brahmkshatriya/echo/ui/player/viewholder/DefaultViewHolder.kt b/app/src/main/java/dev/brahmkshatriya/echo/ui/player/viewholder/DefaultViewHolder.kt index f4cdd959..894a91dc 100644 --- a/app/src/main/java/dev/brahmkshatriya/echo/ui/player/viewholder/DefaultViewHolder.kt +++ b/app/src/main/java/dev/brahmkshatriya/echo/ui/player/viewholder/DefaultViewHolder.kt @@ -58,12 +58,12 @@ import dev.brahmkshatriya.echo.ui.player.PlayerColors.Companion.getColorsFrom import dev.brahmkshatriya.echo.ui.player.PlayerTrackAdapter.Listener import dev.brahmkshatriya.echo.ui.player.PlayerTrackAdapter.ViewHolder import dev.brahmkshatriya.echo.ui.settings.LookFragment -import dev.brahmkshatriya.echo.utils.ui.PlayerItemSpan -import dev.brahmkshatriya.echo.utils.ui.animateVisibility import dev.brahmkshatriya.echo.utils.image.load import dev.brahmkshatriya.echo.utils.image.loadBlurred import dev.brahmkshatriya.echo.utils.image.loadWithBitmap import dev.brahmkshatriya.echo.utils.image.loadWithThumb +import dev.brahmkshatriya.echo.utils.ui.PlayerItemSpan +import dev.brahmkshatriya.echo.utils.ui.animateVisibility import dev.brahmkshatriya.echo.utils.ui.toTimeString import dev.brahmkshatriya.echo.viewmodels.UiViewModel import dev.brahmkshatriya.echo.viewmodels.UiViewModel.Companion.applyInsets @@ -177,7 +177,7 @@ class DefaultViewHolder( override fun onPlayer(player: Player?) { actualPlayer = player player?.addListener(playerListener) - applyPlayerVideo() + applyVideo() } private var item: MediaItem? = null @@ -197,22 +197,19 @@ class DefaultViewHolder( private fun applyVideo() { val background = item?.background - if (oldBg == background) { - applyPlayerVideo() - return - } - oldBg = background + if (background == null || background == oldBg || !showBackground()) + return applyPlayerVideo() + cleanUp() + oldBg = background actualPlayer?.addListener(playerListener) binding.bgVideo.run { - if (background != null && showBackground()) { - resizeMode = RESIZE_MODE_ZOOM - val bP = getPlayer(context, cache, background) - players.add(bP) - backgroundPlayer = bP - player = backgroundPlayer - applyVideoVisibility(true) - } else applyPlayerVideo() + resizeMode = RESIZE_MODE_ZOOM + val bP = getPlayer(context, cache, background) + players.add(bP) + backgroundPlayer = bP + player = backgroundPlayer + applyVideoVisibility(true) } } @@ -232,6 +229,7 @@ class DefaultViewHolder( backgroundPlayer?.release() players.remove(backgroundPlayer) backgroundPlayer = null + oldBg = null } private var offset = 0f