diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 61b93e2b..f4422ff7 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -321,6 +321,8 @@ class MyForm(QtGui.QMainWindow): "MainWindow", "Copy address to clipboard"), self.on_action_AddressBookClipboard) self.actionAddressBookSubscribe = self.ui.addressBookContextMenuToolbar.addAction(_translate( "MainWindow", "Subscribe to this address"), self.on_action_AddressBookSubscribe) + self.actionAddressBookSetAvatar = self.ui.addressBookContextMenuToolbar.addAction(_translate( + "MainWindow", "Set avatar..."), self.on_action_AddressBookSetAvatar) self.actionAddressBookNew = self.ui.addressBookContextMenuToolbar.addAction(_translate( "MainWindow", "Add New Address"), self.on_action_AddressBookNew) self.actionAddressBookDelete = self.ui.addressBookContextMenuToolbar.addAction(_translate( @@ -332,7 +334,8 @@ class MyForm(QtGui.QMainWindow): self.popMenuAddressBook = QtGui.QMenu(self) self.popMenuAddressBook.addAction(self.actionAddressBookSend) self.popMenuAddressBook.addAction(self.actionAddressBookClipboard) - self.popMenuAddressBook.addAction( self.actionAddressBookSubscribe ) + self.popMenuAddressBook.addAction(self.actionAddressBookSubscribe) + self.popMenuAddressBook.addAction(self.actionAddressBookSetAvatar) self.popMenuAddressBook.addSeparator() self.popMenuAddressBook.addAction(self.actionAddressBookNew) self.popMenuAddressBook.addAction(self.actionAddressBookDelete) @@ -350,6 +353,8 @@ class MyForm(QtGui.QMainWindow): _translate("MainWindow", "Enable"), self.on_action_SubscriptionsEnable) self.actionsubscriptionsDisable = self.ui.subscriptionsContextMenuToolbar.addAction( _translate("MainWindow", "Disable"), self.on_action_SubscriptionsDisable) + self.actionsubscriptionsSetAvatar = self.ui.subscriptionsContextMenuToolbar.addAction( + _translate("MainWindow", "Set avatar..."), self.on_action_SubscriptionsSetAvatar) self.ui.tableWidgetSubscriptions.setContextMenuPolicy( QtCore.Qt.CustomContextMenu) self.connect(self.ui.tableWidgetSubscriptions, QtCore.SIGNAL( @@ -360,6 +365,7 @@ class MyForm(QtGui.QMainWindow): self.popMenuSubscriptions.addSeparator() self.popMenuSubscriptions.addAction(self.actionsubscriptionsEnable) self.popMenuSubscriptions.addAction(self.actionsubscriptionsDisable) + self.popMenuSubscriptions.addAction(self.actionsubscriptionsSetAvatar) self.popMenuSubscriptions.addSeparator() self.popMenuSubscriptions.addAction(self.actionsubscriptionsClipboard) @@ -393,6 +399,8 @@ class MyForm(QtGui.QMainWindow): "MainWindow", "Enable"), self.on_action_BlacklistEnable) self.actionBlacklistDisable = self.ui.blacklistContextMenuToolbar.addAction(_translate( "MainWindow", "Disable"), self.on_action_BlacklistDisable) + self.actionBlacklistSetAvatar = self.ui.blacklistContextMenuToolbar.addAction(_translate( + "MainWindow", "Set avatar..."), self.on_action_BlacklistSetAvatar) self.ui.tableWidgetBlacklist.setContextMenuPolicy( QtCore.Qt.CustomContextMenu) self.connect(self.ui.tableWidgetBlacklist, QtCore.SIGNAL( @@ -405,6 +413,7 @@ class MyForm(QtGui.QMainWindow): self.popMenuBlacklist.addSeparator() self.popMenuBlacklist.addAction(self.actionBlacklistEnable) self.popMenuBlacklist.addAction(self.actionBlacklistDisable) + self.popMenuBlacklist.addAction(self.actionBlacklistSetAvatar) # Initialize the user's list of addresses on the 'Your Identities' tab. configSections = shared.config.sections() @@ -427,7 +436,7 @@ class MyForm(QtGui.QMainWindow): if not isEnabled: newItem.setTextColor(QtGui.QColor(128, 128, 128)) if shared.safeConfigGetBoolean(addressInKeysFile, 'mailinglist'): - newItem.setTextColor(QtGui.QColor(137, 04, 177)) # magenta + newItem.setTextColor(QtGui.QColor(137, 04, 177)) # magenta newItem.setIcon(identiconize(addressInKeysFile)) self.ui.tableWidgetYourIdentities.setItem(0, 1, newItem) newItem = QtGui.QTableWidgetItem(str( @@ -839,18 +848,25 @@ class MyForm(QtGui.QMainWindow): 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() + try: # try to get the from label fom YourIdentites (for chan messages) + fromLabel = shared.config.get(fromAddress, 'label') + checkIfChan = True + except: + fromLabel = '' + checkIfChan = False + + if fromLabel == '': # If this address wasn't in our address book... + 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 queryreturn != []: + for row in queryreturn: + fromLabel, = row if fromLabel == '': # If this address wasn't in our address book... t = (fromAddress,) @@ -876,7 +892,7 @@ class MyForm(QtGui.QMainWindow): newItem.setFont(font) newItem.setData(Qt.UserRole, str(toAddress)) if shared.safeConfigGetBoolean(toAddress, 'mailinglist'): - newItem.setTextColor(QtGui.QColor(137, 04, 177)) + newItem.setTextColor(QtGui.QColor(137, 04, 177)) # magenta if shared.safeConfigGetBoolean(str(toAddress), 'chan'): newItem.setTextColor(QtGui.QColor(216, 119, 0)) # orange newItem.setIcon(avatarize(toAddress, True)) @@ -894,6 +910,8 @@ class MyForm(QtGui.QMainWindow): if not read: newItem.setFont(font) newItem.setData(Qt.UserRole, str(fromAddress)) + if checkIfChan & shared.safeConfigGetBoolean(str(toAddress), 'chan'): + newItem.setTextColor(QtGui.QColor(216, 119, 0)) # orange newItem.setIcon(avatarize(fromAddress, True)) self.ui.tableWidgetInbox.setItem(0, 1, newItem) # subject @@ -1568,6 +1586,8 @@ class MyForm(QtGui.QMainWindow): fromLabel, = row self.ui.tableWidgetInbox.item( i, 1).setText(unicode(fromLabel, 'utf-8')) + self.ui.tableWidgetInbox.item( + i, 1).setIcon(avatarize(addressToLookup, True)) else: # It might be a broadcast message. We should check for that # label. @@ -1583,6 +1603,29 @@ class MyForm(QtGui.QMainWindow): fromLabel, = row self.ui.tableWidgetInbox.item( i, 1).setText(unicode(fromLabel, 'utf-8')) + self.ui.tableWidgetInbox.item( + i, 1).setIcon(avatarize(addressToLookup, True)) + else: + # It might be a chan message. We should check for that + # label. + try: + fromLabel = shared.config.get(addressToLookup, 'label') + except: + fromLabel = '' + if fromLabel == '': + fromLabel = addressToLookup + self.ui.tableWidgetInbox.item( + i, 1).setText(unicode(fromLabel, 'utf-8')) + self.ui.tableWidgetInbox.item( + i, 1).setIcon(avatarize(addressToLookup, True)) + # Set the color according to whether it is the address of a mailing + # list or not. + if shared.safeConfigGetBoolean(addressToLookup, 'chan'): + self.ui.tableWidgetInbox.item(i, 1).setTextColor(QtGui.QColor(216, 119, 0)) # orange + else: + self.ui.tableWidgetInbox.item( + i, 1).setTextColor(QApplication.palette().text().color()) + def rerenderInboxToLabels(self): for i in range(self.ui.tableWidgetInbox.rowCount()): @@ -1599,9 +1642,11 @@ class MyForm(QtGui.QMainWindow): self.ui.tableWidgetInbox.item( i, 0).setIcon(avatarize(toAddress, True)) # Set the color according to whether it is the address of a mailing - # list or not. - if shared.safeConfigGetBoolean(toAddress, 'mailinglist'): - self.ui.tableWidgetInbox.item(i, 0).setTextColor(QtGui.QColor(137, 04, 177)) + # list, a chan or neither. + if shared.safeConfigGetBoolean(toAddress, 'chan'): + self.ui.tableWidgetInbox.item(i, 0).setTextColor(QtGui.QColor(216, 119, 0)) # orange + elif shared.safeConfigGetBoolean(toAddress, 'mailinglist'): + self.ui.tableWidgetInbox.item(i, 0).setTextColor(QtGui.QColor(137, 04, 177)) # magenta else: self.ui.tableWidgetInbox.item( i, 0).setTextColor(QApplication.palette().text().color()) @@ -1987,7 +2032,7 @@ class MyForm(QtGui.QMainWindow): newItem.setFont(font) newItem.setData(Qt.UserRole, str(toAddress)) if shared.safeConfigGetBoolean(str(toAddress), 'mailinglist'): - newItem.setTextColor(QtGui.QColor(137, 04, 177)) + newItem.setTextColor(QtGui.QColor(137, 04, 177)) # magenta if shared.safeConfigGetBoolean(str(toAddress), 'chan'): newItem.setTextColor(QtGui.QColor(216, 119, 0)) # orange self.ui.tableWidgetInbox.insertRow(0) @@ -2395,7 +2440,7 @@ class MyForm(QtGui.QMainWindow): addressAtCurrentRow), 'mailinglist', 'true') shared.config.set(str(addressAtCurrentRow), 'mailinglistname', str( self.dialog.ui.lineEditMailingListName.text().toUtf8())) - self.ui.tableWidgetYourIdentities.item(currentRow, 1).setTextColor(QtGui.QColor(137, 04, 177)) + self.ui.tableWidgetYourIdentities.item(currentRow, 1).setTextColor(QtGui.QColor(137, 04, 177)) # magenta with open(shared.appdata + 'keys.dat', 'wb') as configfile: shared.config.write(configfile) self.rerenderInboxToLabels() @@ -2932,7 +2977,7 @@ class MyForm(QtGui.QMainWindow): self.ui.tableWidgetYourIdentities.item( currentRow, 2).setTextColor(QApplication.palette().text().color()) if shared.safeConfigGetBoolean(addressAtCurrentRow, 'mailinglist'): - self.ui.tableWidgetYourIdentities.item(currentRow, 1).setTextColor(QtGui.QColor(137, 04, 177)) + self.ui.tableWidgetYourIdentities.item(currentRow, 1).setTextColor(QtGui.QColor(137, 04, 177)) # magenta if shared.safeConfigGetBoolean(addressAtCurrentRow, 'chan'): self.ui.tableWidgetYourIdentities.item(currentRow, 1).setTextColor(QtGui.QColor(216, 119, 0)) # orange shared.reloadMyAddressHashes() @@ -2949,7 +2994,7 @@ class MyForm(QtGui.QMainWindow): self.ui.tableWidgetYourIdentities.item( currentRow, 2).setTextColor(QtGui.QColor(128, 128, 128)) if shared.safeConfigGetBoolean(addressAtCurrentRow, 'mailinglist'): - self.ui.tableWidgetYourIdentities.item(currentRow, 1).setTextColor(QtGui.QColor(137, 04, 177)) + self.ui.tableWidgetYourIdentities.item(currentRow, 1).setTextColor(QtGui.QColor(137, 04, 177)) # magenta with open(shared.appdata + 'keys.dat', 'wb') as configfile: shared.config.write(configfile) shared.reloadMyAddressHashes() @@ -2962,8 +3007,21 @@ class MyForm(QtGui.QMainWindow): clipboard.setText(str(addressAtCurrentRow)) def on_action_YourIdentitiesSetAvatar(self): - currentRow = self.ui.tableWidgetYourIdentities.currentRow() - addressAtCurrentRow = self.ui.tableWidgetYourIdentities.item( + self.on_action_SetAvatar(self.ui.tableWidgetYourIdentities) + + def on_action_AddressBookSetAvatar(self): + self.on_action_SetAvatar(self.ui.tableWidgetAddressBook) + + def on_action_SubscriptionsSetAvatar(self): + self.on_action_SetAvatar(self.ui.tableWidgetSubscriptions) + + def on_action_BlacklistSetAvatar(self): + self.on_action_SetAvatar(self.ui.tableWidgetBlacklist) + + def on_action_SetAvatar(self, thisTableWidget): + # thisTableWidget = self.ui.tableWidgetYourIdentities + currentRow = thisTableWidget.currentRow() + addressAtCurrentRow = thisTableWidget.item( currentRow, 1).text() import hashlib hash = hashlib.md5(addBMIfNotPresent(addressAtCurrentRow)).hexdigest() @@ -2972,31 +3030,62 @@ class MyForm(QtGui.QMainWindow): names = {'BMP':'Windows Bitmap', 'GIF':'Graphic Interchange Format', 'JPG':'Joint Photographic Experts Group', 'JPEG':'Joint Photographic Experts Group', 'MNG':'Multiple-image Network Graphics', 'PNG':'Portable Network Graphics', 'PBM':'Portable Bitmap', 'PGM':'Portable Graymap', 'PPM':'Portable Pixmap', 'TIFF':'Tagged Image File Format', 'XBM':'X11 Bitmap', 'XPM':'X11 Pixmap', 'SVG':'Scalable Vector Graphics', 'TGA':'Targa Image Format'} filters = [] all_images_filter = [] + current_files = [] for ext in extensions: filters += [ names[ext] + ' (*.' + ext.lower() + ')' ] all_images_filter += [ '*.' + ext.lower() ] + upper = shared.appdata + 'avatars/' + hash + '.' + ext.upper() + lower = shared.appdata + 'avatars/' + hash + '.' + ext.lower() + if os.path.isfile(lower): + current_files += [lower] + elif os.path.isfile(upper): + current_files += [upper] filters[0:0] = ['Image files (' + ' '.join(all_images_filter) + ')'] filters[1:1] = ['All files (*.*)'] sourcefile = QFileDialog.getOpenFileName(self, _translate("MainWindow","Set avatar..."), filter = ';;'.join(filters)) # determine the correct filename (note that avatars don't use the suffix) destination = shared.appdata + 'avatars/' + hash + '.' + sourcefile.split('.')[-1] - # copy the image file to the appdata folder exists = QtCore.QFile.exists(destination) - overwrite = QtGui.QMessageBox.No - if exists: - displayMsg = _translate("MainWindow", "You have already set an avatar for this address. Do you really want to overwrite it?") - overwrite = QtGui.QMessageBox.question( - self, 'Message', displayMsg, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) + if sourcefile == '': + # ask for removal of avatar + if exists | (len(current_files)>0): + displayMsg = _translate("MainWindow", "Do you really want to remove this avatar?") + overwrite = QtGui.QMessageBox.question( + self, 'Message', displayMsg, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) + else: + overwrite = QtGui.QMessageBox.No + else: + # ask whether to overwrite old avatar + if exists | (len(current_files)>0): + displayMsg = _translate("MainWindow", "You have already set an avatar for this address. Do you really want to overwrite it?") + overwrite = QtGui.QMessageBox.question( + self, 'Message', displayMsg, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) + else: + overwrite = QtGui.QMessageBox.No + + # copy the image file to the appdata folder if (not exists) | (overwrite == QtGui.QMessageBox.Yes): if overwrite == QtGui.QMessageBox.Yes: + for file in current_files: + QtCore.QFile.remove(file) QtCore.QFile.remove(destination) - copied = QtCore.QFile.copy(sourcefile, destination) - if not copied: - print 'couldn\'t copy :(' - return False + # copy it + if sourcefile != '': + copied = QtCore.QFile.copy(sourcefile, destination) + if not copied: + print 'couldn\'t copy :(' + return False # set the icon - self.ui.tableWidgetYourIdentities.item( + thisTableWidget.item( currentRow, 0).setIcon(avatarize(addressAtCurrentRow)) + ### + shared.reloadBroadcastSendersForWhichImWatching() + self.rerenderSubscriptions() + self.rerenderComboBoxSendFrom() + self.rerenderInboxFromLabels() + self.rerenderInboxToLabels() + self.rerenderSentFromLabels() + self.rerenderSentToLabels() def on_context_menuYourIdentities(self, point): self.popMenu.exec_(