Helpviewer/AdBlock/AdBlockSubscription.py

changeset 2007
3fec6ace8af7
parent 2005
6867cf32df67
child 2016
2bbc81fcce4a
equal deleted inserted replaced
2006:1056be73e934 2007:3fec6ace8af7
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):

eric ide

mercurial