diff -r 2fed7bc4ad83 -r d8c45fe8a1b9 Helpviewer/AdBlock/AdBlockNetwork.py --- a/Helpviewer/AdBlock/AdBlockNetwork.py Thu Jul 26 18:38:15 2012 +0200 +++ b/Helpviewer/AdBlock/AdBlockNetwork.py Sat Jul 28 11:23:12 2012 +0200 @@ -8,6 +8,7 @@ """ from PyQt4.QtCore import QObject +from PyQt4.QtNetwork import QNetworkRequest import Helpviewer.HelpWindow @@ -25,28 +26,48 @@ @return reply object (QNetworkReply) or None """ url = request.url() - - if url.scheme() in ["data", "eric", "qthelp", "qrc", "file", "abp"]: - return None + urlString = bytes(url.toEncoded()).decode() + urlDomain = url.host() + urlScheme = url.scheme() manager = Helpviewer.HelpWindow.HelpWindow.adblockManager() - if not manager.isEnabled(): + if not manager.isEnabled() or not self.canRunOnScheme(urlScheme): return None - urlString = bytes(url.toEncoded()).decode() - blockedRule = None - for subscription in manager.subscriptions(): - if subscription.allow(urlString): - return None - - rule = subscription.block(urlString) - if rule is not None: - blockedRule = rule - break - - if blockedRule is not None: - reply = AdBlockBlockedNetworkReply(request, blockedRule, self) - return reply + blockedRule = subscription.match(request, urlDomain, urlString) + if blockedRule: + webPage = request.attribute(QNetworkRequest.User + 100) + if webPage is not None: + if not self.__canBeBlocked(webPage.url()): + return None + + webPage.addAdBlockRule(blockedRule, url) + + reply = AdBlockBlockedNetworkReply(request, subscription, blockedRule, self) + return reply return None + + def canRunOnScheme(self, scheme): + """ + Public method to check, if AdBlock can be performed on the scheme. + + @param scheme scheme to check (string) + @return flag indicating, that AdBlock can be performed (boolean) + """ + return scheme not in ["data", "eric", "qthelp", "qrc", "file", "abp"] + + def __canBeBlocked(self, url): + """ + Private method to check, if an URL can be blocked. + + @param url URL to be checked (QUrl) + @return flag indicating, that the URL can be blocked (boolean) + """ + manager = Helpviewer.HelpWindow.HelpWindow.adblockManager() + for subscription in manager.subscriptions(): + if subscription.adBlockDisabledForUrl(url): + return False + + return True