Ubuntu Messaging Menu #149

Merged
ghost merged 3 commits from master into master 2013-05-14 19:10:44 +02:00

View File

@ -36,6 +36,8 @@ import platform
class MyForm(QtGui.QMainWindow): class MyForm(QtGui.QMainWindow):
str_broadcast_subscribers = '[Broadcast subscribers]'
def __init__(self, parent=None): def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent) QtGui.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow() self.ui = Ui_MainWindow()
@ -240,13 +242,12 @@ class MyForm(QtGui.QMainWindow):
shared.sqlSubmitQueue.put('') shared.sqlSubmitQueue.put('')
queryreturn = shared.sqlReturnQueue.get() queryreturn = shared.sqlReturnQueue.get()
shared.sqlLock.release() shared.sqlLock.release()
str_broadcast_subscribers = '[Broadcast subscribers]'
for row in queryreturn: for row in queryreturn:
msgid, toAddress, fromAddress, subject, received, message, read = row msgid, toAddress, fromAddress, subject, received, message, read = row
try: try:
if toAddress == str_broadcast_subscribers: if toAddress == self.str_broadcast_subscribers:
toLabel = str_broadcast_subscribers toLabel = self.str_broadcast_subscribers
else: else:
toLabel = shared.config.get(toAddress, 'label') toLabel = shared.config.get(toAddress, 'label')
except: except:
@ -476,6 +477,12 @@ class MyForm(QtGui.QMainWindow):
# pointer to the application # pointer to the application
#app = None #app = None
# The most recent message
newMessageItem = None
# The most recent broadcast
newBroadcastItem = None
# show the application window # show the application window
def appIndicatorShow(self): def appIndicatorShow(self):
if self.actionShow == None: if self.actionShow == None:
@ -504,30 +511,33 @@ class MyForm(QtGui.QMainWindow):
else: else:
self.appIndicatorShowOrHideWindow()""" self.appIndicatorShowOrHideWindow()"""
# returns the index of the oldest unread message
def getUnreadMessageIndex(self):
shared.sqlLock.acquire()
shared.sqlSubmitQueue.put('''SELECT msgid, received, read FROM inbox where folder='inbox' ORDER BY received DESC ''')
shared.sqlSubmitQueue.put('')
queryreturn = shared.sqlReturnQueue.get()
shared.sqlLock.release()
i = 0
index = 0
for row in queryreturn:
msgid, received, read = row
if not read:
index = i
i = i + 1
return index
# Show the program window and select inbox tab # Show the program window and select inbox tab
def appIndicatorInbox(self, mm_app, source_id): def appIndicatorInbox(self, mm_app, source_id):
self.appIndicatorShow() self.appIndicatorShow()
# select inbox # select inbox
self.ui.tabWidget.setCurrentIndex(0) self.ui.tabWidget.setCurrentIndex(0)
# select unread message selectedItem = None
self.ui.tableWidgetInbox.selectRow(self.getUnreadMessageIndex()) if source_id == 'Subscriptions':
self.tableWidgetInboxItemClicked() # select unread broadcast
if self.newBroadcastItem is not None:
selectedItem = self.newBroadcastItem
self.newBroadcastItem = None
else:
# select unread message
if self.newMessageItem is not None:
selectedItem = self.newMessageItem
self.newMessageItem = None
# make it the current item
if selectedItem is not None:
try:
self.ui.tableWidgetInbox.setCurrentItem(selectedItem)
except Exception:
self.ui.tableWidgetInbox.setCurrentCell(0,0)
self.tableWidgetInboxItemClicked()
else:
# just select the first item
self.ui.tableWidgetInbox.setCurrentCell(0,0)
self.tableWidgetInboxItemClicked()
# Show the program window and select send tab # Show the program window and select send tab
def appIndicatorSend(self): def appIndicatorSend(self):
@ -604,10 +614,40 @@ class MyForm(QtGui.QMainWindow):
return True return True
return False return False
# When an unread inbox row is selected on then clear the messaging menu
def ubuntuMessagingMenuClear(self, inventoryHash):
global withMessagingMenu
# if this isn't ubuntu then don't do anything
if not self.isUbuntu():
return
# has messageing menu been installed
if not withMessagingMenu:
return
# if there are no items on the messaging menu then
# the subsequent query can be avoided
if not (self.mmapp.has_source("Subscriptions") or self.mmapp.has_source("Messages")):
return
shared.sqlLock.acquire()
shared.sqlSubmitQueue.put('''SELECT toaddress, read FROM inbox WHERE msgid=?''')
shared.sqlSubmitQueue.put(inventoryHash)
queryreturn = shared.sqlReturnQueue.get()
shared.sqlLock.release()
for row in queryreturn:
toAddress, read = row
if not read:
if toAddress == self.str_broadcast_subscribers:
if self.mmapp.has_source("Subscriptions"):
self.mmapp.remove_source("Subscriptions")
else:
if self.mmapp.has_source("Messages"):
self.mmapp.remove_source("Messages")
# returns the number of unread messages and subscriptions # returns the number of unread messages and subscriptions
def getUnread(self): def getUnread(self):
str_broadcast_subscribers = '[Broadcast subscribers]'
unreadMessages = 0 unreadMessages = 0
unreadSubscriptions = 0 unreadSubscriptions = 0
@ -620,8 +660,8 @@ class MyForm(QtGui.QMainWindow):
msgid, toAddress, read = row msgid, toAddress, read = row
try: try:
if toAddress == str_broadcast_subscribers: if toAddress == self.str_broadcast_subscribers:
toLabel = str_broadcast_subscribers toLabel = self.str_broadcast_subscribers
else: else:
toLabel = shared.config.get(toAddress, 'label') toLabel = shared.config.get(toAddress, 'label')
except: except:
@ -630,7 +670,7 @@ class MyForm(QtGui.QMainWindow):
toLabel = toAddress toLabel = toAddress
if not read: if not read:
if toLabel == str_broadcast_subscribers: if toLabel == self.str_broadcast_subscribers:
# increment the unread subscriptions # increment the unread subscriptions
unreadSubscriptions = unreadSubscriptions + 1 unreadSubscriptions = unreadSubscriptions + 1
else: else:
@ -678,7 +718,7 @@ class MyForm(QtGui.QMainWindow):
print 'WARNING: messaging menu disabled' print 'WARNING: messaging menu disabled'
# update the Ubuntu messaging menu # update the Ubuntu messaging menu
def ubuntuMessagingMenuUpdate(self, drawAttention): def ubuntuMessagingMenuUpdate(self, drawAttention, newItem, toLabel):
global withMessagingMenu global withMessagingMenu
# if this isn't ubuntu then don't do anything # if this isn't ubuntu then don't do anything
@ -690,6 +730,12 @@ class MyForm(QtGui.QMainWindow):
print 'WARNING: messaging menu disabled or libmessaging-menu-dev not installed' print 'WARNING: messaging menu disabled or libmessaging-menu-dev not installed'
return return
# remember this item to that the messaging menu can find it
if toLabel == self.str_broadcast_subscribers:
self.newBroadcastItem = newItem
else:
self.newMessageItem = newItem
# Remove previous messages and subscriptions entries, then recreate them # Remove previous messages and subscriptions entries, then recreate them
# There might be a better way to do it than this # There might be a better way to do it than this
if self.mmapp.has_source("Messages"): if self.mmapp.has_source("Messages"):
@ -1077,7 +1123,7 @@ class MyForm(QtGui.QMainWindow):
self.statusBar().showMessage('') self.statusBar().showMessage('')
#We don't actually need the ackdata for acknowledgement since this is a broadcast message, but we can use it to update the user interface when the POW is done generating. #We don't actually need the ackdata for acknowledgement since this is a broadcast message, but we can use it to update the user interface when the POW is done generating.
ackdata = OpenSSL.rand(32) ackdata = OpenSSL.rand(32)
toAddress = '[Broadcast subscribers]' toAddress = self.str_broadcast_subscribers
ripe = '' ripe = ''
shared.sqlLock.acquire() shared.sqlLock.acquire()
t = ('',toAddress,ripe,fromAddress,subject,message,ackdata,int(time.time()),'broadcastpending',1,1,'sent',2) t = ('',toAddress,ripe,fromAddress,subject,message,ackdata,int(time.time()),'broadcastpending',1,1,'sent',2)
@ -1096,7 +1142,7 @@ class MyForm(QtGui.QMainWindow):
if fromLabel == '': if fromLabel == '':
fromLabel = fromAddress fromLabel = fromAddress
toLabel = '[Broadcast subscribers]' toLabel = self.str_broadcast_subscribers
self.ui.tableWidgetSent.insertRow(0) self.ui.tableWidgetSent.insertRow(0)
newItem = QtGui.QTableWidgetItem(unicode(toLabel,'utf-8')) newItem = QtGui.QTableWidgetItem(unicode(toLabel,'utf-8'))
@ -1238,8 +1284,8 @@ class MyForm(QtGui.QMainWindow):
fromLabel, = row fromLabel, = row
try: try:
if toAddress == '[Broadcast subscribers]': if toAddress == self.str_broadcast_subscribers:
toLabel = '[Broadcast subscribers]' toLabel = self.str_broadcast_subscribers
else: else:
toLabel = shared.config.get(toAddress, 'label') toLabel = shared.config.get(toAddress, 'label')
except: except:
@ -1250,7 +1296,7 @@ class MyForm(QtGui.QMainWindow):
font = QFont() font = QFont()
font.setBold(True) font.setBold(True)
self.ui.tableWidgetInbox.setSortingEnabled(False) self.ui.tableWidgetInbox.setSortingEnabled(False)
newItem = QtGui.QTableWidgetItem(unicode(toLabel,'utf-8')) newItem = QtGui.QTableWidgetItem(unicode(toLabel,'utf-8'))
newItem.setFont(font) newItem.setFont(font)
newItem.setData(Qt.UserRole,str(toAddress)) newItem.setData(Qt.UserRole,str(toAddress))
if shared.safeConfigGetBoolean(str(toAddress),'mailinglist'): if shared.safeConfigGetBoolean(str(toAddress),'mailinglist'):
@ -1259,17 +1305,17 @@ class MyForm(QtGui.QMainWindow):
self.ui.tableWidgetInbox.setItem(0,0,newItem) self.ui.tableWidgetInbox.setItem(0,0,newItem)
if fromLabel == '': if fromLabel == '':
newItem = QtGui.QTableWidgetItem(unicode(fromAddress,'utf-8')) newItem = QtGui.QTableWidgetItem(unicode(fromAddress,'utf-8'))
if shared.config.getboolean('bitmessagesettings', 'showtraynotifications'): if shared.config.getboolean('bitmessagesettings', 'showtraynotifications'):
self.notifierShow('New Message', 'From '+ fromAddress) self.notifierShow('New Message', 'From '+ fromAddress)
else: else:
newItem = QtGui.QTableWidgetItem(unicode(fromLabel,'utf-8')) newItem = QtGui.QTableWidgetItem(unicode(fromLabel,'utf-8'))
if shared.config.getboolean('bitmessagesettings', 'showtraynotifications'): if shared.config.getboolean('bitmessagesettings', 'showtraynotifications'):
self.notifierShow('New Message', 'From ' + fromLabel) self.notifierShow('New Message', 'From ' + fromLabel)
newItem.setData(Qt.UserRole,str(fromAddress)) newItem.setData(Qt.UserRole,str(fromAddress))
newItem.setFont(font) newItem.setFont(font)
self.ui.tableWidgetInbox.setItem(0,1,newItem) self.ui.tableWidgetInbox.setItem(0,1,newItem)
newItem = QtGui.QTableWidgetItem(unicode(subject,'utf-8)')) newItem = QtGui.QTableWidgetItem(unicode(subject,'utf-8)'))
newItem.setData(Qt.UserRole,unicode(message,'utf-8)')) newItem.setData(Qt.UserRole,unicode(message,'utf-8)'))
newItem.setFont(font) newItem.setFont(font)
self.ui.tableWidgetInbox.setItem(0,2,newItem) self.ui.tableWidgetInbox.setItem(0,2,newItem)
@ -1285,7 +1331,7 @@ class MyForm(QtGui.QMainWindow):
else: 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) self.ui.tableWidgetInbox.setSortingEnabled(True)
self.ubuntuMessagingMenuUpdate(True) self.ubuntuMessagingMenuUpdate(True, newItem, toLabel)
def click_pushButtonAddAddressBook(self): def click_pushButtonAddAddressBook(self):
self.NewSubscriptionDialogInstance = NewSubscriptionDialog(self) self.NewSubscriptionDialogInstance = NewSubscriptionDialog(self)
@ -1646,7 +1692,7 @@ class MyForm(QtGui.QMainWindow):
toAddressAtCurrentInboxRow = str(self.ui.tableWidgetInbox.item(currentInboxRow,0).data(Qt.UserRole).toPyObject()) toAddressAtCurrentInboxRow = str(self.ui.tableWidgetInbox.item(currentInboxRow,0).data(Qt.UserRole).toPyObject())
fromAddressAtCurrentInboxRow = str(self.ui.tableWidgetInbox.item(currentInboxRow,1).data(Qt.UserRole).toPyObject()) fromAddressAtCurrentInboxRow = str(self.ui.tableWidgetInbox.item(currentInboxRow,1).data(Qt.UserRole).toPyObject())
if toAddressAtCurrentInboxRow == '[Broadcast subscribers]': if toAddressAtCurrentInboxRow == self.str_broadcast_subscribers:
self.ui.labelFrom.setText('') self.ui.labelFrom.setText('')
else: else:
if not shared.config.get(toAddressAtCurrentInboxRow,'enabled'): if not shared.config.get(toAddressAtCurrentInboxRow,'enabled'):
@ -1971,6 +2017,7 @@ class MyForm(QtGui.QMainWindow):
inventoryHash = str(self.ui.tableWidgetInbox.item(currentRow,3).data(Qt.UserRole).toPyObject()) inventoryHash = str(self.ui.tableWidgetInbox.item(currentRow,3).data(Qt.UserRole).toPyObject())
t = (inventoryHash,) t = (inventoryHash,)
self.ubuntuMessagingMenuClear(t)
shared.sqlLock.acquire() shared.sqlLock.acquire()
shared.sqlSubmitQueue.put('''update inbox set read=1 WHERE msgid=?''') shared.sqlSubmitQueue.put('''update inbox set read=1 WHERE msgid=?''')
shared.sqlSubmitQueue.put(t) shared.sqlSubmitQueue.put(t)