From 1833d76a0849a39681b4cd5e92c6eaa3ea25bacf Mon Sep 17 00:00:00 2001 From: Vadim Khitrin Date: Fri, 6 Dec 2024 12:36:16 +0200 Subject: [PATCH] fix: Do Not Wipe Bookmarks On Failure Once bookmarks were aggregated for an account, on failed sync attempts, previously bookmarks were wiped. Ensure bookmarks are kept if a sync attempt fails on an account with bookmarks. --- src/app.rs | 36 +++++++++++++++++------------------- src/db/mod.rs | 14 +++++++------- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/app.rs b/src/app.rs index b6f6317..91f9d11 100644 --- a/src/app.rs +++ b/src/app.rs @@ -519,29 +519,27 @@ impl Application for Cosmicding { } Message::BookmarksView(message) => commands.push(self.bookmarks_view.update(message)), Message::StartRefreshBookmarksForAllAccounts => { - if !self.bookmarks_view.bookmarks.is_empty() { - let message = |x: Vec| { - cosmic::app::Message::App(Message::DoneRefreshBookmarksForAllAccounts(x)) - }; - if !self.accounts_view.accounts.is_empty() { - commands.push(Task::perform( - http::fetch_bookmarks_from_all_accounts( - self.accounts_view.accounts.clone(), - ), - message, - )); - commands.push( - self.toasts - .push(widget::toaster::Toast::new(fl!("refreshed-bookmarks"))) - .map(cosmic::app::Message::App), - ); - } + let message = |x: Vec| { + cosmic::app::Message::App(Message::DoneRefreshBookmarksForAllAccounts(x)) + }; + if !self.accounts_view.accounts.is_empty() { + commands.push(Task::perform( + http::fetch_bookmarks_from_all_accounts( + self.accounts_view.accounts.clone(), + ), + message, + )); + commands.push( + self.toasts + .push(widget::toaster::Toast::new(fl!("refreshed-bookmarks"))) + .map(cosmic::app::Message::App), + ); } } Message::DoneRefreshBookmarksForAllAccounts(remote_responses) => { for response in remote_responses { block_on(async { - db::SqliteDatabase::cache_bookmarks_for_acount( + db::SqliteDatabase::aggregate_bookmarks_for_acount( &mut self.db, &response.account, response.bookmarks.unwrap_or_else(Vec::new), @@ -583,7 +581,7 @@ impl Application for Cosmicding { Message::DoneRefreshBookmarksForAccount(account, remote_responses) => { for response in remote_responses { block_on(async { - db::SqliteDatabase::cache_bookmarks_for_acount( + db::SqliteDatabase::aggregate_bookmarks_for_acount( &mut self.db, &account, response.bookmarks.unwrap_or_else(Vec::new), diff --git a/src/db/mod.rs b/src/db/mod.rs index 3809819..4f4fa87 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -135,7 +135,7 @@ impl SqliteDatabase { // .await // .unwrap(); //} - pub async fn cache_bookmarks_for_acount( + pub async fn aggregate_bookmarks_for_acount( &mut self, account: &Account, bookmarks: Vec, @@ -145,12 +145,12 @@ impl SqliteDatabase { let delete_query: &str = "DELETE FROM Bookmarks where user_account_id = $1;"; let update_timestamp_query = "UPDATE UserAccounts SET last_sync_status=$2, last_sync_timestamp=$3 WHERE id=$1"; - sqlx::query(delete_query) - .bind(account.id) - .execute(&mut self.conn) - .await - .unwrap(); - if !bookmarks.is_empty() { + if response_successful { + sqlx::query(delete_query) + .bind(account.id) + .execute(&mut self.conn) + .await + .unwrap(); for bookmark in bookmarks { self.add_bookmark(&bookmark).await; }