mpybit fixes

This commit is contained in:
lakshyacis 2019-11-21 20:20:14 +05:30
parent 6c9d1a2666
commit c08a49aec2
No known key found for this signature in database
GPG Key ID: D2C539C8EC63E9EB

View File

@ -1,8 +1,8 @@
""" """
src/bitmessagekivy/mpybit.py Bitmessage kivy interface
=================================
""" """
# pylint: disable=relative-import, unused-variable, import-error, no-name-in-module, too-many-lines # pylint: disable=relative-import, unused-variable, import-error
# pylint: disable=no-name-in-module, too-many-lines, unused-argument
import os import os
import time import time
from functools import partial from functools import partial
@ -62,7 +62,6 @@ import state
from uikivysignaler import UIkivySignaler from uikivysignaler import UIkivySignaler
import identiconGeneration import identiconGeneration
# pylint: disable=unused-argument, too-few-public-methods
def toast(text): def toast(text):
@ -123,12 +122,13 @@ class Inbox(Screen):
data.append({ data.append({
'text': mail[4].strip(), 'text': mail[4].strip(),
'secondary_text': mail[5][:50] + '........' if len( 'secondary_text': mail[5][:50] + '........' if len(
mail[5]) >= 50 else ( mail[5]) >= 50 else (mail[5] + ',' + mail[3].replace(
mail[5] + ',' + mail[3].replace('\n', ''))[0:50] + '........', '\n', ''))[0:50] + '........',
'msgid': mail[1]}) 'msgid': mail[1]})
self.has_refreshed = True self.has_refreshed = True
self.set_mdList(data) self.set_mdList(data)
self.children[2].children[0].children[0].bind(scroll_y=self.check_scroll_y) self.children[2].children[0].children[0].bind(
scroll_y=self.check_scroll_y)
else: else:
content = MDLabel( content = MDLabel(
font_style='Body1', font_style='Body1',
@ -177,12 +177,14 @@ class Inbox(Screen):
def check_scroll_y(self, instance, somethingelse): def check_scroll_y(self, instance, somethingelse):
"""This method is used to load data on scroll""" """This method is used to load data on scroll"""
if self.children[2].children[0].children[0].scroll_y <= -0.0 and self.has_refreshed: if self.children[2].children[0].children[
0].scroll_y <= -0.0 and self.has_refreshed:
self.children[2].children[0].children[0].scroll_y = 0.06 self.children[2].children[0].children[0].scroll_y = 0.06
total_message = len(self.ids.ml.children) total_message = len(self.ids.ml.children)
if total_message != len(self.queryreturn): if total_message != len(self.queryreturn):
self.update_inbox_screen_on_scroll(total_message) self.update_inbox_screen_on_scroll(total_message)
self.has_refreshed = True if total_message != len(self.queryreturn) else False self.has_refreshed = True if total_message != len(
self.queryreturn) else False
else: else:
pass pass
@ -194,8 +196,8 @@ class Inbox(Screen):
data.append({ data.append({
'text': mail[4].strip(), 'text': mail[4].strip(),
'secondary_text': mail[5][:50] + '........' if len( 'secondary_text': mail[5][:50] + '........' if len(
mail[5]) >= 50 else ( mail[5]) >= 50 else (mail[5] + ',' + mail[3].replace(
mail[5] + ',' + mail[3].replace('\n', ''))[0:50] + '........', '\n', ''))[0:50] + '........',
'msgid': mail[1]}) 'msgid': mail[1]})
self.set_mdList(data) self.set_mdList(data)
@ -217,9 +219,12 @@ class Inbox(Screen):
"UPDATE inbox SET folder = 'trash' WHERE msgid = ?;", str( "UPDATE inbox SET folder = 'trash' WHERE msgid = ?;", str(
data_index)) data_index))
try: try:
msg_count_objs = self.parent.parent.parent.parent.children[2].children[0].ids msg_count_objs = (
self.parent.parent.parent.parent.children[2].children[0].ids)
except Exception: except Exception:
msg_count_objs = self.parent.parent.parent.parent.parent.children[2].children[0].ids msg_count_objs = (
self.parent.parent.parent.parent.parent.children[
2].children[0].ids)
if int(state.inbox_count) > 0: if int(state.inbox_count) > 0:
msg_count_objs.inbox_cnt.badge_text = str( msg_count_objs.inbox_cnt.badge_text = str(
int(state.inbox_count) - 1) int(state.inbox_count) - 1)
@ -257,7 +262,8 @@ class Inbox(Screen):
# pylint: disable=attribute-defined-outside-init # pylint: disable=attribute-defined-outside-init
def refresh_callback(self, *args): def refresh_callback(self, *args):
"""Method updates the state of application, While the spinner remains on the screen.""" """Method updates the state of application,
While the spinner remains on the screen."""
def refresh_callback(interval): def refresh_callback(interval):
"""Method used for loading the inbox screen data.""" """Method used for loading the inbox screen data."""
state.searcing_text = '' state.searcing_text = ''
@ -271,6 +277,7 @@ class Inbox(Screen):
Clock.schedule_once(refresh_callback, 1) Clock.schedule_once(refresh_callback, 1)
def set_root_layout(self): def set_root_layout(self):
"""Setting root layout"""
return self.parent.parent.parent return self.parent.parent.parent
@ -329,7 +336,8 @@ class MyAddress(Screen):
theme_text_color='Custom', theme_text_color='Custom',
text_color=NavigateApp().theme_cls.primary_color) text_color=NavigateApp().theme_cls.primary_color)
meny.add_widget(AvatarSampleWidget( meny.add_widget(AvatarSampleWidget(
source='./images/text_images/{}.png'.format(avatarImageFirstLetter(item['text'].strip())))) source='./images/text_images/{}.png'.format(
avatarImageFirstLetter(item['text'].strip()))))
meny.bind(on_press=partial( meny.bind(on_press=partial(
self.myadd_detail, item['secondary_text'], item['text'])) self.myadd_detail, item['secondary_text'], item['text']))
self.ids.ml.add_widget(meny) self.ids.ml.add_widget(meny)
@ -341,13 +349,14 @@ class MyAddress(Screen):
my_addresses = len(self.ids.ml.children) my_addresses = len(self.ids.ml.children)
if my_addresses != len(self.addresses_list): if my_addresses != len(self.addresses_list):
self.update_addressBook_on_scroll(my_addresses) self.update_addressBook_on_scroll(my_addresses)
self.has_refreshed = True if my_addresses != len(self.addresses_list) else False self.has_refreshed = True if my_addresses != len(
self.addresses_list) else False
else: else:
pass pass
def update_addressBook_on_scroll(self, my_addresses): def update_addressBook_on_scroll(self, my_addresses):
"""This method is used to load more data on scroll down""" """This method is used to load more data on scroll down"""
self.set_mdList(my_addresses,my_addresses + 20) self.set_mdList(my_addresses, my_addresses + 20)
@staticmethod @staticmethod
def myadd_detail(fromaddress, label, *args): def myadd_detail(fromaddress, label, *args):
@ -358,7 +367,8 @@ class MyAddress(Screen):
# pylint: disable=attribute-defined-outside-init # pylint: disable=attribute-defined-outside-init
def refresh_callback(self, *args): def refresh_callback(self, *args):
"""Method updates the state of application, While the spinner remains on the screen.""" """Method updates the state of application,
While the spinner remains on the screen."""
def refresh_callback(interval): def refresh_callback(interval):
"""Method used for loading the myaddress screen data.""" """Method used for loading the myaddress screen data."""
state.searcing_text = '' state.searcing_text = ''
@ -382,6 +392,7 @@ class MyAddress(Screen):
return False return False
def set_root_layout(self): def set_root_layout(self):
"""Setting root layout"""
return self.manager.parent.parent return self.manager.parent.parent
@ -411,7 +422,7 @@ class AddressBook(Screen):
self.queryreturn = [obj for obj in reversed(self.queryreturn)] self.queryreturn = [obj for obj in reversed(self.queryreturn)]
if self.queryreturn: if self.queryreturn:
self.has_refreshed = True self.has_refreshed = True
self.set_mdList(0,20) self.set_mdList(0, 20)
self.ids.scroll_y.bind(scroll_y=self.check_scroll_y) self.ids.scroll_y.bind(scroll_y=self.check_scroll_y)
else: else:
content = MDLabel( content = MDLabel(
@ -434,7 +445,8 @@ class AddressBook(Screen):
theme_text_color='Custom', theme_text_color='Custom',
text_color=NavigateApp().theme_cls.primary_color) text_color=NavigateApp().theme_cls.primary_color)
meny.add_widget(AvatarSampleWidget( meny.add_widget(AvatarSampleWidget(
source='./images/text_images/{}.png'.format(avatarImageFirstLetter(item[0].strip())))) source='./images/text_images/{}.png'.format(
avatarImageFirstLetter(item[0].strip()))))
meny.bind(on_press=partial( meny.bind(on_press=partial(
self.addBook_detail, item[1], item[0])) self.addBook_detail, item[1], item[0]))
carousel = Carousel(direction='right') carousel = Carousel(direction='right')
@ -459,13 +471,14 @@ class AddressBook(Screen):
exist_addresses = len(self.ids.ml.children) exist_addresses = len(self.ids.ml.children)
if exist_addresses != len(self.queryreturn): if exist_addresses != len(self.queryreturn):
self.update_addressBook_on_scroll(exist_addresses) self.update_addressBook_on_scroll(exist_addresses)
self.has_refreshed = True if exist_addresses != len(self.queryreturn) else False self.has_refreshed = True if exist_addresses != len(
self.queryreturn) else False
else: else:
pass pass
def update_addressBook_on_scroll(self, exist_addresses): def update_addressBook_on_scroll(self, exist_addresses):
"""This method is used to load more data on scroll down""" """This method is used to load more data on scroll down"""
self.set_mdList(exist_addresses,exist_addresses + 20) self.set_mdList(exist_addresses, exist_addresses + 20)
@staticmethod @staticmethod
def refreshs(*args): def refreshs(*args):
@ -488,9 +501,10 @@ class AddressBook(Screen):
"DELETE FROM addressbook WHERE address = '{}';".format(address)) "DELETE FROM addressbook WHERE address = '{}';".format(address))
class SelectableRecycleBoxLayout(FocusBehavior, LayoutSelectionBehavior, class SelectableRecycleBoxLayout(
RecycleBoxLayout): FocusBehavior, LayoutSelectionBehavior, RecycleBoxLayout):
"""Adds selection and focus behaviour to the view.""" """Adds selection and focus behaviour to the view."""
# pylint: disable = too-many-ancestors
pass pass
@ -536,7 +550,8 @@ class RV(RecycleView):
class DropDownWidget(BoxLayout): class DropDownWidget(BoxLayout):
"""Adding Dropdown Widget.""" """Adding Dropdown Widget."""
# pylint: disable=too-many-statements, inconsistent-return-statements, too-many-locals # pylint: disable=too-many-statements, too-many-locals
# pylint: disable=inconsistent-return-statements
txt_input = ObjectProperty() txt_input = ObjectProperty()
rv = ObjectProperty() rv = ObjectProperty()
@ -553,7 +568,8 @@ class DropDownWidget(BoxLayout):
if sendMessageToPeople: if sendMessageToPeople:
if toAddress != '' and subject and message: if toAddress != '' and subject and message:
from addresses import decodeAddress from addresses import decodeAddress
status, addressVersionNumber, streamNumber, ripe = decodeAddress(toAddress) status, addressVersionNumber, streamNumber, ripe = (
decodeAddress(toAddress))
if status == 'success': if status == 'success':
navApp.root.ids.sc3.children[0].active = True navApp.root.ids.sc3.children[0].active = True
if state.detailPageType == 'draft' and state.send_draft_mail: if state.detailPageType == 'draft' and state.send_draft_mail:
@ -575,9 +591,10 @@ class DropDownWidget(BoxLayout):
from addresses import addBMIfNotPresent from addresses import addBMIfNotPresent
toAddress = addBMIfNotPresent(toAddress) toAddress = addBMIfNotPresent(toAddress)
statusIconColor = 'red' statusIconColor = 'red'
if addressVersionNumber > 4 or addressVersionNumber <= 1: if (addressVersionNumber > 4) or (
print "addressVersionNumber > 4 \ addressVersionNumber <= 1):
or addressVersionNumber <= 1" print "addressVersionNumber > 4"\
" or addressVersionNumber <= 1"
if streamNumber > 1 or streamNumber == 0: if streamNumber > 1 or streamNumber == 0:
print "streamNumber > 1 or streamNumber == 0" print "streamNumber > 1 or streamNumber == 0"
if statusIconColor == 'red': if statusIconColor == 'red':
@ -631,7 +648,9 @@ class DropDownWidget(BoxLayout):
msg = 'Please fill the form' msg = 'Please fill the form'
self.address_error_message(msg) self.address_error_message(msg)
def callback_for_msgsend(self, dt=0): @staticmethod
def callback_for_msgsend(dt=0):
"""Callback method for messagesend"""
state.kivyapp.root.ids.sc3.children[0].active = False state.kivyapp.root.ids.sc3.children[0].active = False
state.in_sent_method = True state.in_sent_method = True
state.kivyapp.back_press() state.kivyapp.back_press()
@ -711,13 +730,18 @@ class Payment(Screen):
"""Method helps to get the available credits""" """Method helps to get the available credits"""
# pylint: disable=no-self-use # pylint: disable=no-self-use
state.availabe_credit = instance.parent.children[1].text state.availabe_credit = instance.parent.children[1].text
existing_credits = state.kivyapp.root.ids.sc18.ids.ml.children[0].children[0].children[0].children[0].text existing_credits = (
state.kivyapp.root.ids.sc18.ids.ml.children[0].children[
0].children[0].children[0].text)
if len(existing_credits.split(' ')) > 1: if len(existing_credits.split(' ')) > 1:
toast('We already have added free coins for the subscription to your account!') toast(
'We already have added free coins'
' for the subscription to your account!')
else: else:
toast('Coins added to your account!') toast('Coins added to your account!')
state.kivyapp.root.ids.sc18.ids.ml.children[0].children[0].children[ state.kivyapp.root.ids.sc18.ids.ml.children[0].children[
0].children[0].text = '{0}'.format(state.availabe_credit) 0].children[0].children[0].text = '{0}'.format(
state.availabe_credit)
class Credits(Screen): class Credits(Screen):
@ -787,7 +811,8 @@ class Random(Screen):
eighteenByteRipe = False eighteenByteRipe = False
nonceTrialsPerByte = 1000 nonceTrialsPerByte = 1000
payloadLengthExtraBytes = 1000 payloadLengthExtraBytes = 1000
lables = [BMConfigParser().get(obj, 'label') for obj in BMConfigParser().addresses()] lables = [BMConfigParser().get(obj, 'label')
for obj in BMConfigParser().addresses()]
if entered_label and entered_label not in lables: if entered_label and entered_label not in lables:
toast('Address Creating...') toast('Address Creating...')
queues.addressGeneratorQueue.put(( queues.addressGeneratorQueue.put((
@ -814,7 +839,8 @@ class Random(Screen):
def add_validation(self, instance): def add_validation(self, instance):
"""Checking validation at address creation time.""" """Checking validation at address creation time."""
entered_label = str(instance.text.strip()) entered_label = str(instance.text.strip())
lables = [BMConfigParser().get(obj, 'label') for obj in BMConfigParser().addresses()] lables = [BMConfigParser().get(obj, 'label')
for obj in BMConfigParser().addresses()]
if entered_label in lables: if entered_label in lables:
self.ids.label.error = True self.ids.label.error = True
self.ids.label.helper_text = 'Label name is already exist' self.ids.label.helper_text = 'Label name is already exist'
@ -857,8 +883,10 @@ class Sent(Screen):
data = [] data = []
self.queryreturn = kivy_helper_search.search_sql( self.queryreturn = kivy_helper_search.search_sql(
xAddress, account, "sent", where, what, False) xAddress, account, "sent", where, what, False)
if state.msg_counter_objs and state.association == state.check_sent_acc: if state.msg_counter_objs and state.association == (
state.msg_counter_objs.send_cnt.badge_text = str(len(self.queryreturn)) state.check_sent_acc):
state.msg_counter_objs.send_cnt.badge_text = str(
len(self.queryreturn))
state.sent_count = str(int(state.sent_count) + 1) state.sent_count = str(int(state.sent_count) + 1)
state.all_count = str(int(state.all_count) + 1) state.all_count = str(int(state.all_count) + 1)
state.msg_counter_objs.allmail_cnt.badge_text = state.all_count state.msg_counter_objs.allmail_cnt.badge_text = state.all_count
@ -870,8 +898,8 @@ class Sent(Screen):
data.append({ data.append({
'text': mail[1].strip(), 'text': mail[1].strip(),
'secondary_text': mail[2][:50] + '........' if len( 'secondary_text': mail[2][:50] + '........' if len(
mail[2]) >= 50 else ( mail[2]) >= 50 else (mail[2] + ',' + mail[3].replace(
mail[2] + ',' + mail[3].replace('\n', ''))[0:50] + '........', '\n', ''))[0:50] + '........',
'ackdata': mail[5]}) 'ackdata': mail[5]})
self.set_mdlist(data, 0) self.set_mdlist(data, 0)
self.has_refreshed = True self.has_refreshed = True
@ -924,7 +952,7 @@ class Sent(Screen):
def update_sent_messagelist(self): def update_sent_messagelist(self):
"""This method is used to update screen when new mail is sent""" """This method is used to update screen when new mail is sent"""
if len(self.ids.ml.children) <3: if len(self.ids.ml.children) < 3:
self.ids.ml.clear_widgets() self.ids.ml.clear_widgets()
self.loadSent(state.association) self.loadSent(state.association)
else: else:
@ -938,10 +966,10 @@ class Sent(Screen):
data.append({ data.append({
'text': mail[1].strip(), 'text': mail[1].strip(),
'secondary_text': mail[2][:50] + '........' if len( 'secondary_text': mail[2][:50] + '........' if len(
mail[2]) >= 50 else ( mail[2]) >= 50 else (mail[2] + ',' + mail[3].replace(
mail[2] + ',' + mail[3].replace('\n', ''))[0:50] + '........', '\n', ''))[0:50] + '........',
'ackdata': mail[5]}) 'ackdata': mail[5]})
self.set_mdlist(data, total_sent-1) self.set_mdlist(data, total_sent - 1)
def check_scroll_y(self, instance, somethingelse): def check_scroll_y(self, instance, somethingelse):
"""This method is used to load data on scroll""" """This method is used to load data on scroll"""
@ -950,7 +978,8 @@ class Sent(Screen):
total_sent_msg = len(self.ids.ml.children) total_sent_msg = len(self.ids.ml.children)
if total_sent_msg != len(self.queryreturn): if total_sent_msg != len(self.queryreturn):
self.update_sent_screen_on_scroll(total_sent_msg) self.update_sent_screen_on_scroll(total_sent_msg)
self.has_refreshed = True if total_sent_msg != len(self.queryreturn) else False self.has_refreshed = True if total_sent_msg != len(
self.queryreturn) else False
else: else:
pass pass
@ -961,12 +990,13 @@ class Sent(Screen):
data.append({ data.append({
'text': mail[1].strip(), 'text': mail[1].strip(),
'secondary_text': mail[2][:50] + '........' if len( 'secondary_text': mail[2][:50] + '........' if len(
mail[2]) >= 50 else ( mail[2]) >= 50 else (mail[2] + ',' + mail[3].replace(
mail[2] + ',' + mail[3].replace('\n', ''))[0:50] + '........', '\n', ''))[0:50] + '........',
'ackdata': mail[5]}) 'ackdata': mail[5]})
self.set_mdlist(data, 0) self.set_mdlist(data, 0)
def set_sentCount(self, total_sent): @staticmethod
def set_sentCount(total_sent):
"""Set the total no. of sent message count""" """Set the total no. of sent message count"""
src_mng_obj = state.kivyapp.root.children[2].children[0].ids src_mng_obj = state.kivyapp.root.children[2].children[0].ids
src_mng_obj.send_cnt.badge_text = str(total_sent) src_mng_obj.send_cnt.badge_text = str(total_sent)
@ -1047,15 +1077,16 @@ class Trash(Screen):
if BMConfigParser().addresses(): if BMConfigParser().addresses():
state.association = BMConfigParser().addresses()[0] state.association = BMConfigParser().addresses()[0]
self.trash_messages = sqlQuery( self.trash_messages = sqlQuery(
"SELECT toaddress, fromaddress, subject, message, folder, ackdata As id, DATE(lastactiontime)" "SELECT toaddress, fromaddress, subject, message, folder, ackdata"
" As actionTime FROM sent WHERE folder = 'trash' UNION" " As id, DATE(lastactiontime) As actionTime FROM sent WHERE"
" SELECT toaddress, fromaddress, subject, message, folder, msgid As id, DATE(received) As" " folder = 'trash' UNION SELECT toaddress, fromaddress, subject,"
" actionTime FROM inbox WHERE folder = 'trash' ORDER BY actionTime DESC") " message, folder, msgid As id, DATE(received) As actionTime FROM"
" inbox WHERE folder = 'trash' ORDER BY actionTime DESC")
if self.trash_messages: if self.trash_messages:
src_mng_obj = state.kivyapp.root.children[2].children[0].ids src_mng_obj = state.kivyapp.root.children[2].children[0].ids
src_mng_obj.trash_cnt.badge_text = str(len(self.trash_messages)) src_mng_obj.trash_cnt.badge_text = str(len(self.trash_messages))
state.trash_count = str(len(self.trash_messages)) state.trash_count = str(len(self.trash_messages))
self.set_mdList(0,20) self.set_mdList(0, 20)
self.ids.scroll_y.bind(scroll_y=self.check_scroll_y) self.ids.scroll_y.bind(scroll_y=self.check_scroll_y)
else: else:
content = MDLabel( content = MDLabel(
@ -1074,8 +1105,8 @@ class Trash(Screen):
meny = TwoLineAvatarIconListItem( meny = TwoLineAvatarIconListItem(
text=item[1], text=item[1],
secondary_text=item[2][:50] + '........' if len( secondary_text=item[2][:50] + '........' if len(
item[2]) >= 50 else ( item[2]) >= 50 else (item[2] + ',' + item[3].replace(
item[2] + ',' + item[3].replace('\n', ''))[0:50] + '........', '\n', ''))[0:50] + '........',
theme_text_color='Custom', theme_text_color='Custom',
text_color=NavigateApp().theme_cls.primary_color) text_color=NavigateApp().theme_cls.primary_color)
img_latter = './images/text_images/{}.png'.format( img_latter = './images/text_images/{}.png'.format(
@ -1105,13 +1136,14 @@ class Trash(Screen):
total_trash_msg = len(self.ids.ml.children) total_trash_msg = len(self.ids.ml.children)
if total_trash_msg != len(self.trash_messages): if total_trash_msg != len(self.trash_messages):
self.update_trash_screen_on_scroll(total_trash_msg) self.update_trash_screen_on_scroll(total_trash_msg)
self.has_refreshed = True if total_trash_msg != len(self.trash_messages) else False self.has_refreshed = True if total_trash_msg != len(
self.trash_messages) else False
else: else:
pass pass
def update_trash_screen_on_scroll(self, total_trash_msg): def update_trash_screen_on_scroll(self, total_trash_msg):
"""This method is used to load more data on scroll down""" """This method is used to load more data on scroll down"""
self.set_mdList(total_trash_msg,total_trash_msg+5) self.set_mdList(total_trash_msg, total_trash_msg + 5)
def delete_permanently(self, data_index, instance, *args): def delete_permanently(self, data_index, instance, *args):
"""Deleting trash mail permanently.""" """Deleting trash mail permanently."""
@ -1232,7 +1264,8 @@ class NavigateApp(App):
self.root.ids.sc17.add_widget(Allmails()) self.root.ids.sc17.add_widget(Allmails())
self.root.ids.scr_mngr.current = 'inbox' self.root.ids.scr_mngr.current = 'inbox'
msg_counter_objs = self.root_window.children[2].children[2].children[0].ids msg_counter_objs = (
self.root_window.children[2].children[2].children[0].ids)
state.sent_count = str( state.sent_count = str(
sqlQuery( sqlQuery(
"SELECT COUNT(*) FROM sent WHERE fromaddress = '{}' and" "SELECT COUNT(*) FROM sent WHERE fromaddress = '{}' and"
@ -1278,12 +1311,16 @@ class NavigateApp(App):
img = identiconGeneration.generate(BMConfigParser().addresses()[0]) img = identiconGeneration.generate(BMConfigParser().addresses()[0])
self.createFolder('./images/default_identicon/') self.createFolder('./images/default_identicon/')
if platform == 'android': if platform == 'android':
# android_path = os.path.expanduser("~/user/0/org.test.bitapp/files/app/") # android_path = os.path.expanduser
android_path = os.path.join(os.environ['ANDROID_PRIVATE'] + '/app/') # ("~/user/0/org.test.bitapp/files/app/")
android_path = os.path.join(
os.environ['ANDROID_PRIVATE'] + '/app/')
img.texture.save('{1}/images/default_identicon/{0}.png'.format( img.texture.save('{1}/images/default_identicon/{0}.png'.format(
BMConfigParser().addresses()[0], android_path)) BMConfigParser().addresses()[0], android_path))
else: else:
img.texture.save('./images/default_identicon/{}.png'.format(BMConfigParser().addresses()[0])) img.texture.save(
'./images/default_identicon/{}.png'.format(
BMConfigParser().addresses()[0]))
return BMConfigParser().addresses()[0] return BMConfigParser().addresses()[0]
return 'Select Address' return 'Select Address'
@ -1300,7 +1337,8 @@ class NavigateApp(App):
def get_default_image(): def get_default_image():
"""Getting default image on address""" """Getting default image on address"""
if BMConfigParser().addresses(): if BMConfigParser().addresses():
return './images/default_identicon/{}.png'.format(BMConfigParser().addresses()[0]) return './images/default_identicon/{}.png'.format(
BMConfigParser().addresses()[0])
return './images/no_identicons.png' return './images/no_identicons.png'
@staticmethod @staticmethod
@ -1313,7 +1351,8 @@ class NavigateApp(App):
def on_key(self, window, key, *args): def on_key(self, window, key, *args):
"""Method is used for going on previous screen.""" """Method is used for going on previous screen."""
if key == 27: if key == 27:
if state.in_search_mode and self.root.ids.scr_mngr.current != "mailDetail": if state.in_search_mode and self.root.ids.scr_mngr.current != (
"mailDetail"):
self.closeSearchScreen() self.closeSearchScreen()
elif self.root.ids.scr_mngr.current == "mailDetail": elif self.root.ids.scr_mngr.current == "mailDetail":
self.root.ids.scr_mngr.current = 'sent'\ self.root.ids.scr_mngr.current = 'sent'\
@ -1369,6 +1408,7 @@ class NavigateApp(App):
self.root.ids.scr_mngr.current = state.search_screen self.root.ids.scr_mngr.current = state.search_screen
def save_draft(self): def save_draft(self):
"""Saving drafts messages"""
composer_objs = self.root composer_objs = self.root
from_addr = str(self.root.ids.sc3.children[1].ids.ti.text) from_addr = str(self.root.ids.sc3.children[1].ids.ti.text)
to_addr = str(self.root.ids.sc3.children[1].ids.txt_input.text) to_addr = str(self.root.ids.sc3.children[1].ids.txt_input.text)
@ -1405,12 +1445,17 @@ class NavigateApp(App):
self.root.ids.toolbar.left_action_items = [ self.root.ids.toolbar.left_action_items = [
['arrow-left', lambda x: self.back_press()]] ['arrow-left', lambda x: self.back_press()]]
self.root.ids.toolbar.right_action_items = [ self.root.ids.toolbar.right_action_items = [
['refresh', lambda x: self.root.ids.sc3.children[1].reset_composer()], ['refresh',
['send', lambda x: self.root.ids.sc3.children[1].send(self)]] lambda x: self.root.ids.sc3.children[1].reset_composer()],
['send',
lambda x: self.root.ids.sc3.children[1].send(self)]]
def set_common_header(self): def set_common_header(self):
self.root.ids.toolbar.right_action_items = [['account-plus', lambda x: self.addingtoaddressbook()]] """Common for all window"""
self.root.ids.toolbar.left_action_items = [['menu', lambda x: self.root.toggle_nav_drawer()]] self.root.ids.toolbar.right_action_items = [
['account-plus', lambda x: self.addingtoaddressbook()]]
self.root.ids.toolbar.left_action_items = [
['menu', lambda x: self.root.toggle_nav_drawer()]]
return return
def back_press(self): def back_press(self):
@ -1418,7 +1463,8 @@ class NavigateApp(App):
self.save_draft() self.save_draft()
if self.root.ids.scr_mngr.current == 'mailDetail' and state.in_search_mode: if self.root.ids.scr_mngr.current == 'mailDetail' and state.in_search_mode:
toolbar_obj = self.root.ids.toolbar toolbar_obj = self.root.ids.toolbar
toolbar_obj.left_action_items = [['arrow-left', lambda x: self.closeSearchScreen()]] toolbar_obj.left_action_items = [
['arrow-left', lambda x: self.closeSearchScreen()]]
toolbar_obj.right_action_items = [] toolbar_obj.right_action_items = []
self.root.ids.toolbar.title = '' self.root.ids.toolbar.title = ''
else: else:
@ -1452,7 +1498,8 @@ class NavigateApp(App):
addr = BMConfigParser().addresses()[0] addr = BMConfigParser().addresses()[0]
first_name = BMConfigParser().get(addr, 'label') first_name = BMConfigParser().get(addr, 'label')
f_name = first_name.split() f_name = first_name.split()
label = f_name[0][:14].capitalize() + '...' if len(f_name[0]) > 15 else f_name[0].capitalize() label = f_name[0][:14].capitalize() + '...' if len(
f_name[0]) > 15 else f_name[0].capitalize()
address = ' (' + addr + '...)' address = ' (' + addr + '...)'
return label + address return label + address
return '' return ''
@ -1463,7 +1510,8 @@ class NavigateApp(App):
state.searcing_text = str(instance.text).strip() state.searcing_text = str(instance.text).strip()
if instance.focus and state.searcing_text: if instance.focus and state.searcing_text:
toolbar_obj = self.root.ids.toolbar toolbar_obj = self.root.ids.toolbar
toolbar_obj.left_action_items = [['arrow-left', lambda x: self.closeSearchScreen()]] toolbar_obj.left_action_items = [
['arrow-left', lambda x: self.closeSearchScreen()]]
toolbar_obj.right_action_items = [] toolbar_obj.right_action_items = []
self.root.ids.toolbar.title = '' self.root.ids.toolbar.title = ''
state.in_search_mode = True state.in_search_mode = True
@ -1472,7 +1520,8 @@ class NavigateApp(App):
"""Function for close search screen""" """Function for close search screen"""
self.set_common_header() self.set_common_header()
address_label = self.current_address_label( address_label = self.current_address_label(
BMConfigParser().get(state.association, 'label'), state.association) BMConfigParser().get(
state.association, 'label'), state.association)
self.root.ids.toolbar.title = address_label self.root.ids.toolbar.title = address_label
state.searcing_text = '' state.searcing_text = ''
self.refreshScreen() self.refreshScreen()
@ -1508,20 +1557,27 @@ class NavigateApp(App):
def set_identicon(self, text): def set_identicon(self, text):
"""This method is use for showing identicon in address spinner""" """This method is use for showing identicon in address spinner"""
img = identiconGeneration.generate(text) img = identiconGeneration.generate(text)
self.root.children[2].children[0].ids.btn.children[1].texture = img.texture self.root.children[2].children[0].ids.btn.children[1].texture = (
img.texture)
def set_mail_detail_header(self): def set_mail_detail_header(self):
"""Method is used for setting the details of the page""" """Method is used for setting the details of the page"""
toolbar_obj = self.root.ids.toolbar toolbar_obj = self.root.ids.toolbar
toolbar_obj.left_action_items = [['arrow-left', lambda x: self.back_press()]] toolbar_obj.left_action_items = [
delete_btn = ['delete-forever', lambda x: self.root.ids.sc14.delete_mail()] ['arrow-left', lambda x: self.back_press()]]
delete_btn = ['delete-forever',
lambda x: self.root.ids.sc14.delete_mail()]
dynamic_list = [] dynamic_list = []
if state.detailPageType == 'inbox': if state.detailPageType == 'inbox':
dynamic_list = [['reply', lambda x: self.root.ids.sc14.inbox_reply()], delete_btn] dynamic_list = [
['reply', lambda x: self.root.ids.sc14.inbox_reply()],
delete_btn]
elif state.detailPageType == 'sent': elif state.detailPageType == 'sent':
dynamic_list = [delete_btn] dynamic_list = [delete_btn]
elif state.detailPageType == 'draft': elif state.detailPageType == 'draft':
dynamic_list = [['pencil', lambda x: self.root.ids.sc14.write_msg(self)], delete_btn] dynamic_list = [
['pencil', lambda x: self.root.ids.sc14.write_msg(self)],
delete_btn]
toolbar_obj.right_action_items = dynamic_list toolbar_obj.right_action_items = dynamic_list
@ -1586,7 +1642,8 @@ class GrashofPopup(Popup):
def checkAddress_valid(self, instance): def checkAddress_valid(self, instance):
"""Checking address is valid or not""" """Checking address is valid or not"""
my_addresses = self.parent.children[1].children[2].children[0].ids.btn.values my_addresses = (
self.parent.children[1].children[2].children[0].ids.btn.values)
add_book = [addr[1] for addr in kivy_helper_search.search_sql( add_book = [addr[1] for addr in kivy_helper_search.search_sql(
folder="addressbook")] folder="addressbook")]
entered_text = str(instance.text).strip() entered_text = str(instance.text).strip()
@ -1607,7 +1664,9 @@ class GrashofPopup(Popup):
def checkLabel_valid(self, instance): def checkLabel_valid(self, instance):
"""Checking address label is unique of not""" """Checking address label is unique of not"""
entered_label = instance.text.strip() entered_label = instance.text.strip()
addr_labels = [labels[0] for labels in kivy_helper_search.search_sql(folder="addressbook")] addr_labels = [labels[0]
for labels in kivy_helper_search.search_sql(
folder="addressbook")]
if entered_label in addr_labels: if entered_label in addr_labels:
self.ids.label.error = True self.ids.label.error = True
self.ids.label.helper_text = 'label name already exists.' self.ids.label.helper_text = 'label name already exists.'
@ -1725,22 +1784,26 @@ class MailDetail(Screen):
sqlExecute( sqlExecute(
"UPDATE inbox SET folder = 'trash' WHERE" "UPDATE inbox SET folder = 'trash' WHERE"
" msgid = ?;", str(state.mail_id)) " msgid = ?;", str(state.mail_id))
msg_count_objs.inbox_cnt.badge_text = str(int(state.inbox_count) - 1) msg_count_objs.inbox_cnt.badge_text = str(
int(state.inbox_count) - 1)
state.inbox_count = str(int(state.inbox_count) - 1) state.inbox_count = str(int(state.inbox_count) - 1)
self.parent.screens[0].ids.ml.clear_widgets() self.parent.screens[0].ids.ml.clear_widgets()
self.parent.screens[0].loadMessagelist(state.association) self.parent.screens[0].loadMessagelist(state.association)
elif state.detailPageType == 'draft': elif state.detailPageType == 'draft':
sqlExecute("DELETE FROM sent WHERE ackdata = ?;", str( sqlExecute("DELETE FROM sent WHERE ackdata = ?;", str(
state.mail_id)) state.mail_id))
msg_count_objs.draft_cnt.badge_text = str(int(state.draft_count) - 1) msg_count_objs.draft_cnt.badge_text = str(
int(state.draft_count) - 1)
state.draft_count = str(int(state.draft_count) - 1) state.draft_count = str(int(state.draft_count) - 1)
self.parent.screens[15].clear_widgets() self.parent.screens[15].clear_widgets()
self.parent.screens[15].add_widget(Draft()) self.parent.screens[15].add_widget(Draft())
self.parent.current = 'allmails' if state.is_allmail else state.detailPageType self.parent.current = 'allmails' if state.is_allmail else state.detailPageType
if state.detailPageType != 'draft': if state.detailPageType != 'draft':
msg_count_objs.trash_cnt.badge_text = str(int(state.trash_count) + 1) msg_count_objs.trash_cnt.badge_text = str(
msg_count_objs.allmail_cnt.badge_text = str(int(state.all_count) - 1) int(state.trash_count) + 1)
msg_count_objs.allmail_cnt.badge_text = str(
int(state.all_count) - 1)
state.trash_count = str(int(state.trash_count) + 1) state.trash_count = str(int(state.trash_count) + 1)
state.all_count = str(int(state.all_count) - 1) state.all_count = str(int(state.all_count) - 1)
self.parent.screens[4].clear_widgets() self.parent.screens[4].clear_widgets()
@ -1772,11 +1835,13 @@ class MailDetail(Screen):
def write_msg(self, navApp): def write_msg(self, navApp):
"""Method used to write on draft mail.""" """Method used to write on draft mail."""
state.send_draft_mail = state.mail_id state.send_draft_mail = state.mail_id
composer_ids = self.parent.parent.parent.parent.parent.ids.sc3.children[1].ids composer_ids = (
self.parent.parent.parent.parent.parent.ids.sc3.children[1].ids)
composer_ids.ti.text = state.write_msg['from_addr'] composer_ids.ti.text = state.write_msg['from_addr']
composer_ids.btn.text = state.write_msg['from_addr'] composer_ids.btn.text = state.write_msg['from_addr']
composer_ids.txt_input.text = state.write_msg['to_addr'] composer_ids.txt_input.text = state.write_msg['to_addr']
composer_ids.subject.text = state.write_msg['subject'] if state.write_msg['subject'] != '(no subject)' else '' composer_ids.subject.text = state.write_msg[
'subject'] if state.write_msg['subject'] != '(no subject)' else ''
composer_ids.body.text = state.write_msg['message'] composer_ids.body.text = state.write_msg['message']
self.parent.current = 'create' self.parent.current = 'create'
navApp.set_navbar_for_composer() navApp.set_navbar_for_composer()
@ -1853,7 +1918,8 @@ class AddbookDetailPopup(Popup):
if label and label not in stored_labels: if label and label not in stored_labels:
sqlExecute( sqlExecute(
"UPDATE addressbook SET label = '{}' WHERE" "UPDATE addressbook SET label = '{}' WHERE"
" address = '{}';".format(str(self.ids.add_label.text), address)) " address = '{}';".format(
str(self.ids.add_label.text), address))
self.parent.children[1].ids.sc11.ids.ml.clear_widgets() self.parent.children[1].ids.sc11.ids.ml.clear_widgets()
self.parent.children[1].ids.sc11.loadAddresslist(None, 'All', '') self.parent.children[1].ids.sc11.loadAddresslist(None, 'All', '')
self.dismiss() self.dismiss()
@ -1936,12 +2002,13 @@ class Draft(Screen):
self.queryreturn = kivy_helper_search.search_sql( self.queryreturn = kivy_helper_search.search_sql(
xAddress, account, "draft", where, what, False) xAddress, account, "draft", where, what, False)
if state.msg_counter_objs: if state.msg_counter_objs:
state.msg_counter_objs.draft_cnt.badge_text = str(len(self.queryreturn)) state.msg_counter_objs.draft_cnt.badge_text = str(
len(self.queryreturn))
if self.queryreturn: if self.queryreturn:
src_mng_obj = state.kivyapp.root.children[2].children[0].ids src_mng_obj = state.kivyapp.root.children[2].children[0].ids
src_mng_obj.draft_cnt.badge_text = str(len(self.queryreturn)) src_mng_obj.draft_cnt.badge_text = str(len(self.queryreturn))
state.draft_count = str(len(self.queryreturn)) state.draft_count = str(len(self.queryreturn))
self.set_mdList(0,20) self.set_mdList(0, 20)
self.ids.scroll_y.bind(scroll_y=self.check_scroll_y) self.ids.scroll_y.bind(scroll_y=self.check_scroll_y)
else: else:
content = MDLabel( content = MDLabel(
@ -1999,13 +2066,14 @@ class Draft(Screen):
total_draft_msg = len(self.ids.ml.children) total_draft_msg = len(self.ids.ml.children)
if total_draft_msg != len(self.queryreturn): if total_draft_msg != len(self.queryreturn):
self.update_draft_screen_on_scroll(total_draft_msg) self.update_draft_screen_on_scroll(total_draft_msg)
self.has_refreshed = True if total_draft_msg != len(self.queryreturn) else False self.has_refreshed = True if total_draft_msg != len(
self.queryreturn) else False
else: else:
pass pass
def update_draft_screen_on_scroll(self, total_draft_msg): def update_draft_screen_on_scroll(self, total_draft_msg):
"""This method is used to load more data on scroll down""" """This method is used to load more data on scroll down"""
self.set_mdList(total_draft_msg,total_draft_msg+5) self.set_mdList(total_draft_msg, total_draft_msg + 5)
def draft_detail(self, ackdata, *args): def draft_detail(self, ackdata, *args):
"""Method used to show draft Details.""" """Method used to show draft Details."""
@ -2024,7 +2092,8 @@ class Draft(Screen):
sqlExecute("DELETE FROM sent WHERE ackdata = ?;", str( sqlExecute("DELETE FROM sent WHERE ackdata = ?;", str(
data_index)) data_index))
try: try:
msg_count_objs = self.parent.parent.parent.parent.children[2].children[0].ids msg_count_objs = (
self.parent.parent.parent.parent.children[2].children[0].ids)
except Exception: except Exception:
msg_count_objs = self.parent.parent.parent.parent.parent.children[ msg_count_objs = self.parent.parent.parent.parent.parent.children[
2].children[0].ids 2].children[0].ids
@ -2048,7 +2117,8 @@ class Draft(Screen):
sendMessageToPeople = True sendMessageToPeople = True
if sendMessageToPeople: if sendMessageToPeople:
from addresses import decodeAddress from addresses import decodeAddress
status, addressVersionNumber, streamNumber, ripe = decodeAddress(toAddress) status, addressVersionNumber, streamNumber, ripe = decodeAddress(
toAddress)
from addresses import addBMIfNotPresent from addresses import addBMIfNotPresent
toAddress = addBMIfNotPresent(toAddress) toAddress = addBMIfNotPresent(toAddress)
statusIconColor = 'red' statusIconColor = 'red'
@ -2121,12 +2191,14 @@ class Allmails(Screen):
def loadMessagelist(self, account, where="", what=""): def loadMessagelist(self, account, where="", what=""):
"""Load Inbox, Sent anf Draft list of messages.""" """Load Inbox, Sent anf Draft list of messages."""
self.all_mails = sqlQuery( self.all_mails = sqlQuery(
"SELECT toaddress, fromaddress, subject, message, folder, ackdata As id, DATE(lastactiontime)" "SELECT toaddress, fromaddress, subject, message, folder, ackdata"
" As actionTime FROM sent WHERE folder = 'sent' UNION" " As id, DATE(lastactiontime) As actionTime FROM sent WHERE"
" SELECT toaddress, fromaddress, subject, message, folder, msgid As id, DATE(received) As" " folder = 'sent' UNION SELECT toaddress, fromaddress, subject,"
" actionTime FROM inbox WHERE folder = 'inbox' ORDER BY actionTime DESC") " message, folder, msgid As id, DATE(received) As actionTime"
" FROM inbox WHERE folder = 'inbox' ORDER BY actionTime DESC")
if self.all_mails: if self.all_mails:
state.kivyapp.root.children[2].children[0].ids.allmail_cnt.badge_text = str(len(self.all_mails)) state.kivyapp.root.children[2].children[0].ids.allmail_cnt.badge_text = str(
len(self.all_mails))
state.all_count = str(len(self.all_mails)) state.all_count = str(len(self.all_mails))
self.set_mdlist(0, 20) self.set_mdlist(0, 20)
self.ids.refresh_layout.bind(scroll_y=self.check_scroll_y) self.ids.refresh_layout.bind(scroll_y=self.check_scroll_y)
@ -2148,7 +2220,8 @@ class Allmails(Screen):
text=item[1], text=item[1],
secondary_text=item[2][:50] + '........' if len( secondary_text=item[2][:50] + '........' if len(
item[2]) >= 50 else ( item[2]) >= 50 else (
item[2] + ',' + item[3].replace('\n', ''))[0:50] + '........', item[2] + ',' + item[3].replace(
'\n', ''))[0:50] + '........',
theme_text_color='Custom', theme_text_color='Custom',
text_color=NavigateApp().theme_cls.primary_color) text_color=NavigateApp().theme_cls.primary_color)
meny.add_widget(AvatarSampleWidget( meny.add_widget(AvatarSampleWidget(
@ -2178,14 +2251,17 @@ class Allmails(Screen):
self.ids.refresh_layout.scroll_y = .06 self.ids.refresh_layout.scroll_y = .06
load_more = len(self.ids.ml.children) load_more = len(self.ids.ml.children)
self.updating_allmail(load_more) self.updating_allmail(load_more)
pass else:
pass
def updating_allmail(self, load_more): def updating_allmail(self, load_more):
"""This method is used to update the all mail listing value on the scroll of screen""" """This method is used to update the all mail
listing value on the scroll of screen"""
if self.all_mails and load_more != len(self.all_mails): if self.all_mails and load_more != len(self.all_mails):
state.all_count = str(len(self.all_mails)) state.all_count = str(len(self.all_mails))
self.set_mdlist(load_more, load_more+5) self.set_mdlist(load_more, load_more + 5)
self.has_refreshed = True if load_more != len(self.all_mails) else False self.has_refreshed = True if load_more != len(
self.all_mails) else False
def mail_detail(self, unique_id, folder, *args): def mail_detail(self, unique_id, folder, *args):
"""Load sent and inbox mail details.""" """Load sent and inbox mail details."""
@ -2259,6 +2335,7 @@ class Allmails(Screen):
Clock.schedule_once(refresh_callback, 1) Clock.schedule_once(refresh_callback, 1)
def set_root_layout(self): def set_root_layout(self):
"""Setting root layout"""
try: try:
return self.manager.parent.parent return self.manager.parent.parent
except Exception as e: except Exception as e:
@ -2297,6 +2374,7 @@ class Spam(Screen):
class LoadingPopup(Popup): class LoadingPopup(Popup):
"""Load Popup""" """Load Popup"""
def __init__(self, **kwargs): def __init__(self, **kwargs):
super(LoadingPopup, self).__init__(**kwargs) super(LoadingPopup, self).__init__(**kwargs)
# call dismiss_popup in 2 seconds # call dismiss_popup in 2 seconds