diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderGrid.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderGrid.kt
index 9110802d..c5dc912d 100644
--- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderGrid.kt
+++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderGrid.kt
@@ -41,6 +41,7 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.SavedStateHandle
+import androidx.lifecycle.compose.LifecycleResumeEffect
import androidx.lifecycle.viewModelScope
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Text
@@ -60,6 +61,8 @@ import com.github.damontecres.wholphin.services.BackdropService
import com.github.damontecres.wholphin.services.FavoriteWatchManager
import com.github.damontecres.wholphin.services.MediaReportService
import com.github.damontecres.wholphin.services.NavigationManager
+import com.github.damontecres.wholphin.services.ThemeSongPlayer
+import com.github.damontecres.wholphin.services.UserPreferencesService
import com.github.damontecres.wholphin.ui.AspectRatios
import com.github.damontecres.wholphin.ui.RequestOrRestoreFocus
import com.github.damontecres.wholphin.ui.SlimItemFields
@@ -120,7 +123,9 @@ class CollectionFolderViewModel
private val libraryDisplayInfoDao: LibraryDisplayInfoDao,
private val favoriteWatchManager: FavoriteWatchManager,
private val backdropService: BackdropService,
- val navigationManager: NavigationManager,
+ private val navigationManager: NavigationManager,
+ private val themeSongPlayer: ThemeSongPlayer,
+ private val userPreferencesService: UserPreferencesService,
val mediaReportService: MediaReportService,
@Assisted itemId: String,
@Assisted initialSortAndDirection: SortAndDirection?,
@@ -157,9 +162,10 @@ class CollectionFolderViewModel
viewModelScope.launchIO {
super.itemId = itemId
try {
- itemId.toUUIDOrNull()?.let {
- fetchItem(it)
- }
+ val item =
+ itemId.toUUIDOrNull()?.let {
+ fetchItem(it)
+ }
val libraryDisplayInfo =
serverRepository.currentUser.value?.let { user ->
@@ -184,6 +190,8 @@ class CollectionFolderViewModel
}
loadResults(true, sortAndDirection, recursive, filterToUse, useSeriesForPrimary)
+ .join()
+// onResumePage()
} catch (ex: Exception) {
Timber.e(ex, "Error during init")
loading.setValueOnMain(DataLoadingState.Error(ex))
@@ -254,34 +262,32 @@ class CollectionFolderViewModel
recursive: Boolean,
filter: GetItemsFilter,
useSeriesForPrimary: Boolean,
- ) {
- viewModelScope.launch(Dispatchers.IO) {
- withContext(Dispatchers.Main) {
- if (resetState) {
- loading.value = DataLoadingState.Loading
- }
- backgroundLoading.value = LoadingState.Loading
- this@CollectionFolderViewModel.sortAndDirection.value = sortAndDirection
- this@CollectionFolderViewModel.filter.value = filter
+ ) = viewModelScope.launch(Dispatchers.IO) {
+ withContext(Dispatchers.Main) {
+ if (resetState) {
+ loading.value = DataLoadingState.Loading
}
- try {
- val newPager =
- createPager(sortAndDirection, recursive, filter, useSeriesForPrimary).init()
- if (newPager.isNotEmpty()) newPager.getBlocking(0)
- withContext(Dispatchers.Main) {
- loading.value = DataLoadingState.Success(newPager)
- backgroundLoading.value = LoadingState.Success
- }
- } catch (ex: Exception) {
- Timber.e(
- ex,
- "Exception while loading data: sort=%s, filter=%s",
- sortAndDirection,
- filter,
- )
- withContext(Dispatchers.Main) {
- loading.value = DataLoadingState.Error(ex)
- }
+ backgroundLoading.value = LoadingState.Loading
+ this@CollectionFolderViewModel.sortAndDirection.value = sortAndDirection
+ this@CollectionFolderViewModel.filter.value = filter
+ }
+ try {
+ val newPager =
+ createPager(sortAndDirection, recursive, filter, useSeriesForPrimary).init()
+ if (newPager.isNotEmpty()) newPager.getBlocking(0)
+ withContext(Dispatchers.Main) {
+ loading.value = DataLoadingState.Success(newPager)
+ backgroundLoading.value = LoadingState.Success
+ }
+ } catch (ex: Exception) {
+ Timber.e(
+ ex,
+ "Exception while loading data: sort=%s, filter=%s",
+ sortAndDirection,
+ filter,
+ )
+ withContext(Dispatchers.Main) {
+ loading.value = DataLoadingState.Error(ex)
}
}
}
@@ -443,6 +449,30 @@ class CollectionFolderViewModel
backdropService.submit(item)
}
}
+
+ fun navigateTo(destination: Destination) {
+ release()
+ navigationManager.navigateTo(destination)
+ }
+
+ fun release() {
+ themeSongPlayer.stop()
+ }
+
+ fun onResumePage() {
+ viewModelScope.launchIO {
+ item.value?.let {
+ Timber.v("onResumePage: %s", loading.value!!::class)
+ if (it.type == BaseItemKind.BOX_SET && loading.value !is DataLoadingState.Error) {
+ val volume =
+ userPreferencesService
+ .getCurrent()
+ .appPreferences.interfacePreferences.playThemeSongs
+ themeSongPlayer.playThemeFor(it.id, volume)
+ }
+ }
+ }
+ }
}
/**
@@ -548,6 +578,13 @@ fun CollectionFolderGrid(
?: item?.data?.collectionType?.name
?: stringResource(R.string.collection)
Box(modifier = modifier) {
+ LifecycleResumeEffect(itemId) {
+ viewModel.onResumePage()
+
+ onPauseOrDispose {
+ viewModel.release()
+ }
+ }
CollectionFolderGridContent(
preferences = preferences,
initialPosition = viewModel.position,
@@ -598,7 +635,7 @@ fun CollectionFolderGrid(
} else {
Destination.Playback(item)
}
- viewModel.navigationManager.navigateTo(destination)
+ viewModel.navigateTo(destination)
},
onClickPlayAll = { shuffle ->
itemId.toUUIDOrNull()?.let {
@@ -622,7 +659,7 @@ fun CollectionFolderGrid(
filter = filter,
)
}
- viewModel.navigationManager.navigateTo(destination)
+ viewModel.navigateTo(destination)
}
},
)
@@ -660,7 +697,7 @@ fun CollectionFolderGrid(
favorite = item.favorite,
actions =
MoreDialogActions(
- navigateTo = { viewModel.navigationManager.navigateTo(it) },
+ navigateTo = { viewModel.navigateTo(it) },
onClickWatch = { itemId, watched ->
viewModel.setWatched(position, itemId, watched)
},
diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/CollectionFolderPhotoAlbum.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/CollectionFolderPhotoAlbum.kt
index fd4d46d3..4ddc41c1 100644
--- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/CollectionFolderPhotoAlbum.kt
+++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/CollectionFolderPhotoAlbum.kt
@@ -65,7 +65,7 @@ fun CollectionFolderPhotoAlbum(
} else {
item.destination(index)
}
- viewModel.navigationManager.navigateTo(destination)
+ viewModel.navigateTo(destination)
},
itemId = itemId.toServerString(),
initialFilter = filter,
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2967ada1..93476b74 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -656,7 +656,7 @@
Primary
- Thumbary
+ Thumb
- @string/image_type_primary
- @string/image_type_thumb