11 import os |
11 import os |
12 import re |
12 import re |
13 import hashlib |
13 import hashlib |
14 import base64 |
14 import base64 |
15 |
15 |
16 from PyQt5.QtCore import pyqtSignal, Qt, QObject, QByteArray, QDateTime, \ |
16 from PyQt5.QtCore import ( |
17 QUrl, QUrlQuery, QCryptographicHash, QFile, QIODevice, QTextStream, \ |
17 pyqtSignal, Qt, QObject, QByteArray, QDateTime, QUrl, QUrlQuery, |
18 QDate, QTime |
18 QCryptographicHash, QFile, QIODevice, QTextStream, QDate, QTime |
|
19 ) |
19 from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest |
20 from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest |
20 |
21 |
21 from E5Gui import E5MessageBox |
22 from E5Gui import E5MessageBox |
22 |
23 |
23 import Utilities |
24 import Utilities |
316 else: |
317 else: |
317 # days |
318 # days |
318 self.__updatePeriod = int(period) * 24 |
319 self.__updatePeriod = int(period) * 24 |
319 remoteModified = self.__remoteModifiedRe.search(line) |
320 remoteModified = self.__remoteModifiedRe.search(line) |
320 if remoteModified: |
321 if remoteModified: |
321 day, month, year, time, hour, minute = \ |
322 day, month, year, time, hour, minute = ( |
322 remoteModified.groups() |
323 remoteModified.groups() |
|
324 ) |
323 self.__remoteModified.setDate( |
325 self.__remoteModified.setDate( |
324 QDate(int(year), |
326 QDate(int(year), |
325 self.__monthNameToNumber[month], |
327 self.__monthNameToNumber[month], |
326 int(day)) |
328 int(day)) |
327 ) |
329 ) |
342 Public method to check for an update. |
344 Public method to check for an update. |
343 """ |
345 """ |
344 if self.__updatePeriod: |
346 if self.__updatePeriod: |
345 updatePeriod = self.__updatePeriod |
347 updatePeriod = self.__updatePeriod |
346 else: |
348 else: |
347 updatePeriod = \ |
349 updatePeriod = ( |
348 Preferences.getWebBrowser("AdBlockUpdatePeriod") * 24 |
350 Preferences.getWebBrowser("AdBlockUpdatePeriod") * 24 |
349 if not self.__lastUpdate.isValid() or \ |
351 ) |
350 (self.__remoteModified.isValid() and |
352 if ( |
351 self.__remoteModified.addSecs(updatePeriod * 3600) < |
353 not self.__lastUpdate.isValid() or |
352 QDateTime.currentDateTime()) or \ |
354 (self.__remoteModified.isValid() and |
353 self.__lastUpdate.addSecs(updatePeriod * 3600) < \ |
355 self.__remoteModified.addSecs(updatePeriod * 3600) < |
354 QDateTime.currentDateTime(): |
356 QDateTime.currentDateTime()) or |
|
357 self.__lastUpdate.addSecs(updatePeriod * 3600) < |
|
358 QDateTime.currentDateTime() |
|
359 ): |
355 self.updateNow() |
360 self.updateNow() |
356 |
361 |
357 def updateNow(self): |
362 def updateNow(self): |
358 """ |
363 """ |
359 Public method to update the subscription immediately. |
364 Public method to update the subscription immediately. |
420 """Unable to open AdBlock file '{0}' for writing.""") |
425 """Unable to open AdBlock file '{0}' for writing.""") |
421 .file(fileName)) |
426 .file(fileName)) |
422 return |
427 return |
423 |
428 |
424 from WebBrowser.WebBrowserWindow import WebBrowserWindow |
429 from WebBrowser.WebBrowserWindow import WebBrowserWindow |
425 if WebBrowserWindow.adBlockManager().useLimitedEasyList() and \ |
430 if ( |
|
431 WebBrowserWindow.adBlockManager().useLimitedEasyList() and |
426 self.url().toString().startswith( |
432 self.url().toString().startswith( |
427 WebBrowserWindow.adBlockManager().getDefaultSubscriptionUrl()): |
433 WebBrowserWindow.adBlockManager().getDefaultSubscriptionUrl()) |
|
434 ): |
428 limited = True |
435 limited = True |
429 # ignore Third-party advertisers rules for performance |
436 # ignore Third-party advertisers rules for performance |
430 # whitelist rules at the end will be used |
437 # whitelist rules at the end will be used |
431 index = response.indexOf( |
438 index = response.indexOf( |
432 "!---------------------------" |
439 "!---------------------------" |
484 data = re.sub(self.__checksumRe, "", data) # remove checksum line |
491 data = re.sub(self.__checksumRe, "", data) # remove checksum line |
485 |
492 |
486 # calculate checksum |
493 # calculate checksum |
487 md5 = hashlib.md5() |
494 md5 = hashlib.md5() |
488 md5.update(data.encode("utf-8")) |
495 md5.update(data.encode("utf-8")) |
489 calculatedChecksum = base64.b64encode(md5.digest()).decode()\ |
496 calculatedChecksum = ( |
490 .rstrip("=") |
497 base64.b64encode(md5.digest()).decode().rstrip("=") |
|
498 ) |
491 if calculatedChecksum == expectedChecksum: |
499 if calculatedChecksum == expectedChecksum: |
492 return True |
500 return True |
493 else: |
501 else: |
494 res = E5MessageBox.yesNo( |
502 res = E5MessageBox.yesNo( |
495 None, |
503 None, |