Fixed message loading performance

This commit is contained in:
Mark Qvist 2026-04-21 10:24:07 +02:00
commit 6f8f4351f6
3 changed files with 29 additions and 17 deletions

View file

@ -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

View file

@ -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):

View file

@ -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))