From 89cef2cf8c0c01151fe3d38161eb1578f1c314cd Mon Sep 17 00:00:00 2001 From: navjot Date: Thu, 22 Apr 2021 22:53:28 +0530 Subject: [PATCH] optimized CutsomSwipeToDeleteItem --- src/bitmessagekivy/baseclass/allmail.py | 37 ++++++++++++---- src/bitmessagekivy/baseclass/common.py | 12 +++++- src/bitmessagekivy/baseclass/draft.py | 8 ++-- src/bitmessagekivy/baseclass/inbox.py | 16 +++---- src/bitmessagekivy/baseclass/sent.py | 12 +++--- src/bitmessagekivy/baseclass/trash.py | 27 ++++-------- src/bitmessagekivy/kv/trash.kv | 2 +- src/bitmessagekivy/main.kv | 56 +++++++++++++++++++++++++ src/buildozer.spec | 2 +- 9 files changed, 120 insertions(+), 52 deletions(-) diff --git a/src/bitmessagekivy/baseclass/allmail.py b/src/bitmessagekivy/baseclass/allmail.py index 1c9caa59..c0623986 100644 --- a/src/bitmessagekivy/baseclass/allmail.py +++ b/src/bitmessagekivy/baseclass/allmail.py @@ -18,8 +18,8 @@ import state from bitmessagekivy.baseclass.common import ( showLimitedCnt, toast, ThemeClsColor, - chipTag, avatarImageFirstLetter, AddTimeWidget, - AvatarSampleWidget, SwipeToDeleteItem + avatarImageFirstLetter,CutsomSwipeToDeleteItem, + ShowTimeHistoy ) from bitmessagekivy.baseclass.maildetail import MailDetail from bitmessagekivy.baseclass.trash import Trash @@ -95,9 +95,10 @@ class Allmails(Screen): for item in self.all_mails: body = item[3].decode() if isinstance(item[3], bytes) else item[3] subject = item[2].decode() if isinstance(item[2], bytes) else item[2] - message_row = SwipeToDeleteItem( + message_row = CutsomSwipeToDeleteItem( text = item[1], ) + listItem = message_row.ids.content secondary_text = (subject[:50] + '........' if len( subject) >= 50 else ( @@ -105,16 +106,34 @@ class Allmails(Screen): listItem.secondary_text = secondary_text listItem.theme_text_color = "Custom" listItem.text_color = ThemeClsColor - - listItem.add_widget(AvatarSampleWidget( - source=state.imageDir + '/text_images/{}.png'.format( - avatarImageFirstLetter(body.strip())))) + img_latter = state.imageDir + '/text_images/{}.png'.format( + avatarImageFirstLetter(body.strip())) + message_row.ids.avater_img.source = img_latter listItem.bind(on_release=partial( self.mail_detail, item[5], item[4], message_row)) - listItem.add_widget(AddTimeWidget(item[7])) - listItem.add_widget(chipTag(item[4])) + message_row.ids.time_tag.text = str(ShowTimeHistoy(item[7])) + message_row.ids.chip_tag.text = item[4] + + + # listItem = message_row.ids.content + # secondary_text = (subject[:50] + '........' if len( + # subject) >= 50 else ( + # subject + ',' + body)[0:50] + '........').replace('\t', '').replace(' ', '') + # listItem.secondary_text = secondary_text + # listItem.theme_text_color = "Custom" + # listItem.text_color = ThemeClsColor + + # listItem.add_widget(AvatarSampleWidget( + # source=state.imageDir + '/text_images/{}.png'.format( + # avatarImageFirstLetter(body.strip())))) + # listItem.bind(on_release=partial( + # self.mail_detail, item[5], item[4], message_row)) + # listItem.add_widget(AddTimeWidget(item[7])) + # listItem.add_widget(chipTag(item[4])) message_row.ids.delete_msg.bind(on_press=partial( self.swipe_delete, item[5], item[4])) + + self.ids.ml.add_widget(message_row) updated_data = len(self.ids.ml.children) self.has_refreshed = True if data_exist != updated_data else False diff --git a/src/bitmessagekivy/baseclass/common.py b/src/bitmessagekivy/baseclass/common.py index 4ed3608d..abf7e0fd 100644 --- a/src/bitmessagekivy/baseclass/common.py +++ b/src/bitmessagekivy/baseclass/common.py @@ -1,5 +1,6 @@ import os from datetime import datetime +from kivy.core.window import Window from kivy.lang import Builder from kivy.metrics import dp from kivymd.uix.list import ( @@ -135,7 +136,14 @@ class TimeTagRightSampleWidget(IRightBodyTouch, MDLabel): class SwipeToDeleteItem(MDCardSwipe): text = StringProperty() - # cla = Window.size[0]/2 - cla = 800 + cla = Window.size[0]/2 + # cla = 800 swipe_distance = NumericProperty(cla) opening_time = NumericProperty(0.5) + + +class CutsomSwipeToDeleteItem(MDCardSwipe): + text = StringProperty() + cla = Window.size[0]/2 + swipe_distance = NumericProperty(cla) + opening_time = NumericProperty(0.5) \ No newline at end of file diff --git a/src/bitmessagekivy/baseclass/draft.py b/src/bitmessagekivy/baseclass/draft.py index 2059a92a..3a907d9a 100644 --- a/src/bitmessagekivy/baseclass/draft.py +++ b/src/bitmessagekivy/baseclass/draft.py @@ -21,8 +21,7 @@ import state from bitmessagekivy.baseclass.common import ( showLimitedCnt, toast, ThemeClsColor, - AddTimeWidget, AvatarSampleWidget, - SwipeToDeleteItem + SwipeToDeleteItem, ShowTimeHistoy ) from bitmessagekivy.baseclass.maildetail import MailDetail @@ -110,11 +109,10 @@ class Draft(Screen): listItem.theme_text_color = "Custom" listItem.text_color = ThemeClsColor # meny._txt_right_pad = dp(70) - listItem.add_widget(AvatarSampleWidget( - source=state.imageDir + '/avatar.png')) + message_row.ids.avater_img.source = state.imageDir + '/avatar.png' listItem.bind(on_release=partial( self.draft_detail, item['ackdata'], message_row)) - listItem.add_widget(AddTimeWidget(item['senttime'])) + message_row.ids.time_tag.text = str(ShowTimeHistoy(item['senttime'])) message_row.ids.delete_msg.bind(on_press=partial(self.delete_draft, item['ackdata'])) self.ids.ml.add_widget(message_row) updated_msg = len(self.ids.ml.children) diff --git a/src/bitmessagekivy/baseclass/inbox.py b/src/bitmessagekivy/baseclass/inbox.py index d13df949..13ff1618 100644 --- a/src/bitmessagekivy/baseclass/inbox.py +++ b/src/bitmessagekivy/baseclass/inbox.py @@ -20,8 +20,8 @@ import state from bitmessagekivy.baseclass.common import ( showLimitedCnt, avatarImageFirstLetter, - AddTimeWidget, ThemeClsColor, AvatarSampleWidget, - toast, SwipeToDeleteItem + ThemeClsColor, toast, SwipeToDeleteItem, + ShowTimeHistoy ) from bitmessagekivy.baseclass.maildetail import MailDetail from bitmessagekivy.baseclass.trash import Trash @@ -131,15 +131,11 @@ class Inbox(Screen): listItem.theme_text_color = "Custom" listItem.text_color = ThemeClsColor listItem._txt_right_pad = dp(70) - listItem.add_widget( - AvatarSampleWidget( - source=state.imageDir + "/text_images/{}.png".format( - avatarImageFirstLetter(item["secondary_text"].strip()) - ) - ) - ) + image = state.imageDir + "/text_images/{}.png".format( + avatarImageFirstLetter(item["secondary_text"].strip())) + message_row.ids.avater_img.source = image listItem.bind(on_release=partial(self.inbox_detail, item["msgid"], message_row)) - listItem.add_widget(AddTimeWidget(item["received"])) + message_row.ids.time_tag.text = str(ShowTimeHistoy(item["received"])) message_row.ids.delete_msg.bind(on_press=partial(self.delete, item["msgid"])) self.ids.ml.add_widget(message_row) update_message = len(self.ids.ml.children) diff --git a/src/bitmessagekivy/baseclass/sent.py b/src/bitmessagekivy/baseclass/sent.py index 2eb2ed05..5cb2d017 100644 --- a/src/bitmessagekivy/baseclass/sent.py +++ b/src/bitmessagekivy/baseclass/sent.py @@ -19,7 +19,8 @@ import state from bitmessagekivy.baseclass.common import ( showLimitedCnt, ThemeClsColor, avatarImageFirstLetter, - AddTimeWidget, AvatarSampleWidget, toast, SwipeToDeleteItem + AddTimeWidget, AvatarSampleWidget, toast, SwipeToDeleteItem, + ShowTimeHistoy ) from bitmessagekivy.baseclass.maildetail import MailDetail @@ -103,12 +104,11 @@ class Sent(Screen): listItem.secondary_text = item["secondary_text"] listItem.theme_text_color = "Custom" listItem.text_color = ThemeClsColor - listItem.add_widget(AvatarSampleWidget( - source=state.imageDir + '/text_images/{}.png'.format( - avatarImageFirstLetter(item['secondary_text'].strip())))) - + image = state.imageDir + '/text_images/{}.png'.format( + avatarImageFirstLetter(item['secondary_text'].strip())) + message_row.ids.avater_img.source = image listItem.bind(on_release=partial(self.sent_detail, item['ackdata'], message_row)) - listItem.add_widget(AddTimeWidget(item['senttime'])) + message_row.ids.time_tag.text = str(ShowTimeHistoy(item['senttime'])) message_row.ids.delete_msg.bind(on_press=partial(self.delete, item["ackdata"])) self.ids.ml.add_widget(message_row, index=set_index) diff --git a/src/bitmessagekivy/baseclass/trash.py b/src/bitmessagekivy/baseclass/trash.py index 78293681..01d86318 100644 --- a/src/bitmessagekivy/baseclass/trash.py +++ b/src/bitmessagekivy/baseclass/trash.py @@ -19,13 +19,9 @@ from kivy.uix.screenmanager import Screen import state from bitmessagekivy.baseclass.common import ( - showLimitedCnt, avatarImageFirstLetter, - AddTimeWidget, ThemeClsColor, AvatarSampleWidget -) - -from bitmessagekivy.baseclass.common import ( - toast, showLimitedCnt, ThemeClsColor, chipTag, - AddTimeWidget, AvatarSampleWidget, SwipeToDeleteItem + toast, showLimitedCnt, ThemeClsColor, + CutsomSwipeToDeleteItem, ShowTimeHistoy, + avatarImageFirstLetter ) @@ -44,14 +40,12 @@ class Trash(Screen): def init_ui(self, dt=0): """Clock Schdule for method trash screen""" - print('clearing data....................................', len(self.ids.ml.children)) if state.association == '': if BMConfigParser().addresses(): state.association = BMConfigParser().addresses()[0] self.ids.tag_label.text = '' self.trashDataQuery(0, 20) - print('count messages.....................', len(self.trash_messages)) - if len(self.trash_messages) and len(self.trash_messages) != len(self.ids.ml.children): + if len(self.trash_messages): self.ids.ml.clear_widgets() self.ids.tag_label.text = 'Trash' # src_mng_obj = state.kivyapp.root.children[2].children[0].ids @@ -59,8 +53,6 @@ class Trash(Screen): self.set_TrashCnt(state.trash_count) self.set_mdList() self.ids.scroll_y.bind(scroll_y=self.check_scroll_y) - elif len(self.trash_messages): - self.ids.tag_label.text = 'Trash' else: self.set_TrashCnt('0') content = MDLabel( @@ -97,7 +89,7 @@ class Trash(Screen): for item in self.trash_messages: subject = item[2].decode() if isinstance(item[2], bytes) else item[2] body = item[3].decode() if isinstance(item[3], bytes) else item[3] - message_row = SwipeToDeleteItem( + message_row = CutsomSwipeToDeleteItem( text = item[1], ) message_row.bind(on_swipe_complete=partial(self.on_swipe_complete, message_row)) @@ -106,12 +98,11 @@ class Trash(Screen): subject) >= 50 else (subject + ',' + body)[0:50] + '........').replace('\t', '').replace(' ', '') listItem.theme_text_color = "Custom" listItem.text_color = ThemeClsColor - # meny._txt_right_pad = dp(70) img_latter = state.imageDir + '/text_images/{}.png'.format( - subject[0].upper() if (subject[0].upper() >= 'A' and subject[0].upper() <= 'Z') else '!') - listItem.add_widget(AvatarSampleWidget(source=img_latter)) - listItem.add_widget(AddTimeWidget(item[7])) - listItem.add_widget(chipTag('inbox 'if 'inbox' in item[4] else 'sent')) + avatarImageFirstLetter(subject[0].strip())) + message_row.ids.avater_img.source = img_latter + message_row.ids.time_tag.text = str(ShowTimeHistoy(item[7])) + message_row.ids.chip_tag.text = 'inbox 'if 'inbox' in item[4] else 'sent' message_row.ids.delete_msg.bind(on_press=partial( self.delete_permanently, item[5], item[4])) self.ids.ml.add_widget(message_row) diff --git a/src/bitmessagekivy/kv/trash.kv b/src/bitmessagekivy/kv/trash.kv index 71708e6d..97bcf7d7 100644 --- a/src/bitmessagekivy/kv/trash.kv +++ b/src/bitmessagekivy/kv/trash.kv @@ -22,4 +22,4 @@ MDList: id: ml Loader: - ComposerButton: \ No newline at end of file + ComposerButton: diff --git a/src/bitmessagekivy/main.kv b/src/bitmessagekivy/main.kv index c91292f5..b358f4ae 100644 --- a/src/bitmessagekivy/main.kv +++ b/src/bitmessagekivy/main.kv @@ -364,3 +364,59 @@ MDNavigationLayout: id: content text: root.text _no_ripple_effect: True + + AvatarSampleWidget: + id: avater_img + # source: './images/kivy/avatar.png' + source: None + + TimeTagRightSampleWidget: + id: time_tag + text: '' + font_size: "11sp" + font_style: "Caption" + size: [120, 140] if app.app_platform == "android" else [64, 80] + + +: + size_hint_y: None + height: content.height + + MDCardSwipeLayerBox: + padding: "8dp" + + MDIconButton: + id: delete_msg + icon: "trash-can" + pos_hint: {"center_y": .5} + md_bg_color: (1, 0, 0, 1) + disabled: True + + MDCardSwipeFrontBox: + + TwoLineAvatarIconListItem: + id: content + text: root.text + _no_ripple_effect: True + + AvatarSampleWidget: + id: avater_img + # source: './images/kivy/avatar.png' + source: None + + TimeTagRightSampleWidget: + id: time_tag + text: 'time' + font_size: "11sp" + font_style: "Caption" + size: [120, 140] if app.app_platform == "android" else [64, 80] + MDChip: + id: chip_tag + size_hint: (0.16 if app.app_platform == "android" else 0.08, None) + text: 'test' + icon: "" + pos_hint: {"center_x": 0.91 if app.app_platform == "android" else 0.94, "center_y": 0.3} + # height: dp(18) + height: '18dp' + text_color: (1,1,1,1) + radius: [8] diff --git a/src/buildozer.spec b/src/buildozer.spec index 80154156..eb861c6b 100644 --- a/src/buildozer.spec +++ b/src/buildozer.spec @@ -48,7 +48,7 @@ requirements = pillow, #bitmsghash, #git+https://github.com/navjotcis/KivyMD#egg=kivymd, - #git+https://github.com/kivymd/KivyMD#egg=kivymd, + git+https://github.com/kivymd/KivyMD#egg=kivymd, #kivymd, kivy-garden, qrcode,