Merge branch 'master' of http://github.com/fuzzgun/PyBitmessage into fuzzgun-master

This commit is contained in:
Jonathan Warren 2013-05-08 14:09:20 -04:00
commit 52fd21733f
7 changed files with 205 additions and 42 deletions

View File

@ -1,5 +1,7 @@
APP=pybitmessage APP=pybitmessage
VERSION=0.3.0 VERSION=0.3.0
DEST_SHARE=/usr/share
DEST_APP=$(DEST_SHARE)/$(APP)
all: all:
@ -9,33 +11,36 @@ source:
tar -cvzf ../$(APP)_$(VERSION).orig.tar.gz ../$(APP)-$(VERSION) --exclude=.git tar -cvzf ../$(APP)_$(VERSION).orig.tar.gz ../$(APP)-$(VERSION) --exclude=.git
install: install:
mkdir -m 755 -p /usr/share/applications mkdir -m 755 -p $(DEST_APP)
mkdir -m 755 -p /usr/share/applications/$(APP) mkdir -m 755 -p $(DEST_SHARE)/applications
mkdir -m 755 -p /usr/share/applications/$(APP)/images mkdir -m 755 -p $(DEST_SHARE)/applications/$(APP)
mkdir -m 755 -p /usr/share/applications/$(APP)/pyelliptic mkdir -m 755 -p $(DEST_APP)/images
mkdir -m 755 -p /usr/share/applications/$(APP)/socks mkdir -m 755 -p $(DEST_APP)/pyelliptic
mkdir -m 755 -p /usr/share/pixmaps mkdir -m 755 -p $(DEST_APP)/socks
mkdir -m 755 -p /usr/share/icons mkdir -m 755 -p $(DEST_APP)/bitmessageqt
mkdir -m 755 -p /usr/share/icons/hicolor mkdir -m 755 -p $(DEST_SHARE)/pixmaps
mkdir -m 755 -p /usr/share/icons/hicolor/scalable mkdir -m 755 -p $(DEST_SHARE)/icons
mkdir -m 755 -p /usr/share/icons/hicolor/scalable/apps mkdir -m 755 -p $(DEST_SHARE)/icons/hicolor
mkdir -m 755 -p /usr/share/icons/hicolor/24x24 mkdir -m 755 -p $(DEST_SHARE)/icons/hicolor/scalable
mkdir -m 755 -p /usr/share/icons/hicolor/24x24/apps mkdir -m 755 -p $(DEST_SHARE)/icons/hicolor/scalable/apps
mkdir -m 755 -p $(DEST_SHARE)/icons/hicolor/24x24
mkdir -m 755 -p $(DEST_SHARE)/icons/hicolor/24x24/apps
install -m 644 src/*.ui /usr/share/applications/$(APP) install -m 644 src/*.ui $(DEST_APP)
install -m 644 src/*.py /usr/share/applications/$(APP) install -m 644 src/*.py $(DEST_APP)
install -m 644 src/*.qrc /usr/share/applications/$(APP) install -m 644 src/*.qrc $(DEST_APP)
install -m 644 src/images/*.png /usr/share/applications/$(APP)/images install -m 644 src/images/*.png $(DEST_APP)/images
install -m 644 src/images/*.ico /usr/share/applications/$(APP)/images install -m 644 src/images/*.ico $(DEST_APP)/images
install -m 644 src/pyelliptic/*.py /usr/share/applications/$(APP)/pyelliptic install -m 644 src/pyelliptic/*.py $(DEST_APP)/pyelliptic
install -m 644 src/socks/*.py /usr/share/applications/$(APP)/socks install -m 644 src/socks/*.py $(DEST_APP)/socks
install -m 755 debian/pybm /usr/bin install -m 644 src/bitmessageqt/*.py $(DEST_APP)/bitmessageqt
install -m 755 debian/pybm /usr/bin/pybitmessage
install -m 644 desktop/$(APP).desktop /usr/share/applications/$(APP)/$(APP).desktop install -m 644 desktop/$(APP).desktop $(DEST_SHARE)/applications/$(APP)/$(APP).desktop
install -m 644 src/images/can-icon-24px.png /usr/share/icons/hicolor/24x24/apps/$(APP).png install -m 644 src/images/can-icon-24px.png $(DEST_SHARE)/icons/hicolor/24x24/apps/$(APP).png
install -m 644 desktop/can-icon.svg /usr/share/icons/hicolor/scalable/apps/$(APP).svg install -m 644 desktop/can-icon.svg $(DEST_SHARE)/icons/hicolor/scalable/apps/$(APP).svg
install -m 644 desktop/can-icon.svg /usr/share/pixmaps/$(APP).svg install -m 644 desktop/can-icon.svg $(DEST_SHARE)/pixmaps/$(APP).svg
clean: clean:
rm -rf debian/$(APP) rm -rf debian/$(APP)

60
debian/changelog vendored
View File

@ -1,3 +1,63 @@
pybitmessage (0.3.0-1) unstable; urgency=low
* Added new API function: getStatus
* Added error-handling around all sock.sendall() functions
in the receiveData thread so that if there is a problem
sending data, the threads will close gracefully
* Abandoned and removed the connectionsCount data structure;
use the connectedHostsList instead because it has proved to be
more accurate than trying to maintain the connectionsCount
* Added daemon mode. All UI code moved into a module and many
shared objects moved into shared.py
* Truncate display of very long messages to avoid freezing the UI
* Added encrypted broadcasts for v3 addresses or v2 addresses
after 2013-05-28 10:00 UTC
* No longer self.sock.close() from within receiveDataThreads,
let the sendDataThreads do it
* Swapped out the v2 announcements subscription address for a v3
announcements subscription address
* Vacuum the messages.dat file once a month: will greatly reduce the file size
* Added a settings table in message.dat
* Implemented v3 addresses:
pubkey messages must now include two var_ints: nonce_trials_per_byte
and extra_bytes, and also be signed. When sending a message to a v3
address, the sender must use these values in calculating its POW or
else the message will not be accepted by the receiver.
* Display a privacy warning when selecting 'Send Broadcast from this address'
* Added gitignore file
* Added code in preparation for a switch from 32-bit time to 64-bit time.
Nodes will now advertise themselves as using protocol version 2.
* Don't necessarily delete entries from the inventory after 2.5 days;
leave pubkeys there for 28 days so that we don't process the same ones
many times throughout a month. This was causing the 'pubkeys processed'
indicator on the 'Network Status' tab to not accurately reflect the
number of truly new addresses on the network.
* Use 32 threads for outgoing connections in order to connect quickly
* Fix typo when calling os.environ in the sys.platform=='darwin' case
* Allow the cancelling of a message which is in the process of being
sent by trashing it then restarting Bitmessage
* Bug fix: can't delete address from address book
-- Bob Mottram (4096 bits) <bob@sluggish.dyndns.org> Tue, 6 May 2013 12:06:00 +0100
pybitmessage (0.2.8-1) unstable; urgency=low pybitmessage (0.2.8-1) unstable; urgency=low
* Fixed Ubuntu & OS X issue: * Fixed Ubuntu & OS X issue:

4
debian/control vendored
View File

@ -2,7 +2,7 @@ Source: pybitmessage
Section: contrib/comm Section: contrib/comm
Priority: extra Priority: extra
Maintainer: Jonathan Warren <jonathan@bitmessage.org> Maintainer: Jonathan Warren <jonathan@bitmessage.org>
Build-Depends: debhelper (>= 8.0.0), python, openssl, python-qt4, libqt4-dev, python-qt4-dev, sqlite3, libsqlite3-dev Build-Depends: debhelper (>= 8.0.0), python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev
Standards-Version: 3.9.2 Standards-Version: 3.9.2
Homepage: https://bitmessage.org/ Homepage: https://bitmessage.org/
Vcs-Browser: https://github.com/Bitmessage/PyBitmessage Vcs-Browser: https://github.com/Bitmessage/PyBitmessage
@ -10,7 +10,7 @@ Vcs-Git: https://github.com/Bitmessage/PyBitmessage.git
Package: pybitmessage Package: pybitmessage
Architecture: all Architecture: all
Depends: ${misc:Depends}, python, openssl, python-qt4, libqt4-dev, python-qt4-dev, sqlite3, libsqlite3-dev Depends: ${misc:Depends}, python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev
Description: Send encrypted messages to another person or to many subscribers Description: Send encrypted messages to another person or to many subscribers
Bitmessage is a P2P communications protocol used to send encrypted messages Bitmessage is a P2P communications protocol used to send encrypted messages
to another person or to many subscribers. It is decentralized and trustless, to another person or to many subscribers. It is decentralized and trustless,

2
debian/pybm vendored
View File

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash
cd /usr/share/applications/pybitmessage cd /usr/share/pybitmessage
python bitmessagemain.py python bitmessagemain.py

30
debian/rules vendored
View File

@ -1,8 +1,9 @@
#!/usr/bin/make -f #!/usr/bin/make -f
APP=pybitmessage APP=pybitmessage
DEST_MAIN = $(CURDIR)/debian/$(APP)/usr/bin DEST_MAIN=$(CURDIR)/debian/$(APP)/usr/bin
DEST_SHARE = $(CURDIR)/debian/$(APP)/usr/share DEST_SHARE=$(CURDIR)/debian/$(APP)/usr/share
DEST_APP=$(DEST_SHARE)/$(APP)
build: build-stamp build: build-stamp
make make
@ -21,11 +22,13 @@ install: build clean
dh_installdirs dh_installdirs
mkdir -m 755 -p $(CURDIR)/debian/$(APP)/usr mkdir -m 755 -p $(CURDIR)/debian/$(APP)/usr
mkdir -m 755 -p $(CURDIR)/debian/$(APP)/usr/bin mkdir -m 755 -p $(CURDIR)/debian/$(APP)/usr/bin
mkdir -m 755 -p $(DEST_APP)
mkdir -m 755 -p $(DEST_SHARE)/applications mkdir -m 755 -p $(DEST_SHARE)/applications
mkdir -m 755 -p $(DEST_SHARE)/applications/$(APP) mkdir -m 755 -p $(DEST_SHARE)/applications/$(APP)
mkdir -m 755 -p $(DEST_SHARE)/applications/$(APP)/images mkdir -m 755 -p $(DEST_APP)/images
mkdir -m 755 -p $(DEST_SHARE)/applications/$(APP)/pyelliptic mkdir -m 755 -p $(DEST_APP)/pyelliptic
mkdir -m 755 -p $(DEST_SHARE)/applications/$(APP)/socks mkdir -m 755 -p $(DEST_APP)/socks
mkdir -m 755 -p $(DEST_APP)/bitmessageqt
mkdir -m 755 -p $(DEST_SHARE)/pixmaps mkdir -m 755 -p $(DEST_SHARE)/pixmaps
mkdir -m 755 -p $(DEST_SHARE)/icons mkdir -m 755 -p $(DEST_SHARE)/icons
mkdir -m 755 -p $(DEST_SHARE)/icons/hicolor mkdir -m 755 -p $(DEST_SHARE)/icons/hicolor
@ -34,15 +37,16 @@ install: build clean
mkdir -m 755 -p $(DEST_SHARE)/icons/hicolor/24x24 mkdir -m 755 -p $(DEST_SHARE)/icons/hicolor/24x24
mkdir -m 755 -p $(DEST_SHARE)/icons/hicolor/24x24/apps mkdir -m 755 -p $(DEST_SHARE)/icons/hicolor/24x24/apps
install -m 644 $(CURDIR)/src/*.ui $(DEST_SHARE)/applications/$(APP) install -m 644 $(CURDIR)/src/*.ui $(DEST_APP)
install -m 644 $(CURDIR)/src/*.py $(DEST_SHARE)/applications/$(APP) install -m 644 $(CURDIR)/src/*.py $(DEST_APP)
install -m 644 $(CURDIR)/src/*.qrc $(DEST_SHARE)/applications/$(APP) install -m 644 $(CURDIR)/src/*.qrc $(DEST_APP)
install -m 644 $(CURDIR)/src/images/*.png $(DEST_SHARE)/applications/$(APP)/images install -m 644 $(CURDIR)/src/images/*.png $(DEST_APP)/images
install -m 644 $(CURDIR)/src/images/*.ico $(DEST_SHARE)/applications/$(APP)/images install -m 644 $(CURDIR)/src/images/*.ico $(DEST_APP)/images
install -m 644 $(CURDIR)/src/pyelliptic/*.py $(DEST_SHARE)/applications/$(APP)/pyelliptic install -m 644 $(CURDIR)/src/pyelliptic/*.py $(DEST_APP)/pyelliptic
install -m 644 $(CURDIR)/src/socks/*.py $(DEST_SHARE)/applications/$(APP)/socks install -m 644 $(CURDIR)/src/socks/*.py $(DEST_APP)/socks
install -m 755 $(CURDIR)/debian/pybm $(DEST_MAIN) install -m 644 $(CURDIR)/src/bitmessageqt/*.py $(DEST_APP)/bitmessageqt
install -m 755 $(CURDIR)/debian/pybm $(DEST_MAIN)/pybitmessage
install -m 644 $(CURDIR)/desktop/$(APP).desktop $(DEST_SHARE)/applications/$(APP)/$(APP).desktop install -m 644 $(CURDIR)/desktop/$(APP).desktop $(DEST_SHARE)/applications/$(APP)/$(APP).desktop
install -m 644 $(CURDIR)/src/images/can-icon-24px.png $(DEST_SHARE)/icons/hicolor/24x24/apps/$(APP).png install -m 644 $(CURDIR)/src/images/can-icon-24px.png $(DEST_SHARE)/icons/hicolor/24x24/apps/$(APP).png

View File

@ -3,7 +3,7 @@ Type=Application
Name=PyBitmessage Name=PyBitmessage
GenericName=PyBitmessage GenericName=PyBitmessage
Comment=Send encrypted messages to another person or to many subscribers Comment=Send encrypted messages to another person or to many subscribers
Exec=pybm %U Exec=pybitmessage %U
Icon=pybitmessage Icon=pybitmessage
Terminal=false Terminal=false
Categories=Network Categories=Network

View File

@ -460,6 +460,90 @@ class MyForm(QtGui.QMainWindow):
#QtCore.QObject.connect(self.workerThread, QtCore.SIGNAL("updateSentItemStatusByAckdata(PyQt_PyObject,PyQt_PyObject)"), self.updateSentItemStatusByAckdata) #QtCore.QObject.connect(self.workerThread, QtCore.SIGNAL("updateSentItemStatusByAckdata(PyQt_PyObject,PyQt_PyObject)"), self.updateSentItemStatusByAckdata)
#QtCore.QObject.connect(self.workerThread, QtCore.SIGNAL("updateStatusBar(PyQt_PyObject)"), self.updateStatusBar) #QtCore.QObject.connect(self.workerThread, QtCore.SIGNAL("updateStatusBar(PyQt_PyObject)"), self.updateStatusBar)
# an appindicator action which indicates the connection status
actionStatus = None
# an appindicator action which shows of hides the program window
actionShow = None
# show the application window
def appIndicatorShow(self):
if self.actionShow == None:
return
self.actionShow.setChecked(True)
self.show()
self.setWindowState(self.windowState() & QtCore.Qt.WindowMaximized)
# application indicator show or hide
def appIndicatorShowBitmessage(self):
if self.actionShow == None:
return
if not self.actionShow.isChecked():
self.hide()
self.setWindowState(self.windowState() & QtCore.Qt.WindowMinimized)
else:
self.show()
self.setWindowState(self.windowState() & QtCore.Qt.WindowMaximized)
# Show the program window and select send tab
def appIndicatorSend(self):
self.appIndicatorShow()
self.ui.tabWidget.setCurrentIndex(1)
# Show the program window and select subscriptions tab
def appIndicatorSubscribe(self):
self.appIndicatorShow()
self.ui.tabWidget.setCurrentIndex(4)
# Show the program window and select the address book tab
def appIndicatorAddressBook(self):
self.appIndicatorShow()
self.ui.tabWidget.setCurrentIndex(5)
# create application indicator
def createAppIndicator(self,app):
app.tray = QSystemTrayIcon(QtGui.QIcon("images/can-icon-24px.png"), app)
m = QMenu()
self.actionStatus = QtGui.QAction('Not Connected',m,checkable=False)
m.addAction(self.actionStatus)
# separator
actionSeparator = QtGui.QAction('',m,checkable=False)
actionSeparator.setSeparator(True)
m.addAction(actionSeparator)
# show bitmessage
self.actionShow = QtGui.QAction('Show Bitmessage',m,checkable=True)
self.actionShow.setChecked(True)
self.actionShow.triggered.connect(self.appIndicatorShowBitmessage)
m.addAction(self.actionShow)
# Send
actionSend = QtGui.QAction('Send',m,checkable=False)
actionSend.triggered.connect(self.appIndicatorSend)
m.addAction(actionSend)
# Subscribe
actionSubscribe = QtGui.QAction('Subscribe',m,checkable=False)
actionSubscribe.triggered.connect(self.appIndicatorSubscribe)
m.addAction(actionSubscribe)
# Address book
actionAddressBook = QtGui.QAction('Address Book',m,checkable=False)
actionAddressBook.triggered.connect(self.appIndicatorAddressBook)
m.addAction(actionAddressBook)
# separator
actionSeparator = QtGui.QAction('',m,checkable=False)
actionSeparator.setSeparator(True)
m.addAction(actionSeparator)
# Quit
m.addAction("Quit", self.close)
app.tray.setContextMenu(m)
app.tray.show()
def tableWidgetInboxKeyPressEvent(self,event): def tableWidgetInboxKeyPressEvent(self,event):
if event.key() == QtCore.Qt.Key_Delete: if event.key() == QtCore.Qt.Key_Delete:
self.on_action_InboxTrash() self.on_action_InboxTrash()
@ -601,16 +685,22 @@ class MyForm(QtGui.QMainWindow):
if color == 'red': if color == 'red':
self.ui.pushButtonStatusIcon.setIcon(QIcon(":/newPrefix/images/redicon.png")) self.ui.pushButtonStatusIcon.setIcon(QIcon(":/newPrefix/images/redicon.png"))
shared.statusIconColor = 'red' shared.statusIconColor = 'red'
if self.actionStatus != None:
self.actionStatus.setText('Not Connected')
if color == 'yellow': if color == 'yellow':
if self.statusBar().currentMessage() == 'Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won\'t send until you connect.': if self.statusBar().currentMessage() == 'Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won\'t send until you connect.':
self.statusBar().showMessage('') self.statusBar().showMessage('')
self.ui.pushButtonStatusIcon.setIcon(QIcon(":/newPrefix/images/yellowicon.png")) self.ui.pushButtonStatusIcon.setIcon(QIcon(":/newPrefix/images/yellowicon.png"))
shared.statusIconColor = 'yellow' shared.statusIconColor = 'yellow'
if self.actionStatus != None:
self.actionStatus.setText('Connection Ok')
if color == 'green': if color == 'green':
if self.statusBar().currentMessage() == 'Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won\'t send until you connect.': if self.statusBar().currentMessage() == 'Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won\'t send until you connect.':
self.statusBar().showMessage('') self.statusBar().showMessage('')
self.ui.pushButtonStatusIcon.setIcon(QIcon(":/newPrefix/images/greenicon.png")) self.ui.pushButtonStatusIcon.setIcon(QIcon(":/newPrefix/images/greenicon.png"))
shared.statusIconColor = 'green' shared.statusIconColor = 'green'
if self.actionStatus != None:
self.actionStatus.setText('Connection Good')
def updateSentItemStatusByHash(self,toRipe,textToDisplay): def updateSentItemStatusByHash(self,toRipe,textToDisplay):
for i in range(self.ui.tableWidgetSent.rowCount()): for i in range(self.ui.tableWidgetSent.rowCount()):
@ -1946,6 +2036,8 @@ class UISignaler(QThread):
else: else:
sys.stderr.write('Command sent to UISignaler not recognized: %s\n' % command) sys.stderr.write('Command sent to UISignaler not recognized: %s\n' % command)
def run(): def run():
app = QtGui.QApplication(sys.argv) app = QtGui.QApplication(sys.argv)
app.setStyleSheet("QStatusBar::item { border: 0px solid black }") app.setStyleSheet("QStatusBar::item { border: 0px solid black }")
@ -1959,4 +2051,6 @@ def run():
#self.hide() #self.hide()
if 'win32' in sys.platform or 'win64' in sys.platform: if 'win32' in sys.platform or 'win64' in sys.platform:
myapp.setWindowFlags(Qt.ToolTip) myapp.setWindowFlags(Qt.ToolTip)
sys.exit(app.exec_()) myapp.createAppIndicator(app)
sys.exit(app.exec_())