From ace05e151ceb20e9a4b95563782e70096af029f5 Mon Sep 17 00:00:00 2001 From: Navjot Date: Tue, 24 Sep 2019 20:51:34 +0530 Subject: [PATCH 1/6] worked on android application popup responsive functionality --- src/bitmessagekivy/main.kv | 23 +++++--- src/bitmessagekivy/mpybit.py | 51 +++--------------- .../BM-2cXQpSjUCAf8fvAQCvsrLDVkLnDAkSjRGN.png | Bin 461 -> 0 bytes .../BM-2cXewfSjCgGMPB5qYwUSCD2Q57bGLWgD3C.png | Bin 475 -> 0 bytes 4 files changed, 23 insertions(+), 51 deletions(-) delete mode 100644 src/images/default_identicon/BM-2cXQpSjUCAf8fvAQCvsrLDVkLnDAkSjRGN.png delete mode 100644 src/images/default_identicon/BM-2cXewfSjCgGMPB5qYwUSCD2Q57bGLWgD3C.png diff --git a/src/bitmessagekivy/main.kv b/src/bitmessagekivy/main.kv index 1fdb29f0..920ca2ef 100644 --- a/src/bitmessagekivy/main.kv +++ b/src/bitmessagekivy/main.kv @@ -72,9 +72,9 @@ on_text:app.getCurrentAccountData(self.text) Image: source: app.get_default_image() - x: self.width/4-2 - y: self.parent.y + self.parent.height/2 - self.height + 14 - size: 28, 28 + x: self.width/6 + y: self.parent.y + self.parent.height/4 + size: self.parent.height/2, self.parent.height/2 ArrowImg: NavigationDrawerIconButton: id: inbox_cnt @@ -821,11 +821,13 @@ NavigationLayout: : id: popup + size_hint : (None,None) + height: 2*(label.height + address.height) + 10 + width :app.window_size[0] - app.window_size[0]/10 title: 'add contact\'s' background: './images/popup.jpeg' title_size: sp(20) title_color: 0.4, 0.3765, 0.3451, 1 - size_hint: 1, 1 auto_dismiss: False separator_color: 0.3529, 0.3922, 0.102, 0.7 BoxLayout: @@ -1050,19 +1052,23 @@ NavigationLayout: : id: myadd_popup + size_hint : (None,None) + height: 4.5*(myaddr_label.height+ my_add_btn.children[0].height) + width :app.window_size[0] - app.window_size[0]/10 background: './images/popup.jpeg' - separator_height: 0 auto_dismiss: False + separator_height: 0 BoxLayout: + id: myadd_popup_box size_hint_y: None spacing:dp(70) - id: myadd_popup_box orientation: 'vertical' BoxLayout: size_hint_y: None orientation: 'vertical' spacing:dp(25) MDLabel: + id: myaddr_label font_style: 'Title' theme_text_color: 'Primary' text: "Label" @@ -1087,6 +1093,7 @@ NavigationLayout: font_size: '15sp' halign: 'left' BoxLayout: + id: my_add_btn spacing:5 orientation: 'horizontal' MDRaisedButton: @@ -1125,6 +1132,9 @@ NavigationLayout: : id: addbook_popup + size_hint : (None,None) + height: 4*(add_label.height) + width :app.window_size[0] - app.window_size[0]/10 background: './images/popup.jpeg' separator_height: 0 auto_dismiss: False @@ -1165,6 +1175,7 @@ NavigationLayout: font_size: '15sp' halign: 'left' BoxLayout: + id: addbook_btn spacing:5 orientation: 'horizontal' MDRaisedButton: diff --git a/src/bitmessagekivy/mpybit.py b/src/bitmessagekivy/mpybit.py index ae69a133..0eb2c1e3 100644 --- a/src/bitmessagekivy/mpybit.py +++ b/src/bitmessagekivy/mpybit.py @@ -1036,14 +1036,6 @@ class NavigateApp(App): # pylint: disable=too-many-public-methods state.association = text self.root.ids.sc1.clear_widgets() self.root.ids.sc1.add_widget(Inbox()) - # self.root.ids.sc4.clear_widgets() - # self.root.ids.sc5.clear_widgets() - # self.root.ids.sc16.clear_widgets() - # self.root.ids.sc17.clear_widgets() - # self.root.ids.sc4.add_widget(Sent()) - # self.root.ids.sc5.add_widget(Trash()) - # self.root.ids.sc16.add_widget(Draft()) - # self.root.ids.sc17.add_widget(Allmails()) self.root.ids.scr_mngr.current = 'inbox' msg_counter_objs = \ @@ -1091,7 +1083,12 @@ class NavigateApp(App): # pylint: disable=too-many-public-methods if BMConfigParser().addresses(): img = identiconGeneration.generate(BMConfigParser().addresses()[0]) self.createFolder('./images/default_identicon/') - img.texture.save('./images/default_identicon/{}.png'.format(BMConfigParser().addresses()[0])) + if platform == 'android': + # android_path = os.path.expanduser("~/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(BMConfigParser().addresses()[0], android_path)) + else: + img.texture.save('./images/default_identicon/{}.png'.format(BMConfigParser().addresses()[0])) return BMConfigParser().addresses()[0] return 'Select Address' @@ -1125,8 +1122,6 @@ class NavigateApp(App): # pylint: disable=too-many-public-methods self.root.ids.scr_mngr.current = 'sent'\ if state.detailPageType == 'sent' else 'inbox' \ if state.detailPageType == 'inbox' else 'draft' - # if state.detailPageType in ['sent', 'inbox']: - # self.add_search_bar() self.back_press() elif self.root.ids.scr_mngr.current == "create": composer_objs = self.root @@ -1309,13 +1304,6 @@ class GrashofPopup(Popup): def __init__(self, **kwargs): """Grash of pop screen settings.""" super(GrashofPopup, self).__init__(**kwargs) - print("sssssssssssssssssssiiiiiiiiiiiiiiizzzzzzzzzzeeeeee...............", state.screen_density) - if state.screen_density[0] <= 720: - self.size_hint_y = 0.4 - self.size_hint_x = 0.9 - else: - self.size_hint_y = 0.42 - self.size_hint_x = 0.7 def savecontact(self): """Method is used for Saving Contacts.""" @@ -1497,9 +1485,6 @@ class MailDetail(Screen): sqlExecute( "UPDATE inbox SET folder = 'trash' WHERE \ received = {};".format(state.sentMailTime)) - # msg_count_objs.inbox_cnt.badge_text = str( - # int(state.inbox_count) - 1) - # state.inbox_count = str(int(state.inbox_count) - 1) self.parent.screens[0].clear_widgets() self.parent.screens[0].add_widget(Inbox()) elif state.detailPageType == 'draft': @@ -1574,12 +1559,6 @@ class MyaddDetailPopup(Popup): def __init__(self, **kwargs): """My Address Details screen setting.""" super(MyaddDetailPopup, self).__init__(**kwargs) - if state.screen_density[0] <= 720: - self.size_hint_y = 0.32 - self.size_hint_x = 0.9 - else: - self.size_hint_y = 0.32 - self.size_hint_x = 0.7 def set_address(self, address, label): """Getting address for displaying details on popup.""" @@ -1612,12 +1591,6 @@ class AddbookDetailPopup(Popup): def __init__(self, **kwargs): """Method used set screen of address detail page.""" super(AddbookDetailPopup, self).__init__(**kwargs) - if state.screen_density[0] <= 720: - self.size_hint_y = 0.35 - self.size_hint_x = 0.95 - else: - self.size_hint_y = 0.35 - self.size_hint_x = 0.7 def set_addbook_data(self, address, label): """Getting address book data for detial dipaly.""" @@ -1694,10 +1667,6 @@ class Draft(Screen): xAddress, account, "draft", where, what, False) if state.msg_counter_objs: state.msg_counter_objs.draft_cnt.badge_text = str(len(queryreturn)) - # state.all_count = str(int(state.all_count) + 1) - # state.msg_counter_objs.allmail_cnt.badge_text = state.all_count - # state.msg_counter_objs = None - if queryreturn: src_mng_obj = state.kivyapp.root.children[2].children[0].ids src_mng_obj.draft_cnt.badge_text = str(len(queryreturn)) @@ -1772,13 +1741,7 @@ class Draft(Screen): if int(state.draft_count) > 0: msg_count_objs.draft_cnt.badge_text = str( int(state.draft_count) - 1) - # msg_count_objs.allmail_cnt.badge_text = str( - # int(state.all_count) - 1) - # msg_count_objs.trash_cnt.badge_text = str( - # int(state.trash_count) + 1) state.draft_count = str(int(state.draft_count) - 1) - # state.all_count = str(int(state.all_count) - 1) - # state.trash_count = str(int(state.trash_count) + 1) self.ids.ml.remove_widget(instance.parent.parent) toast('Deleted') @@ -1840,8 +1803,6 @@ class CustomSpinner(Spinner): def __init__(self, *args, **kwargs): """Method used for setting size of spinner.""" super(CustomSpinner, self).__init__(*args, **kwargs) - # max_value = 2.8 - # self.dropdown_cls.max_height = self.height / 2 * max_value + max_value * 4 self.dropdown_cls.max_height = Window.size[1] / 3 diff --git a/src/images/default_identicon/BM-2cXQpSjUCAf8fvAQCvsrLDVkLnDAkSjRGN.png b/src/images/default_identicon/BM-2cXQpSjUCAf8fvAQCvsrLDVkLnDAkSjRGN.png deleted file mode 100644 index 22def0cd17aa71234a0ab0ad8237d8795055e7e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrV4ULV;uumf=k1-1yiATf3Z%_+g}Yo_3`3Vh(#~4LV0gIt_b?d2K{=@9ASpvIdCKIWUk%% zP43a<{r?Wk{I$^JBpV@*Ky^y*7BuFk|yI+#2Mtc{jm*(GOW^ fqJoW6;T`WBd$}JI#g{z=MiYaltDnm{r-UW|*9?{7 diff --git a/src/images/default_identicon/BM-2cXewfSjCgGMPB5qYwUSCD2Q57bGLWgD3C.png b/src/images/default_identicon/BM-2cXewfSjCgGMPB5qYwUSCD2Q57bGLWgD3C.png deleted file mode 100644 index c886f8fc069f541c653bb2c07092ae61037b5a95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 475 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrU|i(s;uuoF`1aODUseYmR>xTj za)r3sg!BqOyq!B$uYQvHp7r)ifBy=$VtB+Tz~4~8aD-Vwj^QIi2fKp}r9#UY|J42O z*>jqa;lN#n3U&sDa^?rJ3=DU88_F3N3d|Yq;gfj&HM4y;4`)MbwHkB6!+9qeB6g%3 zF^IjJ$wQIQXVsjS50^19H0);lz{kMwj_rUo1H%q!hW88%5AqoHFyoeBm`c5nK?>zP Z^(S8Q{r0V21PmDl22WQ%mvv4FO#s!zm}&q3 From 8f09140513a6fb86ee12165e36bf1353dce3ac21 Mon Sep 17 00:00:00 2001 From: lakshyacis Date: Fri, 20 Sep 2019 16:49:04 +0530 Subject: [PATCH 2/6] Code fixes 3 regarding PR#11 --- .../recipes/kivymd/__init__.py | 19 ++++--- src/bitmessagekivy/identiconGeneration.py | 4 +- src/bitmessagekivy/kivy_helper_search.py | 16 ++++-- src/bitmessagekivy/mpybit.py | 12 +++-- src/class_singleCleaner.py | 18 ++++--- src/class_singleWorker.py | 9 ++-- src/messagetypes/__init__.py | 13 ++++- src/messagetypes/message.py | 13 ++++- src/messagetypes/vote.py | 13 ++++- src/paths.py | 47 ++++++++++++----- src/pyelliptic/openssl.py | 4 +- src/state.py | 28 +++++----- src/tr.py | 51 +++++++++++++------ 13 files changed, 171 insertions(+), 76 deletions(-) diff --git a/src/bitmessagekivy/android/python-for-android/recipes/kivymd/__init__.py b/src/bitmessagekivy/android/python-for-android/recipes/kivymd/__init__.py index d7e91a90..5a29bba7 100644 --- a/src/bitmessagekivy/android/python-for-android/recipes/kivymd/__init__.py +++ b/src/bitmessagekivy/android/python-for-android/recipes/kivymd/__init__.py @@ -1,24 +1,28 @@ -from os import environ -from os.path import exists, join +""" +src/bitmessagekivy/android/python-for-android/recipes/kivymd/__init__.py +================================= +""" +# pylint: disable=import-error +from os.path import join -import sh -from pythonforandroid.logger import shprint, info_main, info from pythonforandroid.recipe import PythonRecipe # from pythonforandroid.util import ensure_dir class KivyMDRecipe(PythonRecipe): - # This recipe installs KivyMD into the android dist from source + """This recipe installs KivyMD into the android dist from source""" version = 'master' url = 'https://github.com/surbhicis/kivymd/archive/master.zip' depends = ['kivy'] site_packages_name = 'kivymd' call_hostpython_via_targetpython = False - def should_build(self, arch): + def should_build(self, arch): # pylint: disable=no-self-use, unused-argument + """Method helps to build the application""" return True def get_recipe_env(self, arch): + """Method is used for getting all the env paths""" env = super(KivyMDRecipe, self).get_recipe_env(arch) env['PYTHON_ROOT'] = self.ctx.get_python_install_dir() env['CFLAGS'] += ' -I' + env['PYTHON_ROOT'] + '/include/python2.7' @@ -30,8 +34,7 @@ class KivyMDRecipe(PythonRecipe): join(self.ctx.bootstrap.build_dir, 'jni', 'SDL', 'include'), join(self.ctx.bootstrap.build_dir, 'jni', 'SDL2_image'), join(self.ctx.bootstrap.build_dir, 'jni', 'SDL2_mixer'), - join(self.ctx.bootstrap.build_dir, 'jni', 'SDL2_ttf'), - ]) + join(self.ctx.bootstrap.build_dir, 'jni', 'SDL2_ttf'), ]) return env diff --git a/src/bitmessagekivy/identiconGeneration.py b/src/bitmessagekivy/identiconGeneration.py index 43e0dbc5..a5dcf3d0 100644 --- a/src/bitmessagekivy/identiconGeneration.py +++ b/src/bitmessagekivy/identiconGeneration.py @@ -2,11 +2,13 @@ src/identiconGeneration.py ================================= """ +# pylint: disable=import-error import hashlib +from io import BytesIO + from PIL import Image from kivy.core.image import Image as CoreImage from kivy.uix.image import Image as kiImage -from io import BytesIO """ Core classes for loading images and converting them to a Texture. The raw image data can be keep in memory for further access """ diff --git a/src/bitmessagekivy/kivy_helper_search.py b/src/bitmessagekivy/kivy_helper_search.py index e2e962c0..a1fe4a99 100644 --- a/src/bitmessagekivy/kivy_helper_search.py +++ b/src/bitmessagekivy/kivy_helper_search.py @@ -1,7 +1,13 @@ -from helper_sql import * +""" +src/bitmessagekivy/kivy_helper_search.py +================================= +""" +from helper_sql import sqlQuery def search_sql(xAddress="toaddress", account=None, folder="inbox", where=None, what=None, unreadOnly=False): + """Method helping for searching mails""" + # pylint: disable=too-many-arguments, too-many-branches if what is not None and what != "": what = "%" + what + "%" else: @@ -9,7 +15,7 @@ def search_sql(xAddress="toaddress", account=None, folder="inbox", where=None, w if folder == "sent" or folder == "draft": sqlStatementBase = ''' - SELECT toaddress, fromaddress, subject, message, status, ackdata, lastactiontime + SELECT toaddress, fromaddress, subject, message, status, ackdata, lastactiontime FROM sent ''' elif folder == "addressbook": sqlStatementBase = '''SELECT label, address From addressbook ''' @@ -27,7 +33,7 @@ def search_sql(xAddress="toaddress", account=None, folder="inbox", where=None, w else: sqlStatementParts.append(xAddress + " = ? ") sqlArguments.append(account) - if folder is not "addressbook": + if folder != "addressbook": if folder is not None: if folder == "new": folder = "inbox" @@ -50,10 +56,10 @@ def search_sql(xAddress="toaddress", account=None, folder="inbox", where=None, w sqlStatementParts.append(filter_col) if unreadOnly: sqlStatementParts.append("read = 0") - if len(sqlStatementParts) > 0: + if sqlStatementParts: sqlStatementBase += "WHERE " + " AND ".join(sqlStatementParts) if folder == "sent": sqlStatementBase += " ORDER BY lastactiontime DESC" elif folder == "inbox": sqlStatementBase += " ORDER BY received DESC" - return sqlQuery(sqlStatementBase, sqlArguments) \ No newline at end of file + return sqlQuery(sqlStatementBase, sqlArguments) diff --git a/src/bitmessagekivy/mpybit.py b/src/bitmessagekivy/mpybit.py index 0eb2c1e3..cb4c4fda 100644 --- a/src/bitmessagekivy/mpybit.py +++ b/src/bitmessagekivy/mpybit.py @@ -2,6 +2,7 @@ src/bitmessagekivy/mpybit.py ================================= """ +# pylint: disable=relative-import, unused-variable, import-error, no-name-in-module, too-many-lines import os import time from functools import partial @@ -55,11 +56,8 @@ import queues from semaphores import kivyuisignaler import state from uikivysignaler import UIkivySignaler -# pylint: disable=unused-argument, too-few-public-methods, import-error -import identiconGeneration -import os -from kivy.core.clipboard import Clipboard +import identiconGeneration # pylint: disable=unused-argument, too-few-public-methods @@ -1485,6 +1483,9 @@ class MailDetail(Screen): sqlExecute( "UPDATE inbox SET folder = 'trash' WHERE \ received = {};".format(state.sentMailTime)) + # msg_count_objs.inbox_cnt.badge_text = str( + # int(state.inbox_count) - 1) + # state.inbox_count = str(int(state.inbox_count) - 1) self.parent.screens[0].clear_widgets() self.parent.screens[0].add_widget(Inbox()) elif state.detailPageType == 'draft': @@ -1987,7 +1988,8 @@ class Archieve(Screen): pass + class Spam(Screen): """Spam Screen show widgets of page.""" - pass \ No newline at end of file + pass diff --git a/src/class_singleCleaner.py b/src/class_singleCleaner.py index eb67fcef..9a2916c7 100644 --- a/src/class_singleCleaner.py +++ b/src/class_singleCleaner.py @@ -17,11 +17,11 @@ resends getpubkey messages in 5 days (then 10 days, then 20 days, etc...) resends msg messages in 5 days (then 10 days, then 20 days, etc...) """ - +# pylint: disable=relative-import, protected-access import gc import os -import shared import time +import shared import tr from bmconfigparser import BMConfigParser @@ -36,11 +36,12 @@ import state class singleCleaner(StoppableThread): + """Base method that Cleanup knownnodes and handle possible severe exception""" name = "singleCleaner" cycleLength = 300 expireDiscoveredPeers = 300 - def run(self): + def run(self): # pylint: disable=too-many-branches gc.disable() timeWeLastClearedInventoryAndPubkeysTables = 0 try: @@ -73,7 +74,7 @@ class singleCleaner(StoppableThread): # If we are running as a daemon then we are going to fill up the UI # queue which will never be handled by a UI. We should clear it to # save memory. - # FIXME redundant? + # ..FIXME redundant? if shared.thisapp.daemon or not state.enableGUI: queues.UISignalQueue.queue.clear() if timeWeLastClearedInventoryAndPubkeysTables < \ @@ -128,9 +129,10 @@ class singleCleaner(StoppableThread): "MainWindow", 'Alert: Your disk or data storage volume' ' is full. Bitmessage will now exit.'), - True) + True) )) - # FIXME redundant? + # ..FIXME redundant? + # pylint: disable=no-member if shared.daemon or not state.enableGUI: os._exit(1) @@ -153,7 +155,7 @@ class singleCleaner(StoppableThread): del state.discoveredPeers[k] except KeyError: pass - # TODO: cleanup pending upload / download + # ..TODO: cleanup pending upload / download gc.collect() @@ -162,6 +164,7 @@ class singleCleaner(StoppableThread): def resendPubkeyRequest(address): + """After a long time, method send getpubkey request""" logger.debug( 'It has been a long time and we haven\'t heard a response to our' ' getpubkey request. Sending again.' @@ -186,6 +189,7 @@ def resendPubkeyRequest(address): def resendMsg(ackdata): + """After a long time, method send acknowledgement msg""" logger.debug( 'It has been a long time and we haven\'t heard an acknowledgement' ' to our msg. Sending again.' diff --git a/src/class_singleWorker.py b/src/class_singleWorker.py index ca8c0b95..74343459 100644 --- a/src/class_singleWorker.py +++ b/src/class_singleWorker.py @@ -2,8 +2,8 @@ src/class_singleWorker.py ========================= """ -# pylint: disable=protected-access,too-many-branches,too-many-statements,no-self-use,too-many-lines,too-many-locals - +# pylint: disable=protected-access,too-many-branches,too-many-statements +# pylint: disable=no-self-use,too-many-lines,too-many-locals,relative-import from __future__ import division import hashlib @@ -34,6 +34,7 @@ from inventory import Inventory # This thread, of which there is only one, does the heavy lifting: # calculating POWs. + def sizeof_fmt(num, suffix='h/s'): """Format hashes per seconds nicely (SI prefix)""" @@ -469,7 +470,7 @@ class singleWorker(StoppableThread): def sendOnionPeerObj(self, peer=None): """Send onionpeer object representing peer""" if not peer: # find own onionhostname - for peer in state.ownAddresses: + for peer in state.ownAddresses: # pylint: disable=redefined-argument-from-local if peer.host.endswith('.onion'): break else: @@ -478,7 +479,7 @@ class singleWorker(StoppableThread): embeddedTime = int(time.time() + TTL) streamNumber = 1 # Don't know yet what should be here objectType = protocol.OBJECT_ONIONPEER - # FIXME: ideally the objectPayload should be signed + # ..FIXME: ideally the objectPayload should be signed objectPayload = encodeVarint(peer.port) + protocol.encodeHost(peer.host) tag = calculateInventoryHash(objectPayload) diff --git a/src/messagetypes/__init__.py b/src/messagetypes/__init__.py index ad1aee9c..95eee595 100644 --- a/src/messagetypes/__init__.py +++ b/src/messagetypes/__init__.py @@ -1,3 +1,8 @@ +""" +src/messagetypes/__init__.py +============================ +""" +# pylint: disable=import-error from importlib import import_module from os import path, listdir from string import lower @@ -9,12 +14,15 @@ from debug import logger import messagetypes import paths -class MsgBase(object): - def encode(self): + +class MsgBase(object): # pylint: disable=too-few-public-methods + """Base class for message types""" + def __init__(self): self.data = {"": lower(type(self).__name__)} def constructObject(data): + """Construct an object""" whitelist = ["message"] if data[""] not in whitelist: return None @@ -35,6 +43,7 @@ def constructObject(data): else: return returnObj + if paths.frozen is not None or platform == "android": import messagetypes.message import messagetypes.vote diff --git a/src/messagetypes/message.py b/src/messagetypes/message.py index f52c6b35..263a2e4a 100644 --- a/src/messagetypes/message.py +++ b/src/messagetypes/message.py @@ -1,13 +1,21 @@ +""" +src/messagetypes/message.py +================================= +""" from debug import logger from messagetypes import MsgBase +# pylint: disable=attribute-defined-outside-init class Message(MsgBase): - def __init__(self): + """Base method, helps to decode, encode and process the message""" + def __init__(self): # pylint: disable=super-init-not-called return def decode(self, data): + """Method used for decoding the message""" # UTF-8 and variable type validator + # pylint: disable=unidiomatic-typecheck if type(data["subject"]) is str: self.subject = unicode(data["subject"], 'utf-8', 'replace') else: @@ -18,6 +26,8 @@ class Message(MsgBase): self.body = unicode(str(data["body"]), 'utf-8', 'replace') def encode(self, data): + """Method used for encoding the message""" + # pylint: disable=no-member super(Message, self).encode() try: self.data["subject"] = data["subject"] @@ -27,5 +37,6 @@ class Message(MsgBase): return self.data def process(self): + """Method used for process the message""" logger.debug("Subject: %i bytes", len(self.subject)) logger.debug("Body: %i bytes", len(self.body)) diff --git a/src/messagetypes/vote.py b/src/messagetypes/vote.py index df8d267f..a77e1cc7 100644 --- a/src/messagetypes/vote.py +++ b/src/messagetypes/vote.py @@ -1,15 +1,25 @@ +""" +src/messagetypes/vote.py +================================= +""" from debug import logger from messagetypes import MsgBase +# pylint: disable=attribute-defined-outside-init + class Vote(MsgBase): - def __init__(self): + """Base method, helps to decode, encode and process the message""" + def __init__(self): # pylint: disable=super-init-not-called return def decode(self, data): + """Method used for decoding the message""" self.msgid = data["msgid"] self.vote = data["vote"] def encode(self, data): + """Method used for encoding the message""" + # pylint: disable=no-member super(Vote, self).encode() try: self.data["msgid"] = data["msgid"] @@ -19,5 +29,6 @@ class Vote(MsgBase): return self.data def process(self): + """Method used for process the message""" logger.debug("msgid: %s", self.msgid) logger.debug("vote: %s", self.vote) diff --git a/src/paths.py b/src/paths.py index c4c62950..78ae2804 100644 --- a/src/paths.py +++ b/src/paths.py @@ -1,3 +1,8 @@ +""" +src/paths.py +============ +""" +# pylint: disable=import-error from os import environ, path import sys import re @@ -7,9 +12,14 @@ from kivy.utils import platform # When using py2exe or py2app, the variable frozen is added to the sys # namespace. This can be used to setup a different code path for # binary distributions vs source distributions. -frozen = getattr(sys,'frozen', None) +frozen = getattr(sys, 'frozen', None) + def lookupExeFolder(): + """ + Folder with PyBitmessage binary (.exe, .app, ...). If it is run from source, it returns the source root + directory + """ if frozen: if frozen == "macosx_app": # targetdir/Bitmessage.app/Contents/MacOS/Bitmessage @@ -22,10 +32,12 @@ def lookupExeFolder(): exeFolder = '' return exeFolder -def lookupAppdataFolder(): +def lookupAppdataFolder(): # pylint: disable=too-many-branches + """Folder with runtime data (like configuration, database, ...)""" + # flake8: noqa=F821 import traceback - print(traceback.print_tb) + print traceback.print_tb APPNAME = "PyBitmessage" if "BITMESSAGE_HOME" in environ: dataFolder = environ["BITMESSAGE_HOME"] @@ -35,9 +47,11 @@ def lookupAppdataFolder(): if "HOME" in environ: dataFolder = path.join(environ["HOME"], "Library/Application Support/", APPNAME) + '/' else: - stringToLog = 'Could not find home folder, please report this message and your OS X version to the BitMessage Github.' + stringToLog = ( + 'Could not find home folder, please report this message' + ' and your OS X version to the BitMessage Github.') if 'logger' in globals(): - logger.critical(stringToLog) + logger.critical(stringToLog) # pylint: disable=undefined-variable else: print stringToLog sys.exit() @@ -58,7 +72,7 @@ def lookupAppdataFolder(): move(path.join(environ["HOME"], ".%s" % APPNAME), dataFolder) stringToLog = "Moving data folder to %s" % (dataFolder) if 'logger' in globals(): - logger.info(stringToLog) + logger.info(stringToLog) # pylint: disable=undefined-variable else: print stringToLog except IOError: @@ -67,16 +81,21 @@ def lookupAppdataFolder(): dataFolder = dataFolder + '/' return dataFolder + def codePath(): + """Return the code path of the running instance""" + # pylint: disable=redefined-outer-name if frozen == "macosx_app": codePath = environ.get("RESOURCEPATH") - elif frozen: # windows - codePath = sys._MEIPASS + elif frozen: # windows + codePath = sys._MEIPASS # pylint: disable=no-member,protected-access else: codePath = path.dirname(__file__) return codePath + def tail(f, lines=20): + """Read last lines of a file. Like tail(1)""" total_lines_wanted = lines BLOCK_SIZE = 1024 @@ -84,12 +103,13 @@ def tail(f, lines=20): block_end_byte = f.tell() lines_to_go = total_lines_wanted block_number = -1 - blocks = [] # blocks of size BLOCK_SIZE, in reverse order starting - # from the end of the file + blocks = [] + # blocks of size BLOCK_SIZE, in reverse order starting + # from the end of the file while lines_to_go > 0 and block_end_byte > 0: - if (block_end_byte - BLOCK_SIZE > 0): + if block_end_byte - BLOCK_SIZE > 0: # read the last block we haven't yet read - f.seek(block_number*BLOCK_SIZE, 2) + f.seek(block_number * BLOCK_SIZE, 2) blocks.append(f.read(BLOCK_SIZE)) else: # file too small, start from begining @@ -105,6 +125,7 @@ def tail(f, lines=20): def lastCommit(): + """Git commitish of the currently checked out repository""" githeadfile = path.join(codePath(), '..', '.git', 'logs', 'HEAD') result = {} if path.isfile(githeadfile): @@ -117,4 +138,4 @@ def lastCommit(): ) except (IOError, AttributeError, TypeError): pass - return result \ No newline at end of file + return result diff --git a/src/pyelliptic/openssl.py b/src/pyelliptic/openssl.py index 0fc445e6..2d5ea04a 100644 --- a/src/pyelliptic/openssl.py +++ b/src/pyelliptic/openssl.py @@ -2,6 +2,7 @@ src/pyelliptic/openssl.py ================================= """ +# pylint: disable=import-error import sys import ctypes from kivy.utils import platform @@ -646,7 +647,8 @@ class _OpenSSL: # pylint: disable=too-many-instance-attributes, old-style-cl def loadOpenSSL(): """Method find and load the OpenSSL library""" - # pylint: disable=global-statement, protected-access, too-many-branches + # pylint: disable=global-statement, protected-access, too-many-branches, no-member + global OpenSSL from os import path, environ from ctypes.util import find_library diff --git a/src/state.py b/src/state.py index 63fa82e4..07cb687a 100644 --- a/src/state.py +++ b/src/state.py @@ -1,20 +1,21 @@ +""" +src/state.py +================================= +""" import collections neededPubkeys = {} streamsInWhichIAmParticipating = [] - # For UPnP extPort = None - # for Tor hidden service socksIP = None - +# Network protocols availability, initialised below +networkProtocolAvailability = None appdata = '' # holds the location of the application data storage directory - # Set to 1 by the doCleanShutdown function. # Used to tell the proof of work worker threads to exit. shutdown = 0 - # Component control flags - set on startup, do not change during runtime # The defaults are for standalone GUI (default operating mode) enableNetwork = True # enable network threads @@ -23,18 +24,13 @@ enableAPI = True # enable API (if configured) enableGUI = True # enable GUI (QT or ncurses) enableSTDIO = False # enable STDIO threads curses = False - sqlReady = False # set to true by sqlTread when ready for processing - maximumNumberOfHalfOpenConnections = 0 - invThread = None addrThread = None downloadThread = None uploadThread = None - ownAddresses = {} - # If the trustedpeer option is specified in keys.dat then this will # contain a Peer which will be connected to instead of using the # addresses advertised by other peers. The client will only connect to @@ -46,11 +42,19 @@ ownAddresses = {} # it will sync with the network a lot faster without compromising # security. trustedPeer = None - discoveredPeers = {} - Peer = collections.namedtuple('Peer', ['host', 'port']) + +def resetNetworkProtocolAvailability(): + """This method helps to reset the availability of network protocol""" + # pylint: disable=global-statement + global networkProtocolAvailability + networkProtocolAvailability = {'IPv4': None, 'IPv6': None, 'onion': None} + + +resetNetworkProtocolAvailability() + dandelion = 0 testmode = False diff --git a/src/tr.py b/src/tr.py index af42145e..5ce623cd 100644 --- a/src/tr.py +++ b/src/tr.py @@ -1,25 +1,43 @@ +""" +src/tr.py +================================= +""" +# pylint: disable=relative-import import os import state -# This is used so that the translateText function can be used when we are in daemon mode and not using any QT functions. -class translateClass: +"""This is used so that the translateText function can be used """ +"""when we are in daemon mode and not using any QT functions.""" + + +class translateClass: # pylint: disable=old-style-class, too-few-public-methods + """ + This is used so that the translateText function can be used when we are + in daemon mode and not using any QT functions. + """ def __init__(self, context, text): self.context = context self.text = text - def arg(self,argument): - if '%' in self.text: - return translateClass(self.context, self.text.replace('%','',1)) # This doesn't actually do anything with the arguments because we don't have a UI in which to display this information anyway. - else: - return self.text -def _translate(context, text, disambiguation = None, encoding = None, n = None): + def arg(self, argument): # pylint: disable=unused-argument + """Replace argument placeholders""" + if '%' in self.text: + return translateClass(self.context, self.text.replace('%', '', 1)) + # This doesn't actually do anything with the arguments + # because we don't have a UI in which to display this information anyway. + return self.text + + +def _translate(context, text, disambiguation=None, encoding=None, n=None): # pylint: disable=unused-argument return translateText(context, text, n) # def _translate(context, text, disambiguation = None, encoding = None, n = None): # return translateClass(context, text.replace('%','',1)) -def translateText(context, text, n = None): + +def translateText(context, text, n=None): + """Translate text in context""" try: enableGUI = state.enableGUI except AttributeError: # inside the plugin @@ -28,15 +46,16 @@ def translateText(context, text, n = None): try: from PyQt4 import QtCore, QtGui except Exception as err: - print 'PyBitmessage requires PyQt unless you want to run it as a daemon and interact with it using the API. You can download PyQt from http://www.riverbankcomputing.com/software/pyqt/download or by searching Google for \'PyQt Download\'. If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon' + print 'PyBitmessage requires PyQt unless you want to run it as a daemon and interact with it using the API\ + .You can download PyQt from http://www.riverbankcomputing.com/software/pyqt/download\ + or by searching Google for \'PyQt Download\'.\ + If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon' print 'Error message:', err - os._exit(0) + os._exit(0) # pylint: disable=protected-access if n is None: return QtGui.QApplication.translate(context, text) - else: - return QtGui.QApplication.translate(context, text, None, QtCore.QCoreApplication.CodecForTr, n) + return QtGui.QApplication.translate(context, text, None, QtCore.QCoreApplication.CodecForTr, n) else: if '%' in text: - return translateClass(context, text.replace('%','',1)) - else: - return text + return translateClass(context, text.replace('%', '', 1)) + return text From 5a6611219cc2343f9fc8c9e55a2e8c059659cdb1 Mon Sep 17 00:00:00 2001 From: lakshyacis Date: Wed, 25 Sep 2019 17:15:45 +0530 Subject: [PATCH 3/6] mpybit fixes --- src/bitmessagekivy/mpybit.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/bitmessagekivy/mpybit.py b/src/bitmessagekivy/mpybit.py index cb4c4fda..1b4db996 100644 --- a/src/bitmessagekivy/mpybit.py +++ b/src/bitmessagekivy/mpybit.py @@ -43,7 +43,6 @@ from kivymd.list import ( ILeftBody, ILeftBodyTouch, IRightBodyTouch, - ThreeLineAvatarIconListItem, TwoLineAvatarIconListItem, TwoLineListItem) from kivymd.navigationdrawer import ( @@ -1084,7 +1083,8 @@ class NavigateApp(App): # pylint: disable=too-many-public-methods if platform == 'android': # android_path = os.path.expanduser("~/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(BMConfigParser().addresses()[0], android_path)) + img.texture.save('{1}/images/default_identicon/{0}.png'.format( + BMConfigParser().addresses()[0], android_path)) else: img.texture.save('./images/default_identicon/{}.png'.format(BMConfigParser().addresses()[0])) return BMConfigParser().addresses()[0] @@ -1299,7 +1299,7 @@ class NavigateApp(App): # pylint: disable=too-many-public-methods class GrashofPopup(Popup): """Methods for saving contacts, error messages.""" - def __init__(self, **kwargs): + def __init__(self, **kwargs): # pylint: disable=useless-super-delegation """Grash of pop screen settings.""" super(GrashofPopup, self).__init__(**kwargs) @@ -1557,7 +1557,7 @@ class MyaddDetailPopup(Popup): address_label = StringProperty() address = StringProperty() - def __init__(self, **kwargs): + def __init__(self, **kwargs): # pylint: disable=useless-super-delegation """My Address Details screen setting.""" super(MyaddDetailPopup, self).__init__(**kwargs) @@ -1589,7 +1589,7 @@ class AddbookDetailPopup(Popup): address_label = StringProperty() address = StringProperty() - def __init__(self, **kwargs): + def __init__(self, **kwargs): # pylint: disable=useless-super-delegation """Method used set screen of address detail page.""" super(AddbookDetailPopup, self).__init__(**kwargs) From c12fd486ac51ff1a822a5deb490d7a188446dab7 Mon Sep 17 00:00:00 2001 From: Navjot Date: Fri, 27 Sep 2019 22:01:37 +0530 Subject: [PATCH 4/6] worked on alter search approch or making app preformance faster --- src/bitmessagekivy/main.kv | 119 ++++++++++++---------- src/bitmessagekivy/mpybit.py | 188 +++++++++++++++-------------------- 2 files changed, 149 insertions(+), 158 deletions(-) diff --git a/src/bitmessagekivy/main.kv b/src/bitmessagekivy/main.kv index 920ca2ef..be6f76e9 100644 --- a/src/bitmessagekivy/main.kv +++ b/src/bitmessagekivy/main.kv @@ -82,52 +82,52 @@ text: "Inbox" on_release: app.root.ids.scr_mngr.current = 'inbox' badge_text: "0" - on_press: app.check_search_screen(self) + on_press: app.refreshScreen(self) NavigationDrawerIconButton: id: send_cnt icon: 'send' text: "Sent" on_release: app.root.ids.scr_mngr.current = 'sent' badge_text: "0" - on_press: app.check_search_screen(self) + on_press: app.refreshScreen(self) NavigationDrawerIconButton: id: draft_cnt icon: 'message-draw' text: "Draft" on_release: app.root.ids.scr_mngr.current = 'draft' badge_text: "0" - on_press: app.check_search_screen(self) + on_press: app.refreshScreen(self) NavigationDrawerIconButton: text: "Starred" icon:'star' on_release: app.root.ids.scr_mngr.current = 'starred' - on_press: app.check_search_screen(self) + on_press: app.refreshScreen(self) NavigationDrawerIconButton: icon: 'archive' text: "Archieve" on_release: app.root.ids.scr_mngr.current = 'archieve' badge_text: "0" - on_press: app.check_search_screen(self) + on_press: app.refreshScreen(self) NavigationDrawerIconButton: icon: 'email-open-outline' text: "Spam" on_release: app.root.ids.scr_mngr.current = 'spam' badge_text: "0" - on_press: app.check_search_screen(self) + on_press: app.refreshScreen(self) NavigationDrawerIconButton: id: trash_cnt icon: 'delete' text: "Trash" on_release: app.root.ids.scr_mngr.current = 'trash' badge_text: "0" - on_press: app.check_search_screen(self) + on_press: app.refreshScreen(self) NavigationDrawerIconButton: id: allmail_cnt text: "All Mails" icon:'contact-mail' on_release: app.root.ids.scr_mngr.current = 'allmails' badge_text: "0" - on_press: app.check_search_screen(self) + on_press: app.refreshScreen(self) NavigationDrawerDivider: NavigationDrawerSubheader: text: "All labels" @@ -135,37 +135,37 @@ text: "Address Book" icon:'book-multiple' on_release: app.root.ids.scr_mngr.current = 'addressbook' - on_press: app.check_search_screen(self) + on_press: app.refreshScreen(self) NavigationDrawerIconButton: text: "Settings" icon:'settings' on_release: app.root.ids.scr_mngr.current = 'set' - on_press: app.check_search_screen(self) + on_press: app.refreshScreen(self) NavigationDrawerIconButton: text: "Subscriptions/Payment" icon:'wallet' on_release: app.root.ids.scr_mngr.current = 'payment' - on_press: app.check_search_screen(self) + on_press: app.refreshScreen(self) NavigationDrawerIconButton: text: "Credits" icon:'wallet' on_release: app.root.ids.scr_mngr.current = 'credits' - on_press: app.check_search_screen(self) + on_press: app.refreshScreen(self) NavigationDrawerIconButton: text: "new address" icon:'account-plus' on_release: app.root.ids.scr_mngr.current = 'login' - on_press: app.check_search_screen(self) + on_press: app.refreshScreen(self) NavigationDrawerIconButton: text: "Network Status" icon:'server-network' on_release: app.root.ids.scr_mngr.current = 'networkstat' - on_press: app.check_search_screen(self) + on_press: app.refreshScreen(self) NavigationDrawerIconButton: text: "My Addresses" icon:'account-multiple' on_release: app.root.ids.scr_mngr.current = 'myaddress' - on_press: app.check_search_screen(self) + on_press: app.refreshScreen(self) NavigationLayout: id: nav_layout @@ -186,18 +186,6 @@ NavigationLayout: background_hue: '500' left_action_items: [['menu', lambda x: app.root.toggle_nav_drawer()]] right_action_items: [['account-plus', lambda x: app.addingtoaddressbook()]] - BoxLayout: - id: search_bar - size_hint_y: None - height: self.minimum_height - - MDIconButton: - icon: 'magnify' - - MDTextField: - id: search_field - hint_text: 'Search' - on_text: app.searchQuery(self) ScreenManager: id: scr_mngr @@ -246,21 +234,30 @@ NavigationLayout: : name: 'inbox' - FloatLayout: - MDScrollViewRefreshLayout: - id: refresh_layout - refresh_callback: root.refresh_callback - root_layout: root - MDList: - id: ml + BoxLayout: + orientation: 'vertical' + spacing: dp(10) + SearchBar: + FloatLayout: + MDScrollViewRefreshLayout: + id: refresh_layout + refresh_callback: root.refresh_callback + root_layout: root + MDList: + id: ml ComposerButton: : name: 'sent' - ScrollView: - do_scroll_x: False - MDList: - id: ml + BoxLayout: + orientation: 'vertical' + SearchBar: + BoxLayout: + orientation:'vertical' + ScrollView: + do_scroll_x: False + MDList: + id: ml ComposerButton: : @@ -654,23 +651,29 @@ NavigationLayout: : name: 'myaddress' - FloatLayout: - MDScrollViewRefreshLayout: - id: refresh_layout - refresh_callback: root.refresh_callback - root_layout: root - MDList: - id: ml + BoxLayout: + orientation: 'vertical' + SearchBar: + FloatLayout: + MDScrollViewRefreshLayout: + id: refresh_layout + refresh_callback: root.refresh_callback + root_layout: root + MDList: + id: ml ComposerButton: : name: 'addressbook' BoxLayout: - orientation:'vertical' - ScrollView: - do_scroll_x: False - MDList: - id: ml + orientation: 'vertical' + SearchBar: + BoxLayout: + orientation:'vertical' + ScrollView: + do_scroll_x: False + MDList: + id: ml ComposerButton: : @@ -1222,4 +1225,18 @@ NavigationLayout: source: './images/down-arrow.png' if self.parent.is_open == True else './images/right-arrow.png' size: 15, 15 x: self.parent.x + self.parent.width - self.width - 5 - y: self.parent.y + self.parent.height/2 - self.height + 5 \ No newline at end of file + y: self.parent.y + self.parent.height/2 - self.height + 5 + + +: + id: search_bar + size_hint_y: None + height: self.minimum_height + + MDIconButton: + icon: 'magnify' + + MDTextField: + id: search_field + hint_text: 'Search' + on_text: app.searchQuery(self) diff --git a/src/bitmessagekivy/mpybit.py b/src/bitmessagekivy/mpybit.py index 1b4db996..518c227e 100644 --- a/src/bitmessagekivy/mpybit.py +++ b/src/bitmessagekivy/mpybit.py @@ -79,8 +79,6 @@ class Navigatorss(MDNavigationDrawer): class Inbox(Screen): """Inbox Screen uses screen to show widgets of screens.""" - data = ListProperty() - def __init__(self, *args, **kwargs): """Method Parsing the address.""" super(Inbox, self).__init__(*args, **kwargs) @@ -168,7 +166,6 @@ class Inbox(Screen): def inbox_detail(self, receivedTime, *args): """Load inbox page details.""" - remove_search_bar(self) state.detailPageType = 'inbox' state.sentMailTime = receivedTime if self.manager: @@ -184,8 +181,12 @@ class Inbox(Screen): sqlExecute( "UPDATE inbox SET folder = 'trash' WHERE received = {};".format( data_index)) - msg_count_objs = \ - self.parent.parent.parent.parent.parent.children[2].children[0].ids + try: + msg_count_objs = \ + self.parent.parent.parent.parent.children[2].children[0].ids + except Exception as e: + msg_count_objs = \ + self.parent.parent.parent.parent.parent.children[2].children[0].ids if int(state.inbox_count) > 0: msg_count_objs.inbox_cnt.badge_text = str( int(state.inbox_count) - 1) @@ -226,13 +227,10 @@ class Inbox(Screen): """Method updates the state of application, While the spinner remains on the screen.""" def refresh_callback(interval): """Method used for loading the inbox screen data.""" + state.searcing_text = '' + self.children[2].children[1].ids.search_field.text = '' self.ids.ml.clear_widgets() - self.remove_widget(self.children[1]) - try: - screens_obj = self.parent.screens[0] - except Exception: - screens_obj = self.parent.parent.screens[0] - screens_obj.add_widget(Inbox()) + self.loadMessagelist(state.association) self.ids.refresh_layout.refresh_done() self.tick = 0 @@ -284,12 +282,11 @@ class MyAddress(Screen): size_hint_y=None, valign='top') self.ids.ml.add_widget(content) - try: - self.manager.parent.parent\ - .parent.ids.search_bar.clear_widgets() - self.manager.current = 'login' - except Exception: - pass + if not state.searcing_text: + try: + self.manager.current = 'login' + except Exception: + pass @staticmethod def myadd_detail(fromaddress, label, *args): @@ -303,13 +300,10 @@ class MyAddress(Screen): """Method updates the state of application, While the spinner remains on the screen.""" def refresh_callback(interval): """Method used for loading the myaddress screen data.""" + state.searcing_text = '' + self.children[2].children[1].ids.search_field.text = '' self.ids.ml.clear_widgets() - self.remove_widget(self.children[1]) - try: - screens_obj = self.parent.screens[9] - except Exception: - screens_obj = self.parent.parent.screens[9] - screens_obj.add_widget(MyAddress()) + self.init_ui() self.ids.refresh_layout.refresh_done() self.tick = 0 Clock.schedule_once(refresh_callback, 1) @@ -386,8 +380,8 @@ class AddressBook(Screen): @staticmethod def refreshs(*args): """Refresh the Widget.""" - state.navinstance.ids.sc11.clear_widgets() - state.navinstance.ids.sc11.add_widget(AddressBook()) + state.navinstance.ids.sc11.ids.ml.clear_widgets() + state.navinstance.ids.sc11.loadAddresslist(None, 'All', '') @staticmethod def addBook_detail(address, label, *args): @@ -523,8 +517,8 @@ class DropDownWidget(BoxLayout): state.check_sent_acc = fromAddress state.msg_counter_objs = self.parent.parent.parent.parent\ .parent.parent.children[0].children[2].children[0].ids - self.parent.parent.screens[3].clear_widgets() - self.parent.parent.screens[3].add_widget(Sent()) + self.parent.parent.screens[3].ids.ml.clear_widgets() + self.parent.parent.screens[3].loadSent(state.association) self.parent.parent.screens[16].clear_widgets() self.parent.parent.screens[16].add_widget(Allmails()) toLabel = '' @@ -701,9 +695,8 @@ class Random(Screen): self.ids.label.text = '' self.parent.parent.parent.parent.ids.toolbar.opacity = 1 self.parent.parent.parent.parent.ids.toolbar.disabled = False - self.parent.parent.parent.parent.ids.sc10.clear_widgets() - self.parent.parent.parent.parent.ids.sc10.add_widget(MyAddress()) - navApp.add_search_bar() + self.parent.parent.parent.parent.ids.sc10.ids.ml.clear_widgets() + self.parent.parent.parent.parent.ids.sc10.init_ui() toast('New address created') @@ -715,9 +708,6 @@ class AddressSuccessful(Screen): class Sent(Screen): """Sent Screen uses screen to show widgets of screens.""" - - data = ListProperty() - def __init__(self, *args, **kwargs): """Association with the screen.""" super(Sent, self).__init__(*args, **kwargs) @@ -742,6 +732,7 @@ class Sent(Screen): where = ['subject', 'message'] what = state.searcing_text xAddress = 'fromaddress' + data = [] queryreturn = kivy_helper_search.search_sql( xAddress, account, "sent", where, what, False) if state.msg_counter_objs and state.association == \ @@ -757,13 +748,13 @@ class Sent(Screen): src_mng_obj.send_cnt.badge_text = str(len(queryreturn)) state.sent_count = str(len(queryreturn)) for mail in queryreturn: - self.data.append({ + data.append({ 'text': mail[1].strip(), 'secondary_text': mail[2][:50] + '........' if len( mail[2]) >= 50 else ( mail[2] + ',' + mail[3].replace('\n', ''))[0:50] + '........', 'lastactiontime': mail[6]}) - for item in self.data: + for item in data: meny = TwoLineAvatarIconListItem( text=item['text'], secondary_text=item['secondary_text'], @@ -808,7 +799,6 @@ class Sent(Screen): def sent_detail(self, lastsenttime, *args): """Load sent mail details.""" - remove_search_bar(self) state.detailPageType = 'sent' state.sentMailTime = lastsenttime if self.manager: @@ -1031,8 +1021,9 @@ class NavigateApp(App): # pylint: disable=too-many-public-methods BMConfigParser().get(text, 'label'), text) self.root_window.children[1].ids.toolbar.title = address_label state.association = text - self.root.ids.sc1.clear_widgets() - self.root.ids.sc1.add_widget(Inbox()) + state.searcing_text = '' + self.root.ids.sc1.ids.ml.clear_widgets() + self.root.ids.sc1.loadMessagelist(state.association) self.root.ids.scr_mngr.current = 'inbox' msg_counter_objs = \ @@ -1135,7 +1126,6 @@ class NavigateApp(App): # pylint: disable=too-many-public-methods self.root.ids.scr_mngr.current = 'login' else: self.root.ids.scr_mngr.current = 'inbox' - self.add_search_bar() self.root.ids.scr_mngr.transition.direction = 'right' self.root.ids.scr_mngr.transition.bind(on_complete=self.reset) return True @@ -1155,7 +1145,7 @@ class NavigateApp(App): # pylint: disable=too-many-public-methods def clear_composer(self): """If slow down the nwe will make new composer edit screen.""" self.set_navbar_for_composer() - self.root.ids.search_bar.clear_widgets() + # self.root.ids.search_bar.clear_widgets() composer_obj = self.root.ids.sc3.children[0].ids composer_obj.ti.text = '' composer_obj.btn.text = 'Select' @@ -1183,8 +1173,6 @@ class NavigateApp(App): # pylint: disable=too-many-public-methods self.root.ids.scr_mngr.transition.bind(on_complete=self.reset) if state.is_allmail or state.detailPageType == 'draft': state.is_allmail = False - else: - self.add_search_bar() state.detailPageType = '' state.in_composer = False @@ -1211,66 +1199,60 @@ class NavigateApp(App): # pylint: disable=too-many-public-methods return label + address return '' - def searchQuery(self, instance, *args): + def searchQuery(self, instance): """Method used for showing searched mails.""" state.search_screen = self.root.ids.scr_mngr.current state.searcing_text = str(instance.text).strip() if state.search_screen == 'inbox': - self.root.ids.sc1.clear_widgets() - self.root.ids.sc1.add_widget(Inbox()) + self.root.ids.sc1.ids.ml.clear_widgets() + self.root.ids.sc1.loadMessagelist(state.association) elif state.search_screen == 'addressbook': - self.root.ids.sc11.clear_widgets() - self.root.ids.sc11.add_widget(AddressBook()) + self.root.ids.sc11.ids.ml.clear_widgets() + self.root.ids.sc11.loadAddresslist(None, 'All', '') elif state.search_screen == 'myaddress': - self.root.ids.sc10.clear_widgets() - self.root.ids.sc10.add_widget(MyAddress()) + self.root.ids.sc10.ids.ml.clear_widgets() + self.root.ids.sc10.init_ui() else: - self.root.ids.sc4.clear_widgets() - self.root.ids.sc4.add_widget(Sent()) + self.root.ids.sc4.ids.ml.clear_widgets() + self.root.ids.sc4.loadSent(state.association) self.root.ids.scr_mngr.current = state.search_screen - def clearSreeen(self, text): - """Method is used for clear screen""" - if text == 'Sent': - self.root.ids.sc4.clear_widgets() - self.root.ids.sc4.add_widget(Sent()) - elif text == 'Draft': + def refreshScreen(self, instance): + """Method show search button only on inbox or sent screen.""" + state.searcing_text = '' + if instance.text == 'Sent': + self.root.ids.sc4.ids.ml.clear_widgets() + self.root.ids.sc4.children[1].children[1].ids.search_field.text = '' + self.root.ids.sc4.loadSent(state.association) + elif instance.text == 'Inbox': + self.root.ids.sc1.ids.ml.clear_widgets() + try: + self.root.ids.sc1.children[2].children[1].ids.search_field.text = '' + except Exception as e: + self.root.ids.sc1.children[1].children[1].ids.search_field.text = '' + self.root.ids.sc1.loadMessagelist(state.association) + elif instance.text == 'Draft': self.root.ids.sc16.clear_widgets() self.root.ids.sc16.add_widget(Draft()) - elif text == 'Trash': + elif instance.text == 'Trash': self.root.ids.sc5.clear_widgets() self.root.ids.sc5.add_widget(Trash()) - elif text == 'All Mails': + elif instance.text == 'All Mails': self.root.ids.sc17.clear_widgets() self.root.ids.sc17.add_widget(Allmails()) - - def check_search_screen(self, instance): - """Method show search button only on inbox or sent screen.""" - if instance.text in ['Sent', 'Draft', 'Trash', 'All Mails']: - self.clearSreeen(instance.text) - if instance.text in ['Inbox', 'Sent', 'Address Book', 'My Addresses']: - if not self.root.ids.search_bar.children: - self.root.ids.search_bar.add_widget( - MDIconButton(icon='magnify')) - text_field = MDTextField( - id='search_field', hint_text='Search') - text_field.bind(text=self.searchQuery) - self.root.ids.search_bar.add_widget(text_field) - self.root.ids.search_bar.children[0].text = '' - else: - self.root.ids.search_bar.clear_widgets() - state.searcing_text = '' + elif instance.text == 'Address Book': + self.root.ids.sc11.ids.ml.clear_widgets() + self.root.ids.sc11.children[1].children[1].ids.search_field.text = '' + self.root.ids.sc11.loadAddresslist(None, 'All', '') + elif instance.text == 'My Addresses': + self.root.ids.sc10.ids.ml.clear_widgets() + try: + self.root.ids.sc10.children[1].children[1].ids.search_field.text = '' + except Exception as e: + self.root.ids.sc10.children[2].children[1].ids.search_field.text = '' + self.root.ids.sc10.init_ui() return - def add_search_bar(self): - """Method used for adding search function on screen""" - if not self.root.ids.search_bar.children: - self.root.ids.search_bar.add_widget(MDIconButton(icon='magnify')) - text_field = MDTextField( - id='search_field', hint_text='Search') - text_field.bind(text=self.searchQuery) - self.root.ids.search_bar.add_widget(text_field) - def set_identicon(self, text): """This method is use for showing identicon in address spinner""" img = identiconGeneration.generate(text) @@ -1477,8 +1459,8 @@ class MailDetail(Screen): lastactiontime = {};".format(state.sentMailTime)) msg_count_objs.send_cnt.badge_text = str(int(state.sent_count) - 1) state.sent_count = str(int(state.sent_count) - 1) - self.parent.screens[3].clear_widgets() - self.parent.screens[3].add_widget(Sent()) + self.parent.screens[3].ids.ml.clear_widgets() + self.parent.screens[3].loadSent(state.association) elif state.detailPageType == 'inbox': sqlExecute( "UPDATE inbox SET folder = 'trash' WHERE \ @@ -1486,8 +1468,8 @@ class MailDetail(Screen): # msg_count_objs.inbox_cnt.badge_text = str( # int(state.inbox_count) - 1) # state.inbox_count = str(int(state.inbox_count) - 1) - self.parent.screens[0].clear_widgets() - self.parent.screens[0].add_widget(Inbox()) + self.parent.screens[0].ids.ml.clear_widgets() + self.parent.screens[0].loadMessagelist(state.association) elif state.detailPageType == 'draft': sqlExecute("DELETE FROM sent WHERE lastactiontime = '{}';".format( state.sentMailTime)) @@ -1519,6 +1501,7 @@ class MailDetail(Screen): composer_obj.btn.text = data[0][0] composer_obj.txt_input.text = data[0][1] composer_obj.subject.text = data[0][2] + composer_obj.body.text = '' state.kivyapp.root.ids.sc3.children[0].ids.rv.data = '' self.parent.current = 'create' state.kivyapp.set_navbar_for_composer() @@ -1603,8 +1586,8 @@ class AddbookDetailPopup(Popup): if str(self.ids.add_label.text): sqlExecute("UPDATE addressbook SET label = '{}' WHERE \ address = '{}';".format(str(self.ids.add_label.text), address)) - self.parent.children[1].ids.sc11.clear_widgets() - self.parent.children[1].ids.sc11.add_widget(AddressBook()) + self.parent.children[1].ids.sc11.ids.ml.clear_widgets() + self.parent.children[1].ids.sc11.loadAddresslist(None, 'All', '') self.dismiss() toast('Saved') @@ -1630,7 +1613,7 @@ class ShowQRCode(Screen): def qrdisplay(self): """Method used for showing QR Code.""" - self.manager.parent.parent.parent.ids.search_bar.clear_widgets() + # self.manager.parent.parent.parent.ids.search_bar.clear_widgets() self.ids.qr.clear_widgets() from kivy.garden.qrcode import QRCodeWidget self.ids.qr.add_widget(QRCodeWidget( @@ -1659,9 +1642,9 @@ class Draft(Screen): def sentaccounts(self): """Load draft accounts.""" account = state.association - self.loadSent(account, 'All', '') + self.loadDraft(account, 'All', '') - def loadSent(self, account, where="", what=""): + def loadDraft(self, account, where="", what=""): """Load draft list for Draft messages.""" xAddress = 'fromaddress' queryreturn = kivy_helper_search.search_sql( @@ -1807,14 +1790,6 @@ class CustomSpinner(Spinner): self.dropdown_cls.max_height = Window.size[1] / 3 -def remove_search_bar(obj): - """Remove search bar.""" - try: - obj.parent.parent.parent.parent.parent.ids.search_bar.clear_widgets() - except Exception: - obj.parent.parent.parent.parent.ids.search_bar.clear_widgets() - - class Allmails(Screen): """all mails Screen uses screen to show widgets of screens.""" @@ -1894,7 +1869,6 @@ class Allmails(Screen): def mail_detail(self, unique_id, folder, *args): """Load sent and inbox mail details.""" - remove_search_bar(self) state.detailPageType = folder state.is_allmail = True state.sentMailTime = unique_id @@ -1929,14 +1903,14 @@ class Allmails(Screen): msg_count_objs.inbox_cnt.badge_text = str( int(state.inbox_count) - 1) state.inbox_count = str(int(state.inbox_count) - 1) - nav_lay_obj.sc1.clear_widgets() - nav_lay_obj.sc1.add_widget(Inbox()) + nav_lay_obj.sc1.ids.ml.clear_widgets() + nav_lay_obj.sc1.loadMessagelist(state.association) else: msg_count_objs.send_cnt.badge_text = str( int(state.sent_count) - 1) state.sent_count = str(int(state.sent_count) - 1) - nav_lay_obj.sc4.clear_widgets() - nav_lay_obj.sc4.add_widget(Sent()) + nav_lay_obj.sc4.ids.ml.clear_widgets() + nav_lay_obj.sc4.loadSent(state.association) msg_count_objs.trash_cnt.badge_text = str( int(state.trash_count) + 1) msg_count_objs.allmail_cnt.badge_text = str( From 0a5379f7ab426f539d6b95a3beb6303b191e2741 Mon Sep 17 00:00:00 2001 From: Navjot Date: Mon, 30 Sep 2019 19:27:57 +0530 Subject: [PATCH 5/6] merge commit conflicts --- src/messagetypes/__init__.py | 3 +-- src/messagetypes/message.py | 16 ++++++---------- src/messagetypes/vote.py | 15 +++++++-------- src/pyelliptic/openssl.py | 1 + 4 files changed, 15 insertions(+), 20 deletions(-) diff --git a/src/messagetypes/__init__.py b/src/messagetypes/__init__.py index 95eee595..53d23de7 100644 --- a/src/messagetypes/__init__.py +++ b/src/messagetypes/__init__.py @@ -2,7 +2,6 @@ src/messagetypes/__init__.py ============================ """ -# pylint: disable=import-error from importlib import import_module from os import path, listdir from string import lower @@ -22,7 +21,7 @@ class MsgBase(object): # pylint: disable=too-few-public-methods def constructObject(data): - """Construct an object""" + """Constructing an object""" whitelist = ["message"] if data[""] not in whitelist: return None diff --git a/src/messagetypes/message.py b/src/messagetypes/message.py index 263a2e4a..46816d82 100644 --- a/src/messagetypes/message.py +++ b/src/messagetypes/message.py @@ -9,26 +9,22 @@ from messagetypes import MsgBase class Message(MsgBase): """Base method, helps to decode, encode and process the message""" - def __init__(self): # pylint: disable=super-init-not-called - return def decode(self, data): - """Method used for decoding the message""" + """Decode a message""" # UTF-8 and variable type validator - # pylint: disable=unidiomatic-typecheck - if type(data["subject"]) is str: + if isinstance(data["subject"], str): self.subject = unicode(data["subject"], 'utf-8', 'replace') else: self.subject = unicode(str(data["subject"]), 'utf-8', 'replace') - if type(data["body"]) is str: + if isinstance(data["body"], str): self.body = unicode(data["body"], 'utf-8', 'replace') else: self.body = unicode(str(data["body"]), 'utf-8', 'replace') def encode(self, data): - """Method used for encoding the message""" - # pylint: disable=no-member - super(Message, self).encode() + """Encode a message""" + super(Message, self).__init__() try: self.data["subject"] = data["subject"] self.data["body"] = data["body"] @@ -37,6 +33,6 @@ class Message(MsgBase): return self.data def process(self): - """Method used for process the message""" + """Process a message""" logger.debug("Subject: %i bytes", len(self.subject)) logger.debug("Body: %i bytes", len(self.body)) diff --git a/src/messagetypes/vote.py b/src/messagetypes/vote.py index a77e1cc7..fb5ad6c8 100644 --- a/src/messagetypes/vote.py +++ b/src/messagetypes/vote.py @@ -7,28 +7,27 @@ from messagetypes import MsgBase # pylint: disable=attribute-defined-outside-init + class Vote(MsgBase): """Base method, helps to decode, encode and process the message""" - def __init__(self): # pylint: disable=super-init-not-called - return def decode(self, data): - """Method used for decoding the message""" + """decode a vote""" + # pylint: disable=attribute-defined-outside-init self.msgid = data["msgid"] self.vote = data["vote"] def encode(self, data): - """Method used for encoding the message""" - # pylint: disable=no-member - super(Vote, self).encode() + """Encode a vote""" + super(Vote, self).__init__() try: self.data["msgid"] = data["msgid"] self.data["vote"] = data["vote"] except KeyError as e: - logger.error("Missing key %s", e.name) + logger.error("Missing key %s", e) return self.data def process(self): - """Method used for process the message""" + """Encode a vote""" logger.debug("msgid: %s", self.msgid) logger.debug("vote: %s", self.vote) diff --git a/src/pyelliptic/openssl.py b/src/pyelliptic/openssl.py index 17bf52c8..0b9be0ab 100644 --- a/src/pyelliptic/openssl.py +++ b/src/pyelliptic/openssl.py @@ -657,6 +657,7 @@ class _OpenSSL: def loadOpenSSL(): """Method find and load the OpenSSL library""" # pylint: disable=global-statement, protected-access, too-many-branches + global OpenSSL from os import path, environ from ctypes.util import find_library From 66de416627b75090687710ee69113ea20743f1c1 Mon Sep 17 00:00:00 2001 From: lakshyacis Date: Mon, 30 Sep 2019 19:57:08 +0530 Subject: [PATCH 6/6] fixes after conflicts --- src/bitmessagekivy/mpybit.py | 3 +-- src/messagetypes/vote.py | 2 -- src/pyelliptic/openssl.py | 2 -- 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/bitmessagekivy/mpybit.py b/src/bitmessagekivy/mpybit.py index 518c227e..7f3da132 100644 --- a/src/bitmessagekivy/mpybit.py +++ b/src/bitmessagekivy/mpybit.py @@ -49,7 +49,6 @@ from kivymd.navigationdrawer import ( MDNavigationDrawer, NavigationDrawerHeaderBase) from kivymd.selectioncontrols import MDCheckbox -from kivymd.textfields import MDTextField from kivymd.theming import ThemeManager import queues from semaphores import kivyuisignaler @@ -1398,7 +1397,7 @@ class NavigationDrawerTwoLineListItem( def _update_specific_text_color(self, instance, value): pass - def _set_active(self, active, list): # pylint: disable=redefined-builtin + def _set_active(self, active, list_): pass diff --git a/src/messagetypes/vote.py b/src/messagetypes/vote.py index 82a5031f..319deb59 100644 --- a/src/messagetypes/vote.py +++ b/src/messagetypes/vote.py @@ -7,8 +7,6 @@ from messagetypes import MsgBase # pylint: disable=attribute-defined-outside-init - - class Vote(MsgBase): """Module used to vote""" diff --git a/src/pyelliptic/openssl.py b/src/pyelliptic/openssl.py index 0b9be0ab..6c5c4a84 100644 --- a/src/pyelliptic/openssl.py +++ b/src/pyelliptic/openssl.py @@ -22,8 +22,6 @@ src/pyelliptic/openssl.py # pylint: disable=protected-access - - class CipherName: """Class returns cipher name, pointer and blocksize"""