Merge branch 'UiChanges' of https://github.com/cis-navjot-g/PyBitmessage into UiChanges
This commit is contained in:
commit
ccc83af75c
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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 """
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
@ -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,7 +56,7 @@ 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"
|
||||
|
|
|
@ -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:
|
|||
|
||||
<GrashofPopup>:
|
||||
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:
|
|||
|
||||
<MyaddDetailPopup>:
|
||||
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:
|
|||
|
||||
<AddbookDetailPopup>:
|
||||
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:
|
||||
|
|
|
@ -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
|
||||
|
@ -42,7 +43,6 @@ from kivymd.list import (
|
|||
ILeftBody,
|
||||
ILeftBodyTouch,
|
||||
IRightBodyTouch,
|
||||
ThreeLineAvatarIconListItem,
|
||||
TwoLineAvatarIconListItem,
|
||||
TwoLineListItem)
|
||||
from kivymd.navigationdrawer import (
|
||||
|
@ -55,11 +55,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
|
||||
# pylint: disable=unused-argument, too-few-public-methods
|
||||
|
||||
|
||||
|
@ -1036,14 +1033,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 +1080,13 @@ 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 +1120,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
|
||||
|
@ -1306,16 +1299,9 @@ 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)
|
||||
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."""
|
||||
|
@ -1498,7 +1484,7 @@ class MailDetail(Screen):
|
|||
"UPDATE inbox SET folder = 'trash' WHERE \
|
||||
received = {};".format(state.sentMailTime))
|
||||
# msg_count_objs.inbox_cnt.badge_text = str(
|
||||
# int(state.inbox_count) - 1)
|
||||
# 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())
|
||||
|
@ -1571,15 +1557,9 @@ 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)
|
||||
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."""
|
||||
|
@ -1609,15 +1589,9 @@ 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)
|
||||
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 +1668,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 +1742,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 +1804,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
|
||||
|
||||
|
||||
|
@ -2026,6 +1988,7 @@ class Archieve(Screen):
|
|||
|
||||
pass
|
||||
|
||||
|
||||
class Spam(Screen):
|
||||
"""Spam Screen show widgets of page."""
|
||||
|
||||
|
|
|
@ -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.'
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 461 B |
Binary file not shown.
Before Width: | Height: | Size: 475 B |
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
|
45
src/paths.py
45
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):
|
||||
|
|
|
@ -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
|
||||
|
|
28
src/state.py
28
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
|
||||
|
|
51
src/tr.py
51
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
|
||||
|
|
Reference in New Issue
Block a user