From dbd23844f6f16b844c419646bccffbfb62aaf39b Mon Sep 17 00:00:00 2001 From: Alexander Ackermann Date: Fri, 21 Nov 2025 14:08:58 +0100 Subject: [PATCH 1/3] fix: hide calendar when env var FRONTEND_DISABLE_RADICALE is set to true --- packages/web-client/src/ocs/capabilities.ts | 1 + .../composables/piniaStores/capabilities.ts | 2 ++ packages/web-runtime/src/extensions.ts | 30 ++++++++++++------- .../src/pages/account/accountLayout.vue | 21 +++++++++---- 4 files changed, 38 insertions(+), 16 deletions(-) diff --git a/packages/web-client/src/ocs/capabilities.ts b/packages/web-client/src/ocs/capabilities.ts index aa0f3ba964..b718dc7424 100644 --- a/packages/web-client/src/ocs/capabilities.ts +++ b/packages/web-client/src/ocs/capabilities.ts @@ -89,6 +89,7 @@ export interface Capabilities { } 'check-for-updates'?: boolean 'support-sse'?: boolean + 'support-radicale'?: boolean 'support-url-signing'?: boolean 'webdav-root'?: string } diff --git a/packages/web-pkg/src/composables/piniaStores/capabilities.ts b/packages/web-pkg/src/composables/piniaStores/capabilities.ts index 3f46579600..6ee2339935 100644 --- a/packages/web-pkg/src/composables/piniaStores/capabilities.ts +++ b/packages/web-pkg/src/composables/piniaStores/capabilities.ts @@ -77,6 +77,7 @@ export const useCapabilityStore = defineStore('capabilities', () => { /** @deprecated the server always supports this */ const supportUrlSigning = computed(() => unref(capabilities).core['support-url-signing']) const supportSSE = computed(() => unref(capabilities).core['support-sse']) + const supportRadicale = computed(() => unref(capabilities).core['support-radicale']) const personalDataExport = computed(() => unref(capabilities).graph['personal-data-export']) const status = computed(() => unref(capabilities).core.status) @@ -151,6 +152,7 @@ export const useCapabilityStore = defineStore('capabilities', () => { status, supportUrlSigning, supportSSE, + supportRadicale, personalDataExport, davReports, davTrashbin, diff --git a/packages/web-runtime/src/extensions.ts b/packages/web-runtime/src/extensions.ts index e7ca0616c9..947ac39a86 100644 --- a/packages/web-runtime/src/extensions.ts +++ b/packages/web-runtime/src/extensions.ts @@ -1,15 +1,21 @@ -import { computed, markRaw } from 'vue' +import { computed, markRaw, unref } from 'vue' import { preferencesPanelExtensionPoint, progressBarExtensionPoint } from './extensionPoints' import AppTokens from './components/Account/AppTokens.vue' import { AccountExtension, AppMenuItemExtension, CustomComponentExtension, - LoadingIndicator + LoadingIndicator, + useCapabilityStore } from '@opencloud-eu/web-pkg' +import { storeToRefs } from 'pinia' + const $gettext = (str: string) => str export const extensions = () => { + const capabilityStore = useCapabilityStore() + const { supportRadicale } = storeToRefs(capabilityStore) + return computed(() => [ { id: 'com.github.opencloud-eu.web.runtime.preferences-panels.app-tokens', @@ -28,13 +34,17 @@ export const extensions = () => { optionLabel: $gettext('Default progress bar') } } as CustomComponentExtension, - { - id: 'com.github.opencloud-eu.web.runtime.app-menu-item.Calendar', - type: 'appMenuItem', - label: () => $gettext('Calendar'), - color: '#0478d4', - icon: 'calendar', - path: '/account/calendar' - } as AppMenuItemExtension + ...(unref(supportRadicale) + ? [ + { + id: 'com.github.opencloud-eu.web.runtime.app-menu-item.Calendar', + type: 'appMenuItem', + label: () => $gettext('Calendar'), + color: '#0478d4', + icon: 'calendar', + path: '/account/calendar' + } as AppMenuItemExtension + ] + : []) ]) } diff --git a/packages/web-runtime/src/pages/account/accountLayout.vue b/packages/web-runtime/src/pages/account/accountLayout.vue index e95ca6f283..e93ee5b709 100644 --- a/packages/web-runtime/src/pages/account/accountLayout.vue +++ b/packages/web-runtime/src/pages/account/accountLayout.vue @@ -19,16 +19,21 @@ import { routeToContextQuery, useActiveLocation, useAuthStore, + useCapabilityStore, useExtensionRegistry } from '@opencloud-eu/web-pkg/src' import { computed, nextTick, onBeforeUnmount, onMounted, ref, unref } from 'vue' import { preferencesPanelExtensionPoint } from '../../extensionPoints' import { useRoute } from 'vue-router' +import { storeToRefs } from 'pinia' const { $gettext } = useGettext() const extensionRegistry = useExtensionRegistry() const route = useRoute() const authStore = useAuthStore() +const capabilityStore = useCapabilityStore() + +const { supportRadicale } = storeToRefs(capabilityStore) const navBarClosed = ref(false) @@ -73,12 +78,16 @@ const navItems = computed(() => { icon: 'brush-2', active: unref(isAccountExtensionsActive) }, - { - name: $gettext('Calendar'), - route: { name: 'account-calendar' }, - icon: 'calendar', - active: unref(isAccountCalendarActive) - }, + ...(unref(supportRadicale) + ? [ + { + name: $gettext('Calendar'), + route: { name: 'account-calendar' }, + icon: 'calendar', + active: unref(isAccountCalendarActive) + } + ] + : []), { name: $gettext('GDPR'), route: { name: 'account-gdpr' }, From 522f13880adf7f88bf88937aebd678c6766232b8 Mon Sep 17 00:00:00 2001 From: Alexander Ackermann Date: Fri, 21 Nov 2025 14:10:36 +0100 Subject: [PATCH 2/3] format --- packages/web-runtime/src/pages/account/accountLayout.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/web-runtime/src/pages/account/accountLayout.vue b/packages/web-runtime/src/pages/account/accountLayout.vue index e93ee5b709..73be4e6800 100644 --- a/packages/web-runtime/src/pages/account/accountLayout.vue +++ b/packages/web-runtime/src/pages/account/accountLayout.vue @@ -32,7 +32,6 @@ const extensionRegistry = useExtensionRegistry() const route = useRoute() const authStore = useAuthStore() const capabilityStore = useCapabilityStore() - const { supportRadicale } = storeToRefs(capabilityStore) const navBarClosed = ref(false) From ee37e2fa7160b7bea6237891d1756ec0b6dd05a8 Mon Sep 17 00:00:00 2001 From: Alexander Ackermann Date: Fri, 21 Nov 2025 16:15:12 +0100 Subject: [PATCH 3/3] bump opencloud commitid --- .woodpecker.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker.env b/.woodpecker.env index 89b7f82132..a14ee434a2 100644 --- a/.woodpecker.env +++ b/.woodpecker.env @@ -1,3 +1,3 @@ # The version of OpenCloud to use in pipelines -OPENCLOUD_COMMITID=cca5d1af043531dc84cb0aa3e67f9795b1a1caa3 +OPENCLOUD_COMMITID=a496b6f46b6a37e58bb57e4bfc212ace9428b744 OPENCLOUD_BRANCH=main