aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin W <git@larma.de>2023-03-20 15:40:44 -0600
committerMarvin W <git@larma.de>2023-03-21 17:35:58 -0600
commit4e1311dfa9944fc04089037783db6a0a6eef7345 (patch)
tree66cdb426fe90e9582deb22871c0cd4773d863bd0
parent3721027edb2d2f6f71cf655d643f7796864cfdbc (diff)
downloaddino-4e1311dfa9944fc04089037783db6a0a6eef7345.tar.gz
dino-4e1311dfa9944fc04089037783db6a0a6eef7345.zip
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.vala7
-rw-r--r--main/src/ui/conversation_selector/conversation_selector_row.vala14
2 files changed, 20 insertions, 1 deletions
diff --git a/libdino/src/service/database.vala b/libdino/src/service/database.vala
index 96b3b82d..6b3f5e6a 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 = 25;
+ 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 6ef61b3c..1bcf6962 100644
--- a/main/src/ui/conversation_selector/conversation_selector_row.vala
+++ b/main/src/ui/conversation_selector/conversation_selector_row.vala
@@ -225,7 +225,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;