From d8a5b9356ff576e1ceecb3c7ab54411a8a32f906 Mon Sep 17 00:00:00 2001 From: surbhi Date: Thu, 9 Aug 2018 15:50:20 +0530 Subject: [PATCH] Implement sent item message loading feature for current account logged with dynamic dispatching of accounts --- src/bitmessagekivy/kivy_helper_search.py | 14 ++- src/bitmessagekivy/main.kv | 17 ++++ src/bitmessagekivy/mpybit.py | 117 ++++++++++++++++++----- 3 files changed, 120 insertions(+), 28 deletions(-) diff --git a/src/bitmessagekivy/kivy_helper_search.py b/src/bitmessagekivy/kivy_helper_search.py index c9c93685..684a1722 100644 --- a/src/bitmessagekivy/kivy_helper_search.py +++ b/src/bitmessagekivy/kivy_helper_search.py @@ -1,15 +1,19 @@ from helper_sql import * -def search_sql(xAddress = "toaddress", account = None, folder = "inbox", where = None, what = None, unreadOnly = False): +def search_sql(xAddress="toaddress", account=None, folder="inbox", where=None, what=None, unreadOnly=False): if what is not None and what != "": what = "%" + what + "%" else: what = None - sqlStatementBase = '''SELECT folder, msgid, toaddress, fromaddress, subject, received, read - FROM inbox ''' - + if folder == "sent": + sqlStatementBase = ''' + SELECT toaddress, fromaddress, subject, status, ackdata, lastactiontime + FROM sent ''' + else: + sqlStatementBase = '''SELECT folder, msgid, toaddress, fromaddress, subject, received, read + FROM inbox ''' sqlStatementParts = [] sqlArguments = [] if account is not None: @@ -38,4 +42,4 @@ def search_sql(xAddress = "toaddress", account = None, folder = "inbox", where = sqlStatementBase += "WHERE " + " AND ".join(sqlStatementParts) if folder == "sent": sqlStatementBase += " ORDER BY lastactiontime" - return sqlQuery(sqlStatementBase, sqlArguments) \ No newline at end of file + return sqlQuery(sqlStatementBase, sqlArguments) diff --git a/src/bitmessagekivy/main.kv b/src/bitmessagekivy/main.kv index b859f987..2a06c9fb 100644 --- a/src/bitmessagekivy/main.kv +++ b/src/bitmessagekivy/main.kv @@ -12,6 +12,7 @@ background_color: app.theme_cls.primary_dark text: app.showmeaddresses(name='text') values: app.showmeaddresses(name='values') + on_text:app.getCurrentAccountData(self.text) NavigationDrawerIconButton: icon: 'email-open' @@ -99,6 +100,7 @@ BoxLayout: : name: 'inbox' ScrollView: + id:scrollid GridLayout: id: box_share cols: 1 @@ -115,6 +117,21 @@ BoxLayout: : name: 'sent' + ScrollView: + id:scrollid + GridLayout: + id: box_share + cols: 1 + size_hint_y: None + spacing: 10 + padding: 10 + height: self.minimum_height + canvas: + Color: + rgb: 30,144,255 + Rectangle: + pos: self.pos + size: self.size : name: 'trash' diff --git a/src/bitmessagekivy/mpybit.py b/src/bitmessagekivy/mpybit.py index 9ee346b6..6b8c3aab 100644 --- a/src/bitmessagekivy/mpybit.py +++ b/src/bitmessagekivy/mpybit.py @@ -28,6 +28,8 @@ from addresses import decodeAddress, addBMIfNotPresent from helper_sql import sqlExecute, sqlQuery statusIconColor = 'red' avatarlist = os.listdir("images/ngletteravatar") +global belonging +belonging = '' class NavigateApp(App, TextInput): @@ -35,13 +37,21 @@ class NavigateApp(App, TextInput): nav_drawer = ObjectProperty() def build(self): + global main_widget main_widget = Builder.load_file( os.path.join(os.path.dirname(__file__), 'main.kv')) self.nav_drawer = Navigator() return main_widget - # def setCurrentAccount(self, text): - # self.ids.btn.text = text + def getCurrentAccountData(self, text): + global belonging + belonging = text + main_widget.ids.sc1.clear_widgets() + main_widget.ids.sc2.clear_widgets() + main_widget.ids.sc1.add_widget(Inbox()) + main_widget.ids.sc2.add_widget(Sent()) + Inbox() + Sent() def say_exit(self): print("**************************EXITING FROM APPLICATION*****************************") @@ -61,21 +71,24 @@ class Navigator(NavigationDrawer): class Inbox(Screen): - def __init__(self, *args, **kwargs): super(Inbox, self).__init__(*args, **kwargs) + global belonging + if belonging == '': + belonging = Navigator().ids.btn.text Clock.schedule_once(self.init_ui, 0) def init_ui(self, dt=0): + global belonging self.orientation = "vertical" - self.create_button(self.ids.box_share) + self.inboxaccounts(self.ids.box_share) - def create_button(self, box_share): - account = Navigator().ids.btn.text + def inboxaccounts(self, box_share): + account = belonging folder = 'inbox' - self.loadMessagelist(account, folder, box_share, 'All', '') + self.loadinboxlist(account, folder, box_share, 'All', '') - def loadMessagelist(self, account, folder, box_share, where="", what="", unreadOnly=False): + def loadinboxlist(self, account, folder, box_share, where="", what="", unreadOnly=False): top_logo_share = 1.01 top_button_share = 1.1 top_label_share = 1.4 @@ -89,13 +102,13 @@ class Inbox(Screen): top_button_share -= .4 top_label_share -= .4 logo_share = \ - Image(source='images/ngletteravatar/{}'.format(self.list_random(avatarlist, subject)), + Image(source='images/ngletteravatar/{}'.format(self.getletterimage(avatarlist, subject)), pos_hint={"center_x": .05, "top": top_logo_share}, size_hint_y=None, height=25) button_share = \ Button(pos_hint={"x": 0, "top": top_button_share}, size_hint_y=None, height=40, text=subject, multiline=True, background_color=NavigateApp.theme_cls.primary_dark) - button_share.bind(on_press=self.change_screen) + button_share.bind(on_press=self.getInboxMessageDetail) fl = FloatLayout(size_hint_y=None, height=25) fl.add_widget(button_share) fl.add_widget(logo_share) @@ -106,7 +119,7 @@ class Inbox(Screen): size_hint_y=None) box_share.add_widget(label_share) - def list_random(self, ran, subject): + def getletterimage(self, ran, subject): limit = 5 for x in subject[:limit]: if '{}.png'.format(x.lower()) in ran: @@ -118,8 +131,11 @@ class Inbox(Screen): return ran[0] break - def change_screen(self, instance): - self.manager.current = 'page' + def getInboxMessageDetail(self, instance): + try: + self.manager.current = 'page' + except AttributeError: + self.parent.manager.current = 'page' print('I am {}'.format(instance.text)) @@ -132,16 +148,71 @@ class AddressSuccessful(Screen): class Sent(Screen): - def __init__(self, **kwargs): - super(Sent, self).__init__(**kwargs) - val_y = .1 - val_z = 0 - my_box1 = BoxLayout(orientation='vertical') - for i in range(1, 5): - my_box1.add_widget(Label(text="I am in sent", size_hint=(.3, .1), pos_hint={ - 'x': val_z, 'top': val_y}, color=(0, 0, 0, 1), background_color=(0, 0, 0, 0))) - val_y += .1 - self.add_widget(my_box1) + def __init__(self, *args, **kwargs): + super(Sent, self).__init__(*args, **kwargs) + global belonging + if belonging == '': + belonging = Navigator().ids.btn.text + Clock.schedule_once(self.init_ui, 0) + + def init_ui(self, dt=0): + global belonging + self.orientation = "vertical" + self.sentaccounts(self.ids.box_share) + + def sentaccounts(self, box_share): + account = belonging + folder = 'inbox' + self.loadSent(account, box_share, 'All', '') + + def loadSent(self, account, box_share, where="", what=""): + top_logo_share = 1.01 + top_button_share = 1.1 + top_label_share = 1.4 + xAddress = 'fromaddress' + queryreturn = kivy_helper_search.search_sql(xAddress, account, "sent", where, what, False) + if queryreturn: + for row in queryreturn: + toAddress, fromAddress, subject, status, ackdata, lastactiontime = row + top_logo_share -= .4 + top_button_share -= .4 + top_label_share -= .4 + logo_share = \ + Image(source='images/ngletteravatar/{}'.format(self.getletterimage(avatarlist, subject)), + pos_hint={"center_x": .05, "top": top_logo_share}, + size_hint_y=None, height=25) + button_share = \ + Button(pos_hint={"x": 0, "top": top_button_share}, + size_hint_y=None, height=40, text=subject, multiline=True, background_color=NavigateApp.theme_cls.primary_dark) + button_share.bind(on_press=self.getSentMessageDetail) + fl = FloatLayout(size_hint_y=None, height=25) + fl.add_widget(button_share) + fl.add_widget(logo_share) + box_share.add_widget(fl) + else: + label_share = \ + Label(text="yet you dont have any emails received", pos_hint={"x": 0, "top": top_label_share}, + size_hint_y=None) + box_share.add_widget(label_share) + + def getletterimage(self, ran, subject): + limit = 5 + for x in subject[:limit]: + if '{}.png'.format(x.lower()) in ran: + return '{}.png'.format(x.lower()) + elif '{}.jpg'.format(x.lower()) in ran: + return '{}.jpg'.format(x.lower()) + if x == limit: + random.shuffle(ran) + return ran[0] + break + + def getSentMessageDetail(self, instance): + try: + self.manager.current = 'page' + except AttributeError: + self.parent.manager.current = 'page' + print('I am {}'.format(instance.text)) class Trash(Screen):