Prevent renaming or deleting the default list

pull/3565/head
Alex Baker 7 months ago
parent d72b0f352b
commit 6fe8175012

@ -31,7 +31,10 @@ fun DeleteButton(
PromptAction(
showDialog = promptDelete,
title = stringResource(id = R.string.delete_tag_confirmation, title),
onAction = { scope.launch { onDelete() } },
onAction = {
scope.launch { onDelete() }
promptDelete = false
},
onCancel = { promptDelete = false },
)
}

@ -38,12 +38,14 @@ class MicrosoftListSettingsActivityViewModel @Inject constructor(
val list: CaldavCalendar? =
savedStateHandle[BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR]
private suspend fun service(): MicrosoftService =
httpClientFactory.getMicrosoftService(account)
suspend fun createList(displayName: String) {
_viewState.update { it.copy(requestInFlight = true) }
val microsoftService = httpClientFactory.getMicrosoftService(account)
val taskList = TaskLists.TaskList(displayName = displayName)
try {
val result = microsoftService.createList(taskList)
val result = service().createList(taskList)
val list = CaldavCalendar(
account = this@MicrosoftListSettingsActivityViewModel.account.uuid
).apply {
@ -58,9 +60,11 @@ class MicrosoftListSettingsActivityViewModel @Inject constructor(
suspend fun deleteList() {
_viewState.update { it.copy(requestInFlight = true) }
val microsoftService = httpClientFactory.getMicrosoftService(account)
try {
val result = microsoftService.deleteList(list?.uuid!!)
if (isDefault()) {
throw IllegalArgumentException("The default list cannot be deleted")
}
val result = service().deleteList(list?.uuid!!)
taskDeleter.delete(list)
_viewState.update { it.copy(deleted = true) }
} catch (e: Exception) {
@ -70,10 +74,12 @@ class MicrosoftListSettingsActivityViewModel @Inject constructor(
suspend fun updateList(displayName: String) {
_viewState.update { it.copy(requestInFlight = true) }
val microsoftService = httpClientFactory.getMicrosoftService(account)
val taskList = TaskLists.TaskList(displayName = displayName)
try {
val result = microsoftService.updateList(list?.uuid!!, taskList)
if (isDefault()) {
throw IllegalArgumentException("The default list cannot be renamed")
}
val result = service().updateList(list?.uuid!!, taskList)
result.applyTo(list)
caldavDao.update(list)
_viewState.update { it.copy(result = list) }
@ -95,4 +101,11 @@ class MicrosoftListSettingsActivityViewModel @Inject constructor(
)
}
}
private suspend fun isDefault(): Boolean = try {
service().getList(list?.uuid!!).wellknownListName == "defaultList"
} catch (e: Exception) {
Timber.e(e)
false
}
}

@ -78,4 +78,11 @@ class MicrosoftService(
suspend fun deleteChecklistItem(listId: String, taskId: String, checklistItemId: String) =
client.delete("$baseUrl/lists/$listId/tasks/$taskId/checklistItems/$checklistItemId")
}
suspend fun getList(listId: String): TaskLists.TaskList =
client
.get("$baseUrl/lists/$listId") {
contentType(ContentType.Application.Json)
}
.body()
}

Loading…
Cancel
Save