Skip to content

Commit 4db1a5e

Browse files
mailchuckPeterSurda
authored andcommitted
Subscriptions
Initial subscription fix. Still does not always display the list from the correct folder, and it currently does not update unread count on subscriptions.
1 parent 59a5622 commit 4db1a5e

File tree

3 files changed

+138
-38
lines changed

3 files changed

+138
-38
lines changed

src/bitmessageqt/__init__.py

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -419,26 +419,16 @@ def rerenderTabTreeSubscriptions(self):
419419
treeWidget = self.ui.treeWidgetSubscriptions
420420
folders = ['inbox', 'trash']
421421
treeWidget.clear()
422+
treeWidget.setSortingEnabled(False)
423+
treeWidget.header().setSortIndicator(0, Qt.AscendingOrder)
422424
queryreturn = sqlQuery('SELECT label, address, enabled FROM subscriptions')
423425
for row in queryreturn:
424426
label, address, enabled = row
425-
newItem = QtGui.QTreeWidgetItem(treeWidget)
426-
newItem.setExpanded(True)
427-
newItem.setIcon(0, avatarize(address))
428-
newItem.setText(0, label + ' (' + address + ')')
429-
newItem.setData(0, Qt.UserRole, [str(address), "inbox"])
430-
#set text color
431-
if enabled:
432-
brush = QtGui.QBrush(QApplication.palette().text().color())
433-
else:
434-
brush = QtGui.QBrush(QtGui.QColor(128, 128, 128))
435-
brush.setStyle(QtCore.Qt.NoBrush)
436-
newItem.setForeground(0, brush)
427+
newItem = Ui_SubscriptionWidget(treeWidget, 0, address, 0, label, enabled)
437428

438429
for folder in folders:
439-
newSubItem = QtGui.QTreeWidgetItem(newItem)
440-
newSubItem.setText(0, _translate("MainWindow", folder))
441-
newSubItem.setData(0, Qt.UserRole, [str(address), folder])
430+
newSubItem = Ui_FolderWidget(newItem, 0, address, folder, 0)
431+
treeWidget.setSortingEnabled(True)
442432

443433
def rerenderTabTreeMessages(self):
444434
self.rerenderTabTree('messages')
@@ -457,7 +447,6 @@ def rerenderTabTree(self, tab):
457447
# sort ascending when creating
458448
if treeWidget.topLevelItemCount() == 0:
459449
treeWidget.header().setSortIndicator(0, Qt.AscendingOrder)
460-
461450
# init dictionary
462451
db = {}
463452
enabled = {}
@@ -989,18 +978,22 @@ def loadMessagelist(self, tableWidget, account, folder="inbox", where="", what="
989978
where = "message"
990979
else:
991980
where = "toaddress || fromaddress || subject || message"
992-
981+
982+
if tableWidget == self.ui.tableWidgetInboxSubscriptions:
983+
xAddress = "fromaddress"
984+
else:
985+
xAddress = "toaddress"
993986
if folder != False:
994987
sqlStatement = '''
995988
SELECT folder, msgid, toaddress, fromaddress, subject, received, read
996-
FROM inbox WHERE toaddress=? AND folder=? AND %s LIKE ?
989+
FROM inbox WHERE ''' + xAddress + '''=? AND folder=? AND %s LIKE ?
997990
ORDER BY received
998991
''' % (where)
999992
queryreturn = sqlQuery(sqlStatement, account, folder, what)
1000993
else:
1001994
sqlStatement = '''
1002995
SELECT folder, msgid, toaddress, fromaddress, subject, received, read
1003-
FROM inbox WHERE toaddress=? AND folder != "trash" AND %s LIKE ?
996+
FROM inbox WHERE ''' + xAddress + '''=? AND folder != "trash" AND %s LIKE ?
1004997
ORDER BY received
1005998
''' % (where)
1006999
queryreturn = sqlQuery(sqlStatement, account, what)
@@ -1018,7 +1011,10 @@ def loadMessagelist(self, tableWidget, account, folder="inbox", where="", what="
10181011
for row in queryreturn:
10191012
msgfolder, msgid, toAddress, fromAddress, subject, received, read = row
10201013
if acct is None:
1021-
acct = accountClass(toAddress)
1014+
if tableWidget == self.ui.tableWidgetInboxSubscriptions:
1015+
acct = accountClass(fromAddress)
1016+
else:
1017+
acct = accountClass(toAddress)
10221018
subject = shared.fixPotentiallyInvalidUTF8Data(subject)
10231019
acct.parseMessage(toAddress, fromAddress, subject, "")
10241020

@@ -1794,11 +1790,12 @@ def updateSentItemStatusByAckdata(self, ackdata, textToDisplay):
17941790
self.ui.tableWidgetInbox.item(i, 3).setText(textToDisplay)
17951791

17961792
def removeInboxRowByMsgid(self, msgid): # msgid and inventoryHash are the same thing
1797-
for i in range(self.ui.tableWidgetInbox.rowCount()):
1798-
if msgid == str(self.ui.tableWidgetInbox.item(i, 3).data(Qt.UserRole).toPyObject()):
1793+
inbox = self.getCurrentMessagelist
1794+
for i in range(inbox.rowCount()):
1795+
if msgid == str(inbox.item(i, 3).data(Qt.UserRole).toPyObject()):
17991796
self.statusBar().showMessage(_translate(
18001797
"MainWindow", "Message trashed"))
1801-
self.ui.tableWidgetInbox.removeRow(i)
1798+
inbox.removeRow(i)
18021799
break
18031800
self.changedInboxUnread()
18041801

@@ -2084,7 +2081,7 @@ def click_pushButtonSend(self):
20842081
self.ui.lineEditTo.setText('')
20852082
self.ui.lineEditSubject.setText('')
20862083
self.ui.textEditMessage.setText('')
2087-
self.ui.tabWidget.setCurrentIndex(2)
2084+
self.ui.tabWidget.setCurrentIndex(0)
20882085
self.ui.tableWidgetInbox.setCurrentCell(0, 0)
20892086
else:
20902087
self.statusBar().showMessage(_translate(
@@ -2131,7 +2128,7 @@ def click_pushButtonSend(self):
21312128
self.ui.lineEditSubjectBroadcast.setText('')
21322129
self.ui.textEditMessageBroadcast.setText('')
21332130
self.ui.tabWidget.setCurrentIndex(1)
2134-
self.ui.tableWidgetInbox.setCurrentCell(0, 0)
2131+
self.ui.tableWidgetInboxSubscriptions.setCurrentCell(0, 0)
21352132

21362133
def click_pushButtonLoadFromAddressBook(self):
21372134
self.ui.tabWidget.setCurrentIndex(5)
@@ -2242,10 +2239,12 @@ def displayNewInboxMessage(self, inventoryHash, toAddress, fromAddress, subject,
22422239
subject = shared.fixPotentiallyInvalidUTF8Data(subject)
22432240
acct = accountClass(toAddress)
22442241
acct.parseMessage(toAddress, fromAddress, subject, message)
2242+
2243+
inbox = self.getCurrentMessagelist()
22452244

22462245
font = QFont()
22472246
font.setBold(True)
2248-
self.ui.tableWidgetInbox.setSortingEnabled(False)
2247+
inbox.setSortingEnabled(False)
22492248
newItem = QtGui.QTableWidgetItem(unicode(acct.toLabel, 'utf-8'))
22502249
newItem.setToolTip(unicode(acct.toLabel, 'utf-8'))
22512250
newItem.setFont(font)
@@ -2254,9 +2253,9 @@ def displayNewInboxMessage(self, inventoryHash, toAddress, fromAddress, subject,
22542253
newItem.setTextColor(QtGui.QColor(137, 04, 177)) # magenta
22552254
if acct.type == 'chan':
22562255
newItem.setTextColor(QtGui.QColor(216, 119, 0)) # orange
2257-
self.ui.tableWidgetInbox.insertRow(0)
2256+
inbox.insertRow(0)
22582257
newItem.setIcon(avatarize(toAddress))
2259-
self.ui.tableWidgetInbox.setItem(0, 0, newItem)
2258+
inbox.setItem(0, 0, newItem)
22602259

22612260
newItem = QtGui.QTableWidgetItem(unicode(acct.fromLabel, 'utf-8'))
22622261
newItem.setToolTip(unicode(acct.fromLabel, 'utf-8'))
@@ -2265,21 +2264,21 @@ def displayNewInboxMessage(self, inventoryHash, toAddress, fromAddress, subject,
22652264
newItem.setData(Qt.UserRole, str(fromAddress))
22662265
newItem.setFont(font)
22672266
newItem.setIcon(avatarize(fromAddress))
2268-
self.ui.tableWidgetInbox.setItem(0, 1, newItem)
2267+
inbox.setItem(0, 1, newItem)
22692268
newItem = QtGui.QTableWidgetItem(unicode(acct.subject, 'utf-8)'))
22702269
newItem.setToolTip(unicode(acct.subject, 'utf-8)'))
22712270
newItem.setData(Qt.UserRole, str(subject))
22722271

22732272
#newItem.setData(Qt.UserRole, unicode(message, 'utf-8)')) # No longer hold the message in the table; we'll use a SQL query to display it as needed.
22742273
newItem.setFont(font)
2275-
self.ui.tableWidgetInbox.setItem(0, 2, newItem)
2274+
inbox.setItem(0, 2, newItem)
22762275
newItem = myTableWidgetItem(l10n.formatTimestamp())
22772276
newItem.setToolTip(l10n.formatTimestamp())
22782277
newItem.setData(Qt.UserRole, QByteArray(inventoryHash))
22792278
newItem.setData(33, int(time.time()))
22802279
newItem.setFont(font)
2281-
self.ui.tableWidgetInbox.setItem(0, 3, newItem)
2282-
self.ui.tableWidgetInbox.setSortingEnabled(True)
2280+
inbox.setItem(0, 3, newItem)
2281+
inbox.setSortingEnabled(True)
22832282
self.ubuntuMessagingMenuUpdate(True, newItem, acct.toLabel)
22842283

22852284
def click_pushButtonAddAddressBook(self):
@@ -2931,7 +2930,8 @@ def on_action_InboxTrash(self):
29312930
if not tableWidget:
29322931
return
29332932
unread = False
2934-
while tableWidget.selectedIndexes() != []:
2933+
currentRow = 0
2934+
while tableWidget.selectedIndexes():
29352935
currentRow = tableWidget.selectedIndexes()[0].row()
29362936
inventoryHashToTrash = str(tableWidget.item(
29372937
currentRow, 3).data(Qt.UserRole).toPyObject())
@@ -2947,7 +2947,7 @@ def on_action_InboxTrash(self):
29472947
else:
29482948
tableWidget.selectRow(currentRow - 1)
29492949
if unread:
2950-
changedInboxUnread()
2950+
self.changedInboxUnread()
29512951

29522952
def on_action_InboxSaveMessageAs(self):
29532953
tableWidget = self.getCurrentMessagelist()
@@ -3481,7 +3481,7 @@ def treeWidgetItemChanged(self, item, column):
34813481
if column != 0:
34823482
return
34833483
# only account names of normal addresses (no chans/mailinglists)
3484-
if (not isinstance(item, Ui_AddressWidget)) or item.type != 'normal' or self.getCurrentTreeWidget().currentItem() is None:
3484+
if (not isinstance(item, Ui_AddressWidget)) or item.type != 'normal' or not self.getCurrentTreeWidget() or self.getCurrentTreeWidget().currentItem() is None:
34853485
return
34863486
# not visible
34873487
if (not self.getCurrentAccount()) or (not isinstance (self.getCurrentAccount(), Ui_AddressWidget)):

src/bitmessageqt/account.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111

1212
def accountClass(address):
1313
if not shared.config.has_section(address):
14-
return None
14+
subscription = SubscriptionAccount(address)
15+
if subscription.type != 'subscription':
16+
return None
1517
try:
1618
gateway = shared.config.get(address, "gateway")
1719
for name, cls in inspect.getmembers(sys.modules[__name__], inspect.isclass):
@@ -24,7 +26,7 @@ def accountClass(address):
2426
pass
2527
# no gateway
2628
return BMAccount(address)
27-
29+
2830
class BMAccount(object):
2931
def __init__(self, address = None):
3032
self.address = address
@@ -34,7 +36,12 @@ def __init__(self, address = None):
3436
self.type = "chan"
3537
elif shared.safeConfigGetBoolean(self.address, 'mailinglist'):
3638
self.type = "mailinglist"
37-
39+
else:
40+
queryreturn = sqlQuery(
41+
'''select label from subscriptions where address=?''', address)
42+
if queryreturn:
43+
self.type = 'subscription'
44+
3845
def getLabel(self, address = None):
3946
if address is None:
4047
address = self.address
@@ -62,6 +69,11 @@ def parseMessage(self, toAddress, fromAddress, subject, message):
6269
self.fromLabel = self.getLabel(fromAddress)
6370
self.toLabel = self.getLabel(toAddress)
6471

72+
73+
class SubscriptionAccount(BMAccount):
74+
pass
75+
76+
6577
class GatewayAccount(BMAccount):
6678
gatewayName = None
6779
def __init__(self, address):

src/bitmessageqt/foldertree.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,91 @@ def __lt__(self, other):
146146
return (not reverse if shared.config.getboolean(self.address, 'enabled') else reverse)
147147

148148
return super(QtGui.QTreeWidgetItem, self).__lt__(other)
149+
150+
151+
class Ui_SubscriptionWidget(Ui_AddressWidget):
152+
def __init__(self, parent, pos = 0, address = "", unreadCount = 0, label = "", enabled = ""):
153+
super(QtGui.QTreeWidgetItem, self).__init__()
154+
self.unreadCount = unreadCount
155+
parent.insertTopLevelItem(pos, self)
156+
# only set default when creating
157+
#super(QtGui.QTreeWidgetItem, self).setExpanded(shared.config.getboolean(self.address, 'enabled'))
158+
self.setEnabled(enabled)
159+
self.setLabel(label)
160+
self.setAddress(address)
161+
162+
def setLabel(self, label):
163+
self.label = label
164+
165+
def setAddress(self, address):
166+
self.address = str(address)
167+
self.setType()
168+
self.setExpanded(self.isEnabled)
169+
self.updateText()
170+
171+
def setEnabled(self, enabled):
172+
self.isEnabled = enabled
173+
174+
def setType(self):
175+
self.type = "subscription"
176+
177+
def setUnreadCount(self, cnt):
178+
self.unreadCount = int(cnt)
179+
self.updateText()
180+
181+
def updateText(self):
182+
text = unicode(self.label, 'utf-8)') + ' (' + self.address + ')'
183+
184+
font = QtGui.QFont()
185+
if self.unreadCount > 0:
186+
# only show message count if the child doesn't show
187+
if not self.isExpanded():
188+
text += " (" + str(self.unreadCount) + ")"
189+
font.setBold(True)
190+
else:
191+
font.setBold(False)
192+
self.setFont(0, font)
193+
194+
#set text color
195+
if self.isEnabled:
196+
brush = QtGui.QBrush(QtGui.QColor(137, 04, 177))
197+
#self.setExpanded(True)
198+
else:
199+
brush = QtGui.QBrush(QtGui.QColor(128, 128, 128))
200+
#self.setExpanded(False)
201+
brush.setStyle(QtCore.Qt.NoBrush)
202+
self.setForeground(0, brush)
203+
204+
self.setIcon(0, avatarize(self.address))
205+
self.setText(0, text)
206+
self.setToolTip(0, text)
207+
# self.setData(0, QtCore.Qt.UserRole, [self.address, "inbox"])
208+
209+
def setExpanded(self, expand):
210+
super(Ui_SubscriptionWidget, self).setExpanded(expand)
211+
self.updateText()
212+
213+
def edit(self):
214+
self.setText(0, self.label)
215+
super(QtGui.QAbstractItemView, self).edit()
216+
217+
# label (or address) alphabetically, disabled at the end
218+
def __lt__(self, other):
219+
if (isinstance(other, Ui_SubscriptionWidget)):
220+
reverse = False
221+
if self.treeWidget().header().sortIndicatorOrder() == QtCore.Qt.DescendingOrder:
222+
reverse = True
223+
if self.isEnabled == other.isEnabled:
224+
if self.label:
225+
x = self.label.decode('utf-8').lower()
226+
else:
227+
x = self.address.decode('utf-8').lower()
228+
if other.label:
229+
y = other.label.decode('utf-8').lower()
230+
else:
231+
y = other.address.decode('utf-8').lower()
232+
return x < y
233+
# else:
234+
return (not reverse if self.isEnabled else reverse)
235+
236+
return super(QtGui.QTreeWidgetItem, self).__lt__(other)

0 commit comments

Comments
 (0)