Helpviewer/AdBlock/AdBlockNetwork.py

changeset 1960
d8c45fe8a1b9
parent 1955
9e6da33c1c10
child 1970
02cf3bac079b
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

eric ide

mercurial