mirror of
https://github.com/markqvist/Sideband.git
synced 2025-05-09 09:54:57 -04:00
Mitigated performance issues related to SQLite3 randomly hanging for a second on Android
This commit is contained in:
parent
4982e37231
commit
75edbf94b9
4 changed files with 322 additions and 197 deletions
|
@ -37,9 +37,12 @@ class Messages():
|
|||
def __init__(self, app, context_dest):
|
||||
self.app = app
|
||||
self.context_dest = context_dest
|
||||
self.messages = []
|
||||
self.new_messages = []
|
||||
self.added_item_hashes = []
|
||||
self.added_messages = 0
|
||||
self.latest_message_timestamp = None
|
||||
self.earliest_message_timestamp = time.time()
|
||||
self.loading_earlier_messages = False
|
||||
self.list = None
|
||||
self.widgets = []
|
||||
self.send_error_dialog = None
|
||||
|
@ -50,20 +53,27 @@ class Messages():
|
|||
if self.list != None:
|
||||
self.list.clear_widgets()
|
||||
|
||||
self.messages = []
|
||||
self.new_messages = []
|
||||
self.added_item_hashes = []
|
||||
self.added_messages = 0
|
||||
self.latest_message_timestamp = None
|
||||
self.widgets = []
|
||||
|
||||
self.update()
|
||||
|
||||
def load_more(self, dt):
|
||||
for new_message in self.app.sideband.list_messages(self.context_dest, before=self.earliest_message_timestamp,limit=2):
|
||||
self.new_messages.append(new_message)
|
||||
|
||||
if len(self.new_messages) > 0:
|
||||
self.loading_earlier_messages = True
|
||||
self.list.remove_widget(self.load_more_button)
|
||||
|
||||
def update(self, limit=8):
|
||||
s_ts = time.time()
|
||||
self.messages = self.app.sideband.list_messages(self.context_dest, after=self.latest_message_timestamp,limit=limit)
|
||||
for new_message in self.app.sideband.list_messages(self.context_dest, after=self.latest_message_timestamp,limit=limit):
|
||||
self.new_messages.append(new_message)
|
||||
|
||||
self.db_message_count = self.app.sideband.count_messages(self.context_dest)
|
||||
RNS.log("Total messages in db: "+str(self.db_message_count))
|
||||
RNS.log("Added items: "+str(len(self.added_item_hashes)))
|
||||
|
||||
if self.load_more_button == None:
|
||||
self.load_more_button = MDRectangleFlatIconButton(
|
||||
|
@ -73,29 +83,28 @@ class Messages():
|
|||
theme_text_color="Custom",
|
||||
size_hint=[1.0, None],
|
||||
)
|
||||
def lmcb(sender):
|
||||
Clock.schedule_once(self.load_more, 0.15)
|
||||
|
||||
self.load_more_button.bind(on_release=lmcb)
|
||||
|
||||
if self.list == None:
|
||||
layout = GridLayout(cols=1, spacing=dp(16), padding=dp(16), size_hint_y=None)
|
||||
layout.bind(minimum_height=layout.setter('height'))
|
||||
self.list = layout
|
||||
|
||||
if (len(self.added_item_hashes) < self.db_message_count) and not self.load_more_button in self.list.children:
|
||||
# if self.load_more_button in self.list.children:
|
||||
# RNS.log("Removing for reinsertion")
|
||||
# self.list.remove_widget(self.load_more_button)
|
||||
self.list.add_widget(self.load_more_button, len(self.list.children))
|
||||
|
||||
c_ts = time.time()
|
||||
if len(self.messages) > 0:
|
||||
if len(self.new_messages) > 0:
|
||||
self.update_widget()
|
||||
RNS.log("Cards created in "+RNS.prettytime(time.time()-c_ts), RNS.LOG_DEBUG)
|
||||
|
||||
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))
|
||||
|
||||
if self.app.sideband.config["dark_ui"]:
|
||||
intensity_msgs = intensity_msgs_dark
|
||||
else:
|
||||
intensity_msgs = intensity_msgs_light
|
||||
|
||||
upd_ts = time.time()
|
||||
for w in self.widgets:
|
||||
m = w.m
|
||||
if self.app.sideband.config["dark_ui"]:
|
||||
|
@ -141,8 +150,6 @@ class Messages():
|
|||
w.heading = titlestr+"[b]Sent[/b] "+txstr+"\n[b]State[/b] Failed"
|
||||
m["state"] = msg["state"]
|
||||
|
||||
RNS.log("Updated message widgets in "+RNS.prettytime(time.time()-upd_ts), RNS.LOG_DEBUG)
|
||||
RNS.log("Creating messages view took "+RNS.prettytime(time.time()-s_ts), RNS.LOG_DEBUG)
|
||||
|
||||
def update_widget(self):
|
||||
if self.app.sideband.config["dark_ui"]:
|
||||
|
@ -152,8 +159,10 @@ class Messages():
|
|||
intensity_msgs = intensity_msgs_light
|
||||
mt_color = [1.0, 1.0, 1.0, 0.95]
|
||||
|
||||
for m in self.messages:
|
||||
s_ts = time.time()
|
||||
if self.loading_earlier_messages:
|
||||
self.new_messages.reverse()
|
||||
|
||||
for m in self.new_messages:
|
||||
if not m["hash"] in self.added_item_hashes:
|
||||
txstr = time.strftime(ts_format, time.localtime(m["sent"]))
|
||||
rxstr = time.strftime(ts_format, time.localtime(m["received"]))
|
||||
|
@ -432,14 +441,23 @@ class Messages():
|
|||
# Bind menu open
|
||||
item.ids.msg_submenu.bind(on_release=callback_factory(item))
|
||||
|
||||
if self.loading_earlier_messages:
|
||||
insert_pos = len(self.list.children)
|
||||
else:
|
||||
insert_pos = 0
|
||||
|
||||
self.added_item_hashes.append(m["hash"])
|
||||
self.widgets.append(item)
|
||||
self.list.add_widget(item)
|
||||
self.list.add_widget(item, insert_pos)
|
||||
|
||||
if self.latest_message_timestamp == None or m["received"] > self.latest_message_timestamp:
|
||||
self.latest_message_timestamp = m["received"]
|
||||
|
||||
RNS.log("Created message card in "+RNS.prettytime(time.time()-s_ts), RNS.LOG_DEBUG)
|
||||
if self.earliest_message_timestamp == None or m["received"] < self.earliest_message_timestamp:
|
||||
self.earliest_message_timestamp = m["received"]
|
||||
|
||||
self.added_messages += len(self.new_messages)
|
||||
self.new_messages = []
|
||||
|
||||
def get_widget(self):
|
||||
return self.list
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue