eric6/WebBrowser/AdBlock/AdBlockSubscription.py

changeset 7268
a28338eaf694
parent 7229
53054eb5b15a
child 7360
9190402e4505
equal deleted inserted replaced
7267:aedc309827c7 7268:a28338eaf694
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,

eric ide

mercurial