diff --git a/src/app.rs b/src/app.rs index 8919f7c..d6a9120 100644 --- a/src/app.rs +++ b/src/app.rs @@ -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() { diff --git a/src/domain/models.rs b/src/domain/models.rs index 6150717..6dcbe08 100644 --- a/src/domain/models.rs +++ b/src/domain/models.rs @@ -33,6 +33,7 @@ pub enum SyncAction { Delete, Reorder, CreateList, + DeleteList, } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/src/infrastructure/api.rs b/src/infrastructure/api.rs index ed61098..cbde123 100644 --- a/src/infrastructure/api.rs +++ b/src/infrastructure/api.rs @@ -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, diff --git a/src/infrastructure/db.rs b/src/infrastructure/db.rs index b79eb56..1405ab7 100644 --- a/src/infrastructure/db.rs +++ b/src/infrastructure/db.rs @@ -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 { diff --git a/src/main.rs b/src/main.rs index ee9baa8..c92e7f9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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(()), };