This repository has been archived on 2024-12-09. You can view files and clone it, but cannot push or open issues or pull requests.
PyBitmessage-2024-12-09/src/bitmessagekivy/mpybit.py

362 lines
12 KiB
Python
Raw Normal View History

import os
import kivy_helper_search
import queues
import random
import shutdown
import time
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import BooleanProperty
from kivy.uix.button import Button
from kivy.clock import Clock
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.image import Image
from kivy.uix.label import Label
from kivy.uix.listview import ListItemButton
from navigationdrawer import NavigationDrawer
from kivy.properties import ObjectProperty, StringProperty, ListProperty, NumericProperty
from kivy.uix.screenmanager import Screen
from kivy.uix.textinput import TextInput
from kivymd.theming import ThemeManager
from kivymd.toolbar import Toolbar
from kivy.uix.widget import Widget
from bmconfigparser import BMConfigParser
from helper_ackPayload import genAckPayload
from addresses import decodeAddress, addBMIfNotPresent
from helper_sql import sqlExecute
statusIconColor = 'red'
avatarlist = os.listdir("images/ngletteravatar")
global belonging
belonging = ''
class NavigateApp(App, TextInput):
theme_cls = ThemeManager()
nav_drawer = ObjectProperty()
def build(self):
global main_widget
main_widget = Builder.load_file(
os.path.join(os.path.dirname(__file__), 'main.kv'))
self.nav_drawer = Navigator()
return main_widget
2018-07-03 12:06:20 +02:00
def getCurrentAccountData(self, text):
global belonging
belonging = text
main_widget.ids.sc1.clear_widgets()
main_widget.ids.sc2.clear_widgets()
main_widget.ids.sc3.clear_widgets()
main_widget.ids.sc1.add_widget(Inbox())
main_widget.ids.sc2.add_widget(Sent())
main_widget.ids.sc3.add_widget(Trash())
Inbox()
Sent()
Trash()
def say_exit(self):
print("**************************EXITING FROM APPLICATION*****************************")
App.get_running_app().stop()
shutdown.doCleanShutdown()
2018-07-03 12:06:20 +02:00
def showmeaddresses(self, name="text"):
if name == "text":
return BMConfigParser().addresses()[0]
elif name == "values":
return BMConfigParser().addresses()
def update_index(self, data_index, index):
if self.root.ids.scr_mngr.current == 'inbox':
self.root.ids.sc1.data[data_index]['index'] = index
elif self.root.ids.scr_mngr.current == 'sent':
self.root.ids.sc2.data[data_index]['index'] = index
elif self.root.ids.scr_mngr.current == 'trash':
self.root.ids.sc3.data[data_index]['index'] = index
def delete(self, data_index):
print("delete {}".format(data_index))
self._remove(data_index)
def archive(self, data_index):
print("archive {}".format(data_index))
self._remove(data_index)
def _remove(self, data_index):
if self.root.ids.scr_mngr.current == 'inbox':
self.root.ids.sc1.data.pop(data_index)
self.root.ids.sc1.data = [{
'data_index': i,
'index': d['index'],
'height': d['height'],
'text': d['text']}
for i, d in enumerate(self.root.ids.sc1.data)
]
elif self.root.ids.scr_mngr.current == 'sent':
self.root.ids.sc2.data.pop(data_index)
self.root.ids.sc2.data = [{
'data_index': i,
'index': d['index'],
'height': d['height'],
'text': d['text']}
for i, d in enumerate(self.root.ids.sc2.data)
]
elif self.root.ids.scr_mngr.current == 'trash':
self.root.ids.sc3.data.pop(data_index)
self.root.ids.sc3.data = [{
'data_index': i,
'index': d['index'],
'height': d['height'],
'text': d['text']}
for i, d in enumerate(self.root.ids.sc3.data)
]
def getInboxMessageDetail(self, instance):
try:
self.root.ids.scr_mngr.current = 'page'
except AttributeError:
self.parent.manager.current = 'page'
print('Message Clicked {}'.format(instance))
class Navigator(NavigationDrawer):
image_source = StringProperty('images/qidenticon_two.png')
title = StringProperty('Navigation')
2018-07-03 12:06:20 +02:00
class Inbox(Screen):
data = ListProperty()
def __init__(self, *args, **kwargs):
super(Inbox, self).__init__(*args, **kwargs)
global belonging
if belonging == '':
belonging = Navigator().ids.btn.text
Clock.schedule_once(self.init_ui, 0)
def init_ui(self, dt=0):
global belonging
self.orientation = "vertical"
self.inboxaccounts()
def inboxaccounts(self):
account = belonging
folder = 'inbox'
self.loadMessagelist(account, folder, 'All', '')
def loadMessagelist(self, account, folder, where="", what="", unreadOnly=False):
xAddress = "toaddress"
queryreturn = kivy_helper_search.search_sql(xAddress, account, folder, where, what, unreadOnly)
if queryreturn:
self.data = [{
'data_index': i,
'index': 1,
'height': 48,
'text': row[4]}
for i, row in enumerate(queryreturn)
]
else:
self.data = [{
'data_index': 1,
'index': 1,
'height': 48,
'text': "yet no message for this account!!!!!!!!!!!!!"}
]
class Page(Screen):
pass
class AddressSuccessful(Screen):
pass
class Sent(Screen):
data = ListProperty()
def __init__(self, *args, **kwargs):
super(Sent, self).__init__(*args, **kwargs)
global belonging
if belonging == '':
belonging = Navigator().ids.btn.text
Clock.schedule_once(self.init_ui, 0)
def init_ui(self, dt=0):
global belonging
self.orientation = "vertical"
self.sentaccounts()
def sentaccounts(self):
account = belonging
folder = 'inbox'
self.loadSent(account, 'All', '')
def loadSent(self, account, where="", what=""):
xAddress = 'fromaddress'
queryreturn = kivy_helper_search.search_sql(xAddress, account, "sent", where, what, False)
if queryreturn:
self.data = [{
'data_index': i,
'index': 1,
'height': 48,
'text': row[2]}
for i, row in enumerate(queryreturn)
]
else:
self.data = [{
'data_index': 1,
'index': 1,
'height': 48,
'text': "yet no message for this account!!!!!!!!!!!!!"}
]
def getSentMessageDetail(self, instance):
try:
self.manager.current = 'page'
except AttributeError:
self.parent.manager.current = 'page'
print('I am {}'.format(instance.text))
class Trash(Screen):
data = ListProperty()
def __init__(self, *args, **kwargs):
super(Trash, self).__init__(*args, **kwargs)
global belonging
if belonging == '':
belonging = Navigator().ids.btn.text
Clock.schedule_once(self.init_ui, 0)
def init_ui(self, dt=0):
global belonging
self.orientation = "vertical"
self.inboxaccounts()
def inboxaccounts(self):
account = belonging
folder = 'trash'
self.loadTrashlist(account, folder, 'All', '')
def loadTrashlist(self, account, folder, where="", what="", unreadOnly=False):
xAddress = "toaddress"
queryreturn = kivy_helper_search.search_sql(xAddress, account, folder, where, what, unreadOnly)
if queryreturn:
self.data = [{
'data_index': i,
'index': 1,
'height': 48,
'text': row[4]}
for i, row in enumerate(queryreturn)
]
else:
self.data = [{
'data_index': 1,
'index': 1,
'height': 48,
'text': "yet no message for this account!!!!!!!!!!!!!"}
]
class Dialog(Screen):
pass
class Test(Screen):
pass
class Create(Screen):
def __init__(self, *args, **kwargs):
super(Create, self).__init__(*args, **kwargs)
Clock.schedule_once(self.init_ui, 0)
def init_ui(self, dt=0):
pass
def send(self):
# toAddress = self.ids.recipent.text
fromAddress = self.ids.spinner_id.text
# For now we are using static address i.e we are not using recipent field value.
toAddress = "BM-2cWyUfBdY2FbgyuCb7abFZ49JYxSzUhNFe"
message = self.ids.message.text
subject = self.ids.subject.text
encoding = 3
print("message: ", self.ids.message.text)
sendMessageToPeople = True
if sendMessageToPeople:
if toAddress != '':
status, addressVersionNumber, streamNumber, ripe = decodeAddress(
toAddress)
if status == 'success':
toAddress = addBMIfNotPresent(toAddress)
if addressVersionNumber > 4 or addressVersionNumber <= 1:
print("addressVersionNumber > 4 or addressVersionNumber <= 1")
if streamNumber > 1 or streamNumber == 0:
print("streamNumber > 1 or streamNumber == 0")
if statusIconColor == 'red':
print("shared.statusIconColor == 'red'")
stealthLevel = BMConfigParser().safeGetInt(
'bitmessagesettings', 'ackstealthlevel')
ackdata = genAckPayload(streamNumber, stealthLevel)
t = ()
sqlExecute(
'''INSERT INTO sent VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)''',
'',
toAddress,
ripe,
fromAddress,
subject,
message,
ackdata,
int(time.time()),
int(time.time()),
0,
'msgqueued',
0,
'sent',
encoding,
BMConfigParser().getint('bitmessagesettings', 'ttl'))
toLabel = ''
queues.workerQueue.put(('sendmessage', toAddress))
print("sqlExecute successfully ##### ##################")
self.ids.message.text = ''
self.ids.spinner_id.text = '<select>'
self.ids.subject.text = ''
self.ids.recipent.text = ''
return None
def cancel(self):
self.ids.message.text = ''
self.ids.spinner_id.text = '<select>'
self.ids.subject.text = ''
self.ids.recipent.text = ''
return None
class NewIdentity(Screen):
is_active = BooleanProperty(False)
checked = StringProperty("")
# self.manager.parent.ids.create.children[0].source = 'images/plus-4-xxl.png'
def generateaddress(self):
if self.checked == 'use a random number generator to make an address':
queues.apiAddressGeneratorReturnQueue.queue.clear()
streamNumberForAddress = 1
label = self.ids.label.text
eighteenByteRipe = False
nonceTrialsPerByte = 1000
payloadLengthExtraBytes = 1000
queues.addressGeneratorQueue.put((
'createRandomAddress', 4, streamNumberForAddress, label, 1, "", eighteenByteRipe, nonceTrialsPerByte, payloadLengthExtraBytes)
)
self.manager.current = 'add_sucess'
if __name__ == '__main__':
NavigateApp().run()