fix: avoid syncing beat metadata twice when returning from Now Playing -> Library
This commit is contained in:
@@ -453,6 +453,22 @@ class LockstepViewModel(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Set before popping Now Playing; [consumeSuppressNextLibraryMetadataSync] skips one Library batch sync. */
|
||||||
|
@Volatile
|
||||||
|
private var suppressNextLibraryMetadataSync = false
|
||||||
|
|
||||||
|
fun suppressNextLibraryMetadataSync() {
|
||||||
|
suppressNextLibraryMetadataSync = true
|
||||||
|
}
|
||||||
|
|
||||||
|
fun consumeSuppressNextLibraryMetadataSync(): Boolean {
|
||||||
|
if (!suppressNextLibraryMetadataSync) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
suppressNextLibraryMetadataSync = false
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun syncPendingMetadata(): String? {
|
suspend fun syncPendingMetadata(): String? {
|
||||||
val token = spotifyAccessToken.value
|
val token = spotifyAccessToken.value
|
||||||
if (token.isNullOrBlank()) {
|
if (token.isNullOrBlank()) {
|
||||||
|
|||||||
@@ -116,7 +116,10 @@ fun LockstepAppNavHost(
|
|||||||
playlistId = playlistId,
|
playlistId = playlistId,
|
||||||
playback = playback,
|
playback = playback,
|
||||||
viewModel = viewModel,
|
viewModel = viewModel,
|
||||||
onBack = { navController.popBackStack() },
|
onBack = {
|
||||||
|
viewModel.suppressNextLibraryMetadataSync()
|
||||||
|
navController.popBackStack()
|
||||||
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
composable(
|
composable(
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package at.lockstep.player.ui
|
|||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
|
import androidx.activity.compose.BackHandler
|
||||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
@@ -169,6 +170,7 @@ fun NowPlayingRoute(
|
|||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
|
BackHandler(onBack = onBack)
|
||||||
val collectRunData by viewModel.collectRunData.collectAsStateWithLifecycle()
|
val collectRunData by viewModel.collectRunData.collectAsStateWithLifecycle()
|
||||||
val collector = remember { RunDataCollector(context) }
|
val collector = remember { RunDataCollector(context) }
|
||||||
val runSessionFolder = remember { RunDataStorage.newRunSessionFolderName() }
|
val runSessionFolder = remember { RunDataStorage.newRunSessionFolderName() }
|
||||||
|
|||||||
@@ -49,10 +49,11 @@ fun LibraryScreen(
|
|||||||
|
|
||||||
LaunchedEffect(token) {
|
LaunchedEffect(token) {
|
||||||
if (token.isNullOrBlank()) return@LaunchedEffect
|
if (token.isNullOrBlank()) return@LaunchedEffect
|
||||||
|
val skipMetadataSync = viewModel.consumeSuppressNextLibraryMetadataSync()
|
||||||
val errors =
|
val errors =
|
||||||
listOfNotNull(
|
listOfNotNull(
|
||||||
viewModel.syncJukeboxIfToken(),
|
viewModel.syncJukeboxIfToken(),
|
||||||
viewModel.syncPendingMetadata(),
|
if (skipMetadataSync) null else viewModel.syncPendingMetadata(),
|
||||||
)
|
)
|
||||||
if (errors.isNotEmpty()) {
|
if (errors.isNotEmpty()) {
|
||||||
Toast.makeText(context, errors.joinToString("\n"), Toast.LENGTH_LONG).show()
|
Toast.makeText(context, errors.joinToString("\n"), Toast.LENGTH_LONG).show()
|
||||||
|
|||||||
Reference in New Issue
Block a user