Helpviewer/AdBlock/AdBlockNetwork.py

changeset 1960
d8c45fe8a1b9
parent 1955
9e6da33c1c10
child 1970
02cf3bac079b
equal deleted inserted replaced
1957:2fed7bc4ad83 1960:d8c45fe8a1b9
6 """ 6 """
7 Module implementing the network block class. 7 Module implementing the network block class.
8 """ 8 """
9 9
10 from PyQt4.QtCore import QObject 10 from PyQt4.QtCore import QObject
11 from PyQt4.QtNetwork import QNetworkRequest
11 12
12 import Helpviewer.HelpWindow 13 import Helpviewer.HelpWindow
13 14
14 from .AdBlockBlockedNetworkReply import AdBlockBlockedNetworkReply 15 from .AdBlockBlockedNetworkReply import AdBlockBlockedNetworkReply
15 16
23 Public method to check for a network block. 24 Public method to check for a network block.
24 25
25 @return reply object (QNetworkReply) or None 26 @return reply object (QNetworkReply) or None
26 """ 27 """
27 url = request.url() 28 url = request.url()
29 urlString = bytes(url.toEncoded()).decode()
30 urlDomain = url.host()
31 urlScheme = url.scheme()
28 32
29 if url.scheme() in ["data", "eric", "qthelp", "qrc", "file", "abp"]: 33 manager = Helpviewer.HelpWindow.HelpWindow.adblockManager()
34 if not manager.isEnabled() or not self.canRunOnScheme(urlScheme):
30 return None 35 return None
31 36
32 manager = Helpviewer.HelpWindow.HelpWindow.adblockManager()
33 if not manager.isEnabled():
34 return None
35
36 urlString = bytes(url.toEncoded()).decode()
37 blockedRule = None
38
39 for subscription in manager.subscriptions(): 37 for subscription in manager.subscriptions():
40 if subscription.allow(urlString): 38 blockedRule = subscription.match(request, urlDomain, urlString)
41 return None 39 if blockedRule:
42 40 webPage = request.attribute(QNetworkRequest.User + 100)
43 rule = subscription.block(urlString) 41 if webPage is not None:
44 if rule is not None: 42 if not self.__canBeBlocked(webPage.url()):
45 blockedRule = rule 43 return None
46 break 44
47 45 webPage.addAdBlockRule(blockedRule, url)
48 if blockedRule is not None: 46
49 reply = AdBlockBlockedNetworkReply(request, blockedRule, self) 47 reply = AdBlockBlockedNetworkReply(request, subscription, blockedRule, self)
50 return reply 48 return reply
51 49
52 return None 50 return None
51
52 def canRunOnScheme(self, scheme):
53 """
54 Public method to check, if AdBlock can be performed on the scheme.
55
56 @param scheme scheme to check (string)
57 @return flag indicating, that AdBlock can be performed (boolean)
58 """
59 return scheme not in ["data", "eric", "qthelp", "qrc", "file", "abp"]
60
61 def __canBeBlocked(self, url):
62 """
63 Private method to check, if an URL can be blocked.
64
65 @param url URL to be checked (QUrl)
66 @return flag indicating, that the URL can be blocked (boolean)
67 """
68 manager = Helpviewer.HelpWindow.HelpWindow.adblockManager()
69 for subscription in manager.subscriptions():
70 if subscription.adBlockDisabledForUrl(url):
71 return False
72
73 return True

eric ide

mercurial