mirror of
https://github.com/markqvist/NomadNet.git
synced 2025-01-28 15:17:08 -05:00
Added new message indicator.
This commit is contained in:
parent
675946e2b7
commit
903c75db0f
@ -7,6 +7,7 @@ from nomadnet.Directory import DirectoryEntry
|
|||||||
|
|
||||||
class Conversation:
|
class Conversation:
|
||||||
cached_conversations = {}
|
cached_conversations = {}
|
||||||
|
unread_conversations = {}
|
||||||
created_callback = None
|
created_callback = None
|
||||||
|
|
||||||
aspect_filter = "lxmf.delivery"
|
aspect_filter = "lxmf.delivery"
|
||||||
@ -57,6 +58,16 @@ class Conversation:
|
|||||||
conversation = Conversation.cached_conversations[RNS.hexrep(source_hash, delimit=False)]
|
conversation = Conversation.cached_conversations[RNS.hexrep(source_hash, delimit=False)]
|
||||||
conversation.scan_storage()
|
conversation.scan_storage()
|
||||||
|
|
||||||
|
if not source_hash in Conversation.unread_conversations:
|
||||||
|
Conversation.unread_conversations[source_hash] = True
|
||||||
|
try:
|
||||||
|
dirname = RNS.hexrep(source_hash, delimit=False)
|
||||||
|
open(app.conversationpath + "/" + dirname + "/unread", 'a').close()
|
||||||
|
except Exception as e:
|
||||||
|
pass
|
||||||
|
|
||||||
|
Conversation.created_callback()
|
||||||
|
|
||||||
return ingested_path
|
return ingested_path
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -70,6 +81,13 @@ class Conversation:
|
|||||||
app_data = RNS.Identity.recall_app_data(source_hash)
|
app_data = RNS.Identity.recall_app_data(source_hash)
|
||||||
display_name = app.directory.display_name(source_hash)
|
display_name = app.directory.display_name(source_hash)
|
||||||
|
|
||||||
|
unread = False
|
||||||
|
if source_hash in Conversation.unread_conversations:
|
||||||
|
unread = True
|
||||||
|
elif os.path.isfile(app.conversationpath + "/" + dirname + "/unread"):
|
||||||
|
Conversation.unread_conversations[source_hash] = True
|
||||||
|
unread = True
|
||||||
|
|
||||||
if display_name == None and app_data:
|
if display_name == None and app_data:
|
||||||
display_name = app_data.decode("utf-8")
|
display_name = app_data.decode("utf-8")
|
||||||
|
|
||||||
@ -80,7 +98,7 @@ class Conversation:
|
|||||||
|
|
||||||
trust_level = app.directory.trust_level(source_hash, display_name)
|
trust_level = app.directory.trust_level(source_hash, display_name)
|
||||||
|
|
||||||
entry = (source_hash_text, display_name, trust_level, sort_name)
|
entry = (source_hash_text, display_name, trust_level, sort_name, unread)
|
||||||
conversations.append(entry)
|
conversations.append(entry)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -114,6 +132,7 @@ class Conversation:
|
|||||||
self.source_known = False
|
self.source_known = False
|
||||||
self.source_trusted = False
|
self.source_trusted = False
|
||||||
self.source_blocked = False
|
self.source_blocked = False
|
||||||
|
self.unread = False
|
||||||
|
|
||||||
self.__changed_callback = None
|
self.__changed_callback = None
|
||||||
|
|
||||||
@ -143,6 +162,11 @@ class Conversation:
|
|||||||
message_path = self.messages_path + "/" + filename
|
message_path = self.messages_path + "/" + filename
|
||||||
self.messages.append(ConversationMessage(message_path))
|
self.messages.append(ConversationMessage(message_path))
|
||||||
|
|
||||||
|
new_len = len(self.messages)
|
||||||
|
|
||||||
|
if new_len > old_len:
|
||||||
|
self.unread = True
|
||||||
|
|
||||||
if self.__changed_callback != None:
|
if self.__changed_callback != None:
|
||||||
self.__changed_callback(self)
|
self.__changed_callback(self)
|
||||||
|
|
||||||
|
@ -205,6 +205,18 @@ class NomadNetworkApp:
|
|||||||
def conversations(self):
|
def conversations(self):
|
||||||
return nomadnet.Conversation.conversation_list(self)
|
return nomadnet.Conversation.conversation_list(self)
|
||||||
|
|
||||||
|
def conversation_is_unread(self, source_hash):
|
||||||
|
if bytes.fromhex(source_hash) in nomadnet.Conversation.unread_conversations:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def mark_conversation_read(self, source_hash):
|
||||||
|
if bytes.fromhex(source_hash) in nomadnet.Conversation.unread_conversations:
|
||||||
|
nomadnet.Conversation.unread_conversations.pop(bytes.fromhex(source_hash))
|
||||||
|
if os.path.isfile(self.conversationpath + "/" + source_hash + "/unread"):
|
||||||
|
os.unlink(self.conversationpath + "/" + source_hash + "/unread")
|
||||||
|
|
||||||
def createDefaultConfig(self):
|
def createDefaultConfig(self):
|
||||||
self.config = ConfigObj(__default_nomadnet_config__)
|
self.config = ConfigObj(__default_nomadnet_config__)
|
||||||
self.config.filename = self.configpath
|
self.config.filename = self.configpath
|
||||||
|
@ -69,6 +69,7 @@ GLYPHS = {
|
|||||||
("arrow_d", "\\/", "\u2193", "\u2193"),
|
("arrow_d", "\\/", "\u2193", "\u2193"),
|
||||||
("warning", "!", "\u26a0", "\uf12a"),
|
("warning", "!", "\u26a0", "\uf12a"),
|
||||||
("info", "i", "\u2139", "\ufb4d"),
|
("info", "i", "\u2139", "\ufb4d"),
|
||||||
|
("unread", "N", "\u2709", "\uf003 "),
|
||||||
("divider1", "-", "\u2504", "\u2504"),
|
("divider1", "-", "\u2504", "\u2504"),
|
||||||
("peer", "P", "\U0001F464", "\uf415"),
|
("peer", "P", "\U0001F464", "\uf415"),
|
||||||
("node", "N", "\U0001F5A5", "\uf502"),
|
("node", "N", "\U0001F5A5", "\uf502"),
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import RNS
|
import RNS
|
||||||
|
import os
|
||||||
import time
|
import time
|
||||||
import nomadnet
|
import nomadnet
|
||||||
import LXMF
|
import LXMF
|
||||||
@ -316,17 +317,43 @@ class ConversationsDisplay():
|
|||||||
self.ilb.select_item(ilb_position)
|
self.ilb.select_item(ilb_position)
|
||||||
nomadnet.NomadNetworkApp.get_shared_instance().ui.loop.draw_screen()
|
nomadnet.NomadNetworkApp.get_shared_instance().ui.loop.draw_screen()
|
||||||
|
|
||||||
|
if self.currently_displayed_conversation != None:
|
||||||
|
if self.app.conversation_is_unread(self.currently_displayed_conversation):
|
||||||
|
self.app.mark_conversation_read(self.currently_displayed_conversation)
|
||||||
|
try:
|
||||||
|
if os.path.isfile(self.app.conversationpath + "/" + self.currently_displayed_conversation + "/unread"):
|
||||||
|
os.unlink(self.app.conversationpath + "/" + self.currently_displayed_conversation + "/unread")
|
||||||
|
except Exception as e:
|
||||||
|
raise e
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def display_conversation(self, sender=None, source_hash=None):
|
def display_conversation(self, sender=None, source_hash=None):
|
||||||
|
if self.currently_displayed_conversation != None:
|
||||||
|
if self.app.conversation_is_unread(self.currently_displayed_conversation):
|
||||||
|
self.app.mark_conversation_read(self.currently_displayed_conversation)
|
||||||
|
|
||||||
self.currently_displayed_conversation = source_hash
|
self.currently_displayed_conversation = source_hash
|
||||||
options = self.widget.options("weight", 1-ConversationsDisplay.list_width)
|
options = self.widget.options("weight", 1-ConversationsDisplay.list_width)
|
||||||
self.widget.contents[1] = (self.make_conversation_widget(source_hash), options)
|
self.widget.contents[1] = (self.make_conversation_widget(source_hash), options)
|
||||||
if source_hash == None:
|
if source_hash == None:
|
||||||
self.widget.set_focus_column(0)
|
self.widget.set_focus_column(0)
|
||||||
else:
|
else:
|
||||||
|
if self.app.conversation_is_unread(source_hash):
|
||||||
|
self.app.mark_conversation_read(source_hash)
|
||||||
|
self.update_conversation_list()
|
||||||
|
|
||||||
self.widget.set_focus_column(1)
|
self.widget.set_focus_column(1)
|
||||||
|
conversation_position = None
|
||||||
|
index = 0
|
||||||
|
for widget in self.list_widgets:
|
||||||
|
if widget.source_hash == source_hash:
|
||||||
|
conversation_position = index
|
||||||
|
index += 1
|
||||||
|
|
||||||
|
if conversation_position != None:
|
||||||
|
self.ilb.select_item(conversation_position)
|
||||||
|
|
||||||
|
|
||||||
def make_conversation_widget(self, source_hash):
|
def make_conversation_widget(self, source_hash):
|
||||||
@ -364,6 +391,7 @@ class ConversationsDisplay():
|
|||||||
trust_level = conversation[2]
|
trust_level = conversation[2]
|
||||||
display_name = conversation[1]
|
display_name = conversation[1]
|
||||||
source_hash = conversation[0]
|
source_hash = conversation[0]
|
||||||
|
unread = conversation[4]
|
||||||
|
|
||||||
g = self.app.ui.glyphs
|
g = self.app.ui.glyphs
|
||||||
|
|
||||||
@ -389,11 +417,17 @@ class ConversationsDisplay():
|
|||||||
focus_style = "list_focus_untrusted"
|
focus_style = "list_focus_untrusted"
|
||||||
|
|
||||||
display_text = symbol
|
display_text = symbol
|
||||||
|
|
||||||
if display_name != None and display_name != "":
|
if display_name != None and display_name != "":
|
||||||
display_text += " "+display_name
|
display_text += " "+display_name
|
||||||
|
|
||||||
if trust_level != DirectoryEntry.TRUSTED:
|
if trust_level != DirectoryEntry.TRUSTED:
|
||||||
display_text += " <"+source_hash+">"
|
display_text += " <"+source_hash+">"
|
||||||
|
else:
|
||||||
|
if unread:
|
||||||
|
if source_hash != self.currently_displayed_conversation:
|
||||||
|
display_text += " "+g["unread"]
|
||||||
|
|
||||||
|
|
||||||
widget = ListEntry(display_text)
|
widget = ListEntry(display_text)
|
||||||
urwid.connect_signal(widget, "click", self.display_conversation, conversation[0])
|
urwid.connect_signal(widget, "click", self.display_conversation, conversation[0])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user