fix: issue where active channel indicator may not update
Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
parent
55e8d184f4
commit
73be3d56ee
|
|
@ -221,7 +221,7 @@ fun RowScope.ChannelList(
|
||||||
DrawerChannel(
|
DrawerChannel(
|
||||||
name = stringResource(R.string.channel_notes),
|
name = stringResource(R.string.channel_notes),
|
||||||
iconType = DrawerChannelIconType.Channel(ChannelType.SavedMessages),
|
iconType = DrawerChannelIconType.Channel(ChannelType.SavedMessages),
|
||||||
selected = currentDestination == "channel/{channelId}" && currentChannel == notesChannelId,
|
selected = currentDestination == "channel/$notesChannelId",
|
||||||
hasUnread = false,
|
hasUnread = false,
|
||||||
onClick = {
|
onClick = {
|
||||||
onChannelClick(notesChannelId ?: return@DrawerChannel)
|
onChannelClick(notesChannelId ?: return@DrawerChannel)
|
||||||
|
|
@ -268,7 +268,7 @@ fun RowScope.ChannelList(
|
||||||
iconType = DrawerChannelIconType.Channel(
|
iconType = DrawerChannelIconType.Channel(
|
||||||
channel.channelType ?: ChannelType.TextChannel
|
channel.channelType ?: ChannelType.TextChannel
|
||||||
),
|
),
|
||||||
selected = currentDestination == "channel/{channelId}" && currentChannel == channel.id,
|
selected = currentDestination == "channel/${channel.id}",
|
||||||
hasUnread = channel.lastMessageID?.let { lastMessageID ->
|
hasUnread = channel.lastMessageID?.let { lastMessageID ->
|
||||||
RevoltAPI.unreads.hasUnread(
|
RevoltAPI.unreads.hasUnread(
|
||||||
channel.id!!,
|
channel.id!!,
|
||||||
|
|
@ -534,7 +534,7 @@ fun RowScope.ChannelList(
|
||||||
iconType = DrawerChannelIconType.Channel(
|
iconType = DrawerChannelIconType.Channel(
|
||||||
channel.channelType ?: ChannelType.TextChannel
|
channel.channelType ?: ChannelType.TextChannel
|
||||||
),
|
),
|
||||||
selected = currentDestination == "channel/{channelId}" && currentChannel == channel.id,
|
selected = currentDestination == "channel/${channel.id}",
|
||||||
hasUnread = channel.lastMessageID?.let { lastMessageID ->
|
hasUnread = channel.lastMessageID?.let { lastMessageID ->
|
||||||
RevoltAPI.unreads.hasUnread(
|
RevoltAPI.unreads.hasUnread(
|
||||||
channel.id!!,
|
channel.id!!,
|
||||||
|
|
|
||||||
|
|
@ -125,6 +125,7 @@ class ChatRouterViewModel @Inject constructor(
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
var currentServer by mutableStateOf("home")
|
var currentServer by mutableStateOf("home")
|
||||||
var currentChannel by mutableStateOf<String?>(null)
|
var currentChannel by mutableStateOf<String?>(null)
|
||||||
|
var currentRoute by mutableStateOf("home")
|
||||||
var sidebarSparkDisplayed by mutableStateOf(true)
|
var sidebarSparkDisplayed by mutableStateOf(true)
|
||||||
var latestChangelogRead by mutableStateOf(true)
|
var latestChangelogRead by mutableStateOf(true)
|
||||||
var latestChangelog by mutableStateOf("")
|
var latestChangelog by mutableStateOf("")
|
||||||
|
|
@ -135,6 +136,7 @@ class ChatRouterViewModel @Inject constructor(
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
currentServer = kvStorage.get("currentServer") ?: "home"
|
currentServer = kvStorage.get("currentServer") ?: "home"
|
||||||
currentChannel = kvStorage.get("currentChannel")
|
currentChannel = kvStorage.get("currentChannel")
|
||||||
|
currentRoute = kvStorage.get("currentRoute") ?: "home"
|
||||||
|
|
||||||
sidebarSparkDisplayed = if (kvStorage.getBoolean("sidebarSpark") == null) {
|
sidebarSparkDisplayed = if (kvStorage.getBoolean("sidebarSpark") == null) {
|
||||||
false
|
false
|
||||||
|
|
@ -150,14 +152,22 @@ class ChatRouterViewModel @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun setCurrentServer(serverId: String, save: Boolean = true) {
|
private suspend fun setSaveCurrentServer(serverId: String) {
|
||||||
currentServer = serverId
|
currentServer = serverId
|
||||||
|
|
||||||
if (save) kvStorage.set("currentServer", serverId)
|
kvStorage.set("currentServer", serverId)
|
||||||
|
|
||||||
if (serverId != "home") fetchMembers(serverId, includeOffline = false, pure = false)
|
if (serverId != "home") fetchMembers(serverId, includeOffline = false, pure = false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun setSaveCurrentRoute(route: String) {
|
||||||
|
currentRoute = route
|
||||||
|
|
||||||
|
viewModelScope.launch {
|
||||||
|
kvStorage.set("currentRoute", route)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun setSaveCurrentChannel(channelId: String) {
|
private fun setSaveCurrentChannel(channelId: String) {
|
||||||
currentChannel = channelId
|
currentChannel = channelId
|
||||||
|
|
||||||
|
|
@ -179,7 +189,8 @@ class ChatRouterViewModel @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
setCurrentServer("home")
|
setSaveCurrentServer("home")
|
||||||
|
setSaveCurrentRoute("home")
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -187,7 +198,7 @@ class ChatRouterViewModel @Inject constructor(
|
||||||
val channelId = RevoltAPI.serverCache[serverId]?.channels?.firstOrNull()
|
val channelId = RevoltAPI.serverCache[serverId]?.channels?.firstOrNull()
|
||||||
|
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
setCurrentServer(serverId, channelId != null)
|
setSaveCurrentServer(serverId)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (channelId != null) {
|
if (channelId != null) {
|
||||||
|
|
@ -198,6 +209,10 @@ class ChatRouterViewModel @Inject constructor(
|
||||||
popUpTo(route)
|
popUpTo(route)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
viewModelScope.launch {
|
||||||
|
setSaveCurrentRoute("no_current_channel")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -245,6 +260,10 @@ class ChatRouterViewModel @Inject constructor(
|
||||||
popUpTo(route)
|
popUpTo(route)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
viewModelScope.launch {
|
||||||
|
setSaveCurrentRoute("channel/$channelId")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -254,6 +273,10 @@ class ChatRouterViewModel @Inject constructor(
|
||||||
popUpTo(route)
|
popUpTo(route)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
viewModelScope.launch {
|
||||||
|
setSaveCurrentRoute(destination)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -305,7 +328,7 @@ fun ChatRouterScreen(
|
||||||
|
|
||||||
var useTabletAwareUI by remember { mutableStateOf(false) }
|
var useTabletAwareUI by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
val toggleDrawerLda = remember {
|
val toggleDrawerLambda = remember {
|
||||||
{
|
{
|
||||||
scope.launch {
|
scope.launch {
|
||||||
if (drawerState.isOpen) {
|
if (drawerState.isOpen) {
|
||||||
|
|
@ -682,7 +705,7 @@ fun ChatRouterScreen(
|
||||||
topNav = topNav,
|
topNav = topNav,
|
||||||
useDrawer = false,
|
useDrawer = false,
|
||||||
toggleDrawer = {
|
toggleDrawer = {
|
||||||
toggleDrawerLda()
|
toggleDrawerLambda()
|
||||||
},
|
},
|
||||||
onShowUserContextSheet = { target, server ->
|
onShowUserContextSheet = { target, server ->
|
||||||
userContextSheetTarget = target
|
userContextSheetTarget = target
|
||||||
|
|
@ -722,7 +745,7 @@ fun ChatRouterScreen(
|
||||||
topNav = topNav,
|
topNav = topNav,
|
||||||
useDrawer = true,
|
useDrawer = true,
|
||||||
toggleDrawer = {
|
toggleDrawer = {
|
||||||
toggleDrawerLda()
|
toggleDrawerLambda()
|
||||||
},
|
},
|
||||||
drawerState = drawerState,
|
drawerState = drawerState,
|
||||||
onShowUserContextSheet = { target, server ->
|
onShowUserContextSheet = { target, server ->
|
||||||
|
|
@ -912,7 +935,7 @@ fun Sidebar(
|
||||||
) {
|
) {
|
||||||
ChannelList(
|
ChannelList(
|
||||||
serverId = it,
|
serverId = it,
|
||||||
currentDestination = navController.currentDestination?.route,
|
currentDestination = viewModel.currentRoute,
|
||||||
currentChannel = viewModel.currentChannel,
|
currentChannel = viewModel.currentChannel,
|
||||||
onChannelClick = { channelId ->
|
onChannelClick = { channelId ->
|
||||||
viewModel.navigateToChannel(channelId, navController)
|
viewModel.navigateToChannel(channelId, navController)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue