From 2b2fa867f058e649cb7502ac36e5de2334108b27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ci=C4=99=C5=BCarkiewicz?= Date: Tue, 9 Jul 2013 12:19:31 +0200 Subject: [PATCH 01/18] Exit if `dpkg-buildpackage` fails. --- debian.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian.sh b/debian.sh index ac26380e..10cbf61e 100755 --- a/debian.sh +++ b/debian.sh @@ -23,7 +23,7 @@ mv ../PyBitmessage ../${APP}-${VERSION} make source # Build the package -dpkg-buildpackage -A +dpkg-buildpackage -A || exit 1 # change the directory name back mv ../${APP}-${VERSION} ../PyBitmessage From e4869514ca79d4f8564a584304109b5244151b40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ci=C4=99=C5=BCarkiewicz?= Date: Tue, 9 Jul 2013 12:19:54 +0200 Subject: [PATCH 02/18] Add `make uninstall`. --- Makefile | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Makefile b/Makefile index afb6744e..cacc103f 100755 --- a/Makefile +++ b/Makefile @@ -35,6 +35,14 @@ install: install -m 644 desktop/can-icon.svg ${DEST_SHARE}/icons/hicolor/scalable/apps/${APP}.svg install -m 644 desktop/can-icon.svg ${DEST_SHARE}/pixmaps/${APP}.svg +uninstall: + rm -Rf "${DEST_APP}" + rm -f "${DESTDIR}/usr/bin/${APP}" + rm -f "${DEST_SHARE}/applications/${APP}.desktop" + rm -f "${DEST_SHARE}/icons/hicolor/24x24/apps/${APP}.png" + rm -f "${DEST_SHARE}/icons/hicolor/scalable/apps/${APP}.svg" + rm -f "${DEST_SHARE}/pixmaps/${APP}.svg" + clean: rm -rf debian/${APP} rm -f ../${APP}_*.deb ../${APP}_*.asc ../${APP}_*.dsc ../${APP}*.changes From 2e2db97250d38f190cdc7aeb600360ba9c4054a6 Mon Sep 17 00:00:00 2001 From: Gregor Robinson Date: Wed, 10 Jul 2013 19:50:18 +0100 Subject: [PATCH 03/18] Don't propagate loggers; add some logging. --- src/debug.py | 3 +++ src/shared.py | 61 +++++++++++++++++++++++---------------------------- 2 files changed, 31 insertions(+), 33 deletions(-) diff --git a/src/debug.py b/src/debug.py index d8033f2d..14214686 100644 --- a/src/debug.py +++ b/src/debug.py @@ -48,12 +48,15 @@ logging.config.dictConfig({ 'loggers': { 'console_only': { 'handlers': ['console'], + 'propagate' : 0 }, 'file_only': { 'handlers': ['file'], + 'propagate' : 0 }, 'both': { 'handlers': ['console', 'file'], + 'propagate' : 0 }, }, 'root': { diff --git a/src/shared.py b/src/shared.py index 4b3ef73b..313e2ac6 100644 --- a/src/shared.py +++ b/src/shared.py @@ -118,7 +118,8 @@ def lookupAppdataFolder(): if "HOME" in environ: dataFolder = path.join(os.environ["HOME"], "Library/Application Support/", APPNAME) + '/' else: - print 'Could not find home folder, please report this message and your OS X version to the BitMessage Github.' + logger.critical('Could not find home folder, please report this message and your ' + 'OS X version to the BitMessage Github.') sys.exit() elif 'win32' in sys.platform or 'win64' in sys.platform: @@ -129,13 +130,14 @@ def lookupAppdataFolder(): dataFolder = path.join(environ["XDG_CONFIG_HOME"], APPNAME) except KeyError: dataFolder = path.join(environ["HOME"], ".config", APPNAME) + # Migrate existing data to the proper location if this is an existing install - try: - print "Moving data folder to ~/.config/%s" % APPNAME - move(path.join(environ["HOME"], ".%s" % APPNAME), dataFolder) - dataFolder = dataFolder + '/' - except IOError: - dataFolder = dataFolder + '/' + if not os.path.exists(dataFolder): + try: + logger.info("Moving data folder to ~/.config/%s" % APPNAME) + move(path.join(environ["HOME"], ".%s" % APPNAME), dataFolder) + except IOError: + dataFolder = dataFolder + '/' return dataFolder def isAddressInMyAddressBook(address): @@ -200,9 +202,7 @@ def decodeWalletImportFormat(WIFstring): def reloadMyAddressHashes(): - printLock.acquire() - print 'reloading keys from keys.dat file' - printLock.release() + logger.debug('reloading keys from keys.dat file') myECCryptorObjects.clear() myAddressesByHash.clear() #myPrivateKeys.clear() @@ -221,9 +221,7 @@ def reloadMyAddressHashes(): sys.stderr.write('Error in reloadMyAddressHashes: Can\'t handle address versions other than 2 or 3.\n') def reloadBroadcastSendersForWhichImWatching(): - printLock.acquire() - print 'reloading subscriptions...' - printLock.release() + logger.debug('reloading subscriptions...') broadcastSendersForWhichImWatching.clear() MyECSubscriptionCryptorObjects.clear() sqlLock.acquire() @@ -246,46 +244,43 @@ def doCleanShutdown(): knownNodesLock.acquire() UISignalQueue.put(('updateStatusBar','Saving the knownNodes list of peers to disk...')) output = open(appdata + 'knownnodes.dat', 'wb') - print 'finished opening knownnodes.dat. Now pickle.dump' + logger.info('finished opening knownnodes.dat. Now pickle.dump') pickle.dump(knownNodes, output) - print 'Completed pickle.dump. Closing output...' + logger.info('Completed pickle.dump. Closing output...') output.close() knownNodesLock.release() - printLock.acquire() - print 'Finished closing knownnodes.dat output file.' - printLock.release() + logger.info('Finished closing knownnodes.dat output file.') UISignalQueue.put(('updateStatusBar','Done saving the knownNodes list of peers to disk.')) broadcastToSendDataQueues((0, 'shutdown', 'all')) - printLock.acquire() - print 'Flushing inventory in memory out to disk...' - printLock.release() - UISignalQueue.put(('updateStatusBar','Flushing inventory in memory out to disk. This should normally only take a second...')) + logger.info('Flushing inventory in memory out to disk...') + UISignalQueue.put(('updateStatusBar','Flushing inventory in memory out to disk. ' + 'This should normally only take a second...')) flushInventory() - #This one last useless query will guarantee that the previous flush committed before we close the program. + # This one last useless query will guarantee that the previous flush committed before we close + # the program. sqlLock.acquire() sqlSubmitQueue.put('SELECT address FROM subscriptions') sqlSubmitQueue.put('') sqlReturnQueue.get() sqlSubmitQueue.put('exit') sqlLock.release() - printLock.acquire() - print 'Finished flushing inventory.' - printLock.release() - - time.sleep(.25) #Wait long enough to guarantee that any running proof of work worker threads will check the shutdown variable and exit. If the main thread closes before they do then they won't stop. + logger.info('Finished flushing inventory.') + # Wait long enough to guarantee that any running proof of work worker threads will check the + # shutdown variable and exit. If the main thread closes before they do then they won't stop. + time.sleep(.25) if safeConfigGetBoolean('bitmessagesettings','daemon'): - printLock.acquire() - print 'Done.' - printLock.release() + logger.info('Clean shutdown complete.') os._exit(0) -#When you want to command a sendDataThread to do something, like shutdown or send some data, this function puts your data into the queues for each of the sendDataThreads. The sendDataThreads are responsible for putting their queue into (and out of) the sendDataQueues list. +# When you want to command a sendDataThread to do something, like shutdown or send some data, this +# function puts your data into the queues for each of the sendDataThreads. The sendDataThreads are +# responsible for putting their queue into (and out of) the sendDataQueues list. def broadcastToSendDataQueues(data): - #print 'running broadcastToSendDataQueues' + # logger.debug('running broadcastToSendDataQueues') for q in sendDataQueues: q.put((data)) From 3179ea30f01912a55d1ede14b1fc161d48b7969a Mon Sep 17 00:00:00 2001 From: Gregor Robinson Date: Wed, 10 Jul 2013 20:15:04 +0100 Subject: [PATCH 04/18] These changes slipped from last commit. Sorry. --- src/shared.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/shared.py b/src/shared.py index 313e2ac6..c706038a 100644 --- a/src/shared.py +++ b/src/shared.py @@ -21,6 +21,7 @@ import socket import random import highlevelcrypto import shared +from debug import logger config = ConfigParser.SafeConfigParser() myECCryptorObjects = {} @@ -132,11 +133,11 @@ def lookupAppdataFolder(): dataFolder = path.join(environ["HOME"], ".config", APPNAME) # Migrate existing data to the proper location if this is an existing install - if not os.path.exists(dataFolder): - try: - logger.info("Moving data folder to ~/.config/%s" % APPNAME) - move(path.join(environ["HOME"], ".%s" % APPNAME), dataFolder) - except IOError: + try: + logger.info("Moving data folder to %s" % (dataFolder)) + move(path.join(environ["HOME"], ".%s" % APPNAME), dataFolder) + except IOError: + pass dataFolder = dataFolder + '/' return dataFolder @@ -255,8 +256,9 @@ def doCleanShutdown(): broadcastToSendDataQueues((0, 'shutdown', 'all')) logger.info('Flushing inventory in memory out to disk...') - UISignalQueue.put(('updateStatusBar','Flushing inventory in memory out to disk. ' - 'This should normally only take a second...')) + UISignalQueue.put(( + 'updateStatusBar', + 'Flushing inventory in memory out to disk. This should normally only take a second...')) flushInventory() # This one last useless query will guarantee that the previous flush committed before we close From 14266de0c69725b62823845a275ab9ec9bc56574 Mon Sep 17 00:00:00 2001 From: Rainulf Pineda Date: Thu, 11 Jul 2013 03:23:39 -0400 Subject: [PATCH 05/18] Updated bitmessageui for search. --- src/bitmessageqt/bitmessageui.ui | 76 ++++++++++++++++++++++++++------ 1 file changed, 62 insertions(+), 14 deletions(-) diff --git a/src/bitmessageqt/bitmessageui.ui b/src/bitmessageqt/bitmessageui.ui index 48f5c224..8aef2309 100644 --- a/src/bitmessageqt/bitmessageui.ui +++ b/src/bitmessageqt/bitmessageui.ui @@ -14,7 +14,7 @@ Bitmessage - + :/newPrefix/images/can-icon-24px.png:/newPrefix/images/can-icon-24px.png @@ -22,7 +22,16 @@ - + + 0 + + + 0 + + + 0 + + 0 @@ -61,13 +70,52 @@ - + :/newPrefix/images/inbox.png:/newPrefix/images/inbox.png Inbox + + + + 0 + + + + + + + + + All + + + + + To + + + + + From + + + + + Subject + + + + + Received + + + + + + @@ -145,7 +193,7 @@ - + :/newPrefix/images/send.png:/newPrefix/images/send.png @@ -214,8 +262,8 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2';"><br /></p></body></html> @@ -303,7 +351,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/sent.png:/newPrefix/images/sent.png @@ -380,7 +428,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/identities.png:/newPrefix/images/identities.png @@ -480,7 +528,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/subscriptions.png:/newPrefix/images/subscriptions.png @@ -565,7 +613,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/addressbook.png:/newPrefix/images/addressbook.png @@ -647,7 +695,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/blacklist.png:/newPrefix/images/blacklist.png @@ -739,7 +787,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/networkstatus.png:/newPrefix/images/networkstatus.png @@ -758,7 +806,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/redicon.png:/newPrefix/images/redicon.png @@ -925,7 +973,7 @@ p, li { white-space: pre-wrap; } 0 0 795 - 18 + 20 From 855a9f963f02b79aaab1003ab63b18f480dc7527 Mon Sep 17 00:00:00 2001 From: Rainulf Pineda Date: Fri, 12 Jul 2013 02:01:33 -0400 Subject: [PATCH 06/18] Generated py for search. --- Makefile | 0 debian.sh | 0 debian/rules | 0 osx.sh | 0 src/bitmessageqt/bitmessageui.py | 30 +++++++++++++++++++++++++----- src/bitmessageqt/bitmessageui.ui | 20 ++++++++++---------- 6 files changed, 35 insertions(+), 15 deletions(-) mode change 100755 => 100644 Makefile mode change 100755 => 100644 debian.sh mode change 100755 => 100644 debian/rules mode change 100755 => 100644 osx.sh diff --git a/Makefile b/Makefile old mode 100755 new mode 100644 diff --git a/debian.sh b/debian.sh old mode 100755 new mode 100644 diff --git a/debian/rules b/debian/rules old mode 100755 new mode 100644 diff --git a/osx.sh b/osx.sh old mode 100755 new mode 100644 diff --git a/src/bitmessageqt/bitmessageui.py b/src/bitmessageqt/bitmessageui.py index 1186e814..dbb33fb0 100644 --- a/src/bitmessageqt/bitmessageui.py +++ b/src/bitmessageqt/bitmessageui.py @@ -2,8 +2,8 @@ # Form implementation generated from reading ui file 'bitmessageui.ui' # -# Created: Thu Jun 13 01:02:50 2013 -# by: PyQt4 UI code generator 4.10.1 +# Created: Fri Jul 12 01:59:15 2013 +# by: PyQt4 UI code generator 4.10 # # WARNING! All changes made in this file will be lost! @@ -54,6 +54,21 @@ class Ui_MainWindow(object): self.inbox.setObjectName(_fromUtf8("inbox")) self.verticalLayout_2 = QtGui.QVBoxLayout(self.inbox) self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) + self.horizontalLayoutSearch = QtGui.QHBoxLayout() + self.horizontalLayoutSearch.setContentsMargins(-1, 0, -1, -1) + self.horizontalLayoutSearch.setObjectName(_fromUtf8("horizontalLayoutSearch")) + self.searchLineEdit = QtGui.QLineEdit(self.inbox) + self.searchLineEdit.setObjectName(_fromUtf8("searchLineEdit")) + self.horizontalLayoutSearch.addWidget(self.searchLineEdit) + self.searchOptionCB = QtGui.QComboBox(self.inbox) + self.searchOptionCB.setObjectName(_fromUtf8("searchOptionCB")) + self.searchOptionCB.addItem(_fromUtf8("")) + self.searchOptionCB.addItem(_fromUtf8("")) + self.searchOptionCB.addItem(_fromUtf8("")) + self.searchOptionCB.addItem(_fromUtf8("")) + self.searchOptionCB.addItem(_fromUtf8("")) + self.horizontalLayoutSearch.addWidget(self.searchOptionCB) + self.verticalLayout_2.addLayout(self.horizontalLayoutSearch) self.tableWidgetInbox = QtGui.QTableWidget(self.inbox) self.tableWidgetInbox.setAlternatingRowColors(True) self.tableWidgetInbox.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) @@ -392,7 +407,7 @@ class Ui_MainWindow(object): self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 795, 18)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 795, 20)) self.menubar.setObjectName(_fromUtf8("menubar")) self.menuFile = QtGui.QMenu(self.menubar) self.menuFile.setObjectName(_fromUtf8("menuFile")) @@ -467,6 +482,11 @@ class Ui_MainWindow(object): def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(_translate("MainWindow", "Bitmessage", None)) + self.searchOptionCB.setItemText(0, _translate("MainWindow", "All", None)) + self.searchOptionCB.setItemText(1, _translate("MainWindow", "To", None)) + self.searchOptionCB.setItemText(2, _translate("MainWindow", "From", None)) + self.searchOptionCB.setItemText(3, _translate("MainWindow", "Subject", None)) + self.searchOptionCB.setItemText(4, _translate("MainWindow", "Received", None)) self.tableWidgetInbox.setSortingEnabled(True) item = self.tableWidgetInbox.horizontalHeaderItem(0) item.setText(_translate("MainWindow", "To", None)) @@ -484,8 +504,8 @@ class Ui_MainWindow(object): self.textEditMessage.setHtml(_translate("MainWindow", "\n" "\n" -"


", None)) +"\n" +"


", None)) self.label.setText(_translate("MainWindow", "To:", None)) self.label_2.setText(_translate("MainWindow", "From:", None)) self.radioButtonBroadcast.setText(_translate("MainWindow", "Broadcast to everyone who is subscribed to your address", None)) diff --git a/src/bitmessageqt/bitmessageui.ui b/src/bitmessageqt/bitmessageui.ui index 8aef2309..65ad632d 100644 --- a/src/bitmessageqt/bitmessageui.ui +++ b/src/bitmessageqt/bitmessageui.ui @@ -14,7 +14,7 @@ Bitmessage - + :/newPrefix/images/can-icon-24px.png:/newPrefix/images/can-icon-24px.png @@ -70,7 +70,7 @@ - + :/newPrefix/images/inbox.png:/newPrefix/images/inbox.png @@ -193,7 +193,7 @@ - + :/newPrefix/images/send.png:/newPrefix/images/send.png @@ -351,7 +351,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/sent.png:/newPrefix/images/sent.png @@ -428,7 +428,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/identities.png:/newPrefix/images/identities.png @@ -528,7 +528,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/subscriptions.png:/newPrefix/images/subscriptions.png @@ -613,7 +613,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/addressbook.png:/newPrefix/images/addressbook.png @@ -695,7 +695,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/blacklist.png:/newPrefix/images/blacklist.png @@ -787,7 +787,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/networkstatus.png:/newPrefix/images/networkstatus.png @@ -806,7 +806,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/redicon.png:/newPrefix/images/redicon.png From 45cfead4d0cd06d69327c827b6196cf977f531cc Mon Sep 17 00:00:00 2001 From: Rainulf Pineda Date: Fri, 12 Jul 2013 04:24:24 -0400 Subject: [PATCH 07/18] Inbox search. --- src/bitmessageqt/__init__.py | 435 +++++++++++++++++-------------- src/bitmessageqt/bitmessageui.py | 34 +-- src/bitmessageqt/bitmessageui.ui | 6 +- 3 files changed, 258 insertions(+), 217 deletions(-) diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index ae5ab8a7..8f3042a0 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -308,205 +308,10 @@ class MyForm(QtGui.QMainWindow): addressInKeysFile) # Load inbox from messages database file - font = QFont() - font.setBold(True) - shared.sqlLock.acquire() - shared.sqlSubmitQueue.put( - '''SELECT msgid, toaddress, fromaddress, subject, received, message, read FROM inbox where folder='inbox' ORDER BY received''') - shared.sqlSubmitQueue.put('') - queryreturn = shared.sqlReturnQueue.get() - shared.sqlLock.release() - for row in queryreturn: - msgid, toAddress, fromAddress, subject, received, message, read = row - subject = shared.fixPotentiallyInvalidUTF8Data(subject) - message = shared.fixPotentiallyInvalidUTF8Data(message) - try: - if toAddress == self.str_broadcast_subscribers: - toLabel = self.str_broadcast_subscribers - else: - toLabel = shared.config.get(toAddress, 'label') - except: - toLabel = '' - if toLabel == '': - toLabel = toAddress - - fromLabel = '' - t = (fromAddress,) - shared.sqlLock.acquire() - shared.sqlSubmitQueue.put( - '''select label from addressbook where address=?''') - shared.sqlSubmitQueue.put(t) - queryreturn = shared.sqlReturnQueue.get() - shared.sqlLock.release() - - if queryreturn != []: - for row in queryreturn: - fromLabel, = row - - if fromLabel == '': # If this address wasn't in our address book... - t = (fromAddress,) - shared.sqlLock.acquire() - shared.sqlSubmitQueue.put( - '''select label from subscriptions where address=?''') - shared.sqlSubmitQueue.put(t) - queryreturn = shared.sqlReturnQueue.get() - shared.sqlLock.release() - - if queryreturn != []: - for row in queryreturn: - fromLabel, = row - - self.ui.tableWidgetInbox.insertRow(0) - newItem = QtGui.QTableWidgetItem(unicode(toLabel, 'utf-8')) - newItem.setToolTip(unicode(toLabel, 'utf-8')) - newItem.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - if not read: - newItem.setFont(font) - newItem.setData(Qt.UserRole, str(toAddress)) - if shared.safeConfigGetBoolean(toAddress, 'mailinglist'): - newItem.setTextColor(QtGui.QColor(137, 04, 177)) - self.ui.tableWidgetInbox.setItem(0, 0, newItem) - if fromLabel == '': - newItem = QtGui.QTableWidgetItem( - unicode(fromAddress, 'utf-8')) - newItem.setToolTip(unicode(fromAddress, 'utf-8')) - else: - newItem = QtGui.QTableWidgetItem(unicode(fromLabel, 'utf-8')) - newItem.setToolTip(unicode(fromLabel, 'utf-8')) - newItem.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - if not read: - newItem.setFont(font) - newItem.setData(Qt.UserRole, str(fromAddress)) - - self.ui.tableWidgetInbox.setItem(0, 1, newItem) - newItem = QtGui.QTableWidgetItem(unicode(subject, 'utf-8')) - newItem.setToolTip(unicode(subject, 'utf-8')) - newItem.setData(Qt.UserRole, unicode(message, 'utf-8)')) - newItem.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - if not read: - newItem.setFont(font) - self.ui.tableWidgetInbox.setItem(0, 2, newItem) - newItem = myTableWidgetItem(unicode(strftime(shared.config.get( - 'bitmessagesettings', 'timeformat'), localtime(int(received))), 'utf-8')) - newItem.setToolTip(unicode(strftime(shared.config.get( - 'bitmessagesettings', 'timeformat'), localtime(int(received))), 'utf-8')) - newItem.setData(Qt.UserRole, QByteArray(msgid)) - newItem.setData(33, int(received)) - newItem.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - if not read: - newItem.setFont(font) - self.ui.tableWidgetInbox.setItem(0, 3, newItem) - self.ui.tableWidgetInbox.sortItems(3, Qt.DescendingOrder) - self.ui.tableWidgetInbox.keyPressEvent = self.tableWidgetInboxKeyPressEvent + self.loadInbox() # Load Sent items from database - shared.sqlLock.acquire() - shared.sqlSubmitQueue.put( - '''SELECT toaddress, fromaddress, subject, message, status, ackdata, lastactiontime FROM sent where folder = 'sent' ORDER BY lastactiontime''') - shared.sqlSubmitQueue.put('') - queryreturn = shared.sqlReturnQueue.get() - shared.sqlLock.release() - for row in queryreturn: - toAddress, fromAddress, subject, message, status, ackdata, lastactiontime = row - subject = shared.fixPotentiallyInvalidUTF8Data(subject) - message = shared.fixPotentiallyInvalidUTF8Data(message) - try: - fromLabel = shared.config.get(fromAddress, 'label') - except: - fromLabel = '' - if fromLabel == '': - fromLabel = fromAddress - - toLabel = '' - t = (toAddress,) - shared.sqlLock.acquire() - shared.sqlSubmitQueue.put( - '''select label from addressbook where address=?''') - shared.sqlSubmitQueue.put(t) - queryreturn = shared.sqlReturnQueue.get() - shared.sqlLock.release() - - if queryreturn != []: - for row in queryreturn: - toLabel, = row - - self.ui.tableWidgetSent.insertRow(0) - if toLabel == '': - newItem = QtGui.QTableWidgetItem(unicode(toAddress, 'utf-8')) - newItem.setToolTip(unicode(toAddress, 'utf-8')) - else: - newItem = QtGui.QTableWidgetItem(unicode(toLabel, 'utf-8')) - newItem.setToolTip(unicode(toLabel, 'utf-8')) - newItem.setData(Qt.UserRole, str(toAddress)) - newItem.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - self.ui.tableWidgetSent.setItem(0, 0, newItem) - if fromLabel == '': - newItem = QtGui.QTableWidgetItem( - unicode(fromAddress, 'utf-8')) - newItem.setToolTip(unicode(fromAddress, 'utf-8')) - else: - newItem = QtGui.QTableWidgetItem(unicode(fromLabel, 'utf-8')) - newItem.setToolTip(unicode(fromLabel, 'utf-8')) - newItem.setData(Qt.UserRole, str(fromAddress)) - newItem.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - self.ui.tableWidgetSent.setItem(0, 1, newItem) - newItem = QtGui.QTableWidgetItem(unicode(subject, 'utf-8')) - newItem.setToolTip(unicode(subject, 'utf-8')) - newItem.setData(Qt.UserRole, unicode(message, 'utf-8)')) - newItem.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - self.ui.tableWidgetSent.setItem(0, 2, newItem) - if status == 'awaitingpubkey': - statusText = _translate( - "MainWindow", "Waiting on their encryption key. Will request it again soon.") - elif status == 'doingpowforpubkey': - statusText = _translate( - "MainWindow", "Encryption key request queued.") - elif status == 'msgqueued': - statusText = _translate( - "MainWindow", "Queued.") - elif status == 'msgsent': - statusText = _translate("MainWindow", "Message sent. Waiting on acknowledgement. Sent at %1").arg( - unicode(strftime(shared.config.get('bitmessagesettings', 'timeformat'), localtime(lastactiontime)),'utf-8')) - elif status == 'doingmsgpow': - statusText = _translate( - "MainWindow", "Need to do work to send message. Work is queued.") - elif status == 'ackreceived': - statusText = _translate("MainWindow", "Acknowledgement of the message received %1").arg( - unicode(strftime(shared.config.get('bitmessagesettings', 'timeformat'), localtime(lastactiontime)),'utf-8')) - elif status == 'broadcastqueued': - statusText = _translate( - "MainWindow", "Broadcast queued.") - elif status == 'broadcastsent': - statusText = _translate("MainWindow", "Broadcast on %1").arg(unicode(strftime( - shared.config.get('bitmessagesettings', 'timeformat'), localtime(lastactiontime)),'utf-8')) - elif status == 'toodifficult': - statusText = _translate("MainWindow", "Problem: The work demanded by the recipient is more difficult than you are willing to do. %1").arg( - unicode(strftime(shared.config.get('bitmessagesettings', 'timeformat'), localtime(lastactiontime)),'utf-8')) - elif status == 'badkey': - statusText = _translate("MainWindow", "Problem: The recipient\'s encryption key is no good. Could not encrypt message. %1").arg( - unicode(strftime(shared.config.get('bitmessagesettings', 'timeformat'), localtime(lastactiontime)),'utf-8')) - elif status == 'forcepow': - statusText = _translate( - "MainWindow", "Forced difficulty override. Send should start soon.") - else: - statusText = _translate("MainWindow", "Unknown status: %1 %2").arg(status).arg(unicode( - strftime(shared.config.get('bitmessagesettings', 'timeformat'), localtime(lastactiontime)),'utf-8')) - newItem = myTableWidgetItem(statusText) - newItem.setToolTip(statusText) - newItem.setData(Qt.UserRole, QByteArray(ackdata)) - newItem.setData(33, int(lastactiontime)) - newItem.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - self.ui.tableWidgetSent.setItem(0, 3, newItem) - self.ui.tableWidgetSent.sortItems(3, Qt.DescendingOrder) - self.ui.tableWidgetSent.keyPressEvent = self.tableWidgetSentKeyPressEvent + self.loadSent() # Initialize the address book shared.sqlLock.acquire() @@ -527,6 +332,10 @@ class MyForm(QtGui.QMainWindow): # Initialize the Subscriptions self.rerenderSubscriptions() + # Initialize the inbox search + QtCore.QObject.connect(self.ui.inboxSearchLineEdit, QtCore.SIGNAL( + "returnPressed()"), self.inboxSearchLineEditPressed) + # Initialize the Blacklist or Whitelist if shared.config.get('bitmessagesettings', 'blackwhitelist') == 'black': self.loadBlackWhiteList() @@ -686,6 +495,231 @@ class MyForm(QtGui.QMainWindow): self.appIndicatorShow() self.ui.tabWidget.setCurrentIndex(5) + # Load Sent items from database + def loadSent(self, where="", what=""): + shared.sqlLock.acquire() + shared.sqlSubmitQueue.put( + '''SELECT toaddress, fromaddress, subject, message, status, ackdata, lastactiontime FROM sent where folder = 'sent' ORDER BY lastactiontime''') + shared.sqlSubmitQueue.put('') + queryreturn = shared.sqlReturnQueue.get() + shared.sqlLock.release() + for row in queryreturn: + toAddress, fromAddress, subject, message, status, ackdata, lastactiontime = row + subject = shared.fixPotentiallyInvalidUTF8Data(subject) + message = shared.fixPotentiallyInvalidUTF8Data(message) + try: + fromLabel = shared.config.get(fromAddress, 'label') + except: + fromLabel = '' + if fromLabel == '': + fromLabel = fromAddress + + toLabel = '' + t = (toAddress,) + shared.sqlLock.acquire() + shared.sqlSubmitQueue.put( + '''select label from addressbook where address=?''') + shared.sqlSubmitQueue.put(t) + queryreturn = shared.sqlReturnQueue.get() + shared.sqlLock.release() + + if queryreturn != []: + for row in queryreturn: + toLabel, = row + + self.ui.tableWidgetSent.insertRow(0) + if toLabel == '': + newItem = QtGui.QTableWidgetItem(unicode(toAddress, 'utf-8')) + newItem.setToolTip(unicode(toAddress, 'utf-8')) + else: + newItem = QtGui.QTableWidgetItem(unicode(toLabel, 'utf-8')) + newItem.setToolTip(unicode(toLabel, 'utf-8')) + newItem.setData(Qt.UserRole, str(toAddress)) + newItem.setFlags( + QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.tableWidgetSent.setItem(0, 0, newItem) + if fromLabel == '': + newItem = QtGui.QTableWidgetItem( + unicode(fromAddress, 'utf-8')) + newItem.setToolTip(unicode(fromAddress, 'utf-8')) + else: + newItem = QtGui.QTableWidgetItem(unicode(fromLabel, 'utf-8')) + newItem.setToolTip(unicode(fromLabel, 'utf-8')) + newItem.setData(Qt.UserRole, str(fromAddress)) + newItem.setFlags( + QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.tableWidgetSent.setItem(0, 1, newItem) + newItem = QtGui.QTableWidgetItem(unicode(subject, 'utf-8')) + newItem.setToolTip(unicode(subject, 'utf-8')) + newItem.setData(Qt.UserRole, unicode(message, 'utf-8)')) + newItem.setFlags( + QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.tableWidgetSent.setItem(0, 2, newItem) + if status == 'awaitingpubkey': + statusText = _translate( + "MainWindow", "Waiting on their encryption key. Will request it again soon.") + elif status == 'doingpowforpubkey': + statusText = _translate( + "MainWindow", "Encryption key request queued.") + elif status == 'msgqueued': + statusText = _translate( + "MainWindow", "Queued.") + elif status == 'msgsent': + statusText = _translate("MainWindow", "Message sent. Waiting on acknowledgement. Sent at %1").arg( + unicode(strftime(shared.config.get('bitmessagesettings', 'timeformat'), localtime(lastactiontime)),'utf-8')) + elif status == 'doingmsgpow': + statusText = _translate( + "MainWindow", "Need to do work to send message. Work is queued.") + elif status == 'ackreceived': + statusText = _translate("MainWindow", "Acknowledgement of the message received %1").arg( + unicode(strftime(shared.config.get('bitmessagesettings', 'timeformat'), localtime(lastactiontime)),'utf-8')) + elif status == 'broadcastqueued': + statusText = _translate( + "MainWindow", "Broadcast queued.") + elif status == 'broadcastsent': + statusText = _translate("MainWindow", "Broadcast on %1").arg(unicode(strftime( + shared.config.get('bitmessagesettings', 'timeformat'), localtime(lastactiontime)),'utf-8')) + elif status == 'toodifficult': + statusText = _translate("MainWindow", "Problem: The work demanded by the recipient is more difficult than you are willing to do. %1").arg( + unicode(strftime(shared.config.get('bitmessagesettings', 'timeformat'), localtime(lastactiontime)),'utf-8')) + elif status == 'badkey': + statusText = _translate("MainWindow", "Problem: The recipient\'s encryption key is no good. Could not encrypt message. %1").arg( + unicode(strftime(shared.config.get('bitmessagesettings', 'timeformat'), localtime(lastactiontime)),'utf-8')) + elif status == 'forcepow': + statusText = _translate( + "MainWindow", "Forced difficulty override. Send should start soon.") + else: + statusText = _translate("MainWindow", "Unknown status: %1 %2").arg(status).arg(unicode( + strftime(shared.config.get('bitmessagesettings', 'timeformat'), localtime(lastactiontime)),'utf-8')) + newItem = myTableWidgetItem(statusText) + newItem.setToolTip(statusText) + newItem.setData(Qt.UserRole, QByteArray(ackdata)) + newItem.setData(33, int(lastactiontime)) + newItem.setFlags( + QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + self.ui.tableWidgetSent.setItem(0, 3, newItem) + self.ui.tableWidgetSent.sortItems(3, Qt.DescendingOrder) + self.ui.tableWidgetSent.keyPressEvent = self.tableWidgetSentKeyPressEvent + + # Load inbox from messages database file + def loadInbox(self, where="", what=""): + what = "%" + what + "%" + if where == "To": + where = "toaddress" + elif where == "From": + where = "fromaddress" + elif where == "Subject": + where = "subject" + elif where == "Received": + where = "received" + elif where == "Message": + where = "message" + else: + where = "toaddress || fromaddress || subject || received || message" + + sqlQuery = ''' + SELECT msgid, toaddress, fromaddress, subject, received, message, read + FROM inbox WHERE folder="inbox" AND %s LIKE "%s" + ORDER BY received + ''' % (where, what) + + while self.ui.tableWidgetInbox.rowCount() > 0: + self.ui.tableWidgetInbox.removeRow(0) + + font = QFont() + font.setBold(True) + shared.sqlLock.acquire() + shared.sqlSubmitQueue.put(sqlQuery) + shared.sqlSubmitQueue.put('') + queryreturn = shared.sqlReturnQueue.get() + shared.sqlLock.release() + for row in queryreturn: + msgid, toAddress, fromAddress, subject, received, message, read = row + subject = shared.fixPotentiallyInvalidUTF8Data(subject) + message = shared.fixPotentiallyInvalidUTF8Data(message) + try: + if toAddress == self.str_broadcast_subscribers: + toLabel = self.str_broadcast_subscribers + else: + toLabel = shared.config.get(toAddress, 'label') + except: + toLabel = '' + if toLabel == '': + toLabel = toAddress + + fromLabel = '' + t = (fromAddress,) + shared.sqlLock.acquire() + shared.sqlSubmitQueue.put( + '''select label from addressbook where address=?''') + shared.sqlSubmitQueue.put(t) + queryreturn = shared.sqlReturnQueue.get() + shared.sqlLock.release() + + if queryreturn != []: + for row in queryreturn: + fromLabel, = row + + if fromLabel == '': # If this address wasn't in our address book... + t = (fromAddress,) + shared.sqlLock.acquire() + shared.sqlSubmitQueue.put( + '''select label from subscriptions where address=?''') + shared.sqlSubmitQueue.put(t) + queryreturn = shared.sqlReturnQueue.get() + shared.sqlLock.release() + + if queryreturn != []: + for row in queryreturn: + fromLabel, = row + + self.ui.tableWidgetInbox.insertRow(0) + newItem = QtGui.QTableWidgetItem(unicode(toLabel, 'utf-8')) + newItem.setToolTip(unicode(toLabel, 'utf-8')) + newItem.setFlags( + QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + if not read: + newItem.setFont(font) + newItem.setData(Qt.UserRole, str(toAddress)) + if shared.safeConfigGetBoolean(toAddress, 'mailinglist'): + newItem.setTextColor(QtGui.QColor(137, 04, 177)) + self.ui.tableWidgetInbox.setItem(0, 0, newItem) + if fromLabel == '': + newItem = QtGui.QTableWidgetItem( + unicode(fromAddress, 'utf-8')) + newItem.setToolTip(unicode(fromAddress, 'utf-8')) + else: + newItem = QtGui.QTableWidgetItem(unicode(fromLabel, 'utf-8')) + newItem.setToolTip(unicode(fromLabel, 'utf-8')) + newItem.setFlags( + QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + if not read: + newItem.setFont(font) + newItem.setData(Qt.UserRole, str(fromAddress)) + + self.ui.tableWidgetInbox.setItem(0, 1, newItem) + newItem = QtGui.QTableWidgetItem(unicode(subject, 'utf-8')) + newItem.setToolTip(unicode(subject, 'utf-8')) + newItem.setData(Qt.UserRole, unicode(message, 'utf-8)')) + newItem.setFlags( + QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + if not read: + newItem.setFont(font) + self.ui.tableWidgetInbox.setItem(0, 2, newItem) + newItem = myTableWidgetItem(unicode(strftime(shared.config.get( + 'bitmessagesettings', 'timeformat'), localtime(int(received))), 'utf-8')) + newItem.setToolTip(unicode(strftime(shared.config.get( + 'bitmessagesettings', 'timeformat'), localtime(int(received))), 'utf-8')) + newItem.setData(Qt.UserRole, QByteArray(msgid)) + newItem.setData(33, int(received)) + newItem.setFlags( + QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + if not read: + newItem.setFont(font) + self.ui.tableWidgetInbox.setItem(0, 3, newItem) + self.ui.tableWidgetInbox.sortItems(3, Qt.DescendingOrder) + self.ui.tableWidgetInbox.keyPressEvent = self.tableWidgetInboxKeyPressEvent + # create application indicator def appIndicatorInit(self, app): self.tray = QSystemTrayIcon(QtGui.QIcon( @@ -2507,6 +2541,13 @@ class MyForm(QtGui.QMainWindow): self.popMenuSent.addAction(self.actionForceSend) self.popMenuSent.exec_(self.ui.tableWidgetSent.mapToGlobal(point)) + def inboxSearchLineEditPressed(self): + searchKeyword = self.ui.inboxSearchLineEdit.text().toUtf8().data() + searchOption = self.ui.inboxSearchOptionCB.currentText().toUtf8().data() + self.ui.inboxSearchLineEdit.setText(QString("")) + self.ui.textEditInboxMessage.setPlainText(QString("")) + self.loadInbox(searchOption, searchKeyword) + def tableWidgetInboxItemClicked(self): currentRow = self.ui.tableWidgetInbox.currentRow() if currentRow >= 0: diff --git a/src/bitmessageqt/bitmessageui.py b/src/bitmessageqt/bitmessageui.py index dbb33fb0..ff23fa82 100644 --- a/src/bitmessageqt/bitmessageui.py +++ b/src/bitmessageqt/bitmessageui.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'bitmessageui.ui' # -# Created: Fri Jul 12 01:59:15 2013 +# Created: Fri Jul 12 04:16:52 2013 # by: PyQt4 UI code generator 4.10 # # WARNING! All changes made in this file will be lost! @@ -57,17 +57,17 @@ class Ui_MainWindow(object): self.horizontalLayoutSearch = QtGui.QHBoxLayout() self.horizontalLayoutSearch.setContentsMargins(-1, 0, -1, -1) self.horizontalLayoutSearch.setObjectName(_fromUtf8("horizontalLayoutSearch")) - self.searchLineEdit = QtGui.QLineEdit(self.inbox) - self.searchLineEdit.setObjectName(_fromUtf8("searchLineEdit")) - self.horizontalLayoutSearch.addWidget(self.searchLineEdit) - self.searchOptionCB = QtGui.QComboBox(self.inbox) - self.searchOptionCB.setObjectName(_fromUtf8("searchOptionCB")) - self.searchOptionCB.addItem(_fromUtf8("")) - self.searchOptionCB.addItem(_fromUtf8("")) - self.searchOptionCB.addItem(_fromUtf8("")) - self.searchOptionCB.addItem(_fromUtf8("")) - self.searchOptionCB.addItem(_fromUtf8("")) - self.horizontalLayoutSearch.addWidget(self.searchOptionCB) + self.inboxSearchLineEdit = QtGui.QLineEdit(self.inbox) + self.inboxSearchLineEdit.setObjectName(_fromUtf8("inboxSearchLineEdit")) + self.horizontalLayoutSearch.addWidget(self.inboxSearchLineEdit) + self.inboxSearchOptionCB = QtGui.QComboBox(self.inbox) + self.inboxSearchOptionCB.setObjectName(_fromUtf8("inboxSearchOptionCB")) + self.inboxSearchOptionCB.addItem(_fromUtf8("")) + self.inboxSearchOptionCB.addItem(_fromUtf8("")) + self.inboxSearchOptionCB.addItem(_fromUtf8("")) + self.inboxSearchOptionCB.addItem(_fromUtf8("")) + self.inboxSearchOptionCB.addItem(_fromUtf8("")) + self.horizontalLayoutSearch.addWidget(self.inboxSearchOptionCB) self.verticalLayout_2.addLayout(self.horizontalLayoutSearch) self.tableWidgetInbox = QtGui.QTableWidget(self.inbox) self.tableWidgetInbox.setAlternatingRowColors(True) @@ -482,11 +482,11 @@ class Ui_MainWindow(object): def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(_translate("MainWindow", "Bitmessage", None)) - self.searchOptionCB.setItemText(0, _translate("MainWindow", "All", None)) - self.searchOptionCB.setItemText(1, _translate("MainWindow", "To", None)) - self.searchOptionCB.setItemText(2, _translate("MainWindow", "From", None)) - self.searchOptionCB.setItemText(3, _translate("MainWindow", "Subject", None)) - self.searchOptionCB.setItemText(4, _translate("MainWindow", "Received", None)) + self.inboxSearchOptionCB.setItemText(0, _translate("MainWindow", "All", None)) + self.inboxSearchOptionCB.setItemText(1, _translate("MainWindow", "To", None)) + self.inboxSearchOptionCB.setItemText(2, _translate("MainWindow", "From", None)) + self.inboxSearchOptionCB.setItemText(3, _translate("MainWindow", "Subject", None)) + self.inboxSearchOptionCB.setItemText(4, _translate("MainWindow", "Message", None)) self.tableWidgetInbox.setSortingEnabled(True) item = self.tableWidgetInbox.horizontalHeaderItem(0) item.setText(_translate("MainWindow", "To", None)) diff --git a/src/bitmessageqt/bitmessageui.ui b/src/bitmessageqt/bitmessageui.ui index 65ad632d..2be3385d 100644 --- a/src/bitmessageqt/bitmessageui.ui +++ b/src/bitmessageqt/bitmessageui.ui @@ -83,10 +83,10 @@ 0 - + - + All @@ -109,7 +109,7 @@ - Received + Message From 997a8ff13ac5a311cece8f609de00b7c86447270 Mon Sep 17 00:00:00 2001 From: Rainulf Pineda Date: Fri, 12 Jul 2013 04:42:52 -0400 Subject: [PATCH 08/18] Sent search. --- src/bitmessageqt/__init__.py | 39 +++++++++++++++++--- src/bitmessageqt/bitmessageui.py | 26 +++++++++++-- src/bitmessageqt/bitmessageui.ui | 63 ++++++++++++++++++++++++++------ 3 files changed, 108 insertions(+), 20 deletions(-) diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 8f3042a0..92209bbe 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -336,6 +336,10 @@ class MyForm(QtGui.QMainWindow): QtCore.QObject.connect(self.ui.inboxSearchLineEdit, QtCore.SIGNAL( "returnPressed()"), self.inboxSearchLineEditPressed) + # Initialize the sent search + QtCore.QObject.connect(self.ui.sentSearchLineEdit, QtCore.SIGNAL( + "returnPressed()"), self.sentSearchLineEditPressed) + # Initialize the Blacklist or Whitelist if shared.config.get('bitmessagesettings', 'blackwhitelist') == 'black': self.loadBlackWhiteList() @@ -497,9 +501,29 @@ class MyForm(QtGui.QMainWindow): # Load Sent items from database def loadSent(self, where="", what=""): + what = "%" + what + "%" + if where == "To": + where = "toaddress" + elif where == "From": + where = "fromaddress" + elif where == "Subject": + where = "subject" + elif where == "Message": + where = "message" + else: + where = "toaddress || fromaddress || subject || message" + + sqlQuery = ''' + SELECT toaddress, fromaddress, subject, message, status, ackdata, lastactiontime + FROM sent WHERE folder="sent" AND %s LIKE "%s" + ORDER BY lastactiontime + ''' % (where, what) + + while self.ui.tableWidgetSent.rowCount() > 0: + self.ui.tableWidgetSent.removeRow(0) + shared.sqlLock.acquire() - shared.sqlSubmitQueue.put( - '''SELECT toaddress, fromaddress, subject, message, status, ackdata, lastactiontime FROM sent where folder = 'sent' ORDER BY lastactiontime''') + shared.sqlSubmitQueue.put(sqlQuery) shared.sqlSubmitQueue.put('') queryreturn = shared.sqlReturnQueue.get() shared.sqlLock.release() @@ -610,12 +634,10 @@ class MyForm(QtGui.QMainWindow): where = "fromaddress" elif where == "Subject": where = "subject" - elif where == "Received": - where = "received" elif where == "Message": where = "message" else: - where = "toaddress || fromaddress || subject || received || message" + where = "toaddress || fromaddress || subject || message" sqlQuery = ''' SELECT msgid, toaddress, fromaddress, subject, received, message, read @@ -2548,6 +2570,13 @@ class MyForm(QtGui.QMainWindow): self.ui.textEditInboxMessage.setPlainText(QString("")) self.loadInbox(searchOption, searchKeyword) + def sentSearchLineEditPressed(self): + searchKeyword = self.ui.sentSearchLineEdit.text().toUtf8().data() + searchOption = self.ui.sentSearchOptionCB.currentText().toUtf8().data() + self.ui.sentSearchLineEdit.setText(QString("")) + self.ui.textEditInboxMessage.setPlainText(QString("")) + self.loadSent(searchOption, searchKeyword) + def tableWidgetInboxItemClicked(self): currentRow = self.ui.tableWidgetInbox.currentRow() if currentRow >= 0: diff --git a/src/bitmessageqt/bitmessageui.py b/src/bitmessageqt/bitmessageui.py index ff23fa82..62466503 100644 --- a/src/bitmessageqt/bitmessageui.py +++ b/src/bitmessageqt/bitmessageui.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'bitmessageui.ui' # -# Created: Fri Jul 12 04:16:52 2013 +# Created: Fri Jul 12 04:40:47 2013 # by: PyQt4 UI code generator 4.10 # # WARNING! All changes made in this file will be lost! @@ -172,6 +172,21 @@ class Ui_MainWindow(object): self.sent.setObjectName(_fromUtf8("sent")) self.verticalLayout = QtGui.QVBoxLayout(self.sent) self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) + self.horizontalLayout = QtGui.QHBoxLayout() + self.horizontalLayout.setContentsMargins(-1, 0, -1, -1) + self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) + self.sentSearchLineEdit = QtGui.QLineEdit(self.sent) + self.sentSearchLineEdit.setObjectName(_fromUtf8("sentSearchLineEdit")) + self.horizontalLayout.addWidget(self.sentSearchLineEdit) + self.sentSearchOptionCB = QtGui.QComboBox(self.sent) + self.sentSearchOptionCB.setObjectName(_fromUtf8("sentSearchOptionCB")) + self.sentSearchOptionCB.addItem(_fromUtf8("")) + self.sentSearchOptionCB.addItem(_fromUtf8("")) + self.sentSearchOptionCB.addItem(_fromUtf8("")) + self.sentSearchOptionCB.addItem(_fromUtf8("")) + self.sentSearchOptionCB.addItem(_fromUtf8("")) + self.horizontalLayout.addWidget(self.sentSearchOptionCB) + self.verticalLayout.addLayout(self.horizontalLayout) self.tableWidgetSent = QtGui.QTableWidget(self.sent) self.tableWidgetSent.setDragDropMode(QtGui.QAbstractItemView.DragDrop) self.tableWidgetSent.setAlternatingRowColors(True) @@ -407,7 +422,7 @@ class Ui_MainWindow(object): self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 795, 20)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 795, 25)) self.menubar.setObjectName(_fromUtf8("menubar")) self.menuFile = QtGui.QMenu(self.menubar) self.menuFile.setObjectName(_fromUtf8("menuFile")) @@ -504,7 +519,7 @@ class Ui_MainWindow(object): self.textEditMessage.setHtml(_translate("MainWindow", "\n" "\n" +"\n" "


", None)) self.label.setText(_translate("MainWindow", "To:", None)) self.label_2.setText(_translate("MainWindow", "From:", None)) @@ -512,6 +527,11 @@ class Ui_MainWindow(object): self.pushButtonSend.setText(_translate("MainWindow", "Send", None)) self.labelSendBroadcastWarning.setText(_translate("MainWindow", "Be aware that broadcasts are only encrypted with your address. Anyone who knows your address can read them.", None)) self.tabWidget.setTabText(self.tabWidget.indexOf(self.send), _translate("MainWindow", "Send", None)) + self.sentSearchOptionCB.setItemText(0, _translate("MainWindow", "All", None)) + self.sentSearchOptionCB.setItemText(1, _translate("MainWindow", "To", None)) + self.sentSearchOptionCB.setItemText(2, _translate("MainWindow", "From", None)) + self.sentSearchOptionCB.setItemText(3, _translate("MainWindow", "Subject", None)) + self.sentSearchOptionCB.setItemText(4, _translate("MainWindow", "Message", None)) self.tableWidgetSent.setSortingEnabled(True) item = self.tableWidgetSent.horizontalHeaderItem(0) item.setText(_translate("MainWindow", "To", None)) diff --git a/src/bitmessageqt/bitmessageui.ui b/src/bitmessageqt/bitmessageui.ui index 2be3385d..46ebd06a 100644 --- a/src/bitmessageqt/bitmessageui.ui +++ b/src/bitmessageqt/bitmessageui.ui @@ -14,7 +14,7 @@ Bitmessage - + :/newPrefix/images/can-icon-24px.png:/newPrefix/images/can-icon-24px.png @@ -70,7 +70,7 @@ - + :/newPrefix/images/inbox.png:/newPrefix/images/inbox.png @@ -193,7 +193,7 @@ - + :/newPrefix/images/send.png:/newPrefix/images/send.png @@ -262,7 +262,7 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2';"><br /></p></body></html> @@ -351,13 +351,52 @@ p, li { white-space: pre-wrap; }
- + :/newPrefix/images/sent.png:/newPrefix/images/sent.png Sent + + + + 0 + + + + + + + + + All + + + + + To + + + + + From + + + + + Subject + + + + + Message + + + + + + @@ -428,7 +467,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/identities.png:/newPrefix/images/identities.png @@ -528,7 +567,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/subscriptions.png:/newPrefix/images/subscriptions.png @@ -613,7 +652,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/addressbook.png:/newPrefix/images/addressbook.png @@ -695,7 +734,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/blacklist.png:/newPrefix/images/blacklist.png @@ -787,7 +826,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/networkstatus.png:/newPrefix/images/networkstatus.png @@ -806,7 +845,7 @@ p, li { white-space: pre-wrap; } - + :/newPrefix/images/redicon.png:/newPrefix/images/redicon.png @@ -973,7 +1012,7 @@ p, li { white-space: pre-wrap; } 0 0 795 - 20 + 25 From a3cdc28bbf156795f7ebbf04d2ee0e04a78440f7 Mon Sep 17 00:00:00 2001 From: Rainulf Pineda Date: Fri, 12 Jul 2013 05:02:21 -0400 Subject: [PATCH 09/18] Fixed crash on sql query. --- src/bitmessageqt/__init__.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 92209bbe..316f4205 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -515,16 +515,17 @@ class MyForm(QtGui.QMainWindow): sqlQuery = ''' SELECT toaddress, fromaddress, subject, message, status, ackdata, lastactiontime - FROM sent WHERE folder="sent" AND %s LIKE "%s" + FROM sent WHERE folder="sent" AND %s LIKE ? ORDER BY lastactiontime - ''' % (where, what) + ''' % (where,) while self.ui.tableWidgetSent.rowCount() > 0: self.ui.tableWidgetSent.removeRow(0) + t = (what,) shared.sqlLock.acquire() shared.sqlSubmitQueue.put(sqlQuery) - shared.sqlSubmitQueue.put('') + shared.sqlSubmitQueue.put(t) queryreturn = shared.sqlReturnQueue.get() shared.sqlLock.release() for row in queryreturn: @@ -641,18 +642,19 @@ class MyForm(QtGui.QMainWindow): sqlQuery = ''' SELECT msgid, toaddress, fromaddress, subject, received, message, read - FROM inbox WHERE folder="inbox" AND %s LIKE "%s" + FROM inbox WHERE folder="inbox" AND %s LIKE ? ORDER BY received - ''' % (where, what) + ''' % (where,) while self.ui.tableWidgetInbox.rowCount() > 0: self.ui.tableWidgetInbox.removeRow(0) font = QFont() font.setBold(True) + t = (what,) shared.sqlLock.acquire() shared.sqlSubmitQueue.put(sqlQuery) - shared.sqlSubmitQueue.put('') + shared.sqlSubmitQueue.put(t) queryreturn = shared.sqlReturnQueue.get() shared.sqlLock.release() for row in queryreturn: From 10b23d0946c0b3b3ee4f9cd8a9d0b4e27d3c1e06 Mon Sep 17 00:00:00 2001 From: fuzzgun Date: Fri, 12 Jul 2013 10:36:28 +0100 Subject: [PATCH 10/18] Packaging for multiple distros --- Makefile | 70 ++++---- arch.sh | 45 +++++ archpackage/PKGBUILD | 31 ++++ configure | 1 + debian.sh | 52 ++++-- debian/changelog | 4 +- debian/compat | 2 +- debian/control | 34 ++-- debian/copyright | 40 ++--- debian/manpages | 1 + debian/rules | 86 ++++----- desktop/icon14.xpm | 111 ++++++++++++ desktop/icon24.png | Bin 0 -> 1852 bytes desktop/pybitmessage.desktop | 27 +-- ebuild.sh | 33 ++++ ebuildpackage/pybitmessage-0.3.4-1.ebuild | 22 +++ generate.sh | 7 + man/pybitmessage.1.gz | Bin 0 -> 546 bytes puppy.sh | 66 +++++++ puppypackage/icon14.xpm | 111 ++++++++++++ puppypackage/pybitmessage-0.3.4.pet.specs | 1 + rpm.sh | 53 ++++++ rpmpackage/pybitmessage.spec | 207 ++++++++++++++++++++++ slack.sh | 48 +++++ slackpackage/doinst.sh | 4 + slackpackage/slack-desc | 19 ++ 26 files changed, 903 insertions(+), 172 deletions(-) mode change 100755 => 100644 Makefile create mode 100755 arch.sh create mode 100644 archpackage/PKGBUILD create mode 100755 configure create mode 100644 debian/manpages create mode 100644 desktop/icon14.xpm create mode 100644 desktop/icon24.png create mode 100755 ebuild.sh create mode 100755 ebuildpackage/pybitmessage-0.3.4-1.ebuild create mode 100755 generate.sh create mode 100644 man/pybitmessage.1.gz create mode 100755 puppy.sh create mode 100644 puppypackage/icon14.xpm create mode 100644 puppypackage/pybitmessage-0.3.4.pet.specs create mode 100755 rpm.sh create mode 100644 rpmpackage/pybitmessage.spec create mode 100755 slack.sh create mode 100755 slackpackage/doinst.sh create mode 100644 slackpackage/slack-desc diff --git a/Makefile b/Makefile old mode 100755 new mode 100644 index afb6744e..92b4e633 --- a/Makefile +++ b/Makefile @@ -1,43 +1,45 @@ APP=pybitmessage VERSION=0.3.4 -DEST_SHARE=${DESTDIR}/usr/share -DEST_APP=${DEST_SHARE}/${APP} +RELEASE=1 +ARCH_TYPE=`uname -m` all: - debug: - source: tar -cvzf ../${APP}_${VERSION}.orig.tar.gz ../${APP}-${VERSION} --exclude-vcs - install: - mkdir -m 755 -p ${DESTDIR}/usr/bin - mkdir -m 755 -p ${DEST_APP} - mkdir -m 755 -p ${DEST_SHARE}/applications - mkdir -m 755 -p ${DEST_APP}/images - mkdir -m 755 -p ${DEST_APP}/pyelliptic - mkdir -m 755 -p ${DEST_APP}/socks - mkdir -m 755 -p ${DEST_APP}/bitmessageqt - mkdir -m 755 -p ${DEST_APP}/translations - mkdir -m 755 -p ${DEST_SHARE}/pixmaps - mkdir -m 755 -p ${DEST_SHARE}/icons - mkdir -m 755 -p ${DEST_SHARE}/icons/hicolor - mkdir -m 755 -p ${DEST_SHARE}/icons/hicolor/scalable - 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 - - cp -r src/* ${DEST_APP} - install -m 755 debian/pybm ${DESTDIR}/usr/bin/${APP} - - install -m 644 desktop/${APP}.desktop ${DEST_SHARE}/applications/${APP}.desktop - install -m 644 src/images/can-icon-24px.png ${DEST_SHARE}/icons/hicolor/24x24/apps/${APP}.png - install -m 644 desktop/can-icon.svg ${DEST_SHARE}/icons/hicolor/scalable/apps/${APP}.svg - install -m 644 desktop/can-icon.svg ${DEST_SHARE}/pixmaps/${APP}.svg - + mkdir -p ${DESTDIR}/usr + mkdir -p ${DESTDIR}/usr/bin + mkdir -m 755 -p ${DESTDIR}/usr/share + mkdir -m 755 -p ${DESTDIR}/usr/share/man + mkdir -m 755 -p ${DESTDIR}/usr/share/man/man1 + install -m 644 man/${APP}.1.gz ${DESTDIR}/usr/share/man/man1 + mkdir -m 755 -p ${DESTDIR}/usr/share/${APP} + mkdir -m 755 -p ${DESTDIR}/usr/share/applications + mkdir -m 755 -p ${DESTDIR}/usr/share/pixmaps + mkdir -m 755 -p ${DESTDIR}/usr/share/icons + mkdir -m 755 -p ${DESTDIR}/usr/share/icons/hicolor + mkdir -m 755 -p ${DESTDIR}/usr/share/icons/hicolor/scalable + mkdir -m 755 -p ${DESTDIR}/usr/share/icons/hicolor/scalable/apps + mkdir -m 755 -p ${DESTDIR}/usr/share/icons/hicolor/24x24 + mkdir -m 755 -p ${DESTDIR}/usr/share/icons/hicolor/24x24/apps + install -m 644 desktop/${APP}.desktop ${DESTDIR}/usr/share/applications/${APP}.desktop + install -m 644 desktop/icon24.png ${DESTDIR}/usr/share/icons/hicolor/24x24/apps/${APP}.png + cp -rf src/* ${DESTDIR}/usr/share/${APP} + echo '#!/bin/sh' > ${DESTDIR}/usr/bin/${APP} + echo 'cd /usr/share/pybitmessage' >> ${DESTDIR}/usr/bin/${APP} + echo 'LD_LIBRARY_PATH="/opt/openssl-compat-bitcoin/lib/" exec python bitmessagemain.py' >> ${DESTDIR}/usr/bin/${APP} + chmod +x ${DESTDIR}/usr/bin/${APP} +uninstall: + rm -f /usr/share/man/man1/${APP}.1.gz + rm -rf /usr/share/${APP} + rm -f /usr/bin/${APP} + rm -f /usr/share/applications/${APP}.desktop + rm -f /usr/share/icons/hicolor/scalable/apps/${APP}.svg + /usr/share/pixmaps/${APP}.svg clean: - rm -rf debian/${APP} - rm -f ../${APP}_*.deb ../${APP}_*.asc ../${APP}_*.dsc ../${APP}*.changes - rm -f *.sh~ src/*.pyc src/socks/*.pyc src/pyelliptic/*.pyc - rm -f *.deb \#* \.#* debian/*.log debian/*.substvars - rm -f Makefile~ + rm -f ${APP} \#* \.#* gnuplot* *.png debian/*.substvars debian/*.log + rm -fr deb.* debian/${APP} rpmpackage/${ARCH_TYPE} + rm -f ../${APP}*.deb ../${APP}*.changes ../${APP}*.asc ../${APP}*.dsc + rm -f rpmpackage/*.src.rpm archpackage/*.gz + rm -f puppypackage/*.gz puppypackage/*.pet slackpackage/*.txz diff --git a/arch.sh b/arch.sh new file mode 100755 index 00000000..8917cef4 --- /dev/null +++ b/arch.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +APP=pybitmessage +PREV_VERSION=0.3.4 +VERSION=0.3.4 +RELEASE=1 +ARCH_TYPE=`uname -m` +CURRDIR=`pwd` +SOURCE=archpackage/${APP}-${VERSION}.tar.gz + +# Update version numbers automatically - so you don't have to +sed -i 's/VERSION='${PREV_VERSION}'/VERSION='${VERSION}'/g' Makefile debian.sh rpm.sh puppy.sh ebuild.sh slack.sh +sed -i 's/Version: '${PREV_VERSION}'/Version: '${VERSION}'/g' rpmpackage/${APP}.spec +sed -i 's/Release: '${RELEASE}'/Release: '${RELEASE}'/g' rpmpackage/${APP}.spec +sed -i 's/pkgrel='${RELEASE}'/pkgrel='${RELEASE}'/g' archpackage/PKGBUILD +sed -i 's/pkgver='${PREV_VERSION}'/pkgver='${VERSION}'/g' archpackage/PKGBUILD +sed -i "s/-${PREV_VERSION}-/-${VERSION}-/g" puppypackage/*.specs +sed -i "s/|${PREV_VERSION}|/|${VERSION}|/g" puppypackage/*.specs +sed -i 's/VERSION='${PREV_VERSION}'/VERSION='${VERSION}'/g' puppypackage/pinstall.sh puppypackage/puninstall.sh +sed -i 's/-'${PREV_VERSION}'.so/-'${VERSION}'.so/g' debian/*.links + + +# Create the source code +make clean +rm -f archpackage/*.gz + +# having the root directory called name-version seems essential +mv ../${APP} ../${APP}-${VERSION} +tar -cvzf ${SOURCE} ../${APP}-${VERSION} --exclude-vcs + +# rename the root directory without the version number +mv ../${APP}-${VERSION} ../${APP} + +# calculate the MD5 checksum +CHECKSM=$(md5sum ${SOURCE}) +sed -i "s/md5sums[^)]*)/md5sums=(${CHECKSM%% *})/g" archpackage/PKGBUILD + +cd archpackage + +# Create the package +makepkg + +# Move back to the original directory +cd ${CURRDIR} + diff --git a/archpackage/PKGBUILD b/archpackage/PKGBUILD new file mode 100644 index 00000000..a75d262a --- /dev/null +++ b/archpackage/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Bob Mottram (4096 bits) +pkgname=pybitmessage +pkgver=0.3.4 +pkgrel=1 +pkgdesc="Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide "non-content" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs." +arch=('i686' 'x86_64') +url="https://github.com/Bitmessage/PyBitmessage" +license=('MIT') +groups=() +depends=() +makedepends=() +optdepends=() +provides=() +conflicts=() +replaces=() +backup=() +options=() +install= +changelog= +source=($pkgname-$pkgver.tar.gz) +noextract=() +md5sums=(56a8a225463e96b435b2a5b438006983) +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure --prefix=/usr + make +} +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install +} diff --git a/configure b/configure new file mode 100755 index 00000000..0519ecba --- /dev/null +++ b/configure @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/debian.sh b/debian.sh index ac26380e..2d924251 100755 --- a/debian.sh +++ b/debian.sh @@ -1,32 +1,46 @@ -# To build a debian package first ensure that the code exists -# within a directory called pybitmessage-x.x.x (where the x's -# are the version number), make sure that the VERSION parameter -# within debian/rules and this script are correct, then run -# this script. - #!/bin/bash APP=pybitmessage -PREV_VERSION=0.3.3 +PREV_VERSION=0.3.4 VERSION=0.3.4 RELEASE=1 -ARCH_TYPE=all +ARCH_TYPE=`uname -m` +DIR=${APP}-${VERSION} -#update version numbers automatically - so you don't have to -sed -i 's/VERSION='${PREV_VERSION}'/VERSION='${VERSION}'/g' Makefile -sed -i 's/'''${PREV_VERSION}'''/'''${VERSION}'''/g' src/shared.py +if [ $ARCH_TYPE == "x86_64" ]; then + ARCH_TYPE="amd64" +fi +if [ $ARCH_TYPE == "i686" ]; then + ARCH_TYPE="i386" +fi + + +# Update version numbers automatically - so you don't have to +sed -i 's/VERSION='${PREV_VERSION}'/VERSION='${VERSION}'/g' Makefile rpm.sh arch.sh puppy.sh ebuild.sh slack.sh +sed -i 's/Version: '${PREV_VERSION}'/Version: '${VERSION}'/g' rpmpackage/${APP}.spec +sed -i 's/Release: '${RELEASE}'/Release: '${RELEASE}'/g' rpmpackage/${APP}.spec +sed -i 's/pkgrel='${RELEASE}'/pkgrel='${RELEASE}'/g' archpackage/PKGBUILD +sed -i 's/pkgver='${PREV_VERSION}'/pkgver='${VERSION}'/g' archpackage/PKGBUILD +sed -i "s/-${PREV_VERSION}-/-${VERSION}-/g" puppypackage/*.specs +sed -i "s/|${PREV_VERSION}|/|${VERSION}|/g" puppypackage/*.specs +sed -i 's/VERSION='${PREV_VERSION}'/VERSION='${VERSION}'/g' puppypackage/pinstall.sh puppypackage/puninstall.sh +sed -i 's/-'${PREV_VERSION}'.so/-'${VERSION}'.so/g' debian/*.links + +make clean +make + +# change the parent directory name to debian format +mv ../${APP} ../${DIR} # Create a source archive -make clean -# change the directory name to pybitmessage-version -mv ../PyBitmessage ../${APP}-${VERSION} make source # Build the package -dpkg-buildpackage -A +dpkg-buildpackage -F -# change the directory name back -mv ../${APP}-${VERSION} ../PyBitmessage - -gpg -ba ../${APP}_${VERSION}-${RELEASE}_${ARCH_TYPE}.deb +# sign files +gpg -ba ../${APP}_${VERSION}-1_${ARCH_TYPE}.deb gpg -ba ../${APP}_${VERSION}.orig.tar.gz + +# restore the parent directory name +mv ../${DIR} ../${APP} diff --git a/debian/changelog b/debian/changelog index 1d822cd1..b6e8adbf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,7 +18,7 @@ pybitmessage (0.3.3-1) raring; urgency=low via Portage (Gentoo) * Fix message authentication bug - -- Bob Mottram (4096 bits) Sun, 30 June 2013 11:23:00 +0100 + -- Bob Mottram (4096 bits) Sat, 29 June 2013 11:23:00 +0100 pybitmessage (0.3.211-1) raring; urgency=low @@ -26,7 +26,7 @@ pybitmessage (0.3.211-1) raring; urgency=low as the multiprocessing module does not work well with pyinstaller's --onefile option. - -- Bob Mottram (4096 bits) Sun, 30 June 2013 11:23:00 +0100 + -- Bob Mottram (4096 bits) Fri, 28 June 2013 11:23:00 +0100 pybitmessage (0.3.2-1) raring; urgency=low diff --git a/debian/compat b/debian/compat index 45a4fb75..ec635144 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -8 +9 diff --git a/debian/control b/debian/control index 2dd19194..de8f3a59 100644 --- a/debian/control +++ b/debian/control @@ -1,21 +1,21 @@ Source: pybitmessage -Section: contrib/comm Priority: extra -Maintainer: Jonathan Warren -Build-Depends: debhelper (>= 8.0.0), python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev, libmessaging-menu-dev -Standards-Version: 3.9.2 -Homepage: https://bitmessage.org/ -Vcs-Browser: https://github.com/Bitmessage/PyBitmessage -Vcs-Git: https://github.com/Bitmessage/PyBitmessage.git +Maintainer: Bob Mottram (4096 bits) +Build-Depends: debhelper (>= 9.0.0) +Standards-Version: 3.9.4 +Homepage: https://github.com/Bitmessage/PyBitmessage +Vcs-Git: https://github.com/fuzzgun/autocv.git Package: pybitmessage -Architecture: all -Depends: ${misc:Depends}, python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev, libmessaging-menu-dev -Description: Send encrypted messages to another person or to many subscribers - Bitmessage is a P2P communications protocol used to send encrypted messages - to another person or to many subscribers. It is decentralized and trustless, - meaning that you need-not inherently trust any entities like root certificate - authorities. It uses strong authentication which means that the sender of a - message cannot be spoofed, and it aims to hide "non-content" data, like the - sender and receiver of messages, from passive eavesdroppers like those - running warrantless wiretapping programs. +Section: mail +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev +Suggests: libmessaging-menu-dev +Description: 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, meaning that you need-not inherently trust any entities like + root certificate authorities. It uses strong authentication which means + that the sender of a message cannot be spoofed, and it aims to hide + "non-content" data, like the sender and receiver of messages, from passive + eavesdroppers like those running warrantless wiretapping programs. diff --git a/debian/copyright b/debian/copyright index 4c5f69f3..32f13f19 100644 --- a/debian/copyright +++ b/debian/copyright @@ -1,30 +1,30 @@ -Format: http://dep.debian.net/deps/dep5 -Upstream-Name: PyBitmessage -Source: https://github.com/Bitmessage/PyBitmessage +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: +Source: Files: * -Copyright: 2012 Jonathan Warren +Copyright: Copyright 2013 Bob Mottram (4096 bits) License: MIT Files: debian/* -Copyright: 2012 Jonathan Warren +Copyright: Copyright 2013 Bob Mottram (4096 bits) License: MIT License: MIT - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: . - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. . - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. \ No newline at end of file + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/debian/manpages b/debian/manpages new file mode 100644 index 00000000..54af5648 --- /dev/null +++ b/debian/manpages @@ -0,0 +1 @@ +man/pybitmessage.1.gz diff --git a/debian/rules b/debian/rules index 2a7767b6..233679ca 100755 --- a/debian/rules +++ b/debian/rules @@ -1,66 +1,42 @@ #!/usr/bin/make -f -APP=pybitmessage -DESTDIR=${CURDIR}/debian/${APP} -DEST_SHARE=${DESTDIR}/usr/share -DEST_APP=${DEST_SHARE}/${APP} -build: build-stamp +APP=pybitmessage +build: build-stamp make build-arch: build-stamp build-indep: build-stamp build-stamp: - dh_testdir - touch build-stamp + dh_testdir + touch build-stamp + clean: - dh_testdir - dh_testroot - rm -f build-stamp - dh_clean -install: - dh_testdir - dh_testroot - dh_prep - dh_clean -k - dh_installdirs - - mkdir -m 755 -p ${DESTDIR}/usr/bin - mkdir -m 755 -p ${DEST_APP} - mkdir -m 755 -p ${DEST_SHARE}/applications - mkdir -m 755 -p ${DEST_APP}/images - mkdir -m 755 -p ${DEST_APP}/pyelliptic - mkdir -m 755 -p ${DEST_APP}/socks - mkdir -m 755 -p ${DEST_APP}/bitmessageqt - mkdir -m 755 -p ${DEST_APP}/translations - mkdir -m 755 -p ${DEST_SHARE}/pixmaps - mkdir -m 755 -p ${DEST_SHARE}/icons - mkdir -m 755 -p ${DEST_SHARE}/icons/hicolor - mkdir -m 755 -p ${DEST_SHARE}/icons/hicolor/scalable - 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 - - cp -r src/* ${DEST_APP} - install -m 755 debian/pybm ${DESTDIR}/usr/bin/${APP} - - install -m 644 desktop/${APP}.desktop ${DEST_SHARE}/applications/${APP}.desktop - install -m 644 src/images/can-icon-24px.png ${DEST_SHARE}/icons/hicolor/24x24/apps/${APP}.png - install -m 644 desktop/can-icon.svg ${DEST_SHARE}/icons/hicolor/scalable/apps/${APP}.svg - install -m 644 desktop/can-icon.svg ${DEST_SHARE}/pixmaps/${APP}.svg + dh_testdir + dh_testroot + rm -f build-stamp + dh_clean +install: build clean + dh_testdir + dh_testroot + dh_prep + dh_installdirs + ${MAKE} install -B DESTDIR=${CURDIR}/debian/${APP} binary-indep: build install - dh_shlibdeps - dh_testdir - dh_testroot - dh_installchangelogs - dh_installdocs -# dh_installman - dh_link - dh_compress - dh_fixperms - dh_installdeb - dh_gencontrol - dh_md5sums - dh_builddeb + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples + dh_installman + dh_link + dh_compress + dh_fixperms + dh_installdeb + dh_gencontrol + dh_md5sums + dh_builddeb + binary-arch: build install + binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary install +.PHONY: build clean binary-indep binary-arch binary install diff --git a/desktop/icon14.xpm b/desktop/icon14.xpm new file mode 100644 index 00000000..6d50c8c7 --- /dev/null +++ b/desktop/icon14.xpm @@ -0,0 +1,111 @@ +/* XPM */ +static char * icon14_xpm[] = { +"14 14 94 2", +" c None", +". c #B9BABC", +"+ c #D2D3D4", +"@ c #BEBFC1", +"# c #CBCCCF", +"$ c #E0E3E1", +"% c #F6F8F8", +"& c #F3F3F3", +"* c #B9BABD", +"= c #C8C9CB", +"- c #DADCDB", +"; c #E6E8E7", +"> c #F7F7F7", +", c #FCFCFC", +"' c #F5F5F5", +") c #BCBDBF", +"! c #D3D5D5", +"~ c #E3E5E4", +"{ c #F1F2F2", +"] c #FDFDFD", +"^ c #F8F8F8", +"/ c #CBCCCC", +"( c #B2B3B6", +"_ c #B0B1B3", +": c #D3D4D6", +"< c #DFE0E0", +"[ c #EAEDEB", +"} c #FAF9F9", +"| c #DFE0DF", +"1 c #B9BBBD", +"2 c #C2C3C5", +"3 c #B7B8BC", +"4 c #CDCED0", +"5 c #DCDDDE", +"6 c #E7E9E7", +"7 c #F6F6F6", +"8 c #C0C1C2", +"9 c #DDDFDF", +"0 c #BCBCBF", +"a c #D7D9DA", +"b c #E2E4E3", +"c c #F0F2F1", +"d c #FAFAFA", +"e c #F9F9F9", +"f c #CCCDCD", +"g c #B6B7B9", +"h c #C7C8CA", +"i c #A6A7A9", +"j c #D3D4D5", +"k c #F2F5F3", +"l c #F1F2F1", +"m c #F6F8F7", +"n c #FCFBFC", +"o c #E8EAE9", +"p c #B6B7B8", +"q c #BFC0C2", +"r c #323138", +"s c #1D1D22", +"t c #111117", +"u c #4C4C51", +"v c #ECECED", +"w c #FFFFFF", +"x c #BBBDBD", +"y c #C9CACB", +"z c #333238", +"A c #313036", +"B c #27272C", +"C c #1E1F24", +"D c #16171D", +"E c #919193", +"F c #F2F3F3", +"G c #B4B5B7", +"H c #CDCFCF", +"I c #67666B", +"J c #37363C", +"K c #2C2B31", +"L c #2A292F", +"M c #16171C", +"N c #68696B", +"O c #C7C8C9", +"P c #CBCDCC", +"Q c #49474E", +"R c #39383E", +"S c #36353B", +"T c #333138", +"U c #28272D", +"V c #CED0D0", +"W c #67676C", +"X c #414046", +"Y c #424147", +"Z c #39383F", +"` c #8C8D8F", +" . c #6B6C70", +".. c #75757A", +" . + ", +" @ # $ % & ", +" * = - ; > , ' ", +" ) ! ~ { ] ^ / ( ", +" _ : < [ } , | 1 2 ", +" 3 4 5 6 7 , { 8 . 9 ", +" 2 0 a b c d e f g h ", +" i j k l m n o p q h ", +" r s t u v w ' x g y ", +" z A B C D E F G H ", +" I J A K L M N O P ", +" Q R R S T U V ", +" W X Y X Z ` ", +" ... "}; diff --git a/desktop/icon24.png b/desktop/icon24.png new file mode 100644 index 0000000000000000000000000000000000000000..30f7313eb378b69c4e2f6cb66264c2ae678059e1 GIT binary patch literal 1852 zcmV-C2gCS@P)M^!E?E!Z`=4*Xy`ht_>fhjLl+eV_hy>=-Ek(A(EP8wh@6>5>i{Jah=UrfpOJpyyEE@4x%__we9`O^8Gz zY+YB^0D>Su5CjlH;N;0u?*~Bu&N&bS0ppzGa8EB4rY4DVPDBKSF-HCU16P-HEJ7j{ zNB_V8#>OVLvurL0*LBHtT@Xo}Jb4<4WQ?)(U)V^qv$OC6A8)<&J1DB6+N!HAqgS40M1-^F1`!DUX8C&gnRGe@ zugOKk3q#X23}v$zA1@%4ZpGc13}Zxu2iAXy3X>BMLSomhm+{n7Pk?idful#^*Ezyr z?^5Ynsk5uAtC7-^+n#tfol2v%r3J6O`Z`vx?m{NB3ZCb|_3ZsV_dC<+bR%^l!h!ug z@VU>%#>bmZoH+5fD_6!g$w1(jJD&Yfx-GS5)rys1j5Ug#pWXb-IOmw2o?hS6(|2Sf zpMOr0oWEy8bh}FcG{zVdMbZCv^7OGpGT!ZY?yDjYR4SFe34j4u5I6t=RaNovCkHF@ zoiaipD2jq)GP(ESrQv7p6jU1RJ^w~D8qrNF1lzV@nHGW|z_EWH$MA4|HvlM%F)+q3 zSF1lXI(qr%k!S>tSt5A%%qNy7fY#@OJ=EhAw1( z_N}dtZ{57*k%%G? zyxTA|2q7B+k`g<9wZry251!{C8jT8 z-p;x=cW;j;6M^e_Sar{;s;=ulO|_=rc^-)9w)un*3;rOYd80A9^_8lsC>CeFcKY<0 z4{lZ}Ry-a%wttgbW>)Wx=%_7={5wQBW?I>Bfy4Z=_PG=NJe~Q9lP@w~J_0!8!Mi z9zFhP-S^kT<8fHF3CFQv7zRw!gk#&#H626*-}f;&HHG}>D5{mY;+HpXy5F+Q%Xe-M z0U*X0G)+UPbnTIkKRHlVHEm6MdpjbL2t3b)X_;^w2d-^HS2Yk3s?{on^CK7@$wLGZ zp64ZohO$2d01W`9rl;?qQ0VgL*oRY7S08R~Z--+$Fw77_rVcY?z%ng_LLsP%0zrgw zxr|)yA}WL9CMO3t=b?@zi(yy>Of!T~C+VOB*94LhM2&|}VG20s7@sU4HnuD?>4oOphsFb>PI zZUf%`%U?g-yLaC=7-Oi_YVf%apL0|y71Zl>Y~1)DcJ6!;YuDTZB0_HPA}(DTUI=X2 zCW^)4PlABI9SVie+1UxpvTpCezI`9Hzx&R+{}~^jXqkryAs~c+loA9&&G%88o5S~i zunk+bJl6RAN16Z-N~LQLgR%WmN-SO4fpAk3q?Bk*BpZN(hk5|U(0jP|^`65=ej%iQ zs;ZDuEGZ;^06r_>FlqtwW!jai!%a;Br5)J=X qQ5iHQ#>b literal 0 HcmV?d00001 diff --git a/desktop/pybitmessage.desktop b/desktop/pybitmessage.desktop index 2b1b6902..a97bd664 100644 --- a/desktop/pybitmessage.desktop +++ b/desktop/pybitmessage.desktop @@ -2,29 +2,8 @@ Type=Application Name=PyBitmessage GenericName=PyBitmessage -X-GNOME-FullName=PyBitmessage Secure Messaging -Comment=Send encrypted messages to another person or to many subscribers -Exec=pybitmessage %U +Comment=Send encrypted messages +Exec=pybitmessage %F Icon=pybitmessage Terminal=false -Categories=Network;Email;Application; -Keywords=Email;E-mail;Newsgroup;Messaging; -X-MessagingMenu-UsesChatSection=true -X-Ubuntu-Gettext-Domain=pybitmessage - -Actions=Send;Subscribe;AddressBook; - -[Desktop Action Send] -Name=Send -Exec=pybitmessage -s -OnlyShowIn=Unity; - -[Desktop Action Subscribe] -Name=Subscribe -Exec=pybitmessage -b -OnlyShowIn=Unity; - -[Desktop Action AddressBook] -Name=Address Book -Exec=pybitmessage -a -OnlyShowIn=Unity; +Categories=Office;Email; diff --git a/ebuild.sh b/ebuild.sh new file mode 100755 index 00000000..1a3d16e0 --- /dev/null +++ b/ebuild.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +APP=pybitmessage +PREV_VERSION=0.3.4 +VERSION=0.3.4 +RELEASE=1 +SOURCEDIR=. +ARCH_TYPE=`uname -m` +CURRDIR=`pwd` +SOURCE=~/ebuild/${APP}-${VERSION}.tar.gz + + +# Update version numbers automatically - so you don't have to +sed -i 's/VERSION='${PREV_VERSION}'/VERSION='${VERSION}'/g' Makefile debian.sh rpm.sh arch.sh puppy.sh slack.sh +sed -i 's/Version: '${PREV_VERSION}'/Version: '${VERSION}'/g' rpmpackage/${APP}.spec +sed -i 's/Release: '${RELEASE}'/Release: '${RELEASE}'/g' rpmpackage/${APP}.spec +sed -i 's/pkgrel='${RELEASE}'/pkgrel='${RELEASE}'/g' archpackage/PKGBUILD +sed -i 's/pkgver='${PREV_VERSION}'/pkgver='${VERSION}'/g' archpackage/PKGBUILD +sed -i "s/-${PREV_VERSION}-/-${VERSION}-/g" puppypackage/*.specs +sed -i "s/|${PREV_VERSION}|/|${VERSION}|/g" puppypackage/*.specs +sed -i 's/VERSION='${PREV_VERSION}'/VERSION='${VERSION}'/g' puppypackage/pinstall.sh puppypackage/puninstall.sh +sed -i 's/-'${PREV_VERSION}'.so/-'${VERSION}'.so/g' debian/*.links + +# create the source code in the SOURCES directory +make clean +mkdir -p ~/ebuild +rm -f ${SOURCE} +mv ../${APP} ../${APP}-${VERSION} +tar -cvzf ${SOURCE} ../${APP}-${VERSION} --exclude-vcs + +# rename the root directory without the version number +mv ../${APP}-${VERSION} ../${APP} + diff --git a/ebuildpackage/pybitmessage-0.3.4-1.ebuild b/ebuildpackage/pybitmessage-0.3.4-1.ebuild new file mode 100755 index 00000000..20f056e4 --- /dev/null +++ b/ebuildpackage/pybitmessage-0.3.4-1.ebuild @@ -0,0 +1,22 @@ +# $Header: $ + +EAPI=4 + +DESCRIPTION="Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide "non-content" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs." +HOMEPAGE="https://github.com/Bitmessage/PyBitmessage" +SRC_URI="${PN}/${P}.tar.gz" +LICENSE="MIT" +SLOT="0" +KEYWORDS="x86" +RDEPEND="dev-libs/popt" +DEPEND="${RDEPEND}" + +src_configure() { + econf --with-popt +} + +src_install() { + emake DESTDIR="${D}" install + # Install README and (Debian) changelog + dodoc README.md debian/changelog +} diff --git a/generate.sh b/generate.sh new file mode 100755 index 00000000..92bda853 --- /dev/null +++ b/generate.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# Generates packaging + +rm -f Makefile rpmpackage/*.spec + +packagemonkey -n "PyBitmessage" --version "0.3.4" --dir "." -l "mit" -e "Bob Mottram (4096 bits) " --brief "Send encrypted messages" --desc "Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide \"non-content\" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs." --homepage "https://github.com/Bitmessage/PyBitmessage" --section "mail" --categories "Office/Email" --dependsdeb "python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev" --dependsrpm "python, PyQt4, openssl-compat-bitcoin-libs" --mainscript "bitmessagemain.py" --librarypath "/opt/openssl-compat-bitcoin/lib/" --suggestsdeb "libmessaging-menu-dev" --dependspuppy "openssl, python-qt4, sqlite3, sqlite3-dev, python-openssl" diff --git a/man/pybitmessage.1.gz b/man/pybitmessage.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..efa686a8c9831c74114a4f0a6e0f4d477bbbc078 GIT binary patch literal 546 zcmV+-0^R)|iwFq(6W>t)18{j_X>@I6b8}&5WiBxQrBY3g(?ATp=T}&{08*Q77lZ^t zh%QvLs9$Q@8<$BkZAP1nBipl8`1LqRt1f4xxy;yp&+pAk4hv}7%t>vT&Dp{f;^`EA zg$f=Yrtf2j^&HvK8-}&S_B<|G7uwa6eNPS1ou2L9S2$i9$b>o9xxRfq0dwL$owc1No zS$I;5Zhqy)ck5(YZ4ghk81)*QF68RojnWksVvl~DqZj3fp)g`b!;-IXyE#%f+{-|6 zvvdR}!WtUGtR=AK#d1N|boSmrkX3K+y;&DSWPI-+TpU?3P1C*W7oN$~oLnQY+@y!u zYBd`&5G_56sj5N0(+h=s`1`YpP_rRPZlmdZ4zpFd)v=lSPFBad5E$R|A-H!w9e<{A zw6_hCx)jbDFL_m-9S@7`UK5BJtWh)vHN5@s@aZFH>iHdf$uRpyn4$g*C*e5}{2C=0 kMadFMk%m7{CTAyQ$Px|g> ${APP}-${VERSION}-${RELEASE}.tar.gz +sync +mv -f ${APP}-${VERSION}-${RELEASE}.tar.gz ${APP}-${VERSION}-${RELEASE}.pet +sync +cd ${CURRDIR} + +# Remove the temporary build directory +rm -fr ${BUILDDIR} diff --git a/puppypackage/icon14.xpm b/puppypackage/icon14.xpm new file mode 100644 index 00000000..6d50c8c7 --- /dev/null +++ b/puppypackage/icon14.xpm @@ -0,0 +1,111 @@ +/* XPM */ +static char * icon14_xpm[] = { +"14 14 94 2", +" c None", +". c #B9BABC", +"+ c #D2D3D4", +"@ c #BEBFC1", +"# c #CBCCCF", +"$ c #E0E3E1", +"% c #F6F8F8", +"& c #F3F3F3", +"* c #B9BABD", +"= c #C8C9CB", +"- c #DADCDB", +"; c #E6E8E7", +"> c #F7F7F7", +", c #FCFCFC", +"' c #F5F5F5", +") c #BCBDBF", +"! c #D3D5D5", +"~ c #E3E5E4", +"{ c #F1F2F2", +"] c #FDFDFD", +"^ c #F8F8F8", +"/ c #CBCCCC", +"( c #B2B3B6", +"_ c #B0B1B3", +": c #D3D4D6", +"< c #DFE0E0", +"[ c #EAEDEB", +"} c #FAF9F9", +"| c #DFE0DF", +"1 c #B9BBBD", +"2 c #C2C3C5", +"3 c #B7B8BC", +"4 c #CDCED0", +"5 c #DCDDDE", +"6 c #E7E9E7", +"7 c #F6F6F6", +"8 c #C0C1C2", +"9 c #DDDFDF", +"0 c #BCBCBF", +"a c #D7D9DA", +"b c #E2E4E3", +"c c #F0F2F1", +"d c #FAFAFA", +"e c #F9F9F9", +"f c #CCCDCD", +"g c #B6B7B9", +"h c #C7C8CA", +"i c #A6A7A9", +"j c #D3D4D5", +"k c #F2F5F3", +"l c #F1F2F1", +"m c #F6F8F7", +"n c #FCFBFC", +"o c #E8EAE9", +"p c #B6B7B8", +"q c #BFC0C2", +"r c #323138", +"s c #1D1D22", +"t c #111117", +"u c #4C4C51", +"v c #ECECED", +"w c #FFFFFF", +"x c #BBBDBD", +"y c #C9CACB", +"z c #333238", +"A c #313036", +"B c #27272C", +"C c #1E1F24", +"D c #16171D", +"E c #919193", +"F c #F2F3F3", +"G c #B4B5B7", +"H c #CDCFCF", +"I c #67666B", +"J c #37363C", +"K c #2C2B31", +"L c #2A292F", +"M c #16171C", +"N c #68696B", +"O c #C7C8C9", +"P c #CBCDCC", +"Q c #49474E", +"R c #39383E", +"S c #36353B", +"T c #333138", +"U c #28272D", +"V c #CED0D0", +"W c #67676C", +"X c #414046", +"Y c #424147", +"Z c #39383F", +"` c #8C8D8F", +" . c #6B6C70", +".. c #75757A", +" . + ", +" @ # $ % & ", +" * = - ; > , ' ", +" ) ! ~ { ] ^ / ( ", +" _ : < [ } , | 1 2 ", +" 3 4 5 6 7 , { 8 . 9 ", +" 2 0 a b c d e f g h ", +" i j k l m n o p q h ", +" r s t u v w ' x g y ", +" z A B C D E F G H ", +" I J A K L M N O P ", +" Q R R S T U V ", +" W X Y X Z ` ", +" ... "}; diff --git a/puppypackage/pybitmessage-0.3.4.pet.specs b/puppypackage/pybitmessage-0.3.4.pet.specs new file mode 100644 index 00000000..81060a27 --- /dev/null +++ b/puppypackage/pybitmessage-0.3.4.pet.specs @@ -0,0 +1 @@ +pybitmessage-0.3.4-1|PyBitmessage|0.3.4|1|Internet;mailnews;|3.9M||pybitmessage-0.3.4-1.pet||Send encrypted messages|ubuntu|precise|5| diff --git a/rpm.sh b/rpm.sh new file mode 100755 index 00000000..8269ed9c --- /dev/null +++ b/rpm.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +APP=pybitmessage +PREV_VERSION=0.3.4 +VERSION=0.3.4 +RELEASE=1 +SOURCEDIR=. +ARCH_TYPE=`uname -m` +CURRDIR=`pwd` +SOURCE=~/rpmbuild/SOURCES/${APP}_${VERSION}.orig.tar.gz + + +# Update version numbers automatically - so you don't have to +sed -i 's/VERSION='${PREV_VERSION}'/VERSION='${VERSION}'/g' Makefile debian.sh arch.sh puppy.sh ebuild.sh slack.sh +sed -i 's/Version: '${PREV_VERSION}'/Version: '${VERSION}'/g' rpmpackage/${APP}.spec +sed -i 's/Release: '${RELEASE}'/Release: '${RELEASE}'/g' rpmpackage/${APP}.spec +sed -i 's/pkgrel='${RELEASE}'/pkgrel='${RELEASE}'/g' archpackage/PKGBUILD +sed -i 's/pkgver='${PREV_VERSION}'/pkgver='${VERSION}'/g' archpackage/PKGBUILD +sed -i "s/-${PREV_VERSION}-/-${VERSION}-/g" puppypackage/*.specs +sed -i "s/|${PREV_VERSION}|/|${VERSION}|/g" puppypackage/*.specs +sed -i 's/VERSION='${PREV_VERSION}'/VERSION='${VERSION}'/g' puppypackage/pinstall.sh puppypackage/puninstall.sh +sed -i 's/-'${PREV_VERSION}'.so/-'${VERSION}'.so/g' debian/*.links + +sudo yum groupinstall "Development Tools" +sudo yum install rpmdevtools + +# setup the rpmbuild directory tree +rpmdev-setuptree + +# create the source code in the SOURCES directory +make clean +mkdir -p ~/rpmbuild/SOURCES +rm -f ${SOURCE} + +# having the root directory called name-version seems essential +mv ../${APP} ../${APP}-${VERSION} +tar -cvzf ${SOURCE} ../${APP}-${VERSION} --exclude-vcs + +# rename the root directory without the version number +mv ../${APP}-${VERSION} ../${APP} + +# copy the spec file into the SPECS directory +cp -f rpmpackage/${APP}.spec ~/rpmbuild/SPECS + +# build +cd ~/rpmbuild/SPECS +rpmbuild -ba ${APP}.spec +cd ${CURRDIR} + +# Copy the results into the rpmpackage directory +mkdir -p rpmpackage/${ARCH_TYPE} +cp -r ~/rpmbuild/RPMS/${ARCH_TYPE}/${APP}* rpmpackage/${ARCH_TYPE} +cp -r ~/rpmbuild/SRPMS/${APP}* rpmpackage diff --git a/rpmpackage/pybitmessage.spec b/rpmpackage/pybitmessage.spec new file mode 100644 index 00000000..27485d73 --- /dev/null +++ b/rpmpackage/pybitmessage.spec @@ -0,0 +1,207 @@ +Name: pybitmessage +Version: 0.3.4 +Release: 1%{?dist} +Summary: Send encrypted messages +License: MIT +URL: https://github.com/Bitmessage/PyBitmessage +Packager: Bob Mottram (4096 bits) +Source0: http://yourdomainname.com/src/%{name}_%{version}.orig.tar.gz +Group: Office/Email + +Requires: python, PyQt4, openssl-compat-bitcoin-libs + + +%description +Bitmessage is a P2P communications protocol used to send encrypted messages +to another person or to many subscribers. It is decentralized and +trustless, meaning that you need-not inherently trust any entities like +root certificate authorities. It uses strong authentication which means +that the sender of a message cannot be spoofed, and it aims to hide +"non-content" data, like the sender and receiver of messages, from passive +eavesdroppers like those running warrantless wiretapping programs. + +%prep +%setup -q + +%build +%configure +make %{?_smp_mflags} + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot} +mkdir -p %{buildroot}/etc +mkdir -p %{buildroot}/etc/%{name} +mkdir -p %{buildroot}/usr +mkdir -p %{buildroot}/usr/bin +mkdir -p %{buildroot}/usr/share +mkdir -p %{buildroot}/usr/share/man +mkdir -p %{buildroot}/usr/share/man/man1 +mkdir -p %{buildroot}/usr/share/%{name} +mkdir -p %{buildroot}/usr/share/applications +mkdir -p %{buildroot}/usr/share/icons +mkdir -p %{buildroot}/usr/share/icons/hicolor +mkdir -p %{buildroot}/usr/share/icons/hicolor/24x24 +mkdir -p %{buildroot}/usr/share/icons/hicolor/24x24/apps + +mkdir -p %{buildroot}/usr/share/pixmaps +mkdir -p %{buildroot}/usr/share/icons/hicolor/scalable +mkdir -p %{buildroot}/usr/share/icons/hicolor/scalable/apps +# Make install but to the RPM BUILDROOT directory +make install -B DESTDIR=%{buildroot} + +%files +%doc README.md LICENSE +%defattr(-,root,root,-) +%dir /usr/share/%{name} +%dir /usr/share/applications +%dir /usr/share/icons/hicolor +%dir /usr/share/icons/hicolor/24x24 +%dir /usr/share/icons/hicolor/24x24/apps +%dir /usr/share/pixmaps +%dir /usr/share/icons/hicolor/scalable +%dir /usr/share/icons/hicolor/scalable/apps +/usr/share/%{name}/* +%{_bindir}/* +%{_mandir}/man1/* +%attr(644,root,root) /usr/share/applications/%{name}.desktop +%attr(644,root,root) /usr/share/icons/hicolor/24x24/apps/%{name}.png + +%changelog +* Sun Jun 30 2013 Bob Mottram (4096 bits) - 0.3.4-1 +- Switched addr, msg, broadcast, and getpubkey message types + to 8 byte time. Last remaining type is pubkey. +- Added tooltips to show the full subject of messages +- Added Maximum Acceptable Difficulty fields in the settings +- Send out pubkey immediately after generating deterministic + addresses rather than waiting for a request + +* Sat Jun 29 2013 Bob Mottram (4096 bits) - 0.3.3-1 +- Remove inbox item from GUI when using API command trashMessage +- Add missing trailing semicolons to pybitmessage.desktop +- Ensure $(DESTDIR)/usr/bin exists +- Update Makefile to correct sandbox violations when built + via Portage (Gentoo) +- Fix message authentication bug + +* Fri Jun 28 2013 Bob Mottram (4096 bits) - 0.3.211-1 +- Removed multi-core proof of work + as the multiprocessing module does not work well with + pyinstaller's --onefile option. + +* Mon Jun 03 2013 Bob Mottram (4096 bits) - 0.3.2-1 +- Bugfix: Remove remaining references to the old myapp.trayIcon +- Refactored message status-related code. API function getStatus + now returns one of these strings: notfound, msgqueued, + broadcastqueued, broadcastsent, doingpubkeypow, awaitingpubkey, + doingmsgpow, msgsent, or ackreceived +- Moved proof of work to low-priority multi-threaded child + processes +- Added menu option to delete all trashed messages +- Added inv flooding attack mitigation +- On Linux, when selecting Show Bitmessage, do not maximize + automatically +- Store tray icons in bitmessage_icons_rc.py + +* Sat May 25 2013 Jonathan Warren (4096 bits) - 0.3.1-1 +- Added new API commands: getDeterministicAddress, + addSubscription, deleteSubscription +- TCP Connection timeout for non-fully-established connections + now 20 seconds +- Don't update the time we last communicated with a node unless + the connection is fully established. This will allow us to + forget about active but non-Bitmessage nodes which have made + it into our knownNodes file. +- Prevent incoming connection flooding from crashing + singleListener thread. Client will now only accept one + connection per remote node IP +- Bugfix: Worker thread crashed when doing a POW to send out + a v2 pubkey (bug introduced in 0.3.0) +- Wrap all sock.shutdown functions in error handlers +- Put all 'commit' commands within SQLLocks +- Bugfix: If address book label is blank, Bitmessage wouldn't + show message (bug introduced in 0.3.0) +- Messaging menu item selects the oldest unread message +- Standardize on 'Quit' rather than 'Exit' +- [OSX] Try to seek homebrew installation of OpenSSL +- Prevent multiple instances of the application from running +- Show 'Connected' or 'Connection Lost' indicators +- Use only 9 half-open connections on Windows but 32 for + everyone else +- Added appIndicator (a more functional tray icon) and Ubuntu + Messaging Menu integration +- Changed Debian install directory and run script name based + on Github issue #135 + +* Tue May 6 2013 Bob Mottram (4096 bits) - 0.3.0-1 +- 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 + +* Tue Apr 9 2013 Bob Mottram (4096 bits) - 0.2.8-1 +- Fixed Ubuntu & OS X issue: + Bitmessage wouldn't receive any objects from peers after restart. +- Inventory flush to disk when exiting program now vastly faster. +- Fixed address generation bug (kept Bitmessage from restarting). +- Improve deserialization of messages + before processing (a 'best practice'). +- Change to help Macs find OpenSSL the way Unix systems find it. +- Do not share or accept IPs which are in the private IP ranges. +- Added time-fuzzing + to the embedded time in pubkey and getpubkey messages. +- Added a knownNodes lock + to prevent an exception from sometimes occurring when saving + the data-structure to disk. +- Show unread messages in bold + and do not display new messages automatically. +- Support selecting multiple items + in the inbox, sent box, and address book. +- Use delete key to trash Inbox or Sent messages. +- Display richtext(HTML) messages + from senders in address book or subscriptions (although not + pseudo-mailing-lists; use new right-click option). +- Trim spaces + from the beginning and end of addresses when adding to + address book, subscriptions, and blacklist. +- Improved the display of the time for foreign language users. + +* Tue Apr 1 2013 Bob Mottram (4096 bits) - 0.2.7-1 +- Added debian packaging +- Script to generate debian packages +- SVG icon for Gnome shell, etc +- Source moved int src directory for debian standards compatibility +- Trailing carriage return on COPYING LICENSE and README.md diff --git a/slack.sh b/slack.sh new file mode 100755 index 00000000..cc71e1f3 --- /dev/null +++ b/slack.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +APP=pybitmessage +PREV_VERSION=0.3.4 +VERSION=0.3.4 +RELEASE=1 +ARCH_TYPE=`uname -m` +BUILDDIR=~/slackbuild +CURRDIR=`pwd` +PROJECTDIR=${BUILDDIR}/${APP}-${VERSION}-${RELEASE} + +# Update version numbers automatically - so you don't have to +sed -i 's/VERSION='${PREV_VERSION}'/VERSION='${VERSION}'/g' Makefile debian.sh rpm.sh arch.sh puppy.sh ebuild.sh +sed -i 's/Version: '${PREV_VERSION}'/Version: '${VERSION}'/g' rpmpackage/${APP}.spec +sed -i 's/Release: '${RELEASE}'/Release: '${RELEASE}'/g' rpmpackage/${APP}.spec +sed -i 's/pkgrel='${RELEASE}'/pkgrel='${RELEASE}'/g' archpackage/PKGBUILD +sed -i 's/pkgver='${PREV_VERSION}'/pkgver='${VERSION}'/g' archpackage/PKGBUILD +sed -i "s/-${PREV_VERSION}-/-${VERSION}-/g" puppypackage/*.specs +sed -i "s/|${PREV_VERSION}|/|${VERSION}|/g" puppypackage/*.specs +sed -i 's/VERSION='${PREV_VERSION}'/VERSION='${VERSION}'/g' puppypackage/pinstall.sh puppypackage/puninstall.sh +sed -i 's/-'${PREV_VERSION}'.so/-'${VERSION}'.so/g' debian/*.links + + +# Make directories within which the project will be built +mkdir -p ${BUILDDIR} +mkdir -p ${PROJECTDIR} + +# Build the project +make clean +make +make install -B DESTDIR=${PROJECTDIR} + +# Copy the slack-desc and doinst.sh files into the build install directory +mkdir ${PROJECTDIR}/install +cp ${CURRDIR}/slackpackage/slack-desc ${PROJECTDIR}/install +cp ${CURRDIR}/slackpackage/doinst.sh ${PROJECTDIR}/install + +# Compress the build directory +cd ${BUILDDIR} +tar -c -f ${APP}-${VERSION}-${RELEASE}.tar . +sync +xz ${APP}-${VERSION}-${RELEASE}.tar +sync +mv ${APP}-${VERSION}-${RELEASE}.tar.xz ${CURRDIR}/slackpackage/${APP}-${VERSION}-${ARCH_TYPE}-${RELEASE}.txz +cd ${CURRDIR} + +# Remove the temporary build directory +rm -fr ${BUILDDIR} diff --git a/slackpackage/doinst.sh b/slackpackage/doinst.sh new file mode 100755 index 00000000..2d703395 --- /dev/null +++ b/slackpackage/doinst.sh @@ -0,0 +1,4 @@ +#!/bin/sh -e + +# This script is run after installation. +# Any additional configuration goes here. diff --git a/slackpackage/slack-desc b/slackpackage/slack-desc new file mode 100644 index 00000000..8705a13b --- /dev/null +++ b/slackpackage/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' on +# the right side marks the last column you can put a character in. You must make +# exactly 11 lines for the formatting to be correct. It's also customary to +# leave one space after the ':'. + + |-----handy-ruler--------------------------------------------------| +pybitmessage: pybitmessage (Send encrypted messages) +pybitmessage: +pybitmessage: Bitmessage is a P2P communications protocol used to send +pybitmessage: encrypted messages to another person or to many subscribers. It +pybitmessage: is decentralized and trustless, meaning that you need-not +pybitmessage: inherently trust any entities like root certificate authorities. +pybitmessage: It uses strong authentication which means that the sender of a +pybitmessage: message cannot be spoofed, and it aims to hide "non-content" +pybitmessage: data, like the sender and receiver of messages, from passive +pybitmessage: eavesdroppers like those running warrantless wiretapping +pybitmessage: programs. From fc5da5d3ff5c26e6ab17d70e3a121db0ac85eb05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerg=C3=B6=20Barany?= Date: Fri, 12 Jul 2013 12:16:34 +0200 Subject: [PATCH 11/18] Refactor type 2 message decoding, drop any extra lines from subject. This allows other clients to insert headers in extra lines of text between the Subject and Body fields of the message, as discussed on the 24x7 mailing list. The PyBitmessage client was never able to meaningfully display multi-line subjects, so this does not break anything. The extra lines are thrown away and never stored anywhere, so this also protects against watermarking attacks. --- src/class_receiveDataThread.py | 41 +++++++++++++++------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/src/class_receiveDataThread.py b/src/class_receiveDataThread.py index ad5e7b34..e73f3d2b 100644 --- a/src/class_receiveDataThread.py +++ b/src/class_receiveDataThread.py @@ -528,13 +528,7 @@ class receiveDataThread(threading.Thread): print 'fromAddress:', fromAddress if messageEncodingType == 2: - bodyPositionIndex = string.find(message, '\nBody:') - if bodyPositionIndex > 1: - subject = message[8:bodyPositionIndex] - body = message[bodyPositionIndex + 6:] - else: - subject = '' - body = message + subject, body = self.decodeType2Message(message) elif messageEncodingType == 1: body = message subject = '' @@ -684,13 +678,7 @@ class receiveDataThread(threading.Thread): print 'fromAddress:', fromAddress if messageEncodingType == 2: - bodyPositionIndex = string.find(message, '\nBody:') - if bodyPositionIndex > 1: - subject = message[8:bodyPositionIndex] - body = message[bodyPositionIndex + 6:] - else: - subject = '' - body = message + subject, body = self.decodeType2Message(message) elif messageEncodingType == 1: body = message subject = '' @@ -1005,15 +993,7 @@ class receiveDataThread(threading.Thread): toLabel = toAddress if messageEncodingType == 2: - bodyPositionIndex = string.find(message, '\nBody:') - if bodyPositionIndex > 1: - subject = message[8:bodyPositionIndex] - subject = subject[ - :500] # Only save and show the first 500 characters of the subject. Any more is probably an attak. - body = message[bodyPositionIndex + 6:] - else: - subject = '' - body = message + subject, body = self.decodeType2Message(message) elif messageEncodingType == 1: body = message subject = '' @@ -1086,6 +1066,21 @@ class receiveDataThread(threading.Thread): print 'Time to decrypt this message successfully:', timeRequiredToAttemptToDecryptMessage print 'Average time for all message decryption successes since startup:', sum / len(shared.successfullyDecryptMessageTimings) + def decodeType2Message(self, message): + bodyPositionIndex = string.find(message, '\nBody:') + if bodyPositionIndex > 1: + subject = message[8:bodyPositionIndex] + # Only save and show the first 500 characters of the subject. + # Any more is probably an attack. + subject = subject[:500] + body = message[bodyPositionIndex + 6:] + else: + subject = '' + body = message + # Throw away any extra lines (headers) after the subject. + if subject: + subject = subject.splitlines()[0] + return subject, body def isAckDataValid(self, ackData): if len(ackData) < 24: From 3364433765a9caea3001ba83cf554e5758ed7f73 Mon Sep 17 00:00:00 2001 From: fuzzgun Date: Fri, 12 Jul 2013 12:07:55 +0100 Subject: [PATCH 12/18] Fixing the puppy script --- archpackage/PKGBUILD | 2 +- generate.sh | 2 +- puppy.sh | 2 +- puppypackage/pybitmessage-0.3.4.pet.specs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/archpackage/PKGBUILD b/archpackage/PKGBUILD index a75d262a..97beecd2 100644 --- a/archpackage/PKGBUILD +++ b/archpackage/PKGBUILD @@ -19,7 +19,7 @@ install= changelog= source=($pkgname-$pkgver.tar.gz) noextract=() -md5sums=(56a8a225463e96b435b2a5b438006983) +md5sums=() build() { cd "$srcdir/$pkgname-$pkgver" ./configure --prefix=/usr diff --git a/generate.sh b/generate.sh index 92bda853..9d792e1d 100755 --- a/generate.sh +++ b/generate.sh @@ -4,4 +4,4 @@ rm -f Makefile rpmpackage/*.spec -packagemonkey -n "PyBitmessage" --version "0.3.4" --dir "." -l "mit" -e "Bob Mottram (4096 bits) " --brief "Send encrypted messages" --desc "Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide \"non-content\" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs." --homepage "https://github.com/Bitmessage/PyBitmessage" --section "mail" --categories "Office/Email" --dependsdeb "python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev" --dependsrpm "python, PyQt4, openssl-compat-bitcoin-libs" --mainscript "bitmessagemain.py" --librarypath "/opt/openssl-compat-bitcoin/lib/" --suggestsdeb "libmessaging-menu-dev" --dependspuppy "openssl, python-qt4, sqlite3, sqlite3-dev, python-openssl" +packagemonkey -n "PyBitmessage" --version "0.3.4" --dir "." -l "mit" -e "Bob Mottram (4096 bits) " --brief "Send encrypted messages" --desc "Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide \"non-content\" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs." --homepage "https://github.com/Bitmessage/PyBitmessage" --section "mail" --categories "Office/Email" --dependsdeb "python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev" --dependsrpm "python, PyQt4, openssl-compat-bitcoin-libs" --mainscript "bitmessagemain.py" --librarypath "/opt/openssl-compat-bitcoin/lib/" --suggestsdeb "libmessaging-menu-dev" --dependspuppy "openssl, python-qt4, sqlite3, sqlite3-dev, python-openssl, python-sip" diff --git a/puppy.sh b/puppy.sh index 3fc2db14..dd54ecc9 100755 --- a/puppy.sh +++ b/puppy.sh @@ -44,7 +44,7 @@ cp ${PROJECTDIR}/usr/bin/* ${PROJECTDIR}/usr/local/bin/ cp ${CURRDIR}/puppypackage/${APP}-${VERSION}.pet.specs ${PROJECTDIR} # Copy the XPM mini icon into the build directory -cp ${CURRDIR}//home/motters/develop/pybitmessage/desktop/icon14.xpm ${PROJECTDIR}/pybitmessage.xpm +cp ${CURRDIR}/desktop/icon14.xpm ${PROJECTDIR}/${APP}.xpm # Compress the build directory cd ${BUILDDIR} diff --git a/puppypackage/pybitmessage-0.3.4.pet.specs b/puppypackage/pybitmessage-0.3.4.pet.specs index 81060a27..5c9b2a41 100644 --- a/puppypackage/pybitmessage-0.3.4.pet.specs +++ b/puppypackage/pybitmessage-0.3.4.pet.specs @@ -1 +1 @@ -pybitmessage-0.3.4-1|PyBitmessage|0.3.4|1|Internet;mailnews;|3.9M||pybitmessage-0.3.4-1.pet||Send encrypted messages|ubuntu|precise|5| +pybitmessage-0.3.4-1|PyBitmessage|0.3.4|1|Internet;mailnews;|4.1M||pybitmessage-0.3.4-1.pet|+openssl,+python-qt4,+sqlite3,+sqlite3-dev,+python-openssl,+python-sip|Send encrypted messages|ubuntu|precise|5| From 28d1bfa645dd3d59eb660431aaa8f1f335e66134 Mon Sep 17 00:00:00 2001 From: fuzzgun Date: Fri, 12 Jul 2013 14:03:11 +0100 Subject: [PATCH 13/18] Some Arch dependencies --- Makefile | 2 +- arch.sh | 5 ++++- archpackage/PKGBUILD | 2 +- generate.sh | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 92b4e633..e7577494 100644 --- a/Makefile +++ b/Makefile @@ -41,5 +41,5 @@ clean: rm -f ${APP} \#* \.#* gnuplot* *.png debian/*.substvars debian/*.log rm -fr deb.* debian/${APP} rpmpackage/${ARCH_TYPE} rm -f ../${APP}*.deb ../${APP}*.changes ../${APP}*.asc ../${APP}*.dsc - rm -f rpmpackage/*.src.rpm archpackage/*.gz + rm -f rpmpackage/*.src.rpm archpackage/*.gz archpackage/*.xz rm -f puppypackage/*.gz puppypackage/*.pet slackpackage/*.txz diff --git a/arch.sh b/arch.sh index 8917cef4..77332d09 100755 --- a/arch.sh +++ b/arch.sh @@ -38,7 +38,10 @@ sed -i "s/md5sums[^)]*)/md5sums=(${CHECKSM%% *})/g" archpackage/PKGBUILD cd archpackage # Create the package -makepkg +tar -c -f ${APP}-${VERSION}.pkg.tar . +sync +xz ${APP}-${VERSION}.pkg.tar +sync # Move back to the original directory cd ${CURRDIR} diff --git a/archpackage/PKGBUILD b/archpackage/PKGBUILD index 97beecd2..b7c9626f 100644 --- a/archpackage/PKGBUILD +++ b/archpackage/PKGBUILD @@ -7,7 +7,7 @@ arch=('i686' 'x86_64') url="https://github.com/Bitmessage/PyBitmessage" license=('MIT') groups=() -depends=() +depends=( 'python2' 'qt4' 'python2-pyqt4' 'python2-gevent' 'sqlite' 'openssl') makedepends=() optdepends=() provides=() diff --git a/generate.sh b/generate.sh index 9d792e1d..0b612765 100755 --- a/generate.sh +++ b/generate.sh @@ -4,4 +4,4 @@ rm -f Makefile rpmpackage/*.spec -packagemonkey -n "PyBitmessage" --version "0.3.4" --dir "." -l "mit" -e "Bob Mottram (4096 bits) " --brief "Send encrypted messages" --desc "Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide \"non-content\" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs." --homepage "https://github.com/Bitmessage/PyBitmessage" --section "mail" --categories "Office/Email" --dependsdeb "python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev" --dependsrpm "python, PyQt4, openssl-compat-bitcoin-libs" --mainscript "bitmessagemain.py" --librarypath "/opt/openssl-compat-bitcoin/lib/" --suggestsdeb "libmessaging-menu-dev" --dependspuppy "openssl, python-qt4, sqlite3, sqlite3-dev, python-openssl, python-sip" +packagemonkey -n "PyBitmessage" --version "0.3.4" --dir "." -l "mit" -e "Bob Mottram (4096 bits) " --brief "Send encrypted messages" --desc "Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide \"non-content\" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs." --homepage "https://github.com/Bitmessage/PyBitmessage" --section "mail" --categories "Office/Email" --dependsdeb "python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev" --dependsrpm "python, PyQt4, openssl-compat-bitcoin-libs" --mainscript "bitmessagemain.py" --librarypath "/opt/openssl-compat-bitcoin/lib/" --suggestsdeb "libmessaging-menu-dev" --dependspuppy "openssl, python-qt4, sqlite3, sqlite3-dev, python-openssl, python-sip" --dependsarch "python2, qt4, python2-pyqt4, python2-gevent, sqlite, openssl" From 33a41367b3cd401614798cb1a241e148c3ba862d Mon Sep 17 00:00:00 2001 From: fuzzgun Date: Fri, 12 Jul 2013 14:09:10 +0100 Subject: [PATCH 14/18] Duplocated command in Makefile --- puppypackage/pybitmessage-0.3.4.pet.specs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/puppypackage/pybitmessage-0.3.4.pet.specs b/puppypackage/pybitmessage-0.3.4.pet.specs index 5c9b2a41..d9649f3c 100644 --- a/puppypackage/pybitmessage-0.3.4.pet.specs +++ b/puppypackage/pybitmessage-0.3.4.pet.specs @@ -1 +1 @@ -pybitmessage-0.3.4-1|PyBitmessage|0.3.4|1|Internet;mailnews;|4.1M||pybitmessage-0.3.4-1.pet|+openssl,+python-qt4,+sqlite3,+sqlite3-dev,+python-openssl,+python-sip|Send encrypted messages|ubuntu|precise|5| +pybitmessage-0.3.4-1|PyBitmessage|0.3.4|1|Internet;mailnews;|4.2M||pybitmessage-0.3.4-1.pet|+openssl,+python-qt4,+sqlite3,+sqlite3-dev,+python-openssl,+python-sip|Send encrypted messages|ubuntu|precise|5| From d3b76eb610bb835b24a833bb968cac53057014a1 Mon Sep 17 00:00:00 2001 From: fuzzgun Date: Fri, 12 Jul 2013 18:09:59 +0100 Subject: [PATCH 15/18] python2-gevent is optional --- archpackage/PKGBUILD | 4 ++-- debian/control | 2 +- generate.sh | 2 +- puppypackage/pybitmessage-0.3.4.pet.specs | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/archpackage/PKGBUILD b/archpackage/PKGBUILD index b7c9626f..79ee8ded 100644 --- a/archpackage/PKGBUILD +++ b/archpackage/PKGBUILD @@ -7,9 +7,9 @@ arch=('i686' 'x86_64') url="https://github.com/Bitmessage/PyBitmessage" license=('MIT') groups=() -depends=( 'python2' 'qt4' 'python2-pyqt4' 'python2-gevent' 'sqlite' 'openssl') +depends=('python2' 'qt4' 'python2-pyqt4' 'sqlite' 'openssl') makedepends=() -optdepends=() +optdepends=('python2-gevent') provides=() conflicts=() replaces=() diff --git a/debian/control b/debian/control index de8f3a59..e2d860d0 100644 --- a/debian/control +++ b/debian/control @@ -4,7 +4,7 @@ Maintainer: Bob Mottram (4096 bits) Build-Depends: debhelper (>= 9.0.0) Standards-Version: 3.9.4 Homepage: https://github.com/Bitmessage/PyBitmessage -Vcs-Git: https://github.com/fuzzgun/autocv.git +Vcs-Git: https://github.com/fuzzgun/libgpr.git Package: pybitmessage Section: mail diff --git a/generate.sh b/generate.sh index 0b612765..44aca136 100755 --- a/generate.sh +++ b/generate.sh @@ -4,4 +4,4 @@ rm -f Makefile rpmpackage/*.spec -packagemonkey -n "PyBitmessage" --version "0.3.4" --dir "." -l "mit" -e "Bob Mottram (4096 bits) " --brief "Send encrypted messages" --desc "Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide \"non-content\" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs." --homepage "https://github.com/Bitmessage/PyBitmessage" --section "mail" --categories "Office/Email" --dependsdeb "python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev" --dependsrpm "python, PyQt4, openssl-compat-bitcoin-libs" --mainscript "bitmessagemain.py" --librarypath "/opt/openssl-compat-bitcoin/lib/" --suggestsdeb "libmessaging-menu-dev" --dependspuppy "openssl, python-qt4, sqlite3, sqlite3-dev, python-openssl, python-sip" --dependsarch "python2, qt4, python2-pyqt4, python2-gevent, sqlite, openssl" +packagemonkey -n "PyBitmessage" --version "0.3.4" --dir "." -l "mit" -e "Bob Mottram (4096 bits) " --brief "Send encrypted messages" --desc "Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide \"non-content\" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs." --homepage "https://github.com/Bitmessage/PyBitmessage" --section "mail" --categories "Office/Email" --dependsdeb "python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev" --dependsrpm "python, PyQt4, openssl-compat-bitcoin-libs" --mainscript "bitmessagemain.py" --librarypath "/opt/openssl-compat-bitcoin/lib/" --suggestsdeb "libmessaging-menu-dev" --dependspuppy "openssl, python-qt4, sqlite3, sqlite3-dev, python-openssl, python-sip" --dependsarch "python2, qt4, python2-pyqt4, sqlite, openssl" --suggestsarch "python2-gevent" diff --git a/puppypackage/pybitmessage-0.3.4.pet.specs b/puppypackage/pybitmessage-0.3.4.pet.specs index d9649f3c..2d576f60 100644 --- a/puppypackage/pybitmessage-0.3.4.pet.specs +++ b/puppypackage/pybitmessage-0.3.4.pet.specs @@ -1 +1 @@ -pybitmessage-0.3.4-1|PyBitmessage|0.3.4|1|Internet;mailnews;|4.2M||pybitmessage-0.3.4-1.pet|+openssl,+python-qt4,+sqlite3,+sqlite3-dev,+python-openssl,+python-sip|Send encrypted messages|ubuntu|precise|5| +pybitmessage-0.3.4-1|PyBitmessage|0.3.4|1|Internet;mailnews;|4.5M||pybitmessage-0.3.4-1.pet|+openssl,+python-qt4,+sqlite3,+sqlite3-dev,+python-openssl,+python-sip|Send encrypted messages|ubuntu|precise|5| From d93d92336438bc165839c4089cfaa80c519db730 Mon Sep 17 00:00:00 2001 From: Jonathan Warren Date: Sat, 13 Jul 2013 20:35:06 -0400 Subject: [PATCH 16/18] Added some default text to the search textbox, also fixed bitmessage_icons.qrc after file move --- src/bitmessagemain.py | 2 +- src/bitmessageqt/bitmessage_icons.qrc | 32 +++++++++++++-------------- src/bitmessageqt/bitmessageui.py | 22 ++++++------------ src/bitmessageqt/bitmessageui.ui | 29 ++++++++++++------------ 4 files changed, 38 insertions(+), 47 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index e93fbd46..4ffc9f5b 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -14,7 +14,7 @@ try: from gevent import monkey monkey.patch_all() except ImportError as ex: - print "cannot find gevent" + print "Not using the gevent module as it was not found. No need to worry." import signal # Used to capture a Ctrl-C keypress so that Bitmessage can shutdown gracefully. # The next 3 are used for the API diff --git a/src/bitmessageqt/bitmessage_icons.qrc b/src/bitmessageqt/bitmessage_icons.qrc index a186b01b..bdd3fd07 100644 --- a/src/bitmessageqt/bitmessage_icons.qrc +++ b/src/bitmessageqt/bitmessage_icons.qrc @@ -1,20 +1,20 @@ - images/can-icon-24px-yellow.png - images/can-icon-24px-red.png - images/can-icon-24px-green.png - images/can-icon-24px.png - images/can-icon-16px.png - images/greenicon.png - images/redicon.png - images/yellowicon.png - images/addressbook.png - images/blacklist.png - images/identities.png - images/networkstatus.png - images/sent.png - images/subscriptions.png - images/send.png - images/inbox.png + ../images/can-icon-24px-yellow.png + ../images/can-icon-24px-red.png + ../images/can-icon-24px-green.png + ../images/can-icon-24px.png + ../images/can-icon-16px.png + ../images/greenicon.png + ../images/redicon.png + ../images/yellowicon.png + ../images/addressbook.png + ../images/blacklist.png + ../images/identities.png + ../images/networkstatus.png + ../images/sent.png + ../images/subscriptions.png + ../images/send.png + ../images/inbox.png diff --git a/src/bitmessageqt/bitmessageui.py b/src/bitmessageqt/bitmessageui.py index 62466503..1d04e5f1 100644 --- a/src/bitmessageqt/bitmessageui.py +++ b/src/bitmessageqt/bitmessageui.py @@ -2,8 +2,8 @@ # Form implementation generated from reading ui file 'bitmessageui.ui' # -# Created: Fri Jul 12 04:40:47 2013 -# by: PyQt4 UI code generator 4.10 +# Created: Sat Jul 13 20:23:44 2013 +# by: PyQt4 UI code generator 4.10.2 # # WARNING! All changes made in this file will be lost! @@ -422,7 +422,7 @@ class Ui_MainWindow(object): self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 795, 25)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 795, 18)) self.menubar.setObjectName(_fromUtf8("menubar")) self.menuFile = QtGui.QMenu(self.menubar) self.menuFile.setObjectName(_fromUtf8("menuFile")) @@ -497,6 +497,7 @@ class Ui_MainWindow(object): def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(_translate("MainWindow", "Bitmessage", None)) + self.inboxSearchLineEdit.setPlaceholderText(_translate("MainWindow", "Search", None)) self.inboxSearchOptionCB.setItemText(0, _translate("MainWindow", "All", None)) self.inboxSearchOptionCB.setItemText(1, _translate("MainWindow", "To", None)) self.inboxSearchOptionCB.setItemText(2, _translate("MainWindow", "From", None)) @@ -519,14 +520,15 @@ class Ui_MainWindow(object): self.textEditMessage.setHtml(_translate("MainWindow", "\n" "\n" -"


", None)) +"\n" +"


", None)) self.label.setText(_translate("MainWindow", "To:", None)) self.label_2.setText(_translate("MainWindow", "From:", None)) self.radioButtonBroadcast.setText(_translate("MainWindow", "Broadcast to everyone who is subscribed to your address", None)) self.pushButtonSend.setText(_translate("MainWindow", "Send", None)) self.labelSendBroadcastWarning.setText(_translate("MainWindow", "Be aware that broadcasts are only encrypted with your address. Anyone who knows your address can read them.", None)) self.tabWidget.setTabText(self.tabWidget.indexOf(self.send), _translate("MainWindow", "Send", None)) + self.sentSearchLineEdit.setPlaceholderText(_translate("MainWindow", "Search", None)) self.sentSearchOptionCB.setItemText(0, _translate("MainWindow", "All", None)) self.sentSearchOptionCB.setItemText(1, _translate("MainWindow", "To", None)) self.sentSearchOptionCB.setItemText(2, _translate("MainWindow", "From", None)) @@ -599,13 +601,3 @@ class Ui_MainWindow(object): self.actionDeleteAllTrashedMessages.setText(_translate("MainWindow", "Delete all trashed messages", None)) import bitmessage_icons_rc - -if __name__ == "__main__": - import sys - app = QtGui.QApplication(sys.argv) - MainWindow = QtGui.QMainWindow() - ui = Ui_MainWindow() - ui.setupUi(MainWindow) - MainWindow.show() - sys.exit(app.exec_()) - diff --git a/src/bitmessageqt/bitmessageui.ui b/src/bitmessageqt/bitmessageui.ui index 46ebd06a..6c18cbe0 100644 --- a/src/bitmessageqt/bitmessageui.ui +++ b/src/bitmessageqt/bitmessageui.ui @@ -22,16 +22,7 @@ - - 0 - - - 0 - - - 0 - - + 0 @@ -83,7 +74,11 @@ 0 - + + + Search + + @@ -262,8 +257,8 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2';"><br /></p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html>
@@ -364,7 +359,11 @@ p, li { white-space: pre-wrap; } 0 - + + + Search + + @@ -1012,7 +1011,7 @@ p, li { white-space: pre-wrap; } 0 0 795 - 25 + 18 From d04b8747c7ea3a9980a9c05ca0296d47a2d6059f Mon Sep 17 00:00:00 2001 From: fuzzgun Date: Sun, 14 Jul 2013 12:31:58 +0100 Subject: [PATCH 17/18] Use python2 within /usr/bin/pybitmessage #296 --- Makefile | 2 +- debian/control | 2 +- generate.sh | 2 +- puppypackage/pybitmessage-0.3.4.pet.specs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index e7577494..b9a85ff7 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ install: cp -rf src/* ${DESTDIR}/usr/share/${APP} echo '#!/bin/sh' > ${DESTDIR}/usr/bin/${APP} echo 'cd /usr/share/pybitmessage' >> ${DESTDIR}/usr/bin/${APP} - echo 'LD_LIBRARY_PATH="/opt/openssl-compat-bitcoin/lib/" exec python bitmessagemain.py' >> ${DESTDIR}/usr/bin/${APP} + echo 'LD_LIBRARY_PATH="/opt/openssl-compat-bitcoin/lib/" exec python2 bitmessagemain.py' >> ${DESTDIR}/usr/bin/${APP} chmod +x ${DESTDIR}/usr/bin/${APP} uninstall: rm -f /usr/share/man/man1/${APP}.1.gz diff --git a/debian/control b/debian/control index e2d860d0..01bd7d8c 100644 --- a/debian/control +++ b/debian/control @@ -4,7 +4,7 @@ Maintainer: Bob Mottram (4096 bits) Build-Depends: debhelper (>= 9.0.0) Standards-Version: 3.9.4 Homepage: https://github.com/Bitmessage/PyBitmessage -Vcs-Git: https://github.com/fuzzgun/libgpr.git +Vcs-Git: https://github.com/fuzzgun/fin.git Package: pybitmessage Section: mail diff --git a/generate.sh b/generate.sh index 44aca136..8909cf2f 100755 --- a/generate.sh +++ b/generate.sh @@ -4,4 +4,4 @@ rm -f Makefile rpmpackage/*.spec -packagemonkey -n "PyBitmessage" --version "0.3.4" --dir "." -l "mit" -e "Bob Mottram (4096 bits) " --brief "Send encrypted messages" --desc "Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide \"non-content\" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs." --homepage "https://github.com/Bitmessage/PyBitmessage" --section "mail" --categories "Office/Email" --dependsdeb "python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev" --dependsrpm "python, PyQt4, openssl-compat-bitcoin-libs" --mainscript "bitmessagemain.py" --librarypath "/opt/openssl-compat-bitcoin/lib/" --suggestsdeb "libmessaging-menu-dev" --dependspuppy "openssl, python-qt4, sqlite3, sqlite3-dev, python-openssl, python-sip" --dependsarch "python2, qt4, python2-pyqt4, sqlite, openssl" --suggestsarch "python2-gevent" +packagemonkey -n "PyBitmessage" --version "0.3.4" --dir "." -l "mit" -e "Bob Mottram (4096 bits) " --brief "Send encrypted messages" --desc "Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide \"non-content\" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs." --homepage "https://github.com/Bitmessage/PyBitmessage" --section "mail" --categories "Office/Email" --dependsdeb "python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev" --dependsrpm "python, PyQt4, openssl-compat-bitcoin-libs" --mainscript "bitmessagemain.py" --librarypath "/opt/openssl-compat-bitcoin/lib/" --suggestsdeb "libmessaging-menu-dev" --dependspuppy "openssl, python-qt4, sqlite3, sqlite3-dev, python-openssl, python-sip" --dependsarch "python2, qt4, python2-pyqt4, sqlite, openssl" --suggestsarch "python2-gevent" --pythonversion 2 diff --git a/puppypackage/pybitmessage-0.3.4.pet.specs b/puppypackage/pybitmessage-0.3.4.pet.specs index 2d576f60..e346d0c9 100644 --- a/puppypackage/pybitmessage-0.3.4.pet.specs +++ b/puppypackage/pybitmessage-0.3.4.pet.specs @@ -1 +1 @@ -pybitmessage-0.3.4-1|PyBitmessage|0.3.4|1|Internet;mailnews;|4.5M||pybitmessage-0.3.4-1.pet|+openssl,+python-qt4,+sqlite3,+sqlite3-dev,+python-openssl,+python-sip|Send encrypted messages|ubuntu|precise|5| +pybitmessage-0.3.4-1|PyBitmessage|0.3.4|1|Internet;mailnews;|5.1M||pybitmessage-0.3.4-1.pet|+openssl,+python-qt4,+sqlite3,+sqlite3-dev,+python-openssl,+python-sip|Send encrypted messages|ubuntu|precise|5| From 1bf39dbfd06102268f532ba54007251f7535b80a Mon Sep 17 00:00:00 2001 From: Jonathan Warren Date: Sun, 14 Jul 2013 16:12:59 -0400 Subject: [PATCH 18/18] moved debug.log file to the config directory --- src/bitmessagemain.py | 5 +---- src/debug.py | 10 ++++++---- src/shared.py | 8 +++++--- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index 4ffc9f5b..cfbfdd6c 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -32,7 +32,6 @@ from class_singleListener import * from class_addressGenerator import * # Helper Functions -import helper_startup import helper_bootstrap import sys @@ -719,11 +718,9 @@ if __name__ == "__main__": signal.signal(signal.SIGINT, helper_generic.signal_handler) # signal.signal(signal.SIGINT, signal.SIG_DFL) - helper_startup.loadConfig() - helper_bootstrap.knownNodes() helper_bootstrap.dns() - + # Start the address generation thread addressGeneratorThread = addressGenerator() addressGeneratorThread.daemon = True # close the main program even if there are threads left diff --git a/src/debug.py b/src/debug.py index 14214686..034d3102 100644 --- a/src/debug.py +++ b/src/debug.py @@ -18,6 +18,7 @@ Use: `from debug import logger` to import this facility into whatever module you ''' import logging import logging.config +import shared # TODO(xj9): Get from a config file. log_level = 'DEBUG' @@ -40,9 +41,9 @@ logging.config.dictConfig({ 'class': 'logging.handlers.RotatingFileHandler', 'formatter': 'default', 'level': log_level, - 'filename': 'bm.log', - 'maxBytes': 1024, - 'backupCount': 0, + 'filename': shared.appdata + 'debug.log', + 'maxBytes': 2097152, # 2 MiB + 'backupCount': 1, } }, 'loggers': { @@ -65,4 +66,5 @@ logging.config.dictConfig({ }, }) # TODO (xj9): Get from a config file. -logger = logging.getLogger('console_only') +#logger = logging.getLogger('console_only') +logger = logging.getLogger('both') diff --git a/src/shared.py b/src/shared.py index c706038a..5abeeb96 100644 --- a/src/shared.py +++ b/src/shared.py @@ -21,7 +21,8 @@ import socket import random import highlevelcrypto import shared -from debug import logger +import helper_startup + config = ConfigParser.SafeConfigParser() myECCryptorObjects = {} @@ -63,8 +64,6 @@ ackdataForWhichImWatching = {} networkDefaultProofOfWorkNonceTrialsPerByte = 320 #The amount of work that should be performed (and demanded) per byte of the payload. Double this number to double the work. networkDefaultPayloadLengthExtraBytes = 14000 #To make sending short messages a little more difficult, this value is added to the payload length for use in calculating the proof of work target. - - def isInSqlInventory(hash): t = (hash,) shared.sqlLock.acquire() @@ -306,3 +305,6 @@ def fixPotentiallyInvalidUTF8Data(text): except: output = 'Part of the message is corrupt. The message cannot be displayed the normal way.\n\n' + repr(text) return output + +helper_startup.loadConfig() +from debug import logger \ No newline at end of file