2022-04-07 13:03:53 -06:00
import RNS
2022-10-07 09:22:03 -06:00
import time
2022-04-07 13:03:53 -06:00
2022-10-08 16:09:26 -06:00
from kivy . metrics import dp , sp
2022-04-07 13:03:53 -06:00
from kivy . uix . boxlayout import BoxLayout
from kivy . properties import StringProperty , BooleanProperty
from kivymd . uix . list import MDList , IconLeftWidget , IconRightWidget , OneLineAvatarIconListItem
from kivymd . uix . menu import MDDropdownMenu
from kivy . uix . gridlayout import GridLayout
from kivy . uix . boxlayout import BoxLayout
2022-10-08 16:09:26 -06:00
from kivy . clock import Clock
2022-10-09 06:39:56 -06:00
from kivy . core . clipboard import Clipboard
2022-10-18 11:17:55 -06:00
from kivy . effects . scroll import ScrollEffect
2022-04-07 13:03:53 -06:00
2022-10-08 16:09:26 -06:00
from kivymd . uix . button import MDRectangleFlatButton
2022-04-07 13:03:53 -06:00
from kivymd . uix . dialog import MDDialog
2023-10-22 06:01:31 -06:00
from kivy . lang . builder import Builder
2024-01-05 10:05:34 -07:00
from kivy . utils import escape_markup
if RNS . vendor . platformutils . get_platform ( ) == " android " :
from ui . helpers import multilingual_markup
else :
from . helpers import multilingual_markup
2022-04-07 13:03:53 -06:00
class NewConv ( BoxLayout ) :
pass
class MsgSync ( BoxLayout ) :
pass
class ConvSettings ( BoxLayout ) :
disp_name = StringProperty ( )
2022-10-08 16:09:26 -06:00
context_dest = StringProperty ( )
2022-04-07 13:03:53 -06:00
trusted = BooleanProperty ( )
2023-10-19 18:41:05 -06:00
telemetry = BooleanProperty ( )
2023-10-29 09:01:28 -06:00
allow_requests = BooleanProperty ( )
2024-05-31 15:35:42 -06:00
is_object = BooleanProperty ( )
2024-08-30 13:17:22 -06:00
ptt_enabled = BooleanProperty ( )
2022-04-07 13:03:53 -06:00
class Conversations ( ) :
def __init__ ( self , app ) :
self . app = app
self . context_dests = [ ]
self . added_item_dests = [ ]
self . list = None
2023-10-22 06:01:31 -06:00
self . ids = None
2022-11-23 02:38:56 -07:00
2023-10-22 06:01:31 -06:00
if not self . app . root . ids . screen_manager . has_screen ( " conversations_screen " ) :
self . screen = Builder . load_string ( conv_screen_kv )
2023-10-22 07:49:00 -06:00
self . screen . app = self . app
2023-10-22 06:01:31 -06:00
self . ids = self . screen . ids
self . app . root . ids . screen_manager . add_widget ( self . screen )
2022-10-08 11:23:51 -06:00
self . conversation_dropdown = None
2022-11-23 02:38:56 -07:00
self . delete_dialog = None
self . clear_dialog = None
2023-10-20 17:02:43 -06:00
self . clear_telemetry_dialog = None
2022-11-23 02:38:56 -07:00
2022-04-07 13:03:53 -06:00
self . update ( )
def reload ( self ) :
self . clear_list ( )
self . update ( )
def clear_list ( self ) :
if self . list != None :
self . list . clear_widgets ( )
self . context_dests = [ ]
self . added_item_dests = [ ]
def update ( self ) :
2022-11-23 02:38:56 -07:00
# if self.app.sideband.getstate("app.flags.unread_conversations"):
# self.clear_list()
2022-04-07 13:03:53 -06:00
2024-05-31 15:35:42 -06:00
self . context_dests = self . app . sideband . list_conversations ( conversations = self . app . include_conversations , objects = self . app . include_objects )
view_title = " Conversations "
if self . app . include_conversations :
if self . app . include_objects :
view_title = " Conversations & Objects "
elif self . app . include_objects :
view_title = " Objects "
self . screen . ids . conversations_bar . title = view_title
2022-04-07 13:03:53 -06:00
self . update_widget ( )
2022-10-01 17:14:29 -06:00
self . app . sideband . setstate ( " app.flags.unread_conversations " , False )
self . app . sideband . setstate ( " app.flags.new_conversations " , False )
2022-10-12 08:33:05 -06:00
self . app . sideband . setstate ( " wants.viewupdate.conversations " , False )
2022-04-07 13:03:53 -06:00
2023-10-30 09:55:55 -06:00
def trust_icon ( self , conv ) :
context_dest = conv [ " dest " ]
unread = conv [ " unread " ]
appearance = self . app . sideband . peer_appearance ( context_dest , conv = conv )
is_trusted = conv [ " trust " ] == 1
2024-05-31 15:35:42 -06:00
appearance_from_all = self . app . sideband . config [ " display_style_from_all " ]
2023-10-30 09:55:55 -06:00
2022-11-23 02:38:56 -07:00
trust_icon = " account-question "
2023-10-30 09:55:55 -06:00
da = self . app . sideband . DEFAULT_APPEARANCE
2024-05-31 15:35:42 -06:00
if ( is_trusted or appearance_from_all ) and self . app . sideband . config [ " display_style_in_contact_list " ] and appearance != None and appearance != da :
2022-11-23 02:38:56 -07:00
if unread :
2023-10-30 09:55:55 -06:00
trust_icon = " email "
2022-11-23 02:38:56 -07:00
else :
2023-10-30 09:55:55 -06:00
trust_icon = appearance [ 0 ] or da [ 0 ] ;
2022-11-23 02:38:56 -07:00
else :
2023-10-30 09:55:55 -06:00
if self . app . sideband . requests_allowed_from ( context_dest ) :
2023-10-29 13:59:27 -06:00
if unread :
2023-10-30 09:55:55 -06:00
if is_trusted :
trust_icon = " email-seal "
else :
trust_icon = " email "
2023-10-29 13:59:27 -06:00
else :
2023-10-30 09:55:55 -06:00
trust_icon = " account-lock-open "
2022-11-23 02:38:56 -07:00
else :
2023-10-30 09:55:55 -06:00
if is_trusted :
if unread :
trust_icon = " email-seal "
else :
trust_icon = " account-check "
2023-10-29 13:59:27 -06:00
else :
2023-10-30 09:55:55 -06:00
if unread :
trust_icon = " email "
else :
trust_icon = " account-question "
2022-11-23 02:38:56 -07:00
return trust_icon
2023-10-30 09:55:55 -06:00
def get_icon ( self , conv ) :
context_dest = conv [ " dest " ]
unread = conv [ " unread " ]
last_activity = conv [ " last_activity " ]
trusted = conv [ " trust " ] == 1
appearance = self . app . sideband . peer_appearance ( context_dest , conv = conv )
2024-05-31 15:35:42 -06:00
is_object = self . app . sideband . is_object ( context_dest , conv_data = conv )
2023-10-30 09:55:55 -06:00
da = self . app . sideband . DEFAULT_APPEARANCE
ic_s = 24 ; ic_p = 14
conv_icon = self . trust_icon ( conv )
fg = None ; bg = None ; ti_color = None
if trusted and self . app . sideband . config [ " display_style_in_contact_list " ] and appearance != None and appearance != da :
fg = appearance [ 1 ] or da [ 1 ] ; bg = appearance [ 2 ] or da [ 2 ]
ti_color = " Custom "
else :
ti_color = None
2024-05-31 15:35:42 -06:00
if is_object :
def gen_rel_func ( ) :
def x ( ws ) :
self . app . object_details_action ( sender = ws , from_objects = True )
return x
rel_func = gen_rel_func ( )
else :
rel_func = self . app . conversation_action
2023-10-30 09:55:55 -06:00
iconl = IconLeftWidget (
icon = conv_icon , theme_icon_color = ti_color ,
icon_color = fg , md_bg_color = bg ,
2024-05-31 15:35:42 -06:00
on_release = rel_func )
iconl . source_dest = context_dest
2023-10-30 09:55:55 -06:00
iconl . _default_icon_pad = dp ( ic_p )
iconl . icon_size = dp ( ic_s )
return iconl
2022-04-07 13:03:53 -06:00
def update_widget ( self ) :
2022-10-07 09:22:03 -06:00
us = time . time ( )
RNS . log ( " Updating conversation list widgets " , RNS . LOG_DEBUG )
2022-04-07 13:03:53 -06:00
if self . list == None :
self . list = MDList ( )
2022-11-23 02:38:56 -07:00
remove_widgets = [ ]
for w in self . list . children :
if not w . sb_uid in [ e [ " dest " ] for e in self . context_dests ] :
remove_widgets . append ( w )
self . added_item_dests . remove ( w . sb_uid )
for w in remove_widgets :
self . list . remove_widget ( w )
2022-04-07 13:03:53 -06:00
for conv in self . context_dests :
context_dest = conv [ " dest " ]
unread = conv [ " unread " ]
2023-09-20 13:41:26 -06:00
last_activity = conv [ " last_activity " ]
2022-04-07 13:03:53 -06:00
2024-01-05 10:05:34 -07:00
peer_disp_name = multilingual_markup ( escape_markup ( str ( self . app . sideband . peer_display_name ( context_dest ) ) ) . encode ( " utf-8 " ) ) . decode ( " utf-8 " )
2024-05-31 15:35:42 -06:00
if not context_dest in self . added_item_dests :
existing_conv = self . app . sideband . _db_conversation ( context_dest )
is_object = self . app . sideband . is_object ( context_dest , conv_data = existing_conv )
2024-08-30 13:17:22 -06:00
ptt_enabled = self . app . sideband . ptt_enabled ( context_dest , conv_data = existing_conv )
2023-10-30 09:55:55 -06:00
iconl = self . get_icon ( conv )
2024-01-05 10:05:34 -07:00
item = OneLineAvatarIconListItem ( text = peer_disp_name , on_release = self . app . conversation_action )
2022-04-07 13:03:53 -06:00
item . add_widget ( iconl )
2023-09-20 13:41:26 -06:00
item . last_activity = last_activity
2022-11-23 02:38:56 -07:00
item . iconl = iconl
2022-04-07 13:03:53 -06:00
item . sb_uid = context_dest
2022-11-23 02:38:56 -07:00
item . sb_unread = unread
2022-10-02 04:45:06 -06:00
iconl . sb_uid = context_dest
2022-04-07 13:03:53 -06:00
2022-11-23 02:38:56 -07:00
def gen_edit ( item ) :
2022-04-07 13:03:53 -06:00
def x ( ) :
2022-11-23 02:38:56 -07:00
t_s = time . time ( )
2022-10-08 11:23:51 -06:00
dest = self . conversation_dropdown . context_dest
2022-04-07 13:03:53 -06:00
try :
2024-05-31 15:35:42 -06:00
cd = self . app . sideband . _db_conversation ( dest )
2023-09-20 17:59:06 -06:00
disp_name = self . app . sideband . raw_display_name ( dest )
2024-05-31 15:35:42 -06:00
is_trusted = self . app . sideband . is_trusted ( dest , conv_data = cd )
is_object = self . app . sideband . is_object ( dest , conv_data = cd )
2024-08-30 13:17:22 -06:00
ptt_enabled = self . app . sideband . ptt_enabled ( dest , conv_data = cd )
2024-05-31 15:35:42 -06:00
send_telemetry = self . app . sideband . should_send_telemetry ( dest , conv_data = cd )
allow_requests = self . app . sideband . requests_allowed_from ( dest , conv_data = cd )
2022-04-07 13:03:53 -06:00
2022-10-13 14:12:39 -06:00
yes_button = MDRectangleFlatButton ( text = " Save " , font_size = dp ( 18 ) , theme_text_color = " Custom " , line_color = self . app . color_accept , text_color = self . app . color_accept )
no_button = MDRectangleFlatButton ( text = " Cancel " , font_size = dp ( 18 ) )
2024-05-31 15:35:42 -06:00
dialog_content = ConvSettings ( disp_name = disp_name , context_dest = RNS . hexrep ( dest , delimit = False ) , trusted = is_trusted ,
2024-08-30 13:17:22 -06:00
telemetry = send_telemetry , allow_requests = allow_requests , is_object = is_object , ptt_enabled = ptt_enabled )
2024-06-01 07:07:38 -06:00
dialog_content . ids . name_field . font_name = self . app . input_font
2024-01-05 10:05:34 -07:00
2022-04-07 13:03:53 -06:00
dialog = MDDialog (
2022-10-08 16:09:26 -06:00
title = " Edit Conversation " ,
text = " With " + RNS . prettyhexrep ( dest ) ,
2022-04-07 13:03:53 -06:00
type = " custom " ,
content_cls = dialog_content ,
buttons = [ yes_button , no_button ] ,
2022-10-02 16:56:39 -06:00
# elevation=0,
2022-04-07 13:03:53 -06:00
)
dialog . d_content = dialog_content
def dl_yes ( s ) :
try :
name = dialog . d_content . ids [ " name_field " ] . text
trusted = dialog . d_content . ids [ " trusted_switch " ] . active
2023-10-19 18:41:05 -06:00
telemetry = dialog . d_content . ids [ " telemetry_switch " ] . active
2023-10-29 09:01:28 -06:00
allow_requests = dialog . d_content . ids [ " allow_requests_switch " ] . active
2024-05-31 15:35:42 -06:00
conv_is_object = dialog . d_content . ids [ " is_object_switch " ] . active
2024-08-30 13:17:22 -06:00
ptt_is_enabled = dialog . d_content . ids [ " ptt_enabled_switch " ] . active
2022-04-07 13:03:53 -06:00
if trusted :
self . app . sideband . trusted_conversation ( dest )
else :
self . app . sideband . untrusted_conversation ( dest )
2023-10-19 18:41:05 -06:00
if telemetry :
self . app . sideband . send_telemetry_in_conversation ( dest )
else :
self . app . sideband . no_telemetry_in_conversation ( dest )
2023-10-29 09:01:28 -06:00
if allow_requests :
self . app . sideband . allow_requests_from ( dest )
else :
self . app . sideband . disallow_requests_from ( dest )
2024-05-31 15:35:42 -06:00
if conv_is_object :
self . app . sideband . conversation_set_object ( dest , True )
else :
self . app . sideband . conversation_set_object ( dest , False )
2024-08-30 13:17:22 -06:00
if ptt_is_enabled :
RNS . log ( " Setting PTT enabled " )
self . app . sideband . conversation_set_ptt_enabled ( dest , True )
else :
RNS . log ( " Setting PTT disabled " )
self . app . sideband . conversation_set_ptt_enabled ( dest , False )
2022-04-07 13:03:53 -06:00
self . app . sideband . named_conversation ( name , dest )
except Exception as e :
RNS . log ( " Error while saving conversation settings: " + str ( e ) , RNS . LOG_ERROR )
dialog . dismiss ( )
2022-10-08 16:09:26 -06:00
def cb ( dt ) :
2022-11-23 02:38:56 -07:00
self . update ( )
2022-10-08 16:09:26 -06:00
Clock . schedule_once ( cb , 0.2 )
2022-04-07 13:03:53 -06:00
def dl_no ( s ) :
dialog . dismiss ( )
yes_button . bind ( on_release = dl_yes )
no_button . bind ( on_release = dl_no )
item . dmenu . dismiss ( )
dialog . open ( )
2023-10-19 18:41:05 -06:00
RNS . log ( " Generated edit dialog in " + str ( RNS . prettytime ( time . time ( ) - t_s ) ) , RNS . LOG_DEBUG )
2022-11-23 02:38:56 -07:00
2022-04-07 13:03:53 -06:00
except Exception as e :
RNS . log ( " Error while creating conversation settings: " + str ( e ) , RNS . LOG_ERROR )
return x
2022-11-23 02:38:56 -07:00
def gen_clear ( item ) :
2022-04-07 13:03:53 -06:00
def x ( ) :
2022-11-23 02:38:56 -07:00
if self . clear_dialog == None :
yes_button = MDRectangleFlatButton ( text = " Yes " , font_size = dp ( 18 ) , theme_text_color = " Custom " , line_color = self . app . color_reject , text_color = self . app . color_reject )
no_button = MDRectangleFlatButton ( text = " No " , font_size = dp ( 18 ) )
self . clear_dialog = MDDialog (
title = " Clear all messages in conversation? " ,
buttons = [ yes_button , no_button ] ,
# elevation=0,
)
def dl_yes ( s ) :
self . clear_dialog . dismiss ( )
self . app . sideband . clear_conversation ( self . conversation_dropdown . context_dest )
def dl_no ( s ) :
self . clear_dialog . dismiss ( )
yes_button . bind ( on_release = dl_yes )
no_button . bind ( on_release = dl_no )
2022-04-07 13:03:53 -06:00
item . dmenu . dismiss ( )
2022-11-23 02:38:56 -07:00
self . clear_dialog . open ( )
2022-04-07 13:03:53 -06:00
return x
2023-10-20 17:02:43 -06:00
def gen_clear_telemetry ( item ) :
def x ( ) :
if self . clear_telemetry_dialog == None :
yes_button = MDRectangleFlatButton ( text = " Yes " , font_size = dp ( 18 ) , theme_text_color = " Custom " , line_color = self . app . color_reject , text_color = self . app . color_reject )
no_button = MDRectangleFlatButton ( text = " No " , font_size = dp ( 18 ) )
self . clear_telemetry_dialog = MDDialog (
title = " Clear all telemetry related to this peer? " ,
buttons = [ yes_button , no_button ] ,
# elevation=0,
)
def dl_yes ( s ) :
self . clear_telemetry_dialog . dismiss ( )
self . app . sideband . clear_telemetry ( self . conversation_dropdown . context_dest )
def dl_no ( s ) :
self . clear_telemetry_dialog . dismiss ( )
yes_button . bind ( on_release = dl_yes )
no_button . bind ( on_release = dl_no )
item . dmenu . dismiss ( )
self . clear_telemetry_dialog . open ( )
return x
2022-11-23 02:38:56 -07:00
def gen_del ( item ) :
2022-04-07 13:03:53 -06:00
def x ( ) :
2022-11-23 02:38:56 -07:00
if self . delete_dialog == None :
yes_button = MDRectangleFlatButton ( text = " Yes " , font_size = dp ( 18 ) , theme_text_color = " Custom " , line_color = self . app . color_reject , text_color = self . app . color_reject )
no_button = MDRectangleFlatButton ( text = " No " , font_size = dp ( 18 ) )
self . delete_dialog = MDDialog (
title = " Delete conversation? " ,
buttons = [ yes_button , no_button ] ,
# elevation=0,
)
def dl_yes ( s ) :
self . delete_dialog . dismiss ( )
self . app . sideband . delete_conversation ( self . conversation_dropdown . context_dest )
def cb ( dt ) :
self . update ( )
Clock . schedule_once ( cb , 0.2 )
def dl_no ( s ) :
self . delete_dialog . dismiss ( )
yes_button . bind ( on_release = dl_yes )
no_button . bind ( on_release = dl_no )
2022-04-07 13:03:53 -06:00
item . dmenu . dismiss ( )
2022-11-23 02:38:56 -07:00
self . delete_dialog . open ( )
2022-04-07 13:03:53 -06:00
return x
2024-05-31 15:35:42 -06:00
# def gen_move_to(item):
# def x():
# item.dmenu.dismiss()
# self.app.sideband.conversation_set_object(self.conversation_dropdown.context_dest, not self.app.sideband.is_object(self.conversation_dropdown.context_dest))
# self.app.conversations_view.update()
# return x
2022-11-23 02:38:56 -07:00
def gen_copy_addr ( item ) :
2022-10-09 06:39:56 -06:00
def x ( ) :
2022-11-23 02:38:56 -07:00
Clipboard . copy ( RNS . hexrep ( self . conversation_dropdown . context_dest , delimit = False ) )
2022-10-09 06:39:56 -06:00
item . dmenu . dismiss ( )
return x
2023-07-09 18:49:58 -06:00
item . iconr = IconRightWidget ( icon = " dots-vertical " ) ;
2022-10-08 11:23:51 -06:00
if self . conversation_dropdown == None :
2024-05-31 15:35:42 -06:00
obj_str = " conversations " if is_object else " objects "
2022-10-08 11:23:51 -06:00
dmi_h = 40
dm_items = [
{
" viewclass " : " OneLineListItem " ,
" text " : " Edit " ,
" height " : dp ( dmi_h ) ,
2022-11-23 02:38:56 -07:00
" on_release " : gen_edit ( item )
2022-10-08 11:23:51 -06:00
} ,
2022-10-09 06:39:56 -06:00
{
" text " : " Copy Address " ,
" viewclass " : " OneLineListItem " ,
" height " : dp ( dmi_h ) ,
2022-11-23 02:38:56 -07:00
" on_release " : gen_copy_addr ( item )
2022-10-09 06:39:56 -06:00
} ,
2024-05-31 15:35:42 -06:00
# {
# "text": "Move to objects",
# "viewclass": "OneLineListItem",
# "height": dp(dmi_h),
# "on_release": gen_move_to(item)
# },
2022-10-08 11:23:51 -06:00
{
" text " : " Clear Messages " ,
" viewclass " : " OneLineListItem " ,
" height " : dp ( dmi_h ) ,
2022-11-23 02:38:56 -07:00
" on_release " : gen_clear ( item )
2022-10-08 11:23:51 -06:00
} ,
2023-10-20 17:02:43 -06:00
{
" text " : " Clear Telemetry " ,
" viewclass " : " OneLineListItem " ,
" height " : dp ( dmi_h ) ,
" on_release " : gen_clear_telemetry ( item )
} ,
2022-10-08 11:23:51 -06:00
{
" text " : " Delete Conversation " ,
" viewclass " : " OneLineListItem " ,
" height " : dp ( dmi_h ) ,
2022-11-23 02:38:56 -07:00
" on_release " : gen_del ( item )
2022-10-08 11:23:51 -06:00
}
]
self . conversation_dropdown = MDDropdownMenu (
2023-07-09 18:49:58 -06:00
caller = item . iconr ,
2022-10-08 11:23:51 -06:00
items = dm_items ,
position = " auto " ,
2023-07-10 11:20:24 -06:00
width = dp ( 256 ) ,
elevation = 0 ,
radius = dp ( 3 ) ,
2022-10-08 11:23:51 -06:00
)
2022-10-18 11:17:55 -06:00
self . conversation_dropdown . effect_cls = ScrollEffect
2024-03-10 18:21:54 -06:00
self . conversation_dropdown . md_bg_color = self . app . color_hover
2022-04-07 13:03:53 -06:00
2022-10-08 11:23:51 -06:00
item . dmenu = self . conversation_dropdown
def callback_factory ( ref , dest ) :
2022-04-07 13:03:53 -06:00
def x ( sender ) :
2022-10-08 11:23:51 -06:00
self . conversation_dropdown . context_dest = dest
ref . dmenu . caller = ref . iconr
2022-04-07 13:03:53 -06:00
ref . dmenu . open ( )
return x
2022-10-08 11:23:51 -06:00
item . iconr . bind ( on_release = callback_factory ( item , context_dest ) )
2022-04-07 13:03:53 -06:00
item . add_widget ( item . iconr )
2023-10-19 19:02:14 -06:00
2024-05-31 15:35:42 -06:00
item . trusted = self . app . sideband . is_trusted ( context_dest , conv_data = existing_conv )
2022-04-07 13:03:53 -06:00
self . added_item_dests . append ( context_dest )
self . list . add_widget ( item )
2022-11-23 02:38:56 -07:00
else :
for w in self . list . children :
if w . sb_uid == context_dest :
2023-10-30 09:55:55 -06:00
trust_icon = self . trust_icon ( conv )
trusted = conv [ " trust " ] == 1
da = self . app . sideband . DEFAULT_APPEARANCE
appearance = self . app . sideband . peer_appearance ( context_dest , conv )
if trusted and self . app . sideband . config [ " display_style_in_contact_list " ] and appearance != None and appearance != da :
fg = appearance [ 1 ] or da [ 1 ] ; bg = appearance [ 2 ] or da [ 2 ]
ti_color = " Custom "
else :
ti_color = None
2023-09-20 13:41:26 -06:00
w . last_activity = last_activity
2023-10-30 09:55:55 -06:00
if ti_color != None :
w . iconl . theme_icon_color = ti_color
if bg != None : w . iconl . md_bg_color = bg
if fg != None : w . iconl . icon_color = fg
else :
w . iconl . theme_icon_color = " Primary "
w . iconl . md_bg_color = [ 0 , 0 , 0 , 0 ]
if w . iconl . icon != trust_icon : w . iconl . icon = trust_icon
if w . sb_unread != unread : w . sb_unread = unread
2024-01-05 10:05:34 -07:00
if w . text != peer_disp_name : w . text = peer_disp_name
2022-11-23 02:38:56 -07:00
2023-10-19 19:02:14 -06:00
self . list . children . sort ( key = lambda w : ( w . trusted , w . last_activity ) )
2023-09-20 13:41:26 -06:00
2022-10-07 09:22:03 -06:00
RNS . log ( " Updated conversation list widgets in " + RNS . prettytime ( time . time ( ) - us ) , RNS . LOG_DEBUG )
2022-04-07 13:03:53 -06:00
def get_widget ( self ) :
2023-10-22 06:01:31 -06:00
return self . list
conv_screen_kv = """
MDScreen :
name : " conversations_screen "
BoxLayout :
orientation : " vertical "
MDTopAppBar :
title : " Conversations "
2024-05-31 15:35:42 -06:00
id : conversations_bar
2023-10-22 06:01:31 -06:00
anchor_title : " left "
elevation : 0
left_action_items :
[
2023-10-22 07:49:00 -06:00
[ ' menu ' , lambda x : root . app . nav_drawer . set_state ( " open " ) ] ,
2023-10-22 06:01:31 -06:00
]
right_action_items :
[
2023-10-22 09:14:32 -06:00
[ ' access-point ' , lambda x : root . app . announce_now_action ( self ) ] ,
[ ' webhook ' , lambda x : root . app . connectivity_status ( self ) ] ,
[ ' qrcode ' , lambda x : root . app . ingest_lxm_action ( self ) ] ,
[ ' email-sync ' , lambda x : root . app . lxmf_sync_action ( self ) ] ,
[ ' account-plus ' , lambda x : root . app . new_conversation_action ( self ) ] ,
2023-10-22 06:01:31 -06:00
]
ScrollView :
id : conversations_scrollview
"""
Builder . load_string ( """
< NewConv >
orientation : " vertical "
spacing : " 24dp "
size_hint_y : None
height : dp ( 250 )
MDTextField :
id : n_address_field
max_text_length : 32
hint_text : " Address "
helper_text : " Error, check your input "
helper_text_mode : " on_error "
text : " "
font_size : dp ( 24 )
MDTextField :
id : n_name_field
hint_text : " Name "
text : " "
font_size : dp ( 24 )
MDBoxLayout :
orientation : " horizontal "
size_hint_y : None
padding : [ 0 , 0 , dp ( 8 ) , dp ( 24 ) ]
height : dp ( 48 )
MDLabel :
id : " trusted_switch_label "
text : " Trusted "
font_style : " H6 "
MDSwitch :
id : n_trusted
pos_hint : { " center_y " : 0.3 }
active : False
< ConvSettings >
orientation : " vertical "
spacing : " 16dp "
size_hint_y : None
padding : [ 0 , 0 , 0 , dp ( 8 ) ]
height : self . minimum_height
MDTextField :
id : dest_field
hint_text : " Address "
text : root . context_dest
# disabled: True
font_size : dp ( 18 )
MDTextField :
id : name_field
hint_text : " Name "
text : root . disp_name
font_size : dp ( 18 )
MDBoxLayout :
orientation : " horizontal "
size_hint_y : None
padding : [ 0 , 0 , dp ( 8 ) , 0 ]
2023-10-29 09:01:28 -06:00
height : dp ( 32 )
2023-10-22 06:01:31 -06:00
MDLabel :
id : trusted_switch_label
text : " Trusted "
font_style : " H6 "
MDSwitch :
id : trusted_switch
pos_hint : { " center_y " : 0.43 }
active : root . trusted
MDBoxLayout :
orientation : " horizontal "
size_hint_y : None
padding : [ 0 , 0 , dp ( 8 ) , 0 ]
2023-10-29 09:01:28 -06:00
height : dp ( 32 )
2023-10-22 06:01:31 -06:00
MDLabel :
id : telemetry_switch_label
2023-10-30 06:45:58 -06:00
text : " Send Telemetry "
2023-10-22 06:01:31 -06:00
font_style : " H6 "
MDSwitch :
id : telemetry_switch
pos_hint : { " center_y " : 0.43 }
active : root . telemetry
2023-10-29 09:01:28 -06:00
MDBoxLayout :
orientation : " horizontal "
size_hint_y : None
padding : [ 0 , 0 , dp ( 8 ) , 0 ]
height : dp ( 32 )
MDLabel :
id : allow_requests_label
text : " Allow Requests "
font_style : " H6 "
MDSwitch :
id : allow_requests_switch
pos_hint : { " center_y " : 0.43 }
active : root . allow_requests
2024-08-30 13:17:22 -06:00
MDBoxLayout :
orientation : " horizontal "
size_hint_y : None
padding : [ 0 , 0 , dp ( 8 ) , 0 ]
height : dp ( 32 )
MDLabel :
id : ptt_enabled_label
text : " PTT Enabled "
font_style : " H6 "
MDSwitch :
id : ptt_enabled_switch
pos_hint : { " center_y " : 0.43 }
active : root . ptt_enabled
2024-05-31 15:35:42 -06:00
MDBoxLayout :
orientation : " horizontal "
size_hint_y : None
padding : [ 0 , 0 , dp ( 8 ) , 0 ]
height : dp ( 32 )
MDLabel :
id : is_object_label
text : " Is Object "
font_style : " H6 "
MDSwitch :
id : is_object_switch
pos_hint : { " center_y " : 0.43 }
active : root . is_object
2023-10-22 06:01:31 -06:00
< MsgSync >
orientation : " vertical "
spacing : " 24dp "
size_hint_y : None
padding : [ 0 , 0 , 0 , dp ( 16 ) ]
height : self . minimum_height + dp ( 24 )
MDProgressBar :
id : sync_progress
2023-10-27 12:28:33 -06:00
type : " determinate "
2023-10-22 06:01:31 -06:00
value : 0
MDLabel :
id : sync_status
hint_text : " Name "
text : " Initiating sync... "
""" )