Fix unnecessary home page reloads (#2008)

## Description
Fixes the home page reloading from scratch when the app is resumed

This happened because the `userDto` is updated on app resume and since
it has a last accessed timestamp, it would always different and trigger
a reload.

### Related issues
Bug introduced by #1981

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
This commit is contained in:
Damontecres 2026-09-28 13:18:41 -04:00 • committed by GitHub
parent 365f8f8ada
commit 65954a99eb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 61 additions and 36 deletions

View file

@ -3,6 +3,7 @@ package com.github.damontecres.wholphin.services
import android.content.Context
import com.github.damontecres.wholphin.data.ServerRepository
import com.github.damontecres.wholphin.data.model.BaseItem
import com.github.damontecres.wholphin.data.model.ServerUserConfig
import com.github.damontecres.wholphin.preferences.AppPreferences
import com.github.damontecres.wholphin.preferences.InterfacePreferences
import com.github.damontecres.wholphin.ui.successResponse
@ -26,7 +27,6 @@ import org.jellyfin.sdk.api.operations.LibraryApi
import org.jellyfin.sdk.model.UUID
import org.jellyfin.sdk.model.api.BaseItemDto
import org.jellyfin.sdk.model.api.BaseItemKind
import org.jellyfin.sdk.model.api.UserDto
import org.jellyfin.sdk.model.api.UserPolicy
import org.junit.After
import org.junit.Assert
@ -87,11 +87,8 @@ class MediaManagementServiceTest {
)
private val userWithLiveTv =
UserDto(
ServerUserConfig(
id = UUID.randomUUID(),
hasPassword = true,
hasConfiguredPassword = true,
hasConfiguredEasyPassword = false,
policy =
mockk<UserPolicy> {
every { enableLiveTvManagement } returns true
@ -99,11 +96,8 @@ class MediaManagementServiceTest {
)
private val userWithoutLiveTv =
UserDto(
ServerUserConfig(
id = UUID.randomUUID(),
hasPassword = true,
hasConfiguredPassword = true,
hasConfiguredEasyPassword = false,
policy =
mockk<UserPolicy> {
every { enableLiveTvManagement } returns false

View file

@ -10,6 +10,7 @@ import com.github.damontecres.wholphin.data.ServerRepository
import com.github.damontecres.wholphin.data.model.JellyfinServer
import com.github.damontecres.wholphin.data.model.JellyfinServerUsers
import com.github.damontecres.wholphin.data.model.JellyfinUser
import com.github.damontecres.wholphin.data.model.ServerUserConfig
import com.github.damontecres.wholphin.preferences.AppPreferences
import com.github.damontecres.wholphin.preferences.AppPreferencesSerializer
import com.github.damontecres.wholphin.test.nonBlankString
@ -143,6 +144,7 @@ class ServerRepositoryTest {
hasConfiguredPassword = true,
hasConfiguredEasyPassword = false,
)
private val serverUserConfig = ServerUserConfig(userDto)
private fun setUpCurrentUser(
serverRepository: ServerRepository,
@ -190,7 +192,7 @@ class ServerRepositoryTest {
Assert.assertEquals(server, serverRepository.currentServer)
Assert.assertEquals(user, serverRepository.currentUser)
Assert.assertEquals(userDto, serverRepository.currentUserDto)
Assert.assertEquals(serverUserConfig, serverRepository.currentUserDto)
val appPreferences = dataStore.data.first()
Assert.assertEquals(serverId.toServerString(), appPreferences.currentServerId)
@ -221,7 +223,7 @@ class ServerRepositoryTest {
}
Assert.assertEquals(server, serverRepository.currentServer)
Assert.assertEquals(user, serverRepository.currentUser)
Assert.assertEquals(userDto, serverRepository.currentUserDto)
Assert.assertEquals(serverUserConfig, serverRepository.currentUserDto)
}
@Test
@ -383,7 +385,7 @@ class ServerRepositoryTest {
Assert.assertEquals(server, serverRepository.currentServer)
Assert.assertEquals(user, serverRepository.currentUser)
Assert.assertEquals(userDto, serverRepository.currentUserDto)
Assert.assertEquals(serverUserConfig, serverRepository.currentUserDto)
val appPreferences = dataStore.data.first()
Assert.assertEquals(serverId.toServerString(), appPreferences.currentServerId)
@ -426,7 +428,7 @@ class ServerRepositoryTest {
Assert.assertEquals(server, serverRepository.currentServer)
Assert.assertEquals(user, serverRepository.currentUser)
Assert.assertEquals(userDto, serverRepository.currentUserDto)
Assert.assertEquals(serverUserConfig, serverRepository.currentUserDto)
val appPreferences = dataStore.data.first()
Assert.assertEquals(serverId.toServerString(), appPreferences.currentServerId)

View file

@ -5,6 +5,7 @@ import com.github.damontecres.wholphin.data.ServerRepository
import com.github.damontecres.wholphin.data.model.ItemPlayback
import com.github.damontecres.wholphin.data.model.JellyfinUserPreferences
import com.github.damontecres.wholphin.data.model.PlaybackLanguageChoice
import com.github.damontecres.wholphin.data.model.ServerUserConfig
import com.github.damontecres.wholphin.data.model.TrackIndex
import com.github.damontecres.wholphin.preferences.AppPreferences
import com.github.damontecres.wholphin.preferences.DefaultUserConfiguration
@ -17,7 +18,6 @@ import org.jellyfin.sdk.model.UUID
import org.jellyfin.sdk.model.api.MediaStream
import org.jellyfin.sdk.model.api.MediaStreamType
import org.jellyfin.sdk.model.api.SubtitlePlaybackMode
import org.jellyfin.sdk.model.api.UserDto
import org.junit.Assert
import org.junit.Test
import org.junit.runner.RunWith
@ -902,11 +902,8 @@ private fun serverRepo(
): ServerRepository {
val mocked = mockk<ServerRepository>()
every { mocked.currentUserDto } returns
UserDto(
ServerUserConfig(
id = UUID.randomUUID(),
hasPassword = true,
hasConfiguredPassword = true,
hasConfiguredEasyPassword = true,
configuration =
DefaultUserConfiguration.copy(
audioLanguagePreference = audioLang,

View file

@ -11,6 +11,7 @@ import com.github.damontecres.wholphin.data.model.JellyfinServer
import com.github.damontecres.wholphin.data.model.JellyfinUser
import com.github.damontecres.wholphin.data.model.Playlist
import com.github.damontecres.wholphin.data.model.PlaylistItem
import com.github.damontecres.wholphin.data.model.ServerUserConfig
import com.github.damontecres.wholphin.preferences.AppPreferences
import com.github.damontecres.wholphin.preferences.PlaybackPreferences
import com.github.damontecres.wholphin.preferences.ShowNextUpWhen
@ -68,7 +69,6 @@ import org.jellyfin.sdk.model.api.MediaSegmentDtoQueryResult
import org.jellyfin.sdk.model.api.MediaSegmentType
import org.jellyfin.sdk.model.api.MediaStreamType
import org.jellyfin.sdk.model.api.PlaybackInfoResponse
import org.jellyfin.sdk.model.api.UserDto
import org.jellyfin.sdk.model.extensions.inWholeTicks
import org.jellyfin.sdk.model.extensions.ticks
import org.junit.After
@ -152,13 +152,9 @@ class PlaybackViewModelTests {
pin = "1234",
)
private val userDto =
UserDto(
ServerUserConfig(
id = userId,
name = "test-user",
serverName = "test server",
hasPassword = true,
hasConfiguredPassword = true,
hasConfiguredEasyPassword = false,
)
private val mediaSource =