Esempio n. 1
0
 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())
Esempio n. 3
0
 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())
Esempio n. 8
0
    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)
Esempio n. 11
0
    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,
             )