diff --git a/komrade/app/assets/avatars/Operator.png b/komrade/app/assets/avatars/Operator.png new file mode 100644 index 0000000..d45fecc Binary files /dev/null and b/komrade/app/assets/avatars/Operator.png differ diff --git a/komrade/app/main.py b/komrade/app/main.py index 07e5190..56b1720 100644 --- a/komrade/app/main.py +++ b/komrade/app/main.py @@ -128,11 +128,11 @@ class MessagePopup(MDDialog2): pass class MessagePopupCard(MDDialog2): def __init__(self,*x,**y): - # y['color_bg']=rgb(*COLOR_CARD) + y['color_bg']=rgb(*COLOR_BG) y['type']='custom' - y['overlay_color']=(0,0,0,0) + y['overlay_color']=rgb(*COLOR_BG) + self.color_bg=rgb(*COLOR_BG) super().__init__(*x,**y) - # self.color_bg=rgb(*COLOR_CARD) self.ok_to_continue=False def on_dismiss(self): @@ -491,6 +491,41 @@ class MainApp(MDApp, Logger): if not userd: return self.username = userd.get('username','') + + + + + def clear_widget_tree(self,widget_type,widget=None): + if not widget: widget=self.root + for widg in widget.children: + if hasattr(widg,'children') and widg.children: + self.clear_widget_tree(widget_type,widget=widg) + + self.log(widg,type(widg),widget_type,issubclass(type(widg),widget_type)) + if issubclass(type(widg),widget_type): + self.remove_widget(widg) + + + + + + + + + + + + + + + + + + + + + + @@ -658,6 +693,7 @@ class MainApp(MDApp, Logger): self.msg_dialog = MessagePopupCard() + # self.root.add_widget(self.msg_dialog) # self.msg_dialog.ids.msg_label.text=msg self.msg_dialog.card = postcard = PostCardPopup({ @@ -687,8 +723,10 @@ class MainApp(MDApp, Logger): await asyncio.sleep(0.1) # logger.info(str(postcard), postcard.ok_to_continue,'??') # self.msg_dialog.dismiss() - # self.msg_dialog.remove_widget(postcard) - # self.msg_dialog.card = postcard = self.msg_dialog = None + self.msg_dialog.remove_widget(postcard) + # self.root.remove_widget(self.msg_dialog) + # self.root.clear_widgets() + self.msg_dialog.card = postcard = self.msg_dialog = None await asyncio.sleep(0.1) return {'success':True, 'status':'Delivered popup message'} @@ -708,6 +746,7 @@ class MainApp(MDApp, Logger): if hasattr(self,'msg_dialog'): self.msg_dialog.remove_widget(self.msg_dialog.card) self.msg_dialog.dismiss() + self.remove_widget(self.msg_dialog) diff --git a/komrade/app/root.kv b/komrade/app/root.kv index 2ac300d..b49a87b 100644 --- a/komrade/app/root.kv +++ b/komrade/app/root.kv @@ -107,14 +107,14 @@ type: "custom" size_hint: None,None size: ('300dp','300dp') - # md_bg_color: rgb(*COLOR_CARD) + md_bg_color: rgb(*COLOR_BG) MDBoxLayout: id: msg_popup_box_layout size_hint:(1,1) orientation: 'vertical' cols:1 - md_bg_color: rgb(*COLOR_CARD) + md_bg_color: rgb(*COLOR_BG) spacing:'0dp' padding:'0dp' pos_hint: {'center_x':0.5, 'center_y':0.5} @@ -123,7 +123,7 @@ border_radius:20 canvas: Color: - rgba: rgb(*COLOR_CARD_BORDER,a=0.5) + rgba: rgb(*COLOR_BG,a=1) Line: width: 1 rounded_rectangle: (self.x, self.y, self.width, self.height, 20, 20, 20, 20) diff --git a/komrade/app/screens/dialog.py b/komrade/app/screens/dialog.py index c938ee1..2b72232 100644 --- a/komrade/app/screens/dialog.py +++ b/komrade/app/screens/dialog.py @@ -100,8 +100,15 @@ Builder.load_string( origin: self.center x: root._scale_x y: root._scale_y + Color: + rgba: root.color_bg #root.theme_cls.bg_dark + canvas: + Color: + rgba: root.color_bg #root.theme_cls.bg_dark canvas.after: PopMatrix + Color: + rgba: root.color_bg #root.theme_cls.bg_dark diff --git a/komrade/app/screens/feed/feed.py b/komrade/app/screens/feed/feed.py index 45c999e..9225465 100644 --- a/komrade/app/screens/feed/feed.py +++ b/komrade/app/screens/feed/feed.py @@ -208,7 +208,7 @@ class PostCard(MDCard): #log('img_src ' + str(bool(self.img_src))) if self.img_src: self.add_widget(image_layout) - def estimate_height(minlen=100,maxlen=300): + def estimate_height(minlen=100,maxlen=600): num_chars = len(self.content) # num_lines = num_chars height = num_chars*1.1 diff --git a/komrade/app/screens/login/login.py b/komrade/app/screens/login/login.py index bef20e6..31754e2 100644 --- a/komrade/app/screens/login/login.py +++ b/komrade/app/screens/login/login.py @@ -256,6 +256,9 @@ class LoginScreen(BaseScreen): await logfunc(f'Welcome, Komrade @{name}. To help us communicate safely, I have cut for you a matching pair of encryption keys.',pause=True,clear=True,komrade_name='Keymaker') + self.app.clear_widget_tree(MDDialog) + self.app.clear_widget_tree(MDDialog2) + # ## 2) Make pub public/private keys from komrade.backend.keymaker import KomradeAsymmetricKey from komrade.cli.artcode import ART_KEY_PAIR @@ -310,8 +313,7 @@ class LoginScreen(BaseScreen): kommie._keychain['privkey_encr']=privkey_encr_obj self.log('My keychain now looks like v2:',dict_format(kommie.keychain())) - await logfunc(f'With this scrambled password we can encrypt your super-sensitive private key, from this:\n{privkey.discreet}',pause=True,clear=False) - await logfunc(f'To this:\n{privkey_encr_obj.discreet}',pause=True,clear=False) + await logfunc(f'With this scrambled password we can encrypt your super-sensitive private key, from this:\n{privkey.discreet}to this:\n{privkey_encr_obj.discreet}',pause=True,clear=False) # ### PUBLIC KEY await logfunc('You must also register your username and public key with Komrade @Operator on the remote server',pause=False,clear=False) @@ -352,10 +354,9 @@ class LoginScreen(BaseScreen): sec_login = resp_msg_d.get('secret_login') # stop - await logfunc(f'''Saving keys to device:''',pause=True) - await logfunc(f'''(1) {pubkey}''',pause=True,use_prefix=False) - await logfunc(f'''(2) {privkey_encr_obj}''',pause=True,use_prefix=False) - await logfunc(f'''(3) [Shared Login Secret with @Operator]\n({make_key_discreet(sec_login)})''',pause=True,use_prefix=False) + # await logfunc(f'''Saving keys to device:\n(1) {pubkey}\n(2) {privkey_encr_obj}\n(3) [Shared Login Secret with @Operator]\n({make_key_discreet(sec_login)}''',pause=True) + # await logfunc(f'''Saving keys to device''',pause=True) + # print() kommie.crypt_keys.set(name, pubkey_b, prefix='/pubkey/') kommie.crypt_keys.set(uri_id, name, prefix='/name/') @@ -369,11 +370,15 @@ class LoginScreen(BaseScreen): # save qr too: _fnfn=kommie.save_uri_as_qrcode(uri_id) - await logfunc(f'Also saving public key as QR code to: {_fnfn}.',pause=True,clear=False,use_prefix=False) + await logfunc(f'Saving public key, encrypted private key, and login secret to hardware-only database. Also saving public key as QR code to: {_fnfn}.',pause=True,clear=False,use_prefix=False) # done! await logfunc(f'Congratulations. Welcome, {kommie}.',pause=True,clear=True) + # remove all dialogs!!!!!!!! + self.app.clear_widget_tree(MDDialog) + self.app.clear_widget_tree(MDDialog2) + # last minute: get posts if 'res_posts' in resp_msg_d and resp_msg_d['res_posts'].get('success'): id2post=resp_msg_d.get('res_posts').get('posts',{}) diff --git a/komrade/backend/the_operator.py b/komrade/backend/the_operator.py index f1c3e3f..066f352 100644 --- a/komrade/backend/the_operator.py +++ b/komrade/backend/the_operator.py @@ -280,7 +280,7 @@ class TheOperator(Operator): 'pubkey':pubkey_b, 'secret_login':shared_secret, 'name':name, - 'status':f'Name @{name} was successfully registered.\n\nIt has been permanently linked to the following public key:\n\n{uri_id.decode()}', + 'status':f'Name @{name} was successfully registered.\nIt has been permanently linked to the following public key:\n{uri_id.decode()}', 'res_posts':self.get_posts(msg_obj) } # res_safe = {