From 98b08f021937eca2ae5c240d93d43e9059f56d64 Mon Sep 17 00:00:00 2001 From: Gato Date: Sat, 6 Jun 2026 08:12:12 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20CalDAV=20Nextcloud=20=E2=80=94=20fallbac?= =?UTF-8?q?k=20principals/users/=20pour=20calendar-home-set=20(v0.0.2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- app/build.gradle.kts | 2 +- .../mobile/data/caldav/CalDavDiscovery.kt | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index fa46500..63168cc 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -16,7 +16,7 @@ android { minSdk = 26 targetSdk = 35 versionCode = 1 - versionName = "0.0.1" + versionName = "0.0.2" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/com/planify/mobile/data/caldav/CalDavDiscovery.kt b/app/src/main/java/com/planify/mobile/data/caldav/CalDavDiscovery.kt index ad83c04..dc7cc7b 100644 --- a/app/src/main/java/com/planify/mobile/data/caldav/CalDavDiscovery.kt +++ b/app/src/main/java/com/planify/mobile/data/caldav/CalDavDiscovery.kt @@ -94,10 +94,20 @@ class CalDavDiscovery @Inject constructor(private val client: CalDavClient) { """.trimIndent() - val resp = client.propfind(principalUrl, credentials, "0", body) - if (!resp.isSuccess) return null - val href = extractHref(resp.body, "calendar-home-set") ?: return null - return resolveUrl(principalUrl, href) + val urlsToTry = mutableListOf(principalUrl) + // Nextcloud alias /principals/username/ doesn't expose calendar-home-set, + // but /principals/users/username/ does — add it as fallback + if (principalUrl.contains("/principals/") && !principalUrl.contains("/principals/users/")) { + urlsToTry.add(principalUrl.replaceFirst("/principals/", "/principals/users/")) + } + + for (url in urlsToTry) { + val resp = client.propfind(url, credentials, "0", body) + if (!resp.isSuccess) continue + val href = extractHref(resp.body, "calendar-home-set") ?: continue + return resolveUrl(url, href) + } + return null } private fun listCalendars(homeUrl: String, credentials: String, username: String, baseUrl: String): List {