Merge branch '1172' into upstream-v0.6

This commit is contained in:
Peter Šurda 2018-03-22 16:12:53 +01:00
commit d7ac440a04
Signed by untrusted user: PeterSurda
GPG Key ID: 0C5F50C0B5F37D87

View File

@ -1,10 +1,9 @@
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from string import find, rfind, rstrip, lstrip
from tr import _translate from tr import _translate
from bmconfigparser import BMConfigParser from bmconfigparser import BMConfigParser
from helper_sql import * from helper_sql import *
from utils import * from utils import avatarize
from settingsmixin import SettingsMixin from settingsmixin import SettingsMixin
# for pylupdate # for pylupdate
@ -22,7 +21,7 @@ class AccountMixin(object):
SUBSCRIPTION = 4 SUBSCRIPTION = 4
BROADCAST = 5 BROADCAST = 5
def accountColor (self): def accountColor(self):
if not self.isEnabled: if not self.isEnabled:
return QtGui.QColor(128, 128, 128) return QtGui.QColor(128, 128, 128)
elif self.type == self.CHAN: elif self.type == self.CHAN:
@ -31,18 +30,18 @@ class AccountMixin(object):
return QtGui.QColor(137, 04, 177) return QtGui.QColor(137, 04, 177)
else: else:
return QtGui.QApplication.palette().text().color() return QtGui.QApplication.palette().text().color()
def folderColor (self): def folderColor(self):
if not self.parent().isEnabled: if not self.parent().isEnabled:
return QtGui.QColor(128, 128, 128) return QtGui.QColor(128, 128, 128)
else: else:
return QtGui.QApplication.palette().text().color() return QtGui.QApplication.palette().text().color()
def accountBrush(self): def accountBrush(self):
brush = QtGui.QBrush(self.accountColor()) brush = QtGui.QBrush(self.accountColor())
brush.setStyle(QtCore.Qt.NoBrush) brush.setStyle(QtCore.Qt.NoBrush)
return brush return brush
def folderBrush(self): def folderBrush(self):
brush = QtGui.QBrush(self.folderColor()) brush = QtGui.QBrush(self.folderColor())
brush.setStyle(QtCore.Qt.NoBrush) brush.setStyle(QtCore.Qt.NoBrush)
@ -53,18 +52,23 @@ class AccountMixin(object):
self.address = None self.address = None
else: else:
self.address = str(address) self.address = str(address)
def setUnreadCount(self, cnt): def setUnreadCount(self, cnt):
if hasattr(self, "unreadCount") and self.unreadCount == int(cnt): try:
return if self.unreadCount == int(cnt):
return
except AttributeError:
pass
self.unreadCount = int(cnt) self.unreadCount = int(cnt)
if isinstance(self, QtGui.QTreeWidgetItem): if isinstance(self, QtGui.QTreeWidgetItem):
self.emitDataChanged() self.emitDataChanged()
def setEnabled(self, enabled): def setEnabled(self, enabled):
self.isEnabled = enabled self.isEnabled = enabled
if hasattr(self, "setExpanded"): try:
self.setExpanded(enabled) self.setExpanded(enabled)
except AttributeError:
pass
if isinstance(self, Ui_AddressWidget): if isinstance(self, Ui_AddressWidget):
for i in range(self.childCount()): for i in range(self.childCount()):
if isinstance(self.child(i), Ui_FolderWidget): if isinstance(self.child(i), Ui_FolderWidget):
@ -86,13 +90,16 @@ class AccountMixin(object):
self.type = AccountMixin.SUBSCRIPTION self.type = AccountMixin.SUBSCRIPTION
else: else:
self.type = self.NORMAL self.type = self.NORMAL
def defaultLabel(self): def defaultLabel(self):
queryreturn = None queryreturn = None
retval = None retval = None
if self.type in (AccountMixin.NORMAL, AccountMixin.CHAN, AccountMixin.MAILINGLIST): if self.type in (
AccountMixin.NORMAL,
AccountMixin.CHAN, AccountMixin.MAILINGLIST):
try: try:
retval = unicode(BMConfigParser().get(self.address, 'label'), 'utf-8') retval = unicode(
BMConfigParser().get(self.address, 'label'), 'utf-8')
except Exception as e: except Exception as e:
queryreturn = sqlQuery( queryreturn = sqlQuery(
'''select label from addressbook where address=?''', self.address) '''select label from addressbook where address=?''', self.address)
@ -107,44 +114,63 @@ class AccountMixin(object):
elif self.address is None or self.type == AccountMixin.ALL: elif self.address is None or self.type == AccountMixin.ALL:
return unicode( return unicode(
str(_translate("MainWindow", "All accounts")), 'utf-8') str(_translate("MainWindow", "All accounts")), 'utf-8')
if retval is None:
return unicode(self.address, 'utf-8') return retval or unicode(self.address, 'utf-8')
else:
return retval
class Ui_FolderWidget(QtGui.QTreeWidgetItem, AccountMixin): class BMTreeWidgetItem(QtGui.QTreeWidgetItem, AccountMixin):
folderWeight = {"inbox": 1, "new": 2, "sent": 3, "trash": 4} """A common abstract class for Tree widget item"""
def __init__(self, parent, pos = 0, address = "", folderName = "", unreadCount = 0): def __init__(self, parent, pos, address, unreadCount):
super(QtGui.QTreeWidgetItem, self).__init__() super(QtGui.QTreeWidgetItem, self).__init__()
self.setAddress(address) self.setAddress(address)
self.setFolderName(folderName)
self.setUnreadCount(unreadCount) self.setUnreadCount(unreadCount)
self._setup(parent, pos)
def _getAddressBracket(self, unreadCount=False):
return (" (" + str(self.unreadCount) + ")") if unreadCount else ""
def data(self, column, role):
if column == 0:
if role == QtCore.Qt.DisplayRole:
return self._getLabel() + self._getAddressBracket(
self.unreadCount > 0)
elif role == QtCore.Qt.EditRole:
return self._getLabel()
elif role == QtCore.Qt.ToolTipRole:
return self._getLabel() + self._getAddressBracket(False)
elif role == QtCore.Qt.FontRole:
font = QtGui.QFont()
font.setBold(self.unreadCount > 0)
return font
return super(BMTreeWidgetItem, self).data(column, role)
class Ui_FolderWidget(BMTreeWidgetItem):
folderWeight = {"inbox": 1, "new": 2, "sent": 3, "trash": 4}
def __init__(
self, parent, pos=0, address="", folderName="", unreadCount=0):
self.setFolderName(folderName)
super(Ui_FolderWidget, self).__init__(
parent, pos, address, unreadCount)
def _setup(self, parent, pos):
parent.insertChild(pos, self) parent.insertChild(pos, self)
def _getLabel(self):
return _translate("MainWindow", self.folderName)
def setFolderName(self, fname): def setFolderName(self, fname):
self.folderName = str(fname) self.folderName = str(fname)
def data(self, column, role): def data(self, column, role):
if column == 0: if column == 0 and role == QtCore.Qt.ForegroundRole:
if role == QtCore.Qt.DisplayRole: return self.folderBrush()
return _translate("MainWindow", self.folderName) + (
" (" + str(self.unreadCount) + ")"
if self.unreadCount > 0 else ""
)
elif role in (QtCore.Qt.EditRole, QtCore.Qt.ToolTipRole):
return _translate("MainWindow", self.folderName)
elif role == QtCore.Qt.FontRole:
font = QtGui.QFont()
font.setBold(self.unreadCount > 0)
return font
elif role == QtCore.Qt.ForegroundRole:
return self.folderBrush()
return super(Ui_FolderWidget, self).data(column, role) return super(Ui_FolderWidget, self).data(column, role)
# inbox, sent, thrash first, rest alphabetically # inbox, sent, thrash first, rest alphabetically
def __lt__(self, other): def __lt__(self, other):
if (isinstance(other, Ui_FolderWidget)): if isinstance(other, Ui_FolderWidget):
if self.folderName in self.folderWeight: if self.folderName in self.folderWeight:
x = self.folderWeight[self.folderName] x = self.folderWeight[self.folderName]
else: else:
@ -153,27 +179,26 @@ class Ui_FolderWidget(QtGui.QTreeWidgetItem, AccountMixin):
y = self.folderWeight[other.folderName] y = self.folderWeight[other.folderName]
else: else:
y = 99 y = 99
reverse = False reverse = QtCore.Qt.DescendingOrder == \
if self.treeWidget().header().sortIndicatorOrder() == QtCore.Qt.DescendingOrder: self.treeWidget().header().sortIndicatorOrder()
reverse = True
if x == y: if x == y:
return self.folderName < other.folderName return self.folderName < other.folderName
else: else:
return (x >= y if reverse else x < y) return (x >= y if reverse else x < y)
return super(QtGui.QTreeWidgetItem, self).__lt__(other) return super(QtGui.QTreeWidgetItem, self).__lt__(other)
class Ui_AddressWidget(QtGui.QTreeWidgetItem, AccountMixin, SettingsMixin):
def __init__(self, parent, pos = 0, address = None, unreadCount = 0, enabled = True): class Ui_AddressWidget(BMTreeWidgetItem, SettingsMixin):
super(QtGui.QTreeWidgetItem, self).__init__() def __init__(
parent.insertTopLevelItem(pos, self) self, parent, pos=0, address=None, unreadCount=0, enabled=True):
# only set default when creating super(Ui_AddressWidget, self).__init__(
#super(QtGui.QTreeWidgetItem, self).setExpanded(BMConfigParser().getboolean(self.address, 'enabled')) parent, pos, address, unreadCount)
self.setAddress(address)
self.setEnabled(enabled) self.setEnabled(enabled)
self.setUnreadCount(unreadCount)
def _setup(self, parent, pos):
self.setType() self.setType()
parent.insertTopLevelItem(pos, self)
def _getLabel(self): def _getLabel(self):
if self.address is None: if self.address is None:
@ -187,86 +212,64 @@ class Ui_AddressWidget(QtGui.QTreeWidgetItem, AccountMixin, SettingsMixin):
except: except:
return unicode(self.address, 'utf-8') return unicode(self.address, 'utf-8')
def _getAddressBracket(self, unreadCount = False): def _getAddressBracket(self, unreadCount=False):
ret = "" ret = "" if self.isExpanded() \
if unreadCount: else super(Ui_AddressWidget, self)._getAddressBracket(unreadCount)
ret += " (" + str(self.unreadCount) + ")"
if self.address is not None: if self.address is not None:
ret += " (" + self.address + ")" ret += " (" + self.address + ")"
return ret return ret
def data(self, column, role): def data(self, column, role):
if column == 0: if column == 0:
if role == QtCore.Qt.DisplayRole: if role == QtCore.Qt.DecorationRole:
if self.unreadCount > 0 and not self.isExpanded(): return avatarize(
return self._getLabel() + self._getAddressBracket(True) self.address or self._getLabel().encode('utf8'))
else:
return self._getLabel() + self._getAddressBracket(False)
elif role == QtCore.Qt.EditRole:
return self._getLabel()
elif role == QtCore.Qt.ToolTipRole:
return self._getLabel() + self._getAddressBracket(False)
elif role == QtCore.Qt.DecorationRole:
if self.address is None:
return avatarize(self._getLabel().encode('utf8'))
else:
return avatarize(self.address)
elif role == QtCore.Qt.FontRole:
font = QtGui.QFont()
font.setBold(self.unreadCount > 0)
return font
elif role == QtCore.Qt.ForegroundRole: elif role == QtCore.Qt.ForegroundRole:
return self.accountBrush() return self.accountBrush()
return super(Ui_AddressWidget, self).data(column, role) return super(Ui_AddressWidget, self).data(column, role)
def setData(self, column, role, value): def setData(self, column, role, value):
if role == QtCore.Qt.EditRole and self.type != AccountMixin.SUBSCRIPTION: if role == QtCore.Qt.EditRole \
if isinstance(value, QtCore.QVariant): and self.type != AccountMixin.SUBSCRIPTION:
BMConfigParser().set(str(self.address), 'label', str(value.toString().toUtf8())) BMConfigParser().set(
else: str(self.address), 'label',
BMConfigParser().set(str(self.address), 'label', str(value)) str(value).toString().toUtf8()
if isinstance(value, QtCore.QVariant) else str(value)
)
BMConfigParser().save() BMConfigParser().save()
return super(Ui_AddressWidget, self).setData(column, role, value) return super(Ui_AddressWidget, self).setData(column, role, value)
def setAddress(self, address): def setAddress(self, address):
super(Ui_AddressWidget, self).setAddress(address) super(Ui_AddressWidget, self).setAddress(address)
self.setData(0, QtCore.Qt.UserRole, self.address) self.setData(0, QtCore.Qt.UserRole, self.address)
def setExpanded(self, expand):
super(Ui_AddressWidget, self).setExpanded(expand)
def _getSortRank(self): def _getSortRank(self):
ret = self.type return self.type if self.isEnabled else (self.type + 100)
if not self.isEnabled:
ret += 100
return ret
# label (or address) alphabetically, disabled at the end # label (or address) alphabetically, disabled at the end
def __lt__(self, other): def __lt__(self, other):
if (isinstance(other, Ui_AddressWidget)): if isinstance(other, Ui_AddressWidget):
reverse = False reverse = QtCore.Qt.DescendingOrder == \
if self.treeWidget().header().sortIndicatorOrder() == QtCore.Qt.DescendingOrder: self.treeWidget().header().sortIndicatorOrder()
reverse = True
if self._getSortRank() == other._getSortRank(): if self._getSortRank() == other._getSortRank():
x = self._getLabel().lower() x = self._getLabel().lower()
y = other._getLabel().lower() y = other._getLabel().lower()
return x < y return x < y
return (not reverse if self._getSortRank() < other._getSortRank() else reverse) return (
not reverse
if self._getSortRank() < other._getSortRank() else reverse
)
return super(QtGui.QTreeWidgetItem, self).__lt__(other) return super(QtGui.QTreeWidgetItem, self).__lt__(other)
class Ui_SubscriptionWidget(Ui_AddressWidget, AccountMixin): class Ui_SubscriptionWidget(Ui_AddressWidget):
def __init__(self, parent, pos = 0, address = "", unreadCount = 0, label = "", enabled = True): def __init__(
super(QtGui.QTreeWidgetItem, self).__init__() self, parent, pos=0, address="", unreadCount=0, label="",
parent.insertTopLevelItem(pos, self) enabled=True):
# only set default when creating super(Ui_SubscriptionWidget, self).__init__(
#super(QtGui.QTreeWidgetItem, self).setExpanded(BMConfigParser().getboolean(self.address, 'enabled')) parent, pos, address, unreadCount, enabled)
self.setAddress(address)
self.setEnabled(enabled)
self.setType()
self.setUnreadCount(unreadCount)
def _getLabel(self): def _getLabel(self):
queryreturn = sqlQuery( queryreturn = sqlQuery(
'''select label from subscriptions where address=?''', self.address) '''select label from subscriptions where address=?''', self.address)
@ -275,16 +278,16 @@ class Ui_SubscriptionWidget(Ui_AddressWidget, AccountMixin):
retval, = row retval, = row
return unicode(retval, 'utf-8', 'ignore') return unicode(retval, 'utf-8', 'ignore')
return unicode(self.address, 'utf-8') return unicode(self.address, 'utf-8')
def setType(self): def setType(self):
super(Ui_SubscriptionWidget, self).setType() # sets it editable super(Ui_SubscriptionWidget, self).setType() # sets it editable
self.type = AccountMixin.SUBSCRIPTION # overrides type self.type = AccountMixin.SUBSCRIPTION # overrides type
def setData(self, column, role, value): def setData(self, column, role, value):
if role == QtCore.Qt.EditRole: if role == QtCore.Qt.EditRole:
from debug import logger
if isinstance(value, QtCore.QVariant): if isinstance(value, QtCore.QVariant):
label = str(value.toString().toUtf8()).decode('utf-8', 'ignore') label = str(
value.toString().toUtf8()).decode('utf-8', 'ignore')
else: else:
label = unicode(value, 'utf-8', 'ignore') label = unicode(value, 'utf-8', 'ignore')
sqlExecute( sqlExecute(
@ -293,69 +296,91 @@ class Ui_SubscriptionWidget(Ui_AddressWidget, AccountMixin):
return super(Ui_SubscriptionWidget, self).setData(column, role, value) return super(Ui_SubscriptionWidget, self).setData(column, role, value)
class MessageList_AddressWidget(QtGui.QTableWidgetItem, AccountMixin, SettingsMixin): class BMTableWidgetItem(QtGui.QTableWidgetItem, SettingsMixin):
def __init__(self, parent, address = None, label = None, unread = False): """A common abstract class for Table widget item"""
def __init__(self, parent=None, label=None, unread=False):
super(QtGui.QTableWidgetItem, self).__init__() super(QtGui.QTableWidgetItem, self).__init__()
#parent.insertTopLevelItem(pos, self)
# only set default when creating
#super(QtGui.QTreeWidgetItem, self).setExpanded(BMConfigParser().getboolean(self.address, 'enabled'))
self.isEnabled = True
self.setAddress(address)
self.setLabel(label) self.setLabel(label)
self.setUnread(unread) self.setUnread(unread)
self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) self._setup()
self.setType() if parent is not None:
parent.append(self) parent.append(self)
def setLabel(self, label = None): def setLabel(self, label):
newLabel = self.address self.label = label
if label is None:
queryreturn = None
if self.type in (AccountMixin.NORMAL, AccountMixin.CHAN, AccountMixin.MAILINGLIST):
try:
newLabel = unicode(BMConfigParser().get(self.address, 'label'), 'utf-8', 'ignore')
except:
queryreturn = sqlQuery(
'''select label from addressbook where address=?''', self.address)
elif self.type == AccountMixin.SUBSCRIPTION:
queryreturn = sqlQuery(
'''select label from subscriptions where address=?''', self.address)
if queryreturn is not None:
if queryreturn != []:
for row in queryreturn:
newLabel = unicode(row[0], 'utf-8', 'ignore')
else:
newLabel = label
if hasattr(self, 'label') and newLabel == self.label:
return
self.label = newLabel
def setUnread(self, unread): def setUnread(self, unread):
self.unread = unread self.unread = unread
def data(self, role): def data(self, role):
if role == QtCore.Qt.DisplayRole: if role in (
QtCore.Qt.DisplayRole, QtCore.Qt.EditRole, QtCore.Qt.ToolTipRole
):
return self.label return self.label
elif role == QtCore.Qt.EditRole:
return self.label
elif role == QtCore.Qt.ToolTipRole:
return self.label + " (" + self.address + ")"
elif role == QtCore.Qt.DecorationRole:
if BMConfigParser().safeGetBoolean('bitmessagesettings', 'useidenticons'):
if self.address is None:
return avatarize(self.label)
else:
return avatarize(self.address)
elif role == QtCore.Qt.FontRole: elif role == QtCore.Qt.FontRole:
font = QtGui.QFont() font = QtGui.QFont()
font.setBold(self.unread) font.setBold(self.unread)
return font return font
return super(BMTableWidgetItem, self).data(role)
class BMAddressWidget(BMTableWidgetItem, AccountMixin):
"""A common class for Table widget item with account"""
def _setup(self):
self.setEnabled(True)
def data(self, role):
if role == QtCore.Qt.ToolTipRole:
return self.label + " (" + self.address + ")"
elif role == QtCore.Qt.DecorationRole:
if BMConfigParser().safeGetBoolean(
'bitmessagesettings', 'useidenticons'):
return avatarize(self.address or self.label)
elif role == QtCore.Qt.ForegroundRole: elif role == QtCore.Qt.ForegroundRole:
return self.accountBrush() return self.accountBrush()
elif role == QtCore.Qt.UserRole: return super(BMAddressWidget, self).data(role)
class MessageList_AddressWidget(BMAddressWidget):
def __init__(self, parent, address=None, label=None, unread=False):
self.setAddress(address)
super(MessageList_AddressWidget, self).__init__(parent, label, unread)
def _setup(self):
self.isEnabled = True
self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
self.setType()
def setLabel(self, label=None):
super(MessageList_AddressWidget, self).setLabel(label)
if label is not None:
return
newLabel = self.address
queryreturn = None
if self.type in (
AccountMixin.NORMAL,
AccountMixin.CHAN, AccountMixin.MAILINGLIST):
try:
newLabel = unicode(
BMConfigParser().get(self.address, 'label'),
'utf-8', 'ignore')
except:
queryreturn = sqlQuery(
'''select label from addressbook where address=?''', self.address)
elif self.type == AccountMixin.SUBSCRIPTION:
queryreturn = sqlQuery(
'''select label from subscriptions where address=?''', self.address)
if queryreturn:
for row in queryreturn:
newLabel = unicode(row[0], 'utf-8', 'ignore')
self.label = newLabel
def data(self, role):
if role == QtCore.Qt.UserRole:
return self.address return self.address
return super(MessageList_AddressWidget, self).data(role) return super(MessageList_AddressWidget, self).data(role)
def setData(self, role, value): def setData(self, role, value):
if role == QtCore.Qt.EditRole: if role == QtCore.Qt.EditRole:
self.setLabel() self.setLabel()
@ -363,111 +388,70 @@ class MessageList_AddressWidget(QtGui.QTableWidgetItem, AccountMixin, SettingsMi
# label (or address) alphabetically, disabled at the end # label (or address) alphabetically, disabled at the end
def __lt__(self, other): def __lt__(self, other):
if (isinstance(other, MessageList_AddressWidget)): if isinstance(other, MessageList_AddressWidget):
return self.label.lower() < other.label.lower() return self.label.lower() < other.label.lower()
return super(QtGui.QTableWidgetItem, self).__lt__(other) return super(QtGui.QTableWidgetItem, self).__lt__(other)
class MessageList_SubjectWidget(QtGui.QTableWidgetItem, SettingsMixin): class MessageList_SubjectWidget(BMTableWidgetItem):
def __init__(self, parent, subject = None, label = None, unread = False): def __init__(self, parent, subject=None, label=None, unread=False):
super(QtGui.QTableWidgetItem, self).__init__()
#parent.insertTopLevelItem(pos, self)
# only set default when creating
#super(QtGui.QTreeWidgetItem, self).setExpanded(BMConfigParser().getboolean(self.address, 'enabled'))
self.setSubject(subject) self.setSubject(subject)
self.setLabel(label) super(MessageList_SubjectWidget, self).__init__(parent, label, unread)
self.setUnread(unread)
self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) def _setup(self):
parent.append(self) self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
def setLabel(self, label):
self.label = label
def setSubject(self, subject): def setSubject(self, subject):
self.subject = subject self.subject = subject
def setUnread(self, unread):
self.unread = unread
def data(self, role): def data(self, role):
if role == QtCore.Qt.DisplayRole: if role == QtCore.Qt.UserRole:
return self.label
elif role == QtCore.Qt.EditRole:
return self.label
elif role == QtCore.Qt.ToolTipRole:
return self.label
elif role == QtCore.Qt.FontRole:
font = QtGui.QFont()
font.setBold(self.unread)
return font
elif role == QtCore.Qt.UserRole:
return self.subject return self.subject
return super(MessageList_SubjectWidget, self).data(role) return super(MessageList_SubjectWidget, self).data(role)
def setData(self, role, value):
return super(MessageList_SubjectWidget, self).setData(role, value)
# label (or address) alphabetically, disabled at the end # label (or address) alphabetically, disabled at the end
def __lt__(self, other): def __lt__(self, other):
if (isinstance(other, MessageList_SubjectWidget)): if isinstance(other, MessageList_SubjectWidget):
return self.label.lower() < other.label.lower() return self.label.lower() < other.label.lower()
return super(QtGui.QTableWidgetItem, self).__lt__(other) return super(QtGui.QTableWidgetItem, self).__lt__(other)
class Ui_AddressBookWidgetItem(QtGui.QTableWidgetItem, AccountMixin): class Ui_AddressBookWidgetItem(BMAddressWidget):
def __init__ (self, text, type = AccountMixin.NORMAL): def __init__(self, label=None, type=AccountMixin.NORMAL):
super(QtGui.QTableWidgetItem, self).__init__(text)
self.label = text
self.type = type self.type = type
self.setEnabled(True) super(Ui_AddressBookWidgetItem, self).__init__(label=label)
def data(self, role): def data(self, role):
if role == QtCore.Qt.DisplayRole: if role == QtCore.Qt.UserRole:
return self.label
elif role == QtCore.Qt.EditRole:
return self.label
elif role == QtCore.Qt.ToolTipRole:
return self.label + " (" + self.address + ")"
elif role == QtCore.Qt.DecorationRole:
if BMConfigParser().safeGetBoolean('bitmessagesettings', 'useidenticons'):
if self.address is None:
return avatarize(self.label)
else:
return avatarize(self.address)
elif role == QtCore.Qt.FontRole:
font = QtGui.QFont()
return font
elif role == QtCore.Qt.ForegroundRole:
return self.accountBrush()
elif role == QtCore.Qt.UserRole:
return self.type return self.type
return super(Ui_AddressBookWidgetItem, self).data(role) return super(Ui_AddressBookWidgetItem, self).data(role)
def setData(self, role, value): def setData(self, role, value):
if role == QtCore.Qt.EditRole: if role == QtCore.Qt.EditRole:
if isinstance(value, QtCore.QVariant): self.label = str(
self.label = str(value.toString().toUtf8()) value.toString().toUtf8()
else: if isinstance(value, QtCore.QVariant) else value
self.label = str(value) )
if self.type in (AccountMixin.NORMAL, AccountMixin.MAILINGLIST, AccountMixin.CHAN): if self.type in (
AccountMixin.NORMAL,
AccountMixin.MAILINGLIST, AccountMixin.CHAN):
try: try:
a = BMConfigParser().get(self.address, 'label') BMConfigParser().get(self.address, 'label')
BMConfigParser().set(self.address, 'label', self.label) BMConfigParser().set(self.address, 'label', self.label)
BMConfigParser().save() BMConfigParser().save()
except: except:
sqlExecute('''UPDATE addressbook set label=? WHERE address=?''', self.label, self.address) sqlExecute('''UPDATE addressbook set label=? WHERE address=?''', self.label, self.address)
elif self.type == AccountMixin.SUBSCRIPTION: elif self.type == AccountMixin.SUBSCRIPTION:
from debug import logger
sqlExecute('''UPDATE subscriptions set label=? WHERE address=?''', self.label, self.address) sqlExecute('''UPDATE subscriptions set label=? WHERE address=?''', self.label, self.address)
else: else:
pass pass
return super(Ui_AddressBookWidgetItem, self).setData(role, value) return super(Ui_AddressBookWidgetItem, self).setData(role, value)
def __lt__(self, other):
if isinstance(other, Ui_AddressBookWidgetItem):
reverse = QtCore.Qt.DescendingOrder == \
self.tableWidget().horizontalHeader().sortIndicatorOrder()
def __lt__ (self, other):
if (isinstance(other, Ui_AddressBookWidgetItem)):
reverse = False
if self.tableWidget().horizontalHeader().sortIndicatorOrder() == QtCore.Qt.DescendingOrder:
reverse = True
if self.type == other.type: if self.type == other.type:
return self.label.lower() < other.label.lower() return self.label.lower() < other.label.lower()
else: else:
@ -476,10 +460,9 @@ class Ui_AddressBookWidgetItem(QtGui.QTableWidgetItem, AccountMixin):
class Ui_AddressBookWidgetItemLabel(Ui_AddressBookWidgetItem): class Ui_AddressBookWidgetItemLabel(Ui_AddressBookWidgetItem):
def __init__ (self, address, label, type): def __init__(self, address, label, type):
Ui_AddressBookWidgetItem.__init__(self, label, type) super(Ui_AddressBookWidgetItemLabel, self).__init__(label, type)
self.address = address self.address = address
self.label = label
def data(self, role): def data(self, role):
self.label = self.defaultLabel() self.label = self.defaultLabel()
@ -487,8 +470,8 @@ class Ui_AddressBookWidgetItemLabel(Ui_AddressBookWidgetItem):
class Ui_AddressBookWidgetItemAddress(Ui_AddressBookWidgetItem): class Ui_AddressBookWidgetItemAddress(Ui_AddressBookWidgetItem):
def __init__ (self, address, label, type): def __init__(self, address, label, type):
Ui_AddressBookWidgetItem.__init__(self, address, type) super(Ui_AddressBookWidgetItemAddress, self).__init__(address, type)
self.address = address self.address = address
self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
@ -502,26 +485,22 @@ class Ui_AddressBookWidgetItemAddress(Ui_AddressBookWidgetItem):
class AddressBookCompleter(QtGui.QCompleter): class AddressBookCompleter(QtGui.QCompleter):
def __init__(self): def __init__(self):
super(QtGui.QCompleter, self).__init__() super(AddressBookCompleter, self).__init__()
self.cursorPos = -1 self.cursorPos = -1
def onCursorPositionChanged(self, oldPos, newPos): def onCursorPositionChanged(self, oldPos, newPos):
if oldPos != self.cursorPos: if oldPos != self.cursorPos:
self.cursorPos = -1 self.cursorPos = -1
def splitPath(self, path): def splitPath(self, path):
stringList = [] text = unicode(path.toUtf8(), 'utf-8')
text = unicode(path.toUtf8(), encoding="UTF-8") return [text[:self.widget().cursorPosition()].split(';')[-1].strip()]
splitIndex = rfind(text[0:self.widget().cursorPosition()], ";") + 1
str = text[splitIndex:self.widget().cursorPosition()]
str = rstrip(lstrip(str))
stringList.append(str)
return stringList
def pathFromIndex(self, index): def pathFromIndex(self, index):
autoString = unicode(index.data(QtCore.Qt.EditRole).toString().toUtf8(), encoding="UTF-8") autoString = unicode(
text = unicode(self.widget().text().toUtf8(), encoding="UTF-8") index.data(QtCore.Qt.EditRole).toString().toUtf8(), 'utf-8')
text = unicode(self.widget().text().toUtf8(), 'utf-8')
# If cursor position was saved, restore it, else save it # If cursor position was saved, restore it, else save it
if self.cursorPos != -1: if self.cursorPos != -1:
self.widget().setCursorPosition(self.cursorPos) self.widget().setCursorPosition(self.cursorPos)
@ -530,15 +509,17 @@ class AddressBookCompleter(QtGui.QCompleter):
# Get current prosition # Get current prosition
curIndex = self.widget().cursorPosition() curIndex = self.widget().cursorPosition()
# prev_delimiter_index should actually point at final white space AFTER the delimiter # prev_delimiter_index should actually point at final white space
# AFTER the delimiter
# Get index of last delimiter before current position # Get index of last delimiter before current position
prevDelimiterIndex = rfind(text[0:curIndex], ";") prevDelimiterIndex = text[0:curIndex].rfind(";")
while text[prevDelimiterIndex + 1] == " ": while text[prevDelimiterIndex + 1] == " ":
prevDelimiterIndex += 1 prevDelimiterIndex += 1
# Get index of first delimiter after current position (or EOL if no delimiter after cursor) # Get index of first delimiter after current position
nextDelimiterIndex = find(text, ";", curIndex) # (or EOL if no delimiter after cursor)
nextDelimiterIndex = text.find(";", curIndex)
if nextDelimiterIndex == -1: if nextDelimiterIndex == -1:
nextDelimiterIndex = len(text) nextDelimiterIndex = len(text)
@ -546,9 +527,9 @@ class AddressBookCompleter(QtGui.QCompleter):
part1 = text[0:prevDelimiterIndex + 1] part1 = text[0:prevDelimiterIndex + 1]
# Get string value from before auto finished string is selected # Get string value from before auto finished string is selected
pre = text[prevDelimiterIndex + 1:curIndex - 1]; # pre = text[prevDelimiterIndex + 1:curIndex - 1]
# Get part of string that occurs AFTER cursor # Get part of string that occurs AFTER cursor
part2 = text[nextDelimiterIndex:] part2 = text[nextDelimiterIndex:]
return part1 + autoString + part2; return part1 + autoString + part2