From 6f8f4351f654dd0445e25ca6c0fb59bdcc19723a Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 21 Apr 2026 10:24:07 +0200 Subject: [PATCH] Fixed message loading performance --- sbapp/main.py | 1 + sbapp/sideband/core.py | 42 +++++++++++++++++++++++++++--------------- sbapp/ui/messages.py | 3 +-- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/sbapp/main.py b/sbapp/main.py index 9e8be46..e98400b 100644 --- a/sbapp/main.py +++ b/sbapp/main.py @@ -449,6 +449,7 @@ else: from ui.objectdetails import ObjectDetails from ui.announces import Announces from ui.messages import Messages, ts_format, messages_screen_kv + # from ui.messages_recycle import Messages, ts_format, messages_screen_kv from ui.helpers import ContentNavigationDrawer, DrawerList, IconListItem from ui.helpers import multilingual_markup, mdc, dark_theme_text_color from kivymd.toast import toast diff --git a/sbapp/sideband/core.py b/sbapp/sideband/core.py index 367ba9b..0b7d4db 100644 --- a/sbapp/sideband/core.py +++ b/sbapp/sideband/core.py @@ -2999,19 +2999,32 @@ class SidebandCore(): with self.db_lock: db = self.__db_connect() dbc = db.cursor() - + + base_condition = "(dest=:context_dest or source=:context_dest)" if after != None and before == None: - query = "select * from lxm where (dest=:context_dest or source=:context_dest) and rx_ts>:after_ts" - dbc.execute(query, {"context_dest": context_dest, "after_ts": after}) + query = f"select * from lxm where {base_condition} and rx_ts>:after_ts ORDER BY rx_ts DESC" + params = {"context_dest": context_dest, "after_ts": after} + if limit is not None: + query += f" LIMIT :limit_val"; params["limit_val"] = int(limit) + dbc.execute(query, params) elif after == None and before != None: - query = "select * from lxm where (dest=:context_dest or source=:context_dest) and rx_ts<:before_ts" - dbc.execute(query, {"context_dest": context_dest, "before_ts": before}) + query = f"select * from lxm where {base_condition} and rx_ts<:before_ts ORDER BY rx_ts DESC" + params = {"context_dest": context_dest, "before_ts": before} + if limit is not None: + query += f" LIMIT :limit_val"; params["limit_val"] = int(limit) + dbc.execute(query, params) elif after != None and before != None: - query = "select * from lxm where (dest=:context_dest or source=:context_dest) and rx_ts<:before_ts and rx_ts>:after_ts" - dbc.execute(query, {"context_dest": context_dest, "before_ts": before, "after_ts": after}) + query = f"select * from lxm where {base_condition} and rx_ts<:before_ts and rx_ts>:after_ts ORDER BY rx_ts DESC" + params = {"context_dest": context_dest, "before_ts": before, "after_ts": after} + if limit is not None: + query += f" LIMIT :limit_val"; params["limit_val"] = int(limit) + dbc.execute(query, params) else: - query = "select * from lxm where dest=:context_dest or source=:context_dest" - dbc.execute(query, {"context_dest": context_dest}) + query = f"select * from lxm where {base_condition} ORDER BY rx_ts DESC" + params = {"context_dest": context_dest} + if limit is not None: + query += f" LIMIT :limit_val"; params["limit_val"] = int(limit) + dbc.execute(query, params) result = dbc.fetchall() @@ -3034,10 +3047,8 @@ class SidebandCore(): lxm.paper_packed = paper_packed_lxm extras = None - try: - extras = msgpack.unpackb(entry[11]) - except: - pass + try: extras = msgpack.unpackb(entry[11]) + except: pass message = { "hash": lxm.hash, @@ -3054,8 +3065,9 @@ class SidebandCore(): } messages.append(message) - if len(messages) > limit: - messages = messages[-limit:] + + messages.reverse() + if len(messages) > limit: messages = messages[-limit:] return messages def _db_save_lxm(self, lxm, context_dest, originator = False, own_command = False, is_retry = False): diff --git a/sbapp/ui/messages.py b/sbapp/ui/messages.py index 8c9e896..5e2026b 100644 --- a/sbapp/ui/messages.py +++ b/sbapp/ui/messages.py @@ -271,8 +271,7 @@ class Messages(): else: self.hide_widget(self.ids.message_ptt, True) c_ts = time.time() - if len(self.new_messages) > 0: - self.update_widget() + if len(self.new_messages) > 0: self.update_widget() if (len(self.added_item_hashes) < self.db_message_count) and not self.load_more_button in self.list.children: self.list.add_widget(self.load_more_button, len(self.list.children))