From 3457c0d84b3e42c964a33ee5f44c68b06487ab78 Mon Sep 17 00:00:00 2001
From: Mohammad Osama Khan <mohammad.o@cisinlabs.com>
Date: Thu, 20 Oct 2022 21:50:43 +0530
Subject: [PATCH] Added filemanager and image reset icon

---
 src/bitmessagekivy/main.kv           |  12 +++-
 src/bitmessagekivy/mpybit.py         |  98 ++++++++++++++++++++++++++-
 src/bitmessagekivy/screens_data.json |   4 ++
 src/images/kivy/drawer_logo1.png     | Bin 0 -> 5930 bytes
 4 files changed, 109 insertions(+), 5 deletions(-)
 create mode 100644 src/images/kivy/drawer_logo1.png

diff --git a/src/bitmessagekivy/main.kv b/src/bitmessagekivy/main.kv
index 86dc5936..d55b5f9c 100644
--- a/src/bitmessagekivy/main.kv
+++ b/src/bitmessagekivy/main.kv
@@ -69,8 +69,8 @@
                 on_release: app.rest_default_avatar_img()
                 theme_text_color: "Custom"
                 text_color: app.theme_cls.primary_color
-                opacity: 0
-                disabled: True
+                opacity: 1 if app.have_any_address() else 0
+                disabled: False if app.have_any_address() else True
 
             MDIconButton:
                 id: file_manager
@@ -81,6 +81,9 @@
                 on_release: app.file_manager_open()
                 theme_text_color: "Custom"
                 text_color: app.theme_cls.primary_color
+                opacity: 1 if app.have_any_address() else 0
+                disabled: False if app.have_any_address() else True
+
             BoxLayout:
                 id: top_box
                 size_hint_y: None
@@ -113,9 +116,11 @@
                         text: 'Select Address'
                         option_cls: Factory.get("MySpinnerOption")
                         font_size: '12.5sp'
+                        text: app.getDefaultAccData(self)
                         color: color_font
                         background_normal: ''
                         background_color: app.theme_cls.primary_color
+                        on_text: app.getCurrentAccountData(self.text)
                         ArrowImg:
                 NavigationItem:
                     id: inbox_cnt
@@ -201,6 +206,9 @@ MDNavigationLayout:
 
     MDTopAppBar:
         id: toolbar
+        title: app.format_address_and_label()
+        opacity: 1 if app.have_any_address() else 0
+        disabled: False if app.have_any_address() else True
         pos_hint: {"top": 1}
         md_bg_color: app.theme_cls.primary_color
         elevation: 10
diff --git a/src/bitmessagekivy/mpybit.py b/src/bitmessagekivy/mpybit.py
index 078da423..e02f3326 100644
--- a/src/bitmessagekivy/mpybit.py
+++ b/src/bitmessagekivy/mpybit.py
@@ -39,8 +39,9 @@ from pybitmessage.bitmessagekivy.get_platform import platform
 from pybitmessage.bitmessagekivy.baseclass.common import toast, load_image_path, get_identity_list
 from pybitmessage.bitmessagekivy.load_kivy_screens_data import load_screen_json
 
-from pybitmessage.bitmessagekivy.baseclass.popup import AddAddressPopup
+from pybitmessage.bitmessagekivy.baseclass.popup import AddAddressPopup, AddressChangingLoader
 from pybitmessage.bitmessagekivy.baseclass.login import *  # noqa: F401, F403
+from pybitmessage.bitmessagekivy.uikivysignaler import UIkivySignaler
 
 from pybitmessage.mock.helper_startup import loadConfig
 
@@ -121,6 +122,9 @@ class NavigateApp(MDApp):
     def run(self):
         """Running the widgets"""
         loadConfig()
+        kivysignalthread = UIkivySignaler()
+        kivysignalthread.daemon = True
+        kivysignalthread.start()
         self.kivy_state_obj.kivyui_ready.set()
         super(NavigateApp, self).run()
 
@@ -191,7 +195,10 @@ class NavigateApp(MDApp):
 
     def load_screen(self, instance):
         """This method is used for loading screen on every click"""
-        if instance.text == 'Trash':
+        if instance.text == 'Inbox':
+            self.root.ids.scr_mngr.current = 'inbox'
+            self.root.ids.id_inbox.children[1].active = True
+        elif instance.text == 'Trash':
             self.root.ids.scr_mngr.current = 'trash'
             try:
                 self.root.ids.id_trash.children[1].active = True
@@ -201,7 +208,11 @@ class NavigateApp(MDApp):
 
     def load_screen_callback(self, instance, dt=0):
         """This method is rotating loader for few seconds"""
-        if instance.text == 'Trash':
+        if instance.text == 'Inbox':
+            self.root.ids.id_inbox.ids.ml.clear_widgets()
+            self.root.ids.id_inbox.loadMessagelist(self.kivy_state_obj.selected_address)
+            self.root.ids.id_inbox.children[1].active = False
+        elif instance.text == 'Trash':
             self.root.ids.id_trash.clear_widgets()
             self.root.ids.id_trash.add_widget(self.data_screen_dict['Trash'].Trash())
             try:
@@ -209,6 +220,80 @@ class NavigateApp(MDApp):
             except Exception as e:
                 self.root.ids.id_trash.children[0].children[1].active = False
 
+    @staticmethod
+    def get_enabled_addresses():
+        """Getting list of all the enabled addresses"""
+        addresses = [addr for addr in config.addresses()
+                     if config.getboolean(str(addr), 'enabled')]
+        return addresses
+
+    @staticmethod
+    def format_address(address):
+        """Formatting address"""
+        return " ({0})".format(address)
+
+    @staticmethod
+    def format_label(label):
+        """Formatting label"""
+        if label:
+            f_name = label.split()
+            truncate_string = '...'
+            f_name_max_length = 15
+            formatted_label = f_name[0][:14].capitalize() + truncate_string if len(
+                f_name[0]) > f_name_max_length else f_name[0].capitalize()
+            return formatted_label
+        return ''
+
+    @staticmethod
+    def format_address_and_label(address=None):
+        """Getting formatted address information"""
+        if not address:
+            try:
+                address = NavigateApp.get_enabled_addresses()[0]
+            except IndexError:
+                return ''
+        return "{0}{1}".format(
+            NavigateApp.format_label(config.get(address, "label")),
+            NavigateApp.format_address(address)
+        )
+
+    def getDefaultAccData(self, instance):
+        """Getting Default Account Data"""
+        if self.identity_list:
+            self.kivy_state_obj.selected_address = first_addr = self.identity_list[0]
+            return first_addr
+        return 'Select Address'
+
+    def getCurrentAccountData(self, text):
+        """Get Current Address Account Data"""
+        if text != '':
+            if os.path.exists(os.path.join(
+                    self.image_dir, 'default_identicon', '{}.png'.format(text))
+            ):
+                self.load_selected_Image(text)
+            else:
+                self.set_identicon(text)
+                self.root.ids.content_drawer.ids.reset_image.opacity = 0
+                self.root.ids.content_drawer.ids.reset_image.disabled = True
+            address_label = self.format_address_and_label(text)
+            self.root_window.children[1].ids.toolbar.title = address_label
+            self.kivy_state_obj.selected_address = text
+            AddressChangingLoader().open()
+            for nav_obj in self.root.ids.content_drawer.children[
+                    0].children[0].children[0].children:
+                nav_obj.active = True if nav_obj.text == 'Inbox' else False
+            self.fileManagerSetting()
+            Clock.schedule_once(self.setCurrentAccountData, 0.5)
+
+    def setCurrentAccountData(self, dt=0):
+        """This method set the current accout data on all the screens"""
+        self.root.ids.id_inbox.ids.ml.clear_widgets()
+        self.root.ids.id_inbox.loadMessagelist(self.kivy_state_obj.selected_address)
+
+        self.root.ids.id_sent.ids.ml.clear_widgets()
+        self.root.ids.id_sent.children[2].children[2].ids.search_field.text = ''
+        self.root.ids.id_sent.loadSent(self.kivy_state_obj.selected_address)
+
     def fileManagerSetting(self):
         """This method is for file manager setting"""
         if not self.root.ids.content_drawer.ids.file_manager.opacity and \
@@ -317,6 +402,13 @@ class NavigateApp(MDApp):
                     return
         return os.path.join(self.image_dir, 'drawer_logo1.png')
 
+    @staticmethod
+    def have_any_address():
+        """Checking existance of any address"""
+        if config.addresses():
+            return True
+        return False
+
     def reset_login_screen(self):
         """This method is used for clearing the widgets of random screen"""
         if self.root.ids.id_newidentity.ids.add_random_bx.children:
diff --git a/src/bitmessagekivy/screens_data.json b/src/bitmessagekivy/screens_data.json
index 8d21571a..47aeb7ed 100644
--- a/src/bitmessagekivy/screens_data.json
+++ b/src/bitmessagekivy/screens_data.json
@@ -46,5 +46,9 @@
         "kv_string": "trash",
         "name_screen": "trash",
         "Import": "from pybitmessage.bitmessagekivy.baseclass.trash import Trash"
+    },
+    "Popups": {
+        "kv_string": "popup",
+        "Import": "from pybitmessage.bitmessagekivy.baseclass.popup import *"
     }
 }
diff --git a/src/images/kivy/drawer_logo1.png b/src/images/kivy/drawer_logo1.png
new file mode 100644
index 0000000000000000000000000000000000000000..256f9be6b6eaddbb35b6cec8ee026544f585d07f
GIT binary patch
literal 5930
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
CB6o5C

literal 0
HcmV?d00001