eric6/Helpviewer/FeaturePermissions/FeaturePermissionManager.py

changeset 6942
2602857055c5
parent 6645
ad476851d7e0
equal deleted inserted replaced
6941:f99d60d6b59b 6942:2602857055c5
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2015 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the feature permission manager object.
8 """
9
10 from __future__ import unicode_literals
11
12 from PyQt5.QtCore import QObject
13 from PyQt5.QtWidgets import QDialog
14 from PyQt5.QtWebKitWidgets import QWebPage
15
16 import Globals
17 import Preferences
18
19
20 class FeaturePermissionManager(QObject):
21 """
22 Class implementing the feature permission manager object.
23 """
24 SettingsKeyFormat = "Help/FeaturePermissions/{0}"
25
26 def __init__(self, parent=None):
27 """
28 Constructor
29
30 @param parent reference to the parent object
31 @type QObject
32 """
33 super(FeaturePermissionManager, self).__init__(parent)
34
35 self.__featurePermissions = {
36 QWebPage.Notifications: {
37 QWebPage.PermissionGrantedByUser: [],
38 QWebPage.PermissionDeniedByUser: [],
39 },
40 QWebPage.Geolocation: {
41 QWebPage.PermissionGrantedByUser: [],
42 QWebPage.PermissionDeniedByUser: [],
43 },
44 }
45 self.__featurePermissionsKeys = {
46 (QWebPage.Notifications, QWebPage.PermissionGrantedByUser):
47 "NotificationsGranted",
48 (QWebPage.Notifications, QWebPage.PermissionDeniedByUser):
49 "NotificationsDenied",
50 (QWebPage.Geolocation, QWebPage.PermissionGrantedByUser):
51 "GeolocationGranted",
52 (QWebPage.Geolocation, QWebPage.PermissionDeniedByUser):
53 "GeolocationDenied",
54 }
55
56 self.__loaded = False
57
58 def requestFeaturePermission(self, page, frame, feature):
59 """
60 Public method to request a feature permission.
61
62 @param page reference to the requesting web page
63 @type QWebPage
64 @param frame frame sending the request
65 @type QWebFrame
66 @param feature requested feature
67 @type QWebPage.Feature
68 """
69 if page is None or frame is None:
70 return
71
72 if not self.__loaded:
73 self.__loadSettings()
74
75 host = page.url().host()
76
77 if feature in self.__featurePermissions:
78 for permission in self.__featurePermissions[feature]:
79 if host in self.__featurePermissions[feature][permission]:
80 page.setFeaturePermission(frame, feature, permission)
81 return
82
83 view = page.view()
84 if view is not None:
85 from .FeaturePermissionBar import FeaturePermissionBar
86 bar = FeaturePermissionBar(view, frame, feature)
87 bar.show()
88
89 def rememberFeaturePermission(self, host, feature, permission):
90 """
91 Public method to remember a user decision for a feature permission.
92
93 @param host host name to remember the decision for
94 @type str
95 @param feature feature to be remembered
96 @type QWebPage.Feature
97 @param permission feature permission to be remembered
98 @type QWebPage.PermissionPolicy
99 """
100 if feature in self.__featurePermissions:
101 if host not in self.__featurePermissions[feature][permission]:
102 self.__featurePermissions[feature][permission].append(host)
103 self.__saveSettings()
104
105 def __loadSettings(self):
106 """
107 Private method to load the remembered feature permissions.
108 """
109 if self.__loaded:
110 # no reloading allowed
111 return
112
113 for (feature, permission), key in \
114 self.__featurePermissionsKeys.items():
115 self.__featurePermissions[feature][permission] = \
116 Globals.toList(Preferences.Prefs.settings.value(
117 FeaturePermissionManager.SettingsKeyFormat.format(key),
118 []
119 ))
120
121 self.__loaded = True
122
123 def __saveSettings(self):
124 """
125 Private method to save the remembered feature permissions.
126 """
127 if not self.__loaded:
128 return
129
130 for (feature, permission), key in \
131 self.__featurePermissionsKeys.items():
132 Preferences.Prefs.settings.setValue(
133 FeaturePermissionManager.SettingsKeyFormat.format(key),
134 self.__featurePermissions[feature][permission])
135
136 def showFeaturePermissionsDialog(self):
137 """
138 Public method to show a dialog to manage the remembered feature
139 permissions.
140 """
141 if not self.__loaded:
142 self.__loadSettings()
143
144 from .FeaturePermissionsDialog import FeaturePermissionsDialog
145 dlg = FeaturePermissionsDialog(self.__featurePermissions)
146 if dlg.exec_() == QDialog.Accepted:
147 newFeaturePermissions = dlg.getData()
148 self.__featurePermissions = newFeaturePermissions
149 self.__saveSettings()

eric ide

mercurial