diff -r ff6172ce89a9 -r 54054456ca58 WebBrowser/Network/EricSchemeHandler.py --- a/WebBrowser/Network/EricSchemeHandler.py Tue Sep 18 19:23:07 2018 +0200 +++ b/WebBrowser/Network/EricSchemeHandler.py Wed Sep 19 19:50:10 2018 +0200 @@ -10,7 +10,7 @@ from __future__ import unicode_literals from PyQt5.QtCore import pyqtSignal, QByteArray, QBuffer, QIODevice, \ - QTextStream, QUrlQuery + QUrlQuery, QMutex, QMutexLocker, QTimer from PyQt5.QtWidgets import qApp from PyQt5.QtWebEngineCore import QWebEngineUrlSchemeHandler @@ -89,13 +89,12 @@ self.__loaded = False self.__job = job + self.__mutex = QMutex() self.__pageName = self.__job.requestUrl().path() self.__buffer = QBuffer() - self.open(QIODevice.ReadOnly) - self.__buffer.open(QIODevice.ReadWrite) - self.__loadPage() + QTimer.singleShot(0, self.__loadPage) def __loadPage(self): """ @@ -104,18 +103,23 @@ if self.__loaded: return - stream = QTextStream(self.__buffer) - stream.setCodec("utf-8") - if self.__pageName == "adblock": - stream << self.__adBlockPage() + contents = self.__adBlockPage() elif self.__pageName in ["home", "start", "startpage"]: - stream << self.__startPage() + contents = self.__startPage() elif self.__pageName == "speeddial": - stream << self.__speedDialPage() + contents = self.__speedDialPage() + else: + contents = "" - stream.flush() - self.__buffer.reset() + lock = QMutexLocker(self.__mutex) + self.__buffer.setData(contents.encode("utf-8")) + self.__buffer.open(QIODevice.ReadOnly) + lock.unlock() + + self.open(QIODevice.ReadOnly) + self.readyRead.emit() + self.__loaded = True def bytesAvailable(self): @@ -125,6 +129,7 @@ @return number of available bytes @rtype int """ + lock = QMutexLocker(self.__mutex) # __IGNORE_WARNING__ return self.__buffer.bytesAvailable() def readData(self, maxlen): @@ -134,6 +139,7 @@ @param maxlen maximum number of bytes to read (integer) @return string containing the data (bytes) """ + lock = QMutexLocker(self.__mutex) # __IGNORE_WARNING__ return self.__buffer.read(maxlen) def close(self):