diff options
| author | Marvin W <git@larma.de> | 2023-03-20 15:40:44 -0600 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi92@disroot.org> | 2026-02-10 23:40:46 +0100 |
| commit | 3769d06940e6cf68f0f9ecafb4c275cf33944ea2 (patch) | |
| tree | f63baea6c01bde6a771b1dde23108562c4f4a645 | |
| parent | a859694a64ec3e5481e8f5051187587ecd4c3ebf (diff) | |
Improve database performance while reconnecting and syncing
Also move some tasks to low priority idle queue so they won't block UI updates
| -rw-r--r-- | libdino/src/service/database.vala | 7 | ||||
| -rw-r--r-- | main/src/ui/conversation_selector/conversation_selector_row.vala | 14 |
2 files changed, 20 insertions, 1 deletions
diff --git a/libdino/src/service/database.vala b/libdino/src/service/database.vala index 25a6b477..7cb015e2 100644 --- a/libdino/src/service/database.vala +++ b/libdino/src/service/database.vala @@ -7,7 +7,7 @@ using Dino.Entities; namespace Dino { public class Database : Qlite.Database { - private const int VERSION = 23; + private const int VERSION = 26; public class AccountTable : Table { public Column<int> id = new Column.Integer("id") { primary_key = true, auto_increment = true }; @@ -93,6 +93,11 @@ public class Database : Qlite.Database { // deduplication index("message_account_counterpart_stanzaid_idx", {account_id, counterpart_id, stanza_id}); + index("message_account_counterpart_serverid_idx", {account_id, counterpart_id, server_id}); + + // message by marked + index("message_account_marked_idx", {account_id, marked}); + fts({body}); } } diff --git a/main/src/ui/conversation_selector/conversation_selector_row.vala b/main/src/ui/conversation_selector/conversation_selector_row.vala index e71f58d1..b526e11e 100644 --- a/main/src/ui/conversation_selector/conversation_selector_row.vala +++ b/main/src/ui/conversation_selector/conversation_selector_row.vala @@ -218,7 +218,21 @@ public class ConversationSelectorRow : ListBoxRow { label.attributes = copy; } + private bool update_read_pending = false; + private bool update_read_pending_force = false; protected void update_read(bool force_update = false) { + if (force_update) update_read_pending_force = true; + if (update_read_pending) return; + update_read_pending = true; + Idle.add(() => { + update_read_pending = false; + update_read_pending_force = false; + update_read_idle(update_read_pending_force); + return Source.REMOVE; + }, Priority.LOW); + } + + private void update_read_idle(bool force_update = false) { int current_num_unread = stream_interactor.get_module(ChatInteraction.IDENTITY).get_num_unread(conversation); if (num_unread == current_num_unread && !force_update) return; num_unread = current_num_unread; |
