From 72ccdbcf4455225aed2446406f4e3f7f4e0bbce4 Mon Sep 17 00:00:00 2001 From: Jonathan Warren Date: Mon, 8 Apr 2013 12:07:05 -0400 Subject: [PATCH 1/2] Support selecting multiple addresses in address book --- bitmessagemain.py | 65 ++++++++++++++++++++++++++++------------------- bitmessageui.py | 4 +-- bitmessageui.ui | 2 +- 3 files changed, 42 insertions(+), 29 deletions(-) diff --git a/bitmessagemain.py b/bitmessagemain.py index 2733c7fe..5ca75085 100755 --- a/bitmessagemain.py +++ b/bitmessagemain.py @@ -4683,7 +4683,6 @@ class MyForm(QtGui.QMainWindow): #Send item on the Sent tab to trash def on_action_SentTrash(self): - #currentRow = self.ui.tableWidgetSent.currentRow() while self.ui.tableWidgetSent.selectedIndexes() != []: currentRow = self.ui.tableWidgetSent.selectedIndexes()[0].row() ackdataToTrash = str(self.ui.tableWidgetSent.item(currentRow,3).data(Qt.UserRole).toPyObject()) @@ -4707,33 +4706,48 @@ class MyForm(QtGui.QMainWindow): def on_action_AddressBookNew(self): self.click_pushButtonAddAddressBook() def on_action_AddressBookDelete(self): - currentRow = self.ui.tableWidgetAddressBook.currentRow() - labelAtCurrentRow = self.ui.tableWidgetAddressBook.item(currentRow,0).text().toUtf8() - addressAtCurrentRow = self.ui.tableWidgetAddressBook.item(currentRow,1).text() - t = (str(labelAtCurrentRow),str(addressAtCurrentRow)) - sqlLock.acquire() - sqlSubmitQueue.put('''DELETE FROM addressbook WHERE label=? AND address=?''') - sqlSubmitQueue.put(t) - queryreturn = sqlReturnQueue.get() - sqlSubmitQueue.put('commit') - sqlLock.release() - self.ui.tableWidgetAddressBook.removeRow(currentRow) - self.rerenderInboxFromLabels() - self.rerenderSentToLabels() - self.reloadBroadcastSendersForWhichImWatching() + while self.ui.tableWidgetInbox.selectedIndexes() != []: + currentRow = self.ui.tableWidgetInbox.selectedIndexes()[0].row() + labelAtCurrentRow = self.ui.tableWidgetAddressBook.item(currentRow,0).text().toUtf8() + addressAtCurrentRow = self.ui.tableWidgetAddressBook.item(currentRow,1).text() + t = (str(labelAtCurrentRow),str(addressAtCurrentRow)) + sqlLock.acquire() + sqlSubmitQueue.put('''DELETE FROM addressbook WHERE label=? AND address=?''') + sqlSubmitQueue.put(t) + queryreturn = sqlReturnQueue.get() + sqlSubmitQueue.put('commit') + sqlLock.release() + self.ui.tableWidgetAddressBook.removeRow(currentRow) + self.rerenderInboxFromLabels() + self.rerenderSentToLabels() def on_action_AddressBookClipboard(self): - currentRow = self.ui.tableWidgetAddressBook.currentRow() - addressAtCurrentRow = self.ui.tableWidgetAddressBook.item(currentRow,1).text() + fullStringOfAddresses = '' + listOfSelectedRows = {} + for i in range(len(self.ui.tableWidgetAddressBook.selectedIndexes())): + listOfSelectedRows[self.ui.tableWidgetAddressBook.selectedIndexes()[i].row()] = 0 + for currentRow in listOfSelectedRows: + addressAtCurrentRow = self.ui.tableWidgetAddressBook.item(currentRow,1).text() + if fullStringOfAddresses == '': + fullStringOfAddresses = addressAtCurrentRow + else: + fullStringOfAddresses += ', '+ str(addressAtCurrentRow) clipboard = QtGui.QApplication.clipboard() - clipboard.setText(str(addressAtCurrentRow)) + clipboard.setText(fullStringOfAddresses) def on_action_AddressBookSend(self): - currentRow = self.ui.tableWidgetAddressBook.currentRow() - addressAtCurrentRow = self.ui.tableWidgetAddressBook.item(currentRow,1).text() - if self.ui.lineEditTo.text() == '': - self.ui.lineEditTo.setText(str(addressAtCurrentRow)) + listOfSelectedRows = {} + for i in range(len(self.ui.tableWidgetAddressBook.selectedIndexes())): + listOfSelectedRows[self.ui.tableWidgetAddressBook.selectedIndexes()[i].row()] = 0 + for currentRow in listOfSelectedRows: + addressAtCurrentRow = self.ui.tableWidgetAddressBook.item(currentRow,1).text() + if self.ui.lineEditTo.text() == '': + self.ui.lineEditTo.setText(str(addressAtCurrentRow)) + else: + self.ui.lineEditTo.setText(str(self.ui.lineEditTo.text()) + '; '+ str(addressAtCurrentRow)) + if listOfSelectedRows == {}: + self.statusBar().showMessage('No addresses selected.') else: - self.ui.lineEditTo.setText(str(self.ui.lineEditTo.text()) + '; '+ str(addressAtCurrentRow)) - self.statusBar().showMessage('You have added the address to the \'To\' field on the \'Send\' tab. You may add more recipients if you want. When you are done, go to the \'Send\' tab.') + self.statusBar().showMessage('') + self.ui.tabWidget.setCurrentIndex(1) def on_context_menuAddressBook(self, point): self.popMenuAddressBook.exec_( self.ui.tableWidgetAddressBook.mapToGlobal(point) ) @@ -4768,7 +4782,6 @@ class MyForm(QtGui.QMainWindow): def on_action_BlacklistNew(self): self.click_pushButtonAddBlacklist() def on_action_BlacklistDelete(self): - print 'clicked Delete' currentRow = self.ui.tableWidgetBlacklist.currentRow() labelAtCurrentRow = self.ui.tableWidgetBlacklist.item(currentRow,0).text().toUtf8() addressAtCurrentRow = self.ui.tableWidgetBlacklist.item(currentRow,1).text() @@ -4933,7 +4946,7 @@ class MyForm(QtGui.QMainWindow): newItem = QtGui.QTableWidgetItem(streamNumber) newItem.setFlags( QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled ) self.ui.tableWidgetYourIdentities.setItem(0, 2, newItem) - self.ui.tableWidgetYourIdentities.setSortingEnabled(True) + #self.ui.tableWidgetYourIdentities.setSortingEnabled(True) self.rerenderComboBoxSendFrom() def updateStatusBar(self,data): diff --git a/bitmessageui.py b/bitmessageui.py index c1c62d37..55e65e6c 100644 --- a/bitmessageui.py +++ b/bitmessageui.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'bitmessageui.ui' # -# Created: Fri Apr 05 17:47:21 2013 +# Created: Mon Apr 08 11:57:15 2013 # by: PyQt4 UI code generator 4.9.4 # # WARNING! All changes made in this file will be lost! @@ -261,7 +261,7 @@ class Ui_MainWindow(object): self.gridLayout_5.addItem(spacerItem6, 1, 1, 1, 1) self.tableWidgetAddressBook = QtGui.QTableWidget(self.addressbook) self.tableWidgetAddressBook.setAlternatingRowColors(True) - self.tableWidgetAddressBook.setSelectionMode(QtGui.QAbstractItemView.SingleSelection) + self.tableWidgetAddressBook.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) self.tableWidgetAddressBook.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) self.tableWidgetAddressBook.setObjectName(_fromUtf8("tableWidgetAddressBook")) self.tableWidgetAddressBook.setColumnCount(2) diff --git a/bitmessageui.ui b/bitmessageui.ui index 0e2e19aa..2ee477c1 100644 --- a/bitmessageui.ui +++ b/bitmessageui.ui @@ -608,7 +608,7 @@ p, li { white-space: pre-wrap; } true - QAbstractItemView::SingleSelection + QAbstractItemView::ExtendedSelection QAbstractItemView::SelectRows From cdb4dbab8bfe79eacd9154901f31e01927cb03bb Mon Sep 17 00:00:00 2001 From: Jonathan Warren Date: Mon, 8 Apr 2013 13:35:16 -0400 Subject: [PATCH 2/2] Show unread messages in bold and do not switch to new messages upon arrival --- bitmessagemain.py | 149 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 120 insertions(+), 29 deletions(-) diff --git a/bitmessagemain.py b/bitmessagemain.py index 5ca75085..59a9bfe5 100755 --- a/bitmessagemain.py +++ b/bitmessagemain.py @@ -657,8 +657,8 @@ class receiveDataThread(QThread): toAddress = '[Broadcast subscribers]' if messageEncodingType <> 0: sqlLock.acquire() - t = (self.inventoryHash,toAddress,fromAddress,subject,int(time.time()),body,'inbox') - sqlSubmitQueue.put('''INSERT INTO inbox VALUES (?,?,?,?,?,?,?)''') + t = (self.inventoryHash,toAddress,fromAddress,subject,int(time.time()),body,'inbox',messageEncodingType,0) + sqlSubmitQueue.put('''INSERT INTO inbox VALUES (?,?,?,?,?,?,?,?,?)''') sqlSubmitQueue.put(t) sqlReturnQueue.get() sqlSubmitQueue.put('commit') @@ -929,8 +929,8 @@ class receiveDataThread(QThread): subject = '' if messageEncodingType <> 0: sqlLock.acquire() - t = (self.inventoryHash,toAddress,fromAddress,subject,int(time.time()),body,'inbox') - sqlSubmitQueue.put('''INSERT INTO inbox VALUES (?,?,?,?,?,?,?)''') + t = (self.inventoryHash,toAddress,fromAddress,subject,int(time.time()),body,'inbox',messageEncodingType,0) + sqlSubmitQueue.put('''INSERT INTO inbox VALUES (?,?,?,?,?,?,?,?,?)''') sqlSubmitQueue.put(t) sqlReturnQueue.get() sqlSubmitQueue.put('commit') @@ -961,8 +961,8 @@ class receiveDataThread(QThread): toAddress = '[Broadcast subscribers]' ripe = '' sqlLock.acquire() - t = ('',toAddress,ripe,fromAddress,subject,message,ackdata,int(time.time()),'broadcastpending',1,1,'sent') - sqlSubmitQueue.put('''INSERT INTO sent VALUES (?,?,?,?,?,?,?,?,?,?,?,?)''') + t = ('',toAddress,ripe,fromAddress,subject,message,ackdata,int(time.time()),'broadcastpending',1,1,'sent',2) + sqlSubmitQueue.put('''INSERT INTO sent VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)''') sqlSubmitQueue.put(t) sqlReturnQueue.get() sqlSubmitQueue.put('commit') @@ -1943,8 +1943,8 @@ class sqlThread(QThread): self.conn.text_factory = str self.cur = self.conn.cursor() try: - self.cur.execute( '''CREATE TABLE inbox (msgid blob, toaddress text, fromaddress text, subject text, received text, message text, folder text, UNIQUE(msgid) ON CONFLICT REPLACE)''' ) - self.cur.execute( '''CREATE TABLE sent (msgid blob, toaddress text, toripe blob, fromaddress text, subject text, message text, ackdata blob, lastactiontime integer, status text, pubkeyretrynumber integer, msgretrynumber integer, folder text)''' ) + self.cur.execute( '''CREATE TABLE inbox (msgid blob, toaddress text, fromaddress text, subject text, received text, message text, folder text, encodingtype int, read bool, UNIQUE(msgid) ON CONFLICT REPLACE)''' ) + self.cur.execute( '''CREATE TABLE sent (msgid blob, toaddress text, toripe blob, fromaddress text, subject text, message text, ackdata blob, lastactiontime integer, status text, pubkeyretrynumber integer, msgretrynumber integer, folder text, encodingtype int)''' ) self.cur.execute( '''CREATE TABLE subscriptions (label text, address text, enabled bool)''' ) self.cur.execute( '''CREATE TABLE addressbook (label text, address text)''' ) self.cur.execute( '''CREATE TABLE blacklist (label text, address text, enabled bool)''' ) @@ -1979,6 +1979,25 @@ class sqlThread(QThread): with open(appdata + 'keys.dat', 'wb') as configfile: config.write(configfile) + #People running earlier versions of PyBitmessage do not have the encodingtype field in their inbox and sent tables or the read field in the inbox table. Let's add them. + if config.getint('bitmessagesettings','settingsversion') == 3: + item = '''ALTER TABLE inbox ADD encodingtype int DEFAULT '2' ''' + parameters = '' + self.cur.execute(item, parameters) + + item = '''ALTER TABLE inbox ADD read bool DEFAULT '1' ''' + parameters = '' + self.cur.execute(item, parameters) + + item = '''ALTER TABLE sent ADD encodingtype int DEFAULT '2' ''' + parameters = '' + self.cur.execute(item, parameters) + self.conn.commit() + + config.set('bitmessagesettings','settingsversion','4') + with open(appdata + 'keys.dat', 'wb') as configfile: + config.write(configfile) + try: testpayload = '\x00\x00' t = ('1234','True',testpayload,'12345678','no') @@ -3020,8 +3039,8 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): ackdata = OpenSSL.rand(32) sqlLock.acquire() - t = ('',toAddress,toRipe,fromAddress,subject,message,ackdata,int(time.time()),'findingpubkey',1,1,'sent') - sqlSubmitQueue.put('''INSERT INTO sent VALUES (?,?,?,?,?,?,?,?,?,?,?,?)''') + t = ('',toAddress,toRipe,fromAddress,subject,message,ackdata,int(time.time()),'findingpubkey',1,1,'sent',2) + sqlSubmitQueue.put('''INSERT INTO sent VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)''') sqlSubmitQueue.put(t) sqlReturnQueue.get() sqlSubmitQueue.put('commit') @@ -3081,8 +3100,8 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): ripe = '' sqlLock.acquire() - t = ('',toAddress,ripe,fromAddress,subject,message,ackdata,int(time.time()),'broadcastpending',1,1,'sent') - sqlSubmitQueue.put('''INSERT INTO sent VALUES (?,?,?,?,?,?,?,?,?,?,?,?)''') + t = ('',toAddress,ripe,fromAddress,subject,message,ackdata,int(time.time()),'broadcastpending',1,1,'sent',2) + sqlSubmitQueue.put('''INSERT INTO sent VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)''') sqlSubmitQueue.put(t) sqlReturnQueue.get() sqlSubmitQueue.put('commit') @@ -3416,12 +3435,17 @@ class MyForm(QtGui.QMainWindow): self.actionsubscriptionsNew = self.ui.subscriptionsContextMenuToolbar.addAction("New", self.on_action_SubscriptionsNew) self.actionsubscriptionsDelete = self.ui.subscriptionsContextMenuToolbar.addAction("Delete", self.on_action_SubscriptionsDelete) self.actionsubscriptionsClipboard = self.ui.subscriptionsContextMenuToolbar.addAction("Copy address to clipboard", self.on_action_SubscriptionsClipboard) + self.actionsubscriptionsEnable = self.ui.subscriptionsContextMenuToolbar.addAction("Enable", self.on_action_SubscriptionsEnable) + self.actionsubscriptionsDisable = self.ui.subscriptionsContextMenuToolbar.addAction("Disable", self.on_action_SubscriptionsDisable) self.ui.tableWidgetSubscriptions.setContextMenuPolicy( QtCore.Qt.CustomContextMenu ) self.connect(self.ui.tableWidgetSubscriptions, QtCore.SIGNAL('customContextMenuRequested(const QPoint&)'), self.on_context_menuSubscriptions) self.popMenuSubscriptions = QtGui.QMenu( self ) self.popMenuSubscriptions.addAction( self.actionsubscriptionsNew ) self.popMenuSubscriptions.addAction( self.actionsubscriptionsDelete ) self.popMenuSubscriptions.addSeparator() + self.popMenuSubscriptions.addAction( self.actionsubscriptionsEnable ) + self.popMenuSubscriptions.addAction( self.actionsubscriptionsDisable ) + self.popMenuSubscriptions.addSeparator() self.popMenuSubscriptions.addAction( self.actionsubscriptionsClipboard ) #Popup menu for the Sent page @@ -3487,13 +3511,14 @@ class MyForm(QtGui.QMainWindow): self.reloadBroadcastSendersForWhichImWatching() self.ui.tableWidgetSent.keyPressEvent = self.tableWidgetSentKeyPressEvent + font = QFont() + font.setBold(True) #Load inbox from messages database file - sqlSubmitQueue.put('''SELECT msgid, toaddress, fromaddress, subject, received, message FROM inbox where folder='inbox' ORDER BY received''') + sqlSubmitQueue.put('''SELECT msgid, toaddress, fromaddress, subject, received, message, read FROM inbox where folder='inbox' ORDER BY received''') sqlSubmitQueue.put('') queryreturn = sqlReturnQueue.get() for row in queryreturn: - msgid, toAddress, fromAddress, subject, received, message, = row - + msgid, toAddress, fromAddress, subject, received, message, read = row try: if toAddress == '[Broadcast subscribers]': @@ -3518,6 +3543,8 @@ class MyForm(QtGui.QMainWindow): self.ui.tableWidgetInbox.insertRow(0) newItem = QtGui.QTableWidgetItem(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 safeConfigGetBoolean(toAddress,'mailinglist'): newItem.setTextColor(QtGui.QColor(137,04,177)) @@ -3527,19 +3554,24 @@ class MyForm(QtGui.QMainWindow): else: newItem = QtGui.QTableWidgetItem(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.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(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.textEditInboxMessage.setPlainText(self.ui.tableWidgetInbox.item(0,2).data(Qt.UserRole).toPyObject()) self.ui.tableWidgetInbox.sortItems(3,Qt.DescendingOrder) self.ui.tableWidgetInbox.keyPressEvent = self.tableWidgetInboxKeyPressEvent @@ -3619,16 +3651,20 @@ class MyForm(QtGui.QMainWindow): self.ui.tableWidgetAddressBook.setItem(0,1,newItem) #Initialize the Subscriptions - sqlSubmitQueue.put('SELECT label, address FROM subscriptions') + sqlSubmitQueue.put('SELECT label, address, enabled FROM subscriptions') sqlSubmitQueue.put('') queryreturn = sqlReturnQueue.get() for row in queryreturn: - label, address = row + label, address, enabled = row self.ui.tableWidgetSubscriptions.insertRow(0) newItem = QtGui.QTableWidgetItem(unicode(label,'utf-8')) + if not enabled: + newItem.setTextColor(QtGui.QColor(128,128,128)) self.ui.tableWidgetSubscriptions.setItem(0,0,newItem) newItem = QtGui.QTableWidgetItem(address) newItem.setFlags( QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled ) + if not enabled: + newItem.setTextColor(QtGui.QColor(128,128,128)) self.ui.tableWidgetSubscriptions.setItem(0,1,newItem) #Initialize the Blacklist or Whitelist @@ -3970,8 +4006,8 @@ class MyForm(QtGui.QMainWindow): self.statusBar().showMessage('Warning: The address uses a stream number currently not supported by this Bitmessage version. Perhaps upgrade.') ackdata = OpenSSL.rand(32) sqlLock.acquire() - t = ('',toAddress,ripe,fromAddress,subject,message,ackdata,int(time.time()),'findingpubkey',1,1,'sent') - sqlSubmitQueue.put('''INSERT INTO sent VALUES (?,?,?,?,?,?,?,?,?,?,?,?)''') + t = ('',toAddress,ripe,fromAddress,subject,message,ackdata,int(time.time()),'findingpubkey',1,1,'sent',2) + sqlSubmitQueue.put('''INSERT INTO sent VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)''') sqlSubmitQueue.put(t) sqlReturnQueue.get() sqlSubmitQueue.put('commit') @@ -4045,8 +4081,8 @@ class MyForm(QtGui.QMainWindow): toAddress = '[Broadcast subscribers]' ripe = '' sqlLock.acquire() - t = ('',toAddress,ripe,fromAddress,subject,message,ackdata,int(time.time()),'broadcastpending',1,1,'sent') - sqlSubmitQueue.put('''INSERT INTO sent VALUES (?,?,?,?,?,?,?,?,?,?,?,?)''') + t = ('',toAddress,ripe,fromAddress,subject,message,ackdata,int(time.time()),'broadcastpending',1,1,'sent',2) + sqlSubmitQueue.put('''INSERT INTO sent VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)''') sqlSubmitQueue.put(t) sqlReturnQueue.get() sqlSubmitQueue.put('commit') @@ -4229,8 +4265,11 @@ class MyForm(QtGui.QMainWindow): if toLabel == '': toLabel = toAddress + font = QFont() + font.setBold(True) self.ui.tableWidgetInbox.setSortingEnabled(False) newItem = QtGui.QTableWidgetItem(unicode(toLabel,'utf-8')) + newItem.setFont(font) newItem.setData(Qt.UserRole,str(toAddress)) if safeConfigGetBoolean(str(toAddress),'mailinglist'): newItem.setTextColor(QtGui.QColor(137,04,177)) @@ -4246,21 +4285,23 @@ class MyForm(QtGui.QMainWindow): if config.getboolean('bitmessagesettings', 'showtraynotifications'): self.trayIcon.showMessage('New Message', 'New message from '+fromLabel, 1, 2000) newItem.setData(Qt.UserRole,str(fromAddress)) + newItem.setFont(font) self.ui.tableWidgetInbox.setItem(0,1,newItem) newItem = QtGui.QTableWidgetItem(unicode(subject,'utf-8)')) newItem.setData(Qt.UserRole,unicode(message,'utf-8)')) + newItem.setFont(font) self.ui.tableWidgetInbox.setItem(0,2,newItem) newItem = myTableWidgetItem(unicode(strftime(config.get('bitmessagesettings', 'timeformat'),localtime(int(time.time()))),'utf-8')) newItem.setData(Qt.UserRole,QByteArray(inventoryHash)) newItem.setData(33,int(time.time())) + newItem.setFont(font) self.ui.tableWidgetInbox.setItem(0,3,newItem) - self.ui.tableWidgetInbox.setCurrentCell(0,0) - #If we have received this message from either a broadcast address or from someone in our address book, display as HTML + """#If we have received this message from either a broadcast address or from someone in our address book, display as HTML if decodeAddress(fromAddress)[3] in broadcastSendersForWhichImWatching or isAddressInMyAddressBook(fromAddress): self.ui.textEditInboxMessage.setText(self.ui.tableWidgetInbox.item(0,2).data(Qt.UserRole).toPyObject()) else: - self.ui.textEditInboxMessage.setPlainText(self.ui.tableWidgetInbox.item(0,2).data(Qt.UserRole).toPyObject()) + self.ui.textEditInboxMessage.setPlainText(self.ui.tableWidgetInbox.item(0,2).data(Qt.UserRole).toPyObject())""" self.ui.tableWidgetInbox.setSortingEnabled(True) def click_pushButtonAddAddressBook(self): @@ -4775,6 +4816,32 @@ class MyForm(QtGui.QMainWindow): addressAtCurrentRow = self.ui.tableWidgetSubscriptions.item(currentRow,1).text() clipboard = QtGui.QApplication.clipboard() clipboard.setText(str(addressAtCurrentRow)) + def on_action_SubscriptionsEnable(self): + currentRow = self.ui.tableWidgetSubscriptions.currentRow() + labelAtCurrentRow = self.ui.tableWidgetSubscriptions.item(currentRow,0).text().toUtf8() + addressAtCurrentRow = self.ui.tableWidgetSubscriptions.item(currentRow,1).text() + t = (str(labelAtCurrentRow),str(addressAtCurrentRow)) + sqlLock.acquire() + sqlSubmitQueue.put('''update subscriptions set enabled=1 WHERE label=? AND address=?''') + sqlSubmitQueue.put(t) + sqlReturnQueue.get() + sqlSubmitQueue.put('commit') + sqlLock.release() + self.ui.tableWidgetSubscriptions.item(currentRow,0).setTextColor(QtGui.QColor(0,0,0)) + self.reloadBroadcastSendersForWhichImWatching() + def on_action_SubscriptionsDisable(self): + currentRow = self.ui.tableWidgetSubscriptions.currentRow() + labelAtCurrentRow = self.ui.tableWidgetSubscriptions.item(currentRow,0).text().toUtf8() + addressAtCurrentRow = self.ui.tableWidgetSubscriptions.item(currentRow,1).text() + t = (str(labelAtCurrentRow),str(addressAtCurrentRow)) + sqlLock.acquire() + sqlSubmitQueue.put('''update subscriptions set enabled=0 WHERE label=? AND address=?''') + sqlSubmitQueue.put(t) + sqlReturnQueue.get() + sqlSubmitQueue.put('commit') + sqlLock.release() + self.ui.tableWidgetSubscriptions.item(currentRow,0).setTextColor(QtGui.QColor(128,128,128)) + self.reloadBroadcastSendersForWhichImWatching() def on_context_menuSubscriptions(self, point): self.popMenuSubscriptions.exec_( self.ui.tableWidgetSubscriptions.mapToGlobal(point) ) @@ -4889,6 +4956,22 @@ class MyForm(QtGui.QMainWindow): else: self.ui.textEditInboxMessage.setPlainText(self.ui.tableWidgetInbox.item(currentRow,2).data(Qt.UserRole).toPyObject()) + inventoryHash = str(self.ui.tableWidgetInbox.item(currentRow,3).data(Qt.UserRole).toPyObject()) + t = (inventoryHash,) + sqlLock.acquire() + sqlSubmitQueue.put('''update inbox set read=1 WHERE msgid=?''') + sqlSubmitQueue.put(t) + sqlReturnQueue.get() + sqlSubmitQueue.put('commit') + sqlLock.release() + + font = QFont() + font.setBold(False) + self.ui.tableWidgetInbox.item(currentRow,0).setFont(font) + self.ui.tableWidgetInbox.item(currentRow,1).setFont(font) + self.ui.tableWidgetInbox.item(currentRow,2).setFont(font) + self.ui.tableWidgetInbox.item(currentRow,3).setFont(font) + def tableWidgetSentItemClicked(self): currentRow = self.ui.tableWidgetSent.currentRow() @@ -4959,7 +5042,7 @@ class MyForm(QtGui.QMainWindow): def reloadBroadcastSendersForWhichImWatching(self): broadcastSendersForWhichImWatching.clear() sqlLock.acquire() - sqlSubmitQueue.put('SELECT address FROM subscriptions') + sqlSubmitQueue.put('SELECT address FROM subscriptions where enabled=1') sqlSubmitQueue.put('') queryreturn = sqlReturnQueue.get() sqlLock.release() @@ -5034,7 +5117,7 @@ if __name__ == "__main__": except: #This appears to be the first time running the program; there is no config file (or it cannot be accessed). Create config file. config.add_section('bitmessagesettings') - config.set('bitmessagesettings','settingsversion','1') + config.set('bitmessagesettings','settingsversion','4') config.set('bitmessagesettings','port','8444') config.set('bitmessagesettings','timeformat','%%a, %%d %%b %%Y %%I:%%M %%p') config.set('bitmessagesettings','blackwhitelist','black') @@ -5045,6 +5128,14 @@ if __name__ == "__main__": config.set('bitmessagesettings','minimizetotray','true') config.set('bitmessagesettings','showtraynotifications','true') config.set('bitmessagesettings','startintray','false') + config.set('bitmessagesettings','socksproxytype','none') + config.set('bitmessagesettings','sockshostname','localhost') + config.set('bitmessagesettings','socksport','9050') + config.set('bitmessagesettings','socksauthentication','false') + config.set('bitmessagesettings','socksusername','') + config.set('bitmessagesettings','sockspassword','') + config.set('bitmessagesettings','keysencrypted','false') + config.set('bitmessagesettings','messagesencrypted','false') if storeConfigFilesInSameDirectoryAsProgramByDefault: #Just use the same directory as the program and forget about the appdata folder @@ -5058,7 +5149,7 @@ if __name__ == "__main__": config.write(configfile) if config.getint('bitmessagesettings','settingsversion') == 1: - config.set('bitmessagesettings','settingsversion','3') #If the settings version is equal to 2 then the sqlThread will modify the pubkeys table and change the settings version to 3. + config.set('bitmessagesettings','settingsversion','4') #If the settings version is equal to 2 or 3 then the sqlThread will modify the pubkeys table and change the settings version to 4. config.set('bitmessagesettings','socksproxytype','none') config.set('bitmessagesettings','sockshostname','localhost') config.set('bitmessagesettings','socksport','9050') @@ -5104,7 +5195,7 @@ if __name__ == "__main__": knownNodes = pickle.load(pickleFile) pickleFile.close() - if config.getint('bitmessagesettings', 'settingsversion') > 3: + if config.getint('bitmessagesettings', 'settingsversion') > 4: print 'Bitmessage cannot read future versions of the keys file (keys.dat). Run the newer version of Bitmessage.' raise SystemExit