feat(filter): sync calendar visibility to server for CalDAV/Google/HA
The filter-sheet Switch now calls setCalendarHiddenSynced(), which updates local hiddenKeys immediately AND fires a sidebar_hidden PATCH to the server for caldav/google/homeassistant calendars. This makes the quick-hide consistent with the web sidebar across all devices. CalendarFilterEntry gains a source field so the sheet knows which backend to target. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -31,7 +31,7 @@ import androidx.compose.ui.unit.dp
|
||||
import com.scarriffle.calendarr.ui.tr
|
||||
import com.scarriffle.calendarr.util.colorFromHex
|
||||
|
||||
data class CalendarFilterEntry(val key: String, val name: String, val color: String)
|
||||
data class CalendarFilterEntry(val key: String, val name: String, val color: String, val source: String = "")
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -107,7 +107,7 @@ fun CalendarFilterSheet(
|
||||
checked = visible,
|
||||
onCheckedChange = {
|
||||
if (groupMode) vm.setGroupKeyHidden(entry.key, hidden = !it)
|
||||
else vm.setCalendarHidden(entry.key, hidden = !it)
|
||||
else vm.setCalendarHiddenSynced(entry.key, entry.source, !it)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
@@ -501,7 +501,7 @@ private fun GroupBanner(group: Group, onExit: () -> Unit) {
|
||||
private fun allKnownCalendars(vm: CalendarViewModel): List<CalendarFilterEntry> {
|
||||
val st = vm.state.value
|
||||
return st.events
|
||||
.map { CalendarFilterEntry(calendarKey(it.source, it.calendarId), it.calendarName.ifBlank { it.source }, it.effectiveColor) }
|
||||
.map { CalendarFilterEntry(calendarKey(it.source, it.calendarId), it.calendarName.ifBlank { it.source }, it.effectiveColor, it.source) }
|
||||
.distinctBy { it.key }
|
||||
.sortedBy { it.name.lowercase() }
|
||||
}
|
||||
|
||||
@@ -330,6 +330,15 @@ class CalendarViewModel @Inject constructor(
|
||||
refreshFromCache()
|
||||
}
|
||||
|
||||
/** Like [setCalendarHidden] but also syncs server-side sidebar_hidden for external calendars. */
|
||||
fun setCalendarHiddenSynced(key: String, source: String, hidden: Boolean) {
|
||||
setCalendarHidden(key, hidden)
|
||||
val id = key.substringAfter(":").toIntOrNull() ?: return
|
||||
if (source in listOf("caldav", "google", "homeassistant")) {
|
||||
viewModelScope.launch { repository.setCalendarSidebarHidden(source, id, hidden) }
|
||||
}
|
||||
}
|
||||
|
||||
fun setHiddenCalendars(keys: Set<String>) {
|
||||
settingsStore.hiddenCalendarKeys = keys
|
||||
_state.update { it.copy(hiddenKeys = keys) }
|
||||
|
||||
Reference in New Issue
Block a user