Fri, 31 May 2013 16:55:50 +0200
Changed the name of the cache directory of the web browser to reflect the Qt and Webkit version number in order to avoid cahe trouble.
1953
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
2302
f29e9405c851
Updated copyright for 2013.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1955
diff
changeset
|
3 | # Copyright (c) 2012 - 2013 Detlev Offenbach <detlev@die-offenbachs.de> |
1953
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing a network reply delegate allowing to check redirects. |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | from PyQt4.QtCore import pyqtSignal, QObject |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | from PyQt4.QtNetwork import QNetworkRequest |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | class FollowRedirectReply(QObject): |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | Class implementing a network reply delegate allowing to check redirects |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | finished = pyqtSignal() |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | def __init__(self, url, manager, maxRedirects=5): |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | Constructor |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | @param url URL to get (QUrl) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | @param manager reference to the network access manager (QNetworkAccessManager) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | @keyparam maxRedirects maximum allowed redirects (integer) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | super().__init__() |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | self.__manager = manager |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | self.__maxRedirects = maxRedirects |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | self.__redirectCount = 0 |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | self.__reply = self.__manager.get(QNetworkRequest(url)) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | self.__reply.finished[()].connect(self.__replyFinished) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | def reply(self): |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | Public method to get the reply object. |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | @return reference to the reply object (QNetworkReply) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | return self.__reply |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | def originalUrl(self): |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | Public method to get the original URL. |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | @return original URL (QUrl) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | return self.__reply.request().url() |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | def url(self): |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | Public method to get the final URL (after redirects). |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | @return final URL (QUrl) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | return self.__reply.url() |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | def error(self): |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | Public method to get the error information. |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | @return error code (QNetworkReply.NetworkError) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | return self.__reply.error() |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | |
1955
9e6da33c1c10
Some small enhancements to the AdBlock Plus code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1953
diff
changeset
|
69 | def errorString(self): |
9e6da33c1c10
Some small enhancements to the AdBlock Plus code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1953
diff
changeset
|
70 | """ |
9e6da33c1c10
Some small enhancements to the AdBlock Plus code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1953
diff
changeset
|
71 | Public method to get the error message. |
9e6da33c1c10
Some small enhancements to the AdBlock Plus code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1953
diff
changeset
|
72 | |
9e6da33c1c10
Some small enhancements to the AdBlock Plus code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1953
diff
changeset
|
73 | @return error message (string) |
9e6da33c1c10
Some small enhancements to the AdBlock Plus code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1953
diff
changeset
|
74 | """ |
9e6da33c1c10
Some small enhancements to the AdBlock Plus code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1953
diff
changeset
|
75 | return self.__reply.errorString() |
9e6da33c1c10
Some small enhancements to the AdBlock Plus code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1953
diff
changeset
|
76 | |
1953
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | def readAll(self): |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | Public method to read all received data. |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | @return received raw data (QByteArray) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | return self.__reply.readAll() |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | |
1955
9e6da33c1c10
Some small enhancements to the AdBlock Plus code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1953
diff
changeset
|
85 | def close(self): |
9e6da33c1c10
Some small enhancements to the AdBlock Plus code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1953
diff
changeset
|
86 | """ |
9e6da33c1c10
Some small enhancements to the AdBlock Plus code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1953
diff
changeset
|
87 | Public method to close the data stream. |
9e6da33c1c10
Some small enhancements to the AdBlock Plus code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1953
diff
changeset
|
88 | """ |
9e6da33c1c10
Some small enhancements to the AdBlock Plus code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1953
diff
changeset
|
89 | self.__reply.close() |
9e6da33c1c10
Some small enhancements to the AdBlock Plus code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1953
diff
changeset
|
90 | |
1953
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | def __replyFinished(self): |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | Private slot handling the receipt of the requested data. |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | """ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | replyStatus = self.__reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | if (replyStatus != 301 and replyStatus != 302) or \ |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | self.__redirectCount == self.__maxRedirects: |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | self.finished.emit() |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | return |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | self.__redirectCount += 1 |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | redirectUrl = self.__reply.attribute(QNetworkRequest.RedirectionTargetAttribute) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | self.__reply.close() |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | self.__reply.finished[()].disconnect(self.__replyFinished) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106 | |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107 | self.__reply = self.__manager.get(QNetworkRequest(redirectUrl)) |
26aa6fd94dc2
Added support for GreaseMonkey scripts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | self.__reply.finished[()].connect(self.__replyFinished) |