diff --git a/app/src/main/java/at/lockstep/player/LockstepViewModel.kt b/app/src/main/java/at/lockstep/player/LockstepViewModel.kt index c692475..f28a194 100644 --- a/app/src/main/java/at/lockstep/player/LockstepViewModel.kt +++ b/app/src/main/java/at/lockstep/player/LockstepViewModel.kt @@ -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? { val token = spotifyAccessToken.value if (token.isNullOrBlank()) { diff --git a/app/src/main/java/at/lockstep/player/ui/LockstepAppNavHost.kt b/app/src/main/java/at/lockstep/player/ui/LockstepAppNavHost.kt index 6126e6f..9788094 100644 --- a/app/src/main/java/at/lockstep/player/ui/LockstepAppNavHost.kt +++ b/app/src/main/java/at/lockstep/player/ui/LockstepAppNavHost.kt @@ -116,7 +116,10 @@ fun LockstepAppNavHost( playlistId = playlistId, playback = playback, viewModel = viewModel, - onBack = { navController.popBackStack() }, + onBack = { + viewModel.suppressNextLibraryMetadataSync() + navController.popBackStack() + }, ) } composable( diff --git a/app/src/main/java/at/lockstep/player/ui/NowPlayingScreen.kt b/app/src/main/java/at/lockstep/player/ui/NowPlayingScreen.kt index 9d6e324..8b1023d 100644 --- a/app/src/main/java/at/lockstep/player/ui/NowPlayingScreen.kt +++ b/app/src/main/java/at/lockstep/player/ui/NowPlayingScreen.kt @@ -2,6 +2,7 @@ package at.lockstep.player.ui import android.Manifest import android.content.pm.PackageManager +import androidx.activity.compose.BackHandler import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.Arrangement @@ -169,6 +170,7 @@ fun NowPlayingRoute( modifier: Modifier = Modifier, ) { val context = LocalContext.current + BackHandler(onBack = onBack) val collectRunData by viewModel.collectRunData.collectAsStateWithLifecycle() val collector = remember { RunDataCollector(context) } val runSessionFolder = remember { RunDataStorage.newRunSessionFolderName() } diff --git a/app/src/main/java/at/lockstep/player/ui/library/LibraryScreen.kt b/app/src/main/java/at/lockstep/player/ui/library/LibraryScreen.kt index 0bb9625..4eb16ce 100644 --- a/app/src/main/java/at/lockstep/player/ui/library/LibraryScreen.kt +++ b/app/src/main/java/at/lockstep/player/ui/library/LibraryScreen.kt @@ -49,10 +49,11 @@ fun LibraryScreen( LaunchedEffect(token) { if (token.isNullOrBlank()) return@LaunchedEffect + val skipMetadataSync = viewModel.consumeSuppressNextLibraryMetadataSync() val errors = listOfNotNull( viewModel.syncJukeboxIfToken(), - viewModel.syncPendingMetadata(), + if (skipMetadataSync) null else viewModel.syncPendingMetadata(), ) if (errors.isNotEmpty()) { Toast.makeText(context, errors.joinToString("\n"), Toast.LENGTH_LONG).show()