WebBrowser/Network/EricSchemeHandler.py

changeset 6507
54054456ca58
parent 6134
cb0985e8da91
child 6531
a401efd02cd1
--- 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):

eric ide

mercurial