/ src / bitmessageqt / blacklist.py.bak
blacklist.py.bak
  1  from PyQt4 import QtCore, QtGui
  2  
  3  import widgets
  4  from addresses import addBMIfNotPresent
  5  from bmconfigparser import config
  6  from dialogs import AddAddressDialog
  7  from helper_sql import sqlExecute, sqlQuery
  8  from queues import UISignalQueue
  9  from retranslateui import RetranslateMixin
 10  from tr import _translate
 11  from uisignaler import UISignaler
 12  from utils import avatarize
 13  
 14  
 15  class Blacklist(QtGui.QWidget, RetranslateMixin):
 16      def __init__(self, parent=None):
 17          super(Blacklist, self).__init__(parent)
 18          widgets.load('blacklist.ui', self)
 19  
 20          QtCore.QObject.connect(self.radioButtonBlacklist, QtCore.SIGNAL(
 21              "clicked()"), self.click_radioButtonBlacklist)
 22          QtCore.QObject.connect(self.radioButtonWhitelist, QtCore.SIGNAL(
 23              "clicked()"), self.click_radioButtonWhitelist)
 24          QtCore.QObject.connect(self.pushButtonAddBlacklist, QtCore.SIGNAL(
 25          "clicked()"), self.click_pushButtonAddBlacklist)
 26  
 27          self.init_blacklist_popup_menu()
 28  
 29          # Initialize blacklist
 30          QtCore.QObject.connect(self.tableWidgetBlacklist, QtCore.SIGNAL(
 31              "itemChanged(QTableWidgetItem *)"), self.tableWidgetBlacklistItemChanged)
 32  
 33          # Set the icon sizes for the identicons
 34          identicon_size = 3*7
 35          self.tableWidgetBlacklist.setIconSize(QtCore.QSize(identicon_size, identicon_size))
 36  
 37          self.UISignalThread = UISignaler.get()
 38          QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
 39              "rerenderBlackWhiteList()"), self.rerenderBlackWhiteList)
 40  
 41      def click_radioButtonBlacklist(self):
 42          if config.get('bitmessagesettings', 'blackwhitelist') == 'white':
 43              config.set('bitmessagesettings', 'blackwhitelist', 'black')
 44              config.save()
 45              # self.tableWidgetBlacklist.clearContents()
 46              self.tableWidgetBlacklist.setRowCount(0)
 47              self.rerenderBlackWhiteList()
 48  
 49      def click_radioButtonWhitelist(self):
 50          if config.get('bitmessagesettings', 'blackwhitelist') == 'black':
 51              config.set('bitmessagesettings', 'blackwhitelist', 'white')
 52              config.save()
 53              # self.tableWidgetBlacklist.clearContents()
 54              self.tableWidgetBlacklist.setRowCount(0)
 55              self.rerenderBlackWhiteList()
 56  
 57      def click_pushButtonAddBlacklist(self):
 58          self.NewBlacklistDialogInstance = AddAddressDialog(self)
 59          if self.NewBlacklistDialogInstance.exec_():
 60              if self.NewBlacklistDialogInstance.labelAddressCheck.text() == \
 61                      _translate("MainWindow", "Address is valid."):
 62                  address = addBMIfNotPresent(str(
 63                      self.NewBlacklistDialogInstance.lineEditAddress.text()))
 64                  # First we must check to see if the address is already in the
 65                  # address book. The user cannot add it again or else it will
 66                  # cause problems when updating and deleting the entry.
 67                  t = (address,)
 68                  if config.get('bitmessagesettings', 'blackwhitelist') == 'black':
 69                      sql = '''select * from blacklist where address=?'''
 70                  else:
 71                      sql = '''select * from whitelist where address=?'''
 72                  queryreturn = sqlQuery(sql,*t)
 73                  if queryreturn == []:
 74                      self.tableWidgetBlacklist.setSortingEnabled(False)
 75                      self.tableWidgetBlacklist.insertRow(0)
 76                      newItem = QtGui.QTableWidgetItem(unicode(
 77                          self.NewBlacklistDialogInstance.lineEditLabel.text().toUtf8(), 'utf-8'))
 78                      newItem.setIcon(avatarize(address))
 79                      self.tableWidgetBlacklist.setItem(0, 0, newItem)
 80                      newItem = QtGui.QTableWidgetItem(address)
 81                      newItem.setFlags(
 82                          QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
 83                      self.tableWidgetBlacklist.setItem(0, 1, newItem)
 84                      self.tableWidgetBlacklist.setSortingEnabled(True)
 85                      t = (str(self.NewBlacklistDialogInstance.lineEditLabel.text().toUtf8()), address, True)
 86                      if config.get('bitmessagesettings', 'blackwhitelist') == 'black':
 87                          sql = '''INSERT INTO blacklist VALUES (?,?,?)'''
 88                      else:
 89                          sql = '''INSERT INTO whitelist VALUES (?,?,?)'''
 90                      sqlExecute(sql, *t)
 91                  else:
 92                      UISignalQueue.put((
 93                          'updateStatusBar',
 94                          _translate(
 95                              "MainWindow",
 96                              "Error: You cannot add the same address to your"
 97                              " list twice. Perhaps rename the existing one"
 98                              " if you want.")
 99                      ))
100              else:
101                  UISignalQueue.put((
102                      'updateStatusBar',
103                      _translate(
104                          "MainWindow",
105                          "The address you entered was invalid. Ignoring it.")
106                  ))
107  
108      def tableWidgetBlacklistItemChanged(self, item):
109          if item.column() == 0:
110              addressitem = self.tableWidgetBlacklist.item(item.row(), 1)
111              if isinstance(addressitem, QtGui.QTableWidgetItem):
112                  if self.radioButtonBlacklist.isChecked():
113                      sqlExecute('''UPDATE blacklist SET label=? WHERE address=?''',
114                              str(item.text()), str(addressitem.text()))
115                  else:
116                      sqlExecute('''UPDATE whitelist SET label=? WHERE address=?''',
117                              str(item.text()), str(addressitem.text()))
118  
119      def init_blacklist_popup_menu(self, connectSignal=True):
120          # Popup menu for the Blacklist page
121          self.blacklistContextMenuToolbar = QtGui.QToolBar()
122          # Actions
123          self.actionBlacklistNew = self.blacklistContextMenuToolbar.addAction(
124              _translate(
125                  "MainWindow", "Add new entry"), self.on_action_BlacklistNew)
126          self.actionBlacklistDelete = self.blacklistContextMenuToolbar.addAction(
127              _translate(
128                  "MainWindow", "Delete"), self.on_action_BlacklistDelete)
129          self.actionBlacklistClipboard = self.blacklistContextMenuToolbar.addAction(
130              _translate(
131                  "MainWindow", "Copy address to clipboard"),
132              self.on_action_BlacklistClipboard)
133          self.actionBlacklistEnable = self.blacklistContextMenuToolbar.addAction(
134              _translate(
135                  "MainWindow", "Enable"), self.on_action_BlacklistEnable)
136          self.actionBlacklistDisable = self.blacklistContextMenuToolbar.addAction(
137              _translate(
138                  "MainWindow", "Disable"), self.on_action_BlacklistDisable)
139          self.actionBlacklistSetAvatar = self.blacklistContextMenuToolbar.addAction(
140              _translate(
141                  "MainWindow", "Set avatar..."),
142              self.on_action_BlacklistSetAvatar)
143          self.tableWidgetBlacklist.setContextMenuPolicy(
144              QtCore.Qt.CustomContextMenu)
145          if connectSignal:
146              self.connect(self.tableWidgetBlacklist, QtCore.SIGNAL(
147                  'customContextMenuRequested(const QPoint&)'),
148                          self.on_context_menuBlacklist)
149          self.popMenuBlacklist = QtGui.QMenu(self)
150          # self.popMenuBlacklist.addAction( self.actionBlacklistNew )
151          self.popMenuBlacklist.addAction(self.actionBlacklistDelete)
152          self.popMenuBlacklist.addSeparator()
153          self.popMenuBlacklist.addAction(self.actionBlacklistClipboard)
154          self.popMenuBlacklist.addSeparator()
155          self.popMenuBlacklist.addAction(self.actionBlacklistEnable)
156          self.popMenuBlacklist.addAction(self.actionBlacklistDisable)
157          self.popMenuBlacklist.addAction(self.actionBlacklistSetAvatar)
158  
159      def rerenderBlackWhiteList(self):
160          tabs = self.parent().parent()
161          if config.get('bitmessagesettings', 'blackwhitelist') == 'black':
162              tabs.setTabText(tabs.indexOf(self), _translate('blacklist', 'Blacklist'))
163          else:
164              tabs.setTabText(tabs.indexOf(self), _translate('blacklist', 'Whitelist'))
165          self.tableWidgetBlacklist.setRowCount(0)
166          listType = config.get('bitmessagesettings', 'blackwhitelist')
167          if listType == 'black':
168              queryreturn = sqlQuery('''SELECT label, address, enabled FROM blacklist''')
169          else:
170              queryreturn = sqlQuery('''SELECT label, address, enabled FROM whitelist''')
171          self.tableWidgetBlacklist.setSortingEnabled(False)
172          for row in queryreturn:
173              label, address, enabled = row
174              self.tableWidgetBlacklist.insertRow(0)
175              newItem = QtGui.QTableWidgetItem(unicode(label, 'utf-8'))
176              if not enabled:
177                  newItem.setTextColor(QtGui.QColor(128, 128, 128))
178              newItem.setIcon(avatarize(address))
179              self.tableWidgetBlacklist.setItem(0, 0, newItem)
180              newItem = QtGui.QTableWidgetItem(address)
181              newItem.setFlags(
182                  QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
183              if not enabled:
184                  newItem.setTextColor(QtGui.QColor(128, 128, 128))
185              self.tableWidgetBlacklist.setItem(0, 1, newItem)
186          self.tableWidgetBlacklist.setSortingEnabled(True)
187  
188      # Group of functions for the Blacklist dialog box
189      def on_action_BlacklistNew(self):
190          self.click_pushButtonAddBlacklist()
191  
192      def on_action_BlacklistDelete(self):
193          currentRow = self.tableWidgetBlacklist.currentRow()
194          labelAtCurrentRow = self.tableWidgetBlacklist.item(
195              currentRow, 0).text().toUtf8()
196          addressAtCurrentRow = self.tableWidgetBlacklist.item(
197              currentRow, 1).text()
198          if config.get('bitmessagesettings', 'blackwhitelist') == 'black':
199              sqlExecute(
200                  '''DELETE FROM blacklist WHERE label=? AND address=?''',
201                  str(labelAtCurrentRow), str(addressAtCurrentRow))
202          else:
203              sqlExecute(
204                  '''DELETE FROM whitelist WHERE label=? AND address=?''',
205                  str(labelAtCurrentRow), str(addressAtCurrentRow))
206          self.tableWidgetBlacklist.removeRow(currentRow)
207  
208      def on_action_BlacklistClipboard(self):
209          currentRow = self.tableWidgetBlacklist.currentRow()
210          addressAtCurrentRow = self.tableWidgetBlacklist.item(
211              currentRow, 1).text()
212          clipboard = QtGui.QApplication.clipboard()
213          clipboard.setText(str(addressAtCurrentRow))
214  
215      def on_context_menuBlacklist(self, point):
216          self.popMenuBlacklist.exec_(
217              self.tableWidgetBlacklist.mapToGlobal(point))
218  
219      def on_action_BlacklistEnable(self):
220          currentRow = self.tableWidgetBlacklist.currentRow()
221          addressAtCurrentRow = self.tableWidgetBlacklist.item(
222              currentRow, 1).text()
223          self.tableWidgetBlacklist.item(
224              currentRow, 0).setTextColor(QtGui.QApplication.palette().text().color())
225          self.tableWidgetBlacklist.item(
226              currentRow, 1).setTextColor(QtGui.QApplication.palette().text().color())
227          if config.get('bitmessagesettings', 'blackwhitelist') == 'black':
228              sqlExecute(
229                  '''UPDATE blacklist SET enabled=1 WHERE address=?''',
230                  str(addressAtCurrentRow))
231          else:
232              sqlExecute(
233                  '''UPDATE whitelist SET enabled=1 WHERE address=?''',
234                  str(addressAtCurrentRow))
235  
236      def on_action_BlacklistDisable(self):
237          currentRow = self.tableWidgetBlacklist.currentRow()
238          addressAtCurrentRow = self.tableWidgetBlacklist.item(
239              currentRow, 1).text()
240          self.tableWidgetBlacklist.item(
241              currentRow, 0).setTextColor(QtGui.QColor(128, 128, 128))
242          self.tableWidgetBlacklist.item(
243              currentRow, 1).setTextColor(QtGui.QColor(128, 128, 128))
244          if config.get('bitmessagesettings', 'blackwhitelist') == 'black':
245              sqlExecute(
246                  '''UPDATE blacklist SET enabled=0 WHERE address=?''', str(addressAtCurrentRow))
247          else:
248              sqlExecute(
249                  '''UPDATE whitelist SET enabled=0 WHERE address=?''', str(addressAtCurrentRow))
250  
251      def on_action_BlacklistSetAvatar(self):
252          self.window().on_action_SetAvatar(self.tableWidgetBlacklist)