testing mock dirs
1
src/tests/mock/images
Symbolic link
|
@ -0,0 +1 @@
|
|||
/home/cis/Bitmessagepeter/Bitmessagepeter/KivyPoject/BITMESSAGEQT/PyBitmessage/src/images/
|
Before Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 673 B |
Before Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 752 B |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 1007 B |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 820 B |
Before Width: | Height: | Size: 870 B |
Before Width: | Height: | Size: 687 B |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 629 B |
Before Width: | Height: | Size: 197 B |
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 101 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 716 B |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 823 B |
Before Width: | Height: | Size: 548 B |
Before Width: | Height: | Size: 631 B |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 634 B |
|
@ -1,148 +0,0 @@
|
|||
# pylint: disable=too-many-lines,import-error,no-name-in-module,unused-argument, no-else-return, unused-variable
|
||||
# pylint: disable=too-many-ancestors,too-many-locals,useless-super-delegation, attribute-defined-outside-init, no-self-use
|
||||
# pylint: disable=protected-access, super-with-arguments, pointless-statement, no-method-argument, too-many-function-args
|
||||
# pylint: disable=import-outside-toplevel,ungrouped-imports,wrong-import-order,unused-import,arguments-differ, too-few-public-methods
|
||||
# pylint: disable=invalid-name,unnecessary-comprehension,broad-except,simplifiable-if-expression,no-member, consider-using-in
|
||||
# pylint: disable=too-many-return-statements, unnecessary-pass, bad-option-value, abstract-method, consider-using-f-string
|
||||
|
||||
'''
|
||||
Address book screen
|
||||
'''
|
||||
from pybitmessage.get_platform import platform
|
||||
from kivy.clock import Clock
|
||||
from kivy.properties import (
|
||||
ListProperty,
|
||||
StringProperty
|
||||
)
|
||||
from kivymd.uix.button import MDRaisedButton
|
||||
from kivymd.uix.dialog import MDDialog
|
||||
from kivymd.uix.label import MDLabel
|
||||
from kivy.uix.screenmanager import Screen
|
||||
|
||||
from pybitmessage import state
|
||||
|
||||
from pybitmessage.baseclass.common import toast
|
||||
from pybitmessage.baseclass.popup import AddbookDetailPopup
|
||||
|
||||
|
||||
class AddressBook(Screen):
|
||||
"""AddressBook Screen class for kivy Ui"""
|
||||
|
||||
queryreturn = ListProperty()
|
||||
has_refreshed = True
|
||||
address_label = StringProperty()
|
||||
address = StringProperty()
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
"""Getting AddressBook Details"""
|
||||
super(AddressBook, self).__init__(*args, **kwargs)
|
||||
self.addbook_popup = None
|
||||
Clock.schedule_once(self.init_ui, 0)
|
||||
|
||||
def init_ui(self, dt=0):
|
||||
"""Clock Schdule for method AddressBook"""
|
||||
self.loadAddresslist(None, 'All', '')
|
||||
print(dt)
|
||||
|
||||
def loadAddresslist(self, account, where="", what=""):
|
||||
"""Clock Schdule for method AddressBook"""
|
||||
if state.searcing_text:
|
||||
self.ids.scroll_y.scroll_y = 1.0
|
||||
where = ['label', 'address']
|
||||
what = state.searcing_text
|
||||
xAddress = ''
|
||||
self.ids.tag_label.text = ''
|
||||
if self.queryreturn:
|
||||
pass
|
||||
else:
|
||||
content = MDLabel(
|
||||
font_style='Caption',
|
||||
theme_text_color='Primary',
|
||||
text="No contact found!" if state.searcing_text
|
||||
else "No contact found yet...... ",
|
||||
halign='center',
|
||||
size_hint_y=None,
|
||||
valign='top')
|
||||
self.ids.ml.add_widget(content)
|
||||
|
||||
def check_scroll_y(self, instance, somethingelse):
|
||||
"""Load data on scroll"""
|
||||
if self.ids.scroll_y.scroll_y <= -0.0 and self.has_refreshed:
|
||||
self.ids.scroll_y.scroll_y = 0.06
|
||||
exist_addresses = len(self.ids.ml.children)
|
||||
|
||||
@staticmethod
|
||||
def refreshes(*args):
|
||||
"""Refresh the Widget"""
|
||||
pass
|
||||
|
||||
def addBook_detail(self, address, label, instance, *args):
|
||||
"""Addressbook details"""
|
||||
if instance.state == 'closed':
|
||||
instance.ids.delete_msg.disabled = True
|
||||
if instance.open_progress == 0.0:
|
||||
obj = AddbookDetailPopup()
|
||||
self.address_label = obj.address_label = label
|
||||
self.address = obj.address = address
|
||||
width = .9 if platform == 'android' else .8
|
||||
self.addbook_popup = MDDialog(
|
||||
type="custom",
|
||||
size_hint=(width, .25),
|
||||
content_cls=obj,
|
||||
buttons=[
|
||||
MDRaisedButton(
|
||||
text="Send message to",
|
||||
on_release=self.send_message_to,
|
||||
),
|
||||
MDRaisedButton(
|
||||
text="Save",
|
||||
on_release=self.update_addbook_label,
|
||||
),
|
||||
MDRaisedButton(
|
||||
text="Cancel",
|
||||
on_release=self.close_pop,
|
||||
),
|
||||
],
|
||||
)
|
||||
self.addbook_popup.auto_dismiss = False
|
||||
self.addbook_popup.open()
|
||||
else:
|
||||
instance.ids.delete_msg.disabled = False
|
||||
|
||||
def delete_address(self, address, instance, *args):
|
||||
"""Delete inbox mail from inbox listing"""
|
||||
self.ids.ml.remove_widget(instance.parent.parent)
|
||||
if self.ids.ml.children is not None:
|
||||
self.ids.tag_label.text = ''
|
||||
toast('Address Deleted')
|
||||
|
||||
def close_pop(self, instance):
|
||||
"""Pop is Canceled"""
|
||||
self.addbook_popup.dismiss()
|
||||
toast('Canceled')
|
||||
|
||||
def update_addbook_label(self, instance):
|
||||
"""Updating the label of address book address"""
|
||||
address_list = []
|
||||
stored_labels = [labels[0] for labels in address_list]
|
||||
add_dict = dict(address_list)
|
||||
label = str(self.addbook_popup.content_cls.ids.add_label.text)
|
||||
if label in stored_labels and self.address == add_dict[label]:
|
||||
stored_labels.remove(label)
|
||||
if label and label not in stored_labels:
|
||||
state.kivyapp.root.ids.sc11.ids.ml.clear_widgets()
|
||||
state.kivyapp.root.ids.sc11.loadAddresslist(None, 'All', '')
|
||||
self.addbook_popup.dismiss()
|
||||
toast('Saved')
|
||||
|
||||
def send_message_to(self, instance):
|
||||
"""Method used to fill to_address of composer autofield"""
|
||||
state.kivyapp.set_navbar_for_composer()
|
||||
window_obj = state.kivyapp.root.ids
|
||||
window_obj.sc3.children[1].ids.txt_input.text = self.address
|
||||
window_obj.sc3.children[1].ids.ti.text = ''
|
||||
window_obj.sc3.children[1].ids.btn.text = 'Select'
|
||||
window_obj.sc3.children[1].ids.subject.text = ''
|
||||
window_obj.sc3.children[1].ids.body.text = ''
|
||||
window_obj.scr_mngr.current = 'create'
|
||||
self.addbook_popup.dismiss()
|
|
@ -1,153 +0,0 @@
|
|||
# pylint: disable=too-many-lines,import-error,no-name-in-module,unused-argument, no-else-return, unused-variable
|
||||
# pylint: disable=too-many-ancestors,too-many-locals,useless-super-delegation, attribute-defined-outside-init
|
||||
# pylint: disable=protected-access, super-with-arguments, pointless-statement
|
||||
# pylint: disable=import-outside-toplevel,ungrouped-imports,wrong-import-order,unused-import,arguments-differ
|
||||
# pylint: disable=invalid-name,unnecessary-comprehension,broad-except,simplifiable-if-expression,no-member, consider-using-in
|
||||
# pylint: disable=too-many-return-statements, unnecessary-pass, bad-option-value, abstract-method, consider-using-f-string
|
||||
|
||||
"""
|
||||
All Mails Screen Functionality
|
||||
"""
|
||||
|
||||
from functools import partial
|
||||
from kivy.clock import Clock
|
||||
from kivy.properties import (
|
||||
ListProperty,
|
||||
StringProperty
|
||||
)
|
||||
from kivy.uix.screenmanager import Screen
|
||||
from kivymd.uix.label import MDLabel
|
||||
|
||||
from pybitmessage import state
|
||||
|
||||
from pybitmessage.baseclass.common import (
|
||||
showLimitedCnt, toast, ThemeClsColor,
|
||||
avatarImageFirstLetter, CutsomSwipeToDeleteItem,
|
||||
ShowTimeHistoy
|
||||
)
|
||||
|
||||
|
||||
class Allmails(Screen):
|
||||
"""Allmails Screen for kivy Ui"""
|
||||
|
||||
data = ListProperty()
|
||||
has_refreshed = True
|
||||
all_mails = ListProperty()
|
||||
account = StringProperty()
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
"""Method Parsing the address"""
|
||||
super(Allmails, self).__init__(*args, **kwargs)
|
||||
if state.association == '':
|
||||
if state.kivyapp.variable_1:
|
||||
state.association = state.kivyapp.variable_1[0]
|
||||
Clock.schedule_once(self.init_ui, 0)
|
||||
|
||||
def init_ui(self, dt=0):
|
||||
"""Clock Schdule for method all mails"""
|
||||
self.loadMessagelist()
|
||||
print(dt)
|
||||
|
||||
def loadMessagelist(self):
|
||||
"""Load Inbox, Sent anf Draft list of messages"""
|
||||
self.account = state.association
|
||||
self.ids.tag_label.text = ''
|
||||
if self.all_mails:
|
||||
pass
|
||||
else:
|
||||
self.set_AllmailCnt('0')
|
||||
content = MDLabel(
|
||||
font_style='Caption',
|
||||
theme_text_color='Primary',
|
||||
text="yet no message for this account!!!!!!!!!!!!!",
|
||||
halign='center',
|
||||
size_hint_y=None,
|
||||
valign='top')
|
||||
self.ids.ml.add_widget(content)
|
||||
|
||||
def set_AllmailCnt(self, Count): # pylint: disable=no-self-use
|
||||
"""This method is used to set allmails message count"""
|
||||
allmailCnt_obj = state.kivyapp.root.ids.content_drawer.ids.allmail_cnt
|
||||
allmailCnt_obj.ids.badge_txt.text = showLimitedCnt(int(Count))
|
||||
|
||||
def set_mdlist(self):
|
||||
"""This method is used to create mdList for allmaills"""
|
||||
data_exist = len(self.ids.ml.children)
|
||||
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 = CutsomSwipeToDeleteItem(
|
||||
text=item[1],
|
||||
)
|
||||
|
||||
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
|
||||
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))
|
||||
message_row.ids.time_tag.text = str(ShowTimeHistoy(item[7]))
|
||||
message_row.ids.chip_tag.text = 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
|
||||
|
||||
def check_scroll_y(self, instance, somethingelse):
|
||||
"""Scroll fixed length"""
|
||||
if self.ids.scroll_y.scroll_y <= -0.00 and self.has_refreshed:
|
||||
self.ids.scroll_y.scroll_y = .06
|
||||
load_more = len(self.ids.ml.children)
|
||||
|
||||
def mail_detail(self, unique_id, folder, instance, *args):
|
||||
"""Load sent and inbox mail details"""
|
||||
if instance.state == 'closed':
|
||||
instance.ids.delete_msg.disabled = True
|
||||
if instance.open_progress == 0.0:
|
||||
state.detailPageType = folder
|
||||
state.is_allmail = True
|
||||
state.mail_id = unique_id
|
||||
if self.manager:
|
||||
src_mng_obj = self.manager
|
||||
else:
|
||||
src_mng_obj = self.parent.parent
|
||||
src_mng_obj.screens[11].clear_widgets()
|
||||
src_mng_obj.current = 'mailDetail'
|
||||
else:
|
||||
instance.ids.delete_msg.disabled = False
|
||||
|
||||
def swipe_delete(self, unique_id, folder, instance, *args):
|
||||
"""Delete inbox mail from all mail listing"""
|
||||
self.ids.ml.remove_widget(instance.parent.parent)
|
||||
try:
|
||||
msg_count_objs = self.parent.parent.ids.content_drawer.ids
|
||||
nav_lay_obj = self.parent.parent.ids
|
||||
except Exception:
|
||||
msg_count_objs = self.parent.parent.parent.ids.content_drawer.ids
|
||||
nav_lay_obj = self.parent.parent.parent.ids
|
||||
if folder == 'inbox':
|
||||
msg_count_objs.inbox_cnt.ids.badge_txt.text = showLimitedCnt(int(state.inbox_count) - 1)
|
||||
state.inbox_count = str(int(state.inbox_count) - 1)
|
||||
nav_lay_obj.sc1.ids.ml.clear_widgets()
|
||||
nav_lay_obj.sc1.loadMessagelist(state.association)
|
||||
else:
|
||||
msg_count_objs.send_cnt.ids.badge_txt.text = showLimitedCnt(int(state.sent_count) - 1)
|
||||
state.sent_count = str(int(state.sent_count) - 1)
|
||||
nav_lay_obj.sc4.ids.ml.clear_widgets()
|
||||
nav_lay_obj.sc4.loadSent(state.association)
|
||||
if folder != 'inbox':
|
||||
msg_count_objs.allmail_cnt.ids.badge_txt.text = showLimitedCnt(int(state.all_count) - 1)
|
||||
state.all_count = str(int(state.all_count) - 1)
|
||||
msg_count_objs.trash_cnt.ids.badge_txt.text = showLimitedCnt(int(state.trash_count) + 1)
|
||||
state.trash_count = str(int(state.trash_count) + 1)
|
||||
if int(state.all_count) <= 0:
|
||||
self.ids.tag_label.text = ''
|
||||
nav_lay_obj.sc17.remove_widget(instance.parent.parent)
|
||||
toast('Deleted')
|
|
@ -1,113 +0,0 @@
|
|||
from datetime import datetime
|
||||
from kivy.core.window import Window
|
||||
from kivy.metrics import dp
|
||||
from kivymd.uix.list import (
|
||||
ILeftBody,
|
||||
IRightBodyTouch,
|
||||
)
|
||||
from kivy.uix.image import Image
|
||||
from kivymd.uix.label import MDLabel
|
||||
from kivymd.toast import kivytoast
|
||||
from kivymd.uix.card import MDCardSwipe
|
||||
from kivymd.uix.chip import MDChip
|
||||
from kivy.properties import (
|
||||
NumericProperty,
|
||||
StringProperty
|
||||
)
|
||||
platform = "linux"
|
||||
|
||||
|
||||
ThemeClsColor = [0.12, 0.58, 0.95, 1]
|
||||
|
||||
|
||||
data_screens = {
|
||||
"MailDetail": {
|
||||
"kv_string": "maildetail",
|
||||
"Factory": "MailDetail()",
|
||||
"name_screen": "mailDetail",
|
||||
"object": 0,
|
||||
"Import": "from pybitmessage.baseclass.maildetail import MailDetail",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def chipTag(text):
|
||||
"""This method is used for showing chip tag"""
|
||||
obj = MDChip()
|
||||
# obj.size_hint = (None, None)
|
||||
obj.size_hint = (0.16 if platform == "android" else 0.08, None)
|
||||
obj.text = text
|
||||
obj.icon = ""
|
||||
obj.pos_hint = {
|
||||
"center_x": 0.91 if platform == "android" else 0.94,
|
||||
"center_y": 0.3
|
||||
}
|
||||
obj.height = dp(18)
|
||||
obj.text_color = (1, 1, 1, 1)
|
||||
obj.radius = [8]
|
||||
return obj
|
||||
|
||||
|
||||
def toast(text):
|
||||
"""Method will display the toast message"""
|
||||
kivytoast.toast(text)
|
||||
|
||||
|
||||
def showLimitedCnt(total_msg):
|
||||
"""This method set the total count limit in badge_text"""
|
||||
return "99+" if total_msg > 99 else str(total_msg)
|
||||
|
||||
|
||||
def avatarImageFirstLetter(letter_string):
|
||||
"""This function is used to the first letter for the avatar image"""
|
||||
try:
|
||||
if letter_string[0].upper() >= 'A' and letter_string[0].upper() <= 'Z':
|
||||
img_latter = letter_string[0].upper()
|
||||
elif int(letter_string[0]) >= 0 and int(letter_string[0]) <= 9:
|
||||
img_latter = letter_string[0]
|
||||
else:
|
||||
img_latter = '!'
|
||||
except ValueError:
|
||||
img_latter = '!'
|
||||
return img_latter if img_latter else '!'
|
||||
|
||||
|
||||
def ShowTimeHistoy(act_time):
|
||||
"""This method is used to return the message sent or receive time"""
|
||||
action_time = datetime.fromtimestamp(int(act_time))
|
||||
crnt_date = datetime.now()
|
||||
duration = crnt_date - action_time
|
||||
display_data = (
|
||||
action_time.strftime("%d/%m/%Y")
|
||||
if duration.days >= 365
|
||||
else action_time.strftime("%I:%M %p").lstrip("0")
|
||||
if duration.days == 0 and crnt_date.strftime("%d/%m/%Y") == action_time.strftime("%d/%m/%Y")
|
||||
else action_time.strftime("%d %b")
|
||||
)
|
||||
return display_data
|
||||
|
||||
|
||||
# pylint: disable=too-few-public-methods
|
||||
class AvatarSampleWidget(ILeftBody, Image):
|
||||
"""AvatarSampleWidget class for kivy Ui"""
|
||||
|
||||
|
||||
class TimeTagRightSampleWidget(IRightBodyTouch, MDLabel):
|
||||
"""TimeTagRightSampleWidget class for Ui"""
|
||||
|
||||
|
||||
class SwipeToDeleteItem(MDCardSwipe):
|
||||
"""Swipe delete class for App UI"""
|
||||
text = StringProperty()
|
||||
cla = Window.size[0] / 2
|
||||
# cla = 800
|
||||
swipe_distance = NumericProperty(cla)
|
||||
opening_time = NumericProperty(0.5)
|
||||
|
||||
|
||||
class CutsomSwipeToDeleteItem(MDCardSwipe):
|
||||
"""Custom swipe delete class for App UI"""
|
||||
text = StringProperty()
|
||||
cla = Window.size[0] / 2
|
||||
swipe_distance = NumericProperty(cla)
|
||||
opening_time = NumericProperty(0.5)
|
|
@ -1,169 +0,0 @@
|
|||
# pylint: disable=too-many-lines,import-error,no-name-in-module,unused-argument, no-else-return, unused-variable
|
||||
# pylint: disable=too-many-ancestors,too-many-locals,useless-super-delegation, attribute-defined-outside-init
|
||||
# pylint: disable=protected-access
|
||||
# pylint: disable=import-outside-toplevel,ungrouped-imports,wrong-import-order,unused-import,arguments-differ
|
||||
# pylint: disable=invalid-name,unnecessary-comprehension,broad-except,simplifiable-if-expression,no-member
|
||||
# pylint: disable=too-many-return-statements
|
||||
|
||||
"""
|
||||
Draft Screen
|
||||
"""
|
||||
|
||||
from functools import partial
|
||||
|
||||
from kivy.clock import Clock
|
||||
from kivy.properties import (
|
||||
ListProperty,
|
||||
StringProperty
|
||||
)
|
||||
from kivy.uix.screenmanager import Screen
|
||||
from kivymd.uix.label import MDLabel
|
||||
|
||||
from pybitmessage import state
|
||||
from pybitmessage.bmconfigparser import BMConfigParser
|
||||
from pybitmessage.addresses import decodeAddress
|
||||
from pybitmessage.baseclass.common import (
|
||||
showLimitedCnt, toast, ThemeClsColor,
|
||||
SwipeToDeleteItem, ShowTimeHistoy
|
||||
)
|
||||
|
||||
|
||||
class Draft(Screen):
|
||||
"""Draft screen class for kivy Ui"""
|
||||
|
||||
data = ListProperty()
|
||||
account = StringProperty()
|
||||
queryreturn = ListProperty()
|
||||
has_refreshed = True
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
"""Method used for storing draft messages"""
|
||||
super(Draft, self).__init__(*args, **kwargs)
|
||||
if state.association == '':
|
||||
if state.kivyapp.variable_1:
|
||||
state.association = state.kivyapp.variable_1[0]
|
||||
Clock.schedule_once(self.init_ui, 0)
|
||||
|
||||
def init_ui(self, dt=0):
|
||||
"""Clock Schdule for method draft accounts"""
|
||||
self.sentaccounts()
|
||||
print(dt)
|
||||
|
||||
def sentaccounts(self):
|
||||
"""Load draft accounts"""
|
||||
# self.account = state.association
|
||||
self.loadDraft()
|
||||
|
||||
def loadDraft(self):
|
||||
"""Load draft list for Draft messages"""
|
||||
self.account = state.association
|
||||
xAddress = 'fromaddress'
|
||||
self.ids.tag_label.text = ''
|
||||
if self.queryreturn:
|
||||
self.ids.tag_label.text = 'Draft'
|
||||
self.set_draftCnt(state.draft_count)
|
||||
self.set_mdList()
|
||||
self.ids.scroll_y.bind(scroll_y=self.check_scroll_y)
|
||||
else:
|
||||
self.set_draftCnt('0')
|
||||
content = MDLabel(
|
||||
font_style='Caption',
|
||||
theme_text_color='Primary',
|
||||
text="yet no message for this account!!!!!!!!!!!!!",
|
||||
halign='center',
|
||||
size_hint_y=None,
|
||||
valign='top')
|
||||
self.ids.ml.add_widget(content)
|
||||
|
||||
def set_draftCnt(self, Count): # pylint: disable=no-self-use
|
||||
"""This method set the count of draft mails"""
|
||||
draftCnt_obj = state.kivyapp.root.ids.content_drawer.ids.draft_cnt
|
||||
draftCnt_obj.ids.badge_txt.text = showLimitedCnt(int(Count))
|
||||
|
||||
def set_mdList(self):
|
||||
"""This method is used to create mdlist"""
|
||||
data = []
|
||||
total_draft_msg = len(self.ids.ml.children)
|
||||
for mail in self.queryreturn:
|
||||
third_text = mail[3].replace('\n', ' ')
|
||||
data.append({
|
||||
'text': mail[1].strip(),
|
||||
'secondary_text': mail[2][:10] + '...........' if len(
|
||||
mail[2]) > 10 else mail[2] + '\n' + " " + (
|
||||
third_text[:25] + '...!') if len(
|
||||
third_text) > 25 else third_text,
|
||||
'ackdata': mail[5], 'senttime': mail[6]})
|
||||
for item in data:
|
||||
message_row = SwipeToDeleteItem(
|
||||
text='Draft',
|
||||
)
|
||||
listItem = message_row.ids.content
|
||||
listItem.secondary_text = item["text"]
|
||||
listItem.theme_text_color = "Custom"
|
||||
listItem.text_color = ThemeClsColor
|
||||
message_row.ids.avater_img.source = state.imageDir + '/avatar.png'
|
||||
listItem.bind(on_release=partial(
|
||||
self.draft_detail, item['ackdata'], message_row))
|
||||
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)
|
||||
self.has_refreshed = True if total_draft_msg != updated_msg else False
|
||||
|
||||
def check_scroll_y(self):
|
||||
"""Load data on scroll"""
|
||||
if self.ids.scroll_y.scroll_y <= -0.0 and self.has_refreshed:
|
||||
self.ids.scroll_y.scroll_y = 0.06
|
||||
total_draft_msg = len(self.ids.ml.children)
|
||||
|
||||
def draft_detail(self, ackdata, instance):
|
||||
"""Show draft Details"""
|
||||
if instance.state == 'closed':
|
||||
instance.ids.delete_msg.disabled = True
|
||||
if instance.open_progress == 0.0:
|
||||
state.detailPageType = 'draft'
|
||||
state.mail_id = ackdata
|
||||
if self.manager:
|
||||
src_mng_obj = self.manager
|
||||
else:
|
||||
src_mng_obj = self.parent.parent
|
||||
src_mng_obj.screens[11].clear_widgets()
|
||||
# src_mng_obj.screens[11].add_widget(MailDetail())
|
||||
src_mng_obj.current = 'mailDetail'
|
||||
else:
|
||||
instance.ids.delete_msg.disabled = False
|
||||
|
||||
def delete_draft(self, instance):
|
||||
"""Delete draft message permanently"""
|
||||
if int(state.draft_count) > 0:
|
||||
state.draft_count = str(int(state.draft_count) - 1)
|
||||
self.set_draftCnt(state.draft_count)
|
||||
if int(state.draft_count) <= 0:
|
||||
# self.ids.identi_tag.children[0].text = ''
|
||||
self.ids.tag_label.text = ''
|
||||
self.ids.ml.remove_widget(instance.parent.parent)
|
||||
toast('Deleted')
|
||||
|
||||
@staticmethod
|
||||
def draft_msg(src_object):
|
||||
"""Save draft mails"""
|
||||
composer_object = state.kivyapp.root.ids.sc3.children[1].ids
|
||||
fromAddress = str(composer_object.ti.text)
|
||||
toAddress = str(composer_object.txt_input.text)
|
||||
subject = str(composer_object.subject.text)
|
||||
message = str(composer_object.body.text)
|
||||
encoding = 3
|
||||
sendMessageToPeople = True
|
||||
if sendMessageToPeople:
|
||||
streamNumber, ripe = decodeAddress(toAddress)[2:]
|
||||
from pybitmessage.addresses import addBMIfNotPresent
|
||||
toAddress = addBMIfNotPresent(toAddress)
|
||||
stealthLevel = BMConfigParser().safeGetInt(
|
||||
'bitmessagesettings', 'ackstealthlevel')
|
||||
state.msg_counter_objs = src_object.children[2].children[0].ids
|
||||
state.draft_count = str(int(state.draft_count) + 1) \
|
||||
if state.association == fromAddress else state.draft_count
|
||||
src_object.ids.sc16.clear_widgets()
|
||||
src_object.ids.sc16.add_widget(Draft())
|
||||
toast('Save draft')
|
||||
return
|