diff --git a/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.kt b/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.kt index a056343e4..7bcaf1958 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.kt +++ b/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.kt @@ -15,7 +15,6 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.lifecycleScope @@ -35,7 +34,6 @@ import org.tasks.data.entity.CaldavAccount.Companion.SERVER_TASKS import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_OWNER import org.tasks.themes.TasksTheme -import org.tasks.themes.colorOn import javax.inject.Inject @AndroidEntryPoint @@ -72,7 +70,7 @@ class CaldavCalendarSettingsActivity : BaseCaldavCalendarSettingsActivity() { val openDialog = rememberSaveable { mutableStateOf(false) } ShareInviteDialog( openDialog, - email = caldavAccount.serverType != SERVER_OWNCLOUD + email = caldavAccount.serverType !in listOf(SERVER_OWNCLOUD, SERVER_NEXTCLOUD), ) { input -> lifecycleScope.launch { share(input) diff --git a/app/src/main/java/org/tasks/caldav/CaldavCalendarViewModel.kt b/app/src/main/java/org/tasks/caldav/CaldavCalendarViewModel.kt index b6b4ce3a7..64f0ca883 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavCalendarViewModel.kt +++ b/app/src/main/java/org/tasks/caldav/CaldavCalendarViewModel.kt @@ -12,6 +12,8 @@ import org.tasks.data.UUIDHelper import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.PrincipalDao import org.tasks.data.entity.CaldavAccount +import org.tasks.data.entity.CaldavAccount.Companion.SERVER_NEXTCLOUD +import org.tasks.data.entity.CaldavAccount.Companion.SERVER_OWNCLOUD import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_READ_WRITE import org.tasks.data.entity.CaldavCalendar.Companion.INVITE_UNKNOWN @@ -96,10 +98,10 @@ class CaldavCalendarViewModel @Inject constructor( list: CaldavCalendar, input: String ) = doRequest { - val href = if (account.serverType == CaldavAccount.SERVER_OWNCLOUD) - "principal:principals/users/$input" - else - "mailto:$input" + val href = when (account.serverType) { + SERVER_OWNCLOUD, SERVER_NEXTCLOUD -> "principal:principals/users/$input" + else -> "mailto:$input" + } withContext(Dispatchers.IO) { provider.forAccount(account, list.url!!).share(account, href) } diff --git a/app/src/main/java/org/tasks/caldav/CaldavClient.kt b/app/src/main/java/org/tasks/caldav/CaldavClient.kt index ecc2ed6cb..3e14bc1b8 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavClient.kt +++ b/app/src/main/java/org/tasks/caldav/CaldavClient.kt @@ -225,8 +225,8 @@ open class CaldavClient( href: String, ) { when (account.serverType) { - SERVER_TASKS, SERVER_SABREDAV, SERVER_NEXTCLOUD -> shareSabredav(href) - SERVER_OWNCLOUD -> shareOwncloud(href) + SERVER_TASKS, SERVER_SABREDAV -> shareSabredav(href) + SERVER_OWNCLOUD, SERVER_NEXTCLOUD -> shareOwncloud(href) else -> throw IllegalArgumentException() } } @@ -265,8 +265,8 @@ open class CaldavClient( href: String, ) { when (account.serverType) { - SERVER_TASKS, SERVER_SABREDAV, SERVER_NEXTCLOUD -> removeSabrePrincipal(calendar, href) - SERVER_OWNCLOUD -> removeOwncloudPrincipal(calendar, href) + SERVER_TASKS, SERVER_SABREDAV -> removeSabrePrincipal(calendar, href) + SERVER_OWNCLOUD, SERVER_NEXTCLOUD -> removeOwncloudPrincipal(calendar, href) else -> throw IllegalArgumentException() } } diff --git a/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.kt b/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.kt index 0e8024485..e30b8cdfb 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.kt +++ b/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.kt @@ -56,6 +56,7 @@ import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.PrincipalDao import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount.Companion.ERROR_UNAUTHORIZED +import org.tasks.data.entity.CaldavAccount.Companion.SERVER_NEXTCLOUD import org.tasks.data.entity.CaldavAccount.Companion.SERVER_OPEN_XCHANGE import org.tasks.data.entity.CaldavAccount.Companion.SERVER_OWNCLOUD import org.tasks.data.entity.CaldavAccount.Companion.SERVER_SABREDAV @@ -203,7 +204,11 @@ class CaldavSynchronizer @Inject constructor( private fun getServerType(account: CaldavAccount, headers: Headers) = when { account.isTasksOrg -> SERVER_TASKS - headers["DAV"]?.contains("oc-resource-sharing") == true -> SERVER_OWNCLOUD + headers["DAV"]?.contains("oc-resource-sharing") == true -> + if (headers["DAV"]?.let { it.contains("nextcloud-") || it.contains("nc-") } == true) + SERVER_NEXTCLOUD + else + SERVER_OWNCLOUD headers["x-sabre-version"]?.isNotBlank() == true -> SERVER_SABREDAV headers["server"] == "Openexchange WebDAV" -> SERVER_OPEN_XCHANGE else -> SERVER_UNKNOWN