Fix list deletion sync: SyncAction::DeleteList

- Added DeleteList variant to SyncAction enum
- Added ApiClient::delete_list() calling DELETE /users/@me/lists/{id}
- List deletion uses DeleteList action (not Delete/delete_task)
- Sync engine handles DeleteList calling api.delete_list()
This commit is contained in:
Ruben Rosario
2026-06-21 18:27:53 +01:00
parent a35eab35af
commit 9649ca96b0
5 changed files with 37 additions and 6 deletions
+6 -6
View File
@@ -739,12 +739,12 @@ impl App {
if self.selected_list < self.lists.len() {
let list_id = self.lists[self.selected_list].id.clone();
self.db.delete_list(&list_id).ok();
self.db.push_sync(
SyncAction::Delete,
&list_id,
&list_id,
"",
).ok();
self.db.push_sync(
SyncAction::DeleteList,
&list_id,
&list_id,
"",
).ok();
self.trigger_sync();
self.load_lists();
if self.selected_list >= self.lists.len() {
+1
View File
@@ -33,6 +33,7 @@ pub enum SyncAction {
Delete,
Reorder,
CreateList,
DeleteList,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
+25
View File
@@ -402,6 +402,31 @@ impl ApiClient {
Ok(())
}
pub async fn delete_list(&self, list_id: &str) -> Result<(), ApiError> {
let token = self.get_token().await?;
let url = format!(
"https://tasks.googleapis.com/tasks/v1/users/@me/lists/{}",
list_id
);
let resp = self
.client
.delete(&url)
.bearer_auth(&token)
.send()
.await
.map_err(|e| ApiError::Network(e.to_string()))?;
if !resp.status().is_success() {
let status = resp.status();
let body = resp.text().await.unwrap_or_default();
return Err(ApiError::Api(format!("Delete list failed: {} - {}", status, body)));
}
Ok(())
}
pub async fn move_task(
&self,
list_id: &str,
+2
View File
@@ -282,6 +282,7 @@ impl Db {
SyncAction::Delete => "Delete",
SyncAction::Reorder => "Reorder",
SyncAction::CreateList => "CreateList",
SyncAction::DeleteList => "DeleteList",
};
let conn = self.conn.lock().unwrap();
conn.execute(
@@ -362,6 +363,7 @@ impl Db {
"\"Delete\"" | "Delete" => SyncAction::Delete,
"\"Reorder\"" | "Reorder" => SyncAction::Reorder,
"\"CreateList\"" | "CreateList" => SyncAction::CreateList,
"\"DeleteList\"" | "DeleteList" => SyncAction::DeleteList,
_ => SyncAction::Update,
};
Ok(SyncQueueItem {
+3
View File
@@ -341,6 +341,9 @@ async fn push_sync(
SyncAction::Reorder => {
api.move_task(&item.list_id, &item.task_id, None, None).await
}
SyncAction::DeleteList => {
api.delete_list(&item.task_id).await
}
_ => Ok(()),
};