def setPolicy(self, action, args): if len(args) == 0: print "No policy specified." if len(args) == 1: # change action's policy policy = self.__getPolicyFromText(args[0]) if policy is None: print "Invalid policy:", args[0] else: if policy == PrivacySettings.POLICY_BY_CATEGORY and not action.usesPrivacyCategories(): print "Action has no categories. Please use another policy." return PrivacySettings.get().setPolicy(action, None, policy, categoryPolicy=PrivacySettings.CATEGORY_NEVER) else: if not action.usesPrivacyCategories(): print "Action has no categories." elif ( action.getPrivacyPolicy(categoryPolicy=PrivacySettings.CATEGORY_NEVER) != PrivacySettings.POLICY_BY_CATEGORY ): print "Action's policy does not use categories. Change the action's policy to 'by category' first." else: category = args[0] policy = self.__getPolicyFromText(args[1]) if policy is None: print "Invalid policy:", args[1] else: PrivacySettings.get().setPolicy( action, category, policy, categoryPolicy=PrivacySettings.CATEGORY_ALWAYS )
def _peerDataChanged(self, item): if not self._resetting: PrivacySettings.get().addException(self._action, self._category, self._mode, convert_string(item.data(PeerModel.KEY_ROLE).toString()), 1 if item.checkState() == Qt.Checked else 0 if item.checkState() == Qt.Unchecked else -1, applyImmediately=False, categoryPolicy=self._getCategoryPolicy())
def performAction(self, peerID, _peerInfo, _parent): policy = self._sendMessageAction.getPrivacyPolicy() if policy not in (PrivacySettings.POLICY_EVERYBODY_EX, PrivacySettings.POLICY_NOBODY_EX): self.logger.error("Illegal policy for block action: %s", policy) return exceptions = self._sendMessageAction.getExceptions(policy) newVal = 1 if peerID in exceptions and exceptions[peerID] == 1: newVal = 0 PrivacySettings.get().addException(self._sendMessageAction, None, policy, peerID, newVal)
def __init__(self, action, parent, logger, category=None, mode=None): super(SingleCategoryView, self).__init__(parent) self.logger = logger self._action = action self._category = category self._resetting = False if mode is not None: topWidget = None self._determineOwnMode = False else: self._determineOwnMode = True mode = PrivacySettings.get().getPolicy(self._action, self._category, useModified=True, categoryPolicy=self._getCategoryPolicy()) topWidget = self._initTopView(mode) centralWidget = self._initPeerList(mode) bottomWidget = self._initBottomWidget() mainLayout = QVBoxLayout(self) if topWidget is None: # inside multiple categories view -> no margins mainLayout.setContentsMargins(0, 0, 0, 0) if topWidget is not None: mainLayout.addWidget(topWidget) mainLayout.addWidget(centralWidget, 1) mainLayout.addWidget(bottomWidget) self._modeChanged(mode, notify=False, resetModel=False) get_notification_center().connectPeerNameAdded(self._peerModel.peerNameAdded) get_notification_center().connectDisplayedPeerNameChanged(self._peerModel.peerNameChanged) get_notification_center().connectPrivacySettingsChanged(self._privacySettingsChanged) get_notification_center().connectPrivacySettingsDiscarded(self._privacySettingsChanged)
def _initPeerList(self, mode): capsuleWidget = QWidget() capsuleLayout = QVBoxLayout(capsuleWidget) capsuleLayout.setContentsMargins(10, 0, 10, 0) if mode in (PrivacySettings.POLICY_EVERYBODY_EX, PrivacySettings.POLICY_NOBODY_EX, PrivacySettings.POLICY_PEER_EXCEPTION): exceptions = PrivacySettings.get().getExceptions(self._action, self._category, mode, useModified=True, categoryPolicy=self._getCategoryPolicy()) else: exceptions = {} self._peerModel = PeerModel(exceptions, mode == PrivacySettings.POLICY_PEER_EXCEPTION, self.logger) self._peerModel.itemChanged.connect(self._peerDataChanged) proxyModel = QSortFilterProxyModel(self) proxyModel.setDynamicSortFilter(True) proxyModel.setSortCaseSensitivity(Qt.CaseInsensitive) proxyModel.setSourceModel(self._peerModel) proxyModel.sort(0) self._peerList = QTreeView(self) self._peerList.setAlternatingRowColors(False) self._peerList.setHeaderHidden(True) self._peerList.setItemsExpandable(False) self._peerList.setIndentation(0) self._peerList.setModel(proxyModel) self._peerList.setSelectionMode(QTreeView.NoSelection) self._peerList.setAutoFillBackground(False) self._peerList.viewport().setAutoFillBackground(False) self._peerList.setFrameShape(QFrame.NoFrame) self._peerList.setFocusPolicy(Qt.NoFocus) capsuleLayout.addWidget(self._peerList) return capsuleWidget
def _privacySettingsChanged(self, pluginName, actionName): if pluginName != self._action.getPluginName() or actionName != self._action.getName(): return if self._determineOwnMode: newMode = PrivacySettings.get().getPolicy(self._action, self._category, categoryPolicy=self._getCategoryPolicy()) else: newMode = self._mode self._modeChanged(newMode, notify=False)
def _modeChanged(self, newMode, notify=True, resetModel=True): self._resetting = True if newMode in (PrivacySettings.POLICY_EVERYBODY_EX, PrivacySettings.POLICY_NOBODY_EX, PrivacySettings.POLICY_PEER_EXCEPTION): if resetModel: # no change notifications, we are just resetting the model self._peerModel.itemChanged.disconnect(self._peerDataChanged) self._peerModel.setExceptionData(PrivacySettings.get().getExceptions(self._action, self._category, newMode, useModified=True, categoryPolicy=self._getCategoryPolicy())) self._peerModel.itemChanged.connect(self._peerDataChanged) self._peerList.setVisible(True) else: self._peerList.setVisible(False) if newMode == PrivacySettings.POLICY_NOBODY_EX: ask = PrivacySettings.get().getAskForConfirmation(self._action, self._category, useModified=True, categoryPolicy=self._getCategoryPolicy()) self._askForConfirmationBox.setCheckState(Qt.Checked if ask else Qt.Unchecked) self._askForConfirmationBox.setVisible(True) else: self._askForConfirmationBox.setVisible(False) self._mode = newMode self._resetting = False if notify: PrivacySettings.get().setPolicy(self._action, self._category, self._mode, applyImmediately=False, categoryPolicy=self._getCategoryPolicy())
def setState(self, action, args): if len(args) < 2: self.printHelp(u"privacy") return policy = action.getPrivacyPolicy(categoryPolicy=PrivacySettings.CATEGORY_NEVER) if policy not in ( PrivacySettings.POLICY_BY_CATEGORY, PrivacySettings.POLICY_EVERYBODY_EX, PrivacySettings.POLICY_NOBODY_EX, ): print "The current policy does not support individual peer settings." return if len(args) == 2: category = None categoryPolicy = PrivacySettings.CATEGORY_NEVER if policy == PrivacySettings.POLICY_BY_CATEGORY: policy = PrivacySettings.POLICY_PEER_EXCEPTION else: if policy != PrivacySettings.POLICY_BY_CATEGORY: print "Action's policy does not use categories. Change the action's policy to 'by category' first." return category = args.pop(0) categoryPolicy = PrivacySettings.CATEGORY_ALWAYS peerIDs = self.__getPeerIDs(args[0]) if len(peerIDs) == 0: print "Unknown peer:", args[0] return state = self.__getState(args[1], policy) if state is None: print "Invalid state:", args[1] for peerID in peerIDs: PrivacySettings.get().addException(action, category, policy, peerID, state, categoryPolicy=categoryPolicy)
def _modeChanged(self, newMode, notify=True): if newMode == self._mode and newMode == PrivacySettings.POLICY_BY_CATEGORY: self._updateCategoryView() return self._currentToolBox = None if newMode in (PrivacySettings.POLICY_EVERYBODY_EX, PrivacySettings.POLICY_NOBODY_EX): # single mode if len(self._currentSingleViews) == 0 or self._mode not in (PrivacySettings.POLICY_EVERYBODY_EX, PrivacySettings.POLICY_NOBODY_EX): # only reset if not already in single mode self._createSingleView(newMode) else: # only change mode self._currentSingleViews[None].setMode(newMode) elif newMode == PrivacySettings.POLICY_BY_CATEGORY: self._createCategoryView() else: self._clearCurrentView() self._mode = newMode if self._modeCombo.currentIndex() != newMode: self._modeCombo.setCurrentIndex(newMode) if notify: PrivacySettings.get().setPolicy(self._action, None, self._mode, applyImmediately=False, categoryPolicy=PrivacySettings.CATEGORY_NEVER)
def __init__(self, action, parent, logger): super(MultipleCategoriesView, self).__init__(parent) self.logger = logger self._action = action self._mode = PrivacySettings.get().getPolicy(self._action, None, useModified=True, categoryPolicy=PrivacySettings.CATEGORY_NEVER) self._currentSingleViews = {} self._currentToolBox = None topView = self._initTopView() self._initSettingsWidget() mainLayout = QVBoxLayout(self) mainLayout.addWidget(topView) mainLayout.addWidget(self._settingsWidget, 1) self._modeChanged(self._mode, False) get_notification_center().connectPrivacySettingsChanged(self._privacySettingsChanged) get_notification_center().connectPrivacySettingsDiscarded(self._privacySettingsChanged)
def testState(self, action, args): if len(args) < 1: self.printHelp(u"privacy") return if len(args) == 1: category = None else: category = args.pop(0) peerIDs = self.__getPeerIDs(args[0]) if len(peerIDs) == 0: print "Unknown peer:", args[0] return self.appendOutput(u"Peer", u"State") self.appendSeparator() for peerID in peerIDs: state = PrivacySettings.get().getPeerState(peerID, action, category) peerName = get_peers().getDisplayedPeerName(pID=peerID) if peerName is None: peerName = peerID self.appendOutput(peerName, self.__getStateDescription(state)) self.flushOutput()
def _askForConfirmationChanged(self, newState): if not self._resetting: PrivacySettings.get().setAskForConfirmation(self._action, self._category, newState == Qt.Checked, applyImmediately=False, categoryPolicy=self._getCategoryPolicy())
def _privacySettingsChanged(self, pluginName, actionName): if pluginName != self._action.getPluginName() or actionName != self._action.getName(): return newMode = PrivacySettings.get().getPolicy(self._action, None, categoryPolicy=PrivacySettings.CATEGORY_NEVER) self._modeChanged(newMode, notify=False)
def _storeDecision(self, accepted): # store decision if not self._useCategories: if self._scope == self.SCOPE_PEER: PrivacySettings.get().addException( self._action, None, PrivacySettings.POLICY_NOBODY_EX, self._peerID, 1 if accepted else 0, categoryPolicy=PrivacySettings.CATEGORY_NEVER, ) elif self._scope == self.SCOPE_EVERYONE: PrivacySettings.get().setPolicy( self._action, None, PrivacySettings.POLICY_EVERYBODY if accepted else PrivacySettings.POLICY_NOBODY, categoryPolicy=PrivacySettings.CATEGORY_NEVER, ) else: if self._scope == self.SCOPE_PEER_CATEGORY: PrivacySettings.get().addException( self._action, self._category, PrivacySettings.POLICY_NOBODY_EX, self._peerID, 1 if accepted else 0, categoryPolicy=PrivacySettings.CATEGORY_ALWAYS, ) elif self._scope == self.SCOPE_PEER: PrivacySettings.get().addException( self._action, None, PrivacySettings.POLICY_PEER_EXCEPTION, self._peerID, 1 if accepted else 0, categoryPolicy=PrivacySettings.CATEGORY_NEVER, ) elif self._scope == self.SCOPE_EVERYONE_CATEGORY: PrivacySettings.get().setPolicy( self._action, self._category, PrivacySettings.POLICY_EVERYBODY if accepted else PrivacySettings.POLICY_NOBODY, categoryPolicy=PrivacySettings.CATEGORY_ALWAYS, ) elif self._scope == self.SCOPE_EVERYONE: PrivacySettings.get().setPolicy( self._action, None, PrivacySettings.POLICY_EVERYBODY if accepted else PrivacySettings.POLICY_NOBODY, categoryPolicy=PrivacySettings.CATEGORY_NEVER, )