11 import re |
11 import re |
12 import hashlib |
12 import hashlib |
13 import base64 |
13 import base64 |
14 |
14 |
15 from PyQt4.QtCore import pyqtSignal, Qt, QObject, QByteArray, QDateTime, QUrl, \ |
15 from PyQt4.QtCore import pyqtSignal, Qt, QObject, QByteArray, QDateTime, QUrl, \ |
16 QCryptographicHash, QFile, QIODevice, QTextStream |
16 QCryptographicHash, QFile, QIODevice, QTextStream, QDate, QTime |
17 from PyQt4.QtNetwork import QNetworkReply |
17 from PyQt4.QtNetwork import QNetworkReply |
18 |
18 |
19 from E5Gui import E5MessageBox |
19 from E5Gui import E5MessageBox |
20 |
20 |
21 from .AdBlockRule import AdBlockRule |
21 from .AdBlockRule import AdBlockRule |
61 self.__lastUpdate = QDateTime() |
61 self.__lastUpdate = QDateTime() |
62 self.__requiresLocation = "" |
62 self.__requiresLocation = "" |
63 self.__requiresTitle = "" |
63 self.__requiresTitle = "" |
64 |
64 |
65 self.__updatePeriod = 0 # update period in hours, 0 = use default |
65 self.__updatePeriod = 0 # update period in hours, 0 = use default |
|
66 self.__remoteModified = QDateTime() |
66 |
67 |
67 self.__rules = [] # list containing all AdBlock rules |
68 self.__rules = [] # list containing all AdBlock rules |
68 |
69 |
69 self.__networkExceptionRules = [] |
70 self.__networkExceptionRules = [] |
70 self.__networkBlockRules = [] |
71 self.__networkBlockRules = [] |
76 self.__checksumRe = re.compile(r"""^\s*!\s*checksum[\s\-:]+([\w\+\/=]+).*\n""", |
77 self.__checksumRe = re.compile(r"""^\s*!\s*checksum[\s\-:]+([\w\+\/=]+).*\n""", |
77 re.IGNORECASE | re.MULTILINE) |
78 re.IGNORECASE | re.MULTILINE) |
78 self.__expiresRe = re.compile( |
79 self.__expiresRe = re.compile( |
79 r"""(?:expires:|expires after)\s*(\d+)\s*(hour|h)?""", |
80 r"""(?:expires:|expires after)\s*(\d+)\s*(hour|h)?""", |
80 re.IGNORECASE) |
81 re.IGNORECASE) |
81 |
82 self.__remoteModifiedRe = re.compile( |
|
83 r"""!\s*(?:Last modified|Updated):\s*(\d{1,2})\s*""" |
|
84 r"""(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s*""" |
|
85 r"""(\d{2,4})\s*((\d{1,2}):(\d{2}))?""", |
|
86 re.IGNORECASE) |
|
87 |
|
88 self.__monthNameToNumber = { |
|
89 "Jan": 1, |
|
90 "Feb": 2, |
|
91 "Mar": 3, |
|
92 "Apr": 4, |
|
93 "May": 5, |
|
94 "Jun": 6, |
|
95 "Jul": 7, |
|
96 "Aug": 8, |
|
97 "Sep": 9, |
|
98 "Oct": 10, |
|
99 "Nov": 11, |
|
100 "Dec": 12 |
|
101 } |
82 |
102 |
83 |
103 |
84 self.__parseUrl(url) |
104 self.__parseUrl(url) |
85 |
105 |
86 def __parseUrl(self, url): |
106 def __parseUrl(self, url): |
262 .format(fileName)) |
282 .format(fileName)) |
263 f.close() |
283 f.close() |
264 f.remove() |
284 f.remove() |
265 self.__lastUpdate = QDateTime() |
285 self.__lastUpdate = QDateTime() |
266 else: |
286 else: |
|
287 self.__updatePeriod = 0 |
|
288 self.__remoteModified = QDateTime() |
267 self.__rules = [] |
289 self.__rules = [] |
268 self.__rules.append(AdBlockRule(header, self)) |
290 self.__rules.append(AdBlockRule(header, self)) |
269 while not textStream.atEnd(): |
291 while not textStream.atEnd(): |
270 line = textStream.readLine() |
292 line = textStream.readLine() |
271 self.__rules.append(AdBlockRule(line, self)) |
293 self.__rules.append(AdBlockRule(line, self)) |
276 # hours |
298 # hours |
277 self.__updatePeriod = int(period) |
299 self.__updatePeriod = int(period) |
278 else: |
300 else: |
279 # days |
301 # days |
280 self.__updatePeriod = int(period) * 24 |
302 self.__updatePeriod = int(period) * 24 |
|
303 remoteModified = self.__remoteModifiedRe.search(line) |
|
304 if remoteModified: |
|
305 day, month, year, time, hour, minute = remoteModified.groups() |
|
306 self.__remoteModified.setDate( |
|
307 QDate(int(year), self.__monthNameToNumber[month], |
|
308 int(day))) |
|
309 if time: |
|
310 self.__remoteModified.setTime( |
|
311 QTime(int(hour), int(minute))) |
281 self.__populateCache() |
312 self.__populateCache() |
282 self.changed.emit() |
313 self.changed.emit() |
283 elif not fileName.endswith("_custom"): |
314 elif not fileName.endswith("_custom"): |
284 self.__lastUpdate = QDateTime() |
315 self.__lastUpdate = QDateTime() |
285 |
316 |
292 if self.__updatePeriod: |
323 if self.__updatePeriod: |
293 updatePeriod = self.__updatePeriod |
324 updatePeriod = self.__updatePeriod |
294 else: |
325 else: |
295 updatePeriod = Preferences.getHelp("AdBlockUpdatePeriod") * 24 |
326 updatePeriod = Preferences.getHelp("AdBlockUpdatePeriod") * 24 |
296 if not self.__lastUpdate.isValid() or \ |
327 if not self.__lastUpdate.isValid() or \ |
|
328 (self.__remoteModified.isValid() and \ |
|
329 self.__remoteModified.addSecs(updatePeriod * 3600) < \ |
|
330 QDateTime.currentDateTime()) or \ |
297 self.__lastUpdate.addSecs(updatePeriod * 3600) < \ |
331 self.__lastUpdate.addSecs(updatePeriod * 3600) < \ |
298 QDateTime.currentDateTime(): |
332 QDateTime.currentDateTime(): |
299 self.updateNow() |
333 self.updateNow() |
300 |
334 |
301 def updateNow(self): |
335 def updateNow(self): |