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( PromptAction(
showDialog = promptDelete, showDialog = promptDelete,
title = stringResource(id = R.string.delete_tag_confirmation, title), title = stringResource(id = R.string.delete_tag_confirmation, title),
onAction = { scope.launch { onDelete() } }, onAction = {
scope.launch { onDelete() }
promptDelete = false
},
onCancel = { promptDelete = false }, onCancel = { promptDelete = false },
) )
} }

@ -38,12 +38,14 @@ class MicrosoftListSettingsActivityViewModel @Inject constructor(
val list: CaldavCalendar? = val list: CaldavCalendar? =
savedStateHandle[BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR] savedStateHandle[BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR]
private suspend fun service(): MicrosoftService =
httpClientFactory.getMicrosoftService(account)
suspend fun createList(displayName: String) { suspend fun createList(displayName: String) {
_viewState.update { it.copy(requestInFlight = true) } _viewState.update { it.copy(requestInFlight = true) }
val microsoftService = httpClientFactory.getMicrosoftService(account)
val taskList = TaskLists.TaskList(displayName = displayName) val taskList = TaskLists.TaskList(displayName = displayName)
try { try {
val result = microsoftService.createList(taskList) val result = service().createList(taskList)
val list = CaldavCalendar( val list = CaldavCalendar(
account = this@MicrosoftListSettingsActivityViewModel.account.uuid account = this@MicrosoftListSettingsActivityViewModel.account.uuid
).apply { ).apply {
@ -58,9 +60,11 @@ class MicrosoftListSettingsActivityViewModel @Inject constructor(
suspend fun deleteList() { suspend fun deleteList() {
_viewState.update { it.copy(requestInFlight = true) } _viewState.update { it.copy(requestInFlight = true) }
val microsoftService = httpClientFactory.getMicrosoftService(account)
try { 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) taskDeleter.delete(list)
_viewState.update { it.copy(deleted = true) } _viewState.update { it.copy(deleted = true) }
} catch (e: Exception) { } catch (e: Exception) {
@ -70,10 +74,12 @@ class MicrosoftListSettingsActivityViewModel @Inject constructor(
suspend fun updateList(displayName: String) { suspend fun updateList(displayName: String) {
_viewState.update { it.copy(requestInFlight = true) } _viewState.update { it.copy(requestInFlight = true) }
val microsoftService = httpClientFactory.getMicrosoftService(account)
val taskList = TaskLists.TaskList(displayName = displayName) val taskList = TaskLists.TaskList(displayName = displayName)
try { 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) result.applyTo(list)
caldavDao.update(list) caldavDao.update(list)
_viewState.update { it.copy(result = 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) = suspend fun deleteChecklistItem(listId: String, taskId: String, checklistItemId: String) =
client.delete("$baseUrl/lists/$listId/tasks/$taskId/checklistItems/$checklistItemId") 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