From e43e389fa0058b5dd926de0fbd33abf9b717037f Mon Sep 17 00:00:00 2001 From: xhon-pelushi Date: Wed, 12 Aug 2026 21:33:01 -0400 Subject: [PATCH] feat(settings): show CardDAV setup URLs Fixes #4591 Signed-off-by: xhon-pelushi --- .../AppNavigation/ContactsSettings.vue | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/components/AppNavigation/ContactsSettings.vue b/src/components/AppNavigation/ContactsSettings.vue index 0dfb80637..e960653dd 100644 --- a/src/components/AppNavigation/ContactsSettings.vue +++ b/src/components/AppNavigation/ContactsSettings.vue @@ -26,6 +26,15 @@ :addressbooks="addressbooks" @clicked="onClickImport" @file-loaded="onLoad" /> + + + + + + + @@ -42,17 +51,20 @@ import axios from '@nextcloud/axios' import { showError, showSuccess } from '@nextcloud/dialogs' import { loadState } from '@nextcloud/initial-state' -import { generateUrl } from '@nextcloud/router' +import { generateRemoteUrl, generateUrl } from '@nextcloud/router' import { NcAppSettingsDialog as AppSettingsDialog, NcAppSettingsSection as AppSettingsSection, } from '@nextcloud/vue' import NcFormBox from '@nextcloud/vue/components/NcFormBox' +import NcFormBoxCopyButton from '@nextcloud/vue/components/NcFormBoxCopyButton' import NcFormBoxSwitch from '@nextcloud/vue/components/NcFormBoxSwitch' +import NcFormGroup from '@nextcloud/vue/components/NcFormGroup' import SettingsAddressbook from './Settings/SettingsAddressbook.vue' import SettingsImportContacts from './Settings/SettingsImportContacts.vue' import SettingsNewAddressbook from './Settings/SettingsNewAddressbook.vue' import SettingsSortContacts from './Settings/SettingsSortContacts.vue' +import usePrincipalsStore from '../../store/principals.js' export default { name: 'ContactsSettings', @@ -60,7 +72,9 @@ export default { AppSettingsDialog, AppSettingsSection, NcFormBox, + NcFormBoxCopyButton, NcFormBoxSwitch, + NcFormGroup, SettingsAddressbook, SettingsNewAddressbook, SettingsImportContacts, @@ -88,6 +102,23 @@ export default { addressbooks() { return this.$store.getters.getAddressbooks }, + + currentUserPrincipal() { + const principalsStore = usePrincipalsStore() + return principalsStore.currentUserPrincipal + }, + + primaryCardDAV() { + return generateRemoteUrl('dav') + }, + + appleCardDAV() { + const principalUrl = this.currentUserPrincipal?.url || this.currentUserPrincipal?.principalUrl + if (!principalUrl) { + return '' + } + return new URL(principalUrl, this.primaryCardDAV).toString() + }, }, watch: {