WebBrowser/Network/EricSchemeHandler.py

changeset 6507
54054456ca58
parent 6134
cb0985e8da91
child 6531
a401efd02cd1
equal deleted inserted replaced
6506:ff6172ce89a9 6507:54054456ca58
8 """ 8 """
9 9
10 from __future__ import unicode_literals 10 from __future__ import unicode_literals
11 11
12 from PyQt5.QtCore import pyqtSignal, QByteArray, QBuffer, QIODevice, \ 12 from PyQt5.QtCore import pyqtSignal, QByteArray, QBuffer, QIODevice, \
13 QTextStream, QUrlQuery 13 QUrlQuery, QMutex, QMutexLocker, QTimer
14 from PyQt5.QtWidgets import qApp 14 from PyQt5.QtWidgets import qApp
15 from PyQt5.QtWebEngineCore import QWebEngineUrlSchemeHandler 15 from PyQt5.QtWebEngineCore import QWebEngineUrlSchemeHandler
16 16
17 from ..Tools.WebBrowserTools import readAllFileContents 17 from ..Tools.WebBrowserTools import readAllFileContents
18 18
87 """ 87 """
88 super(EricSchemeReply, self).__init__(parent) 88 super(EricSchemeReply, self).__init__(parent)
89 89
90 self.__loaded = False 90 self.__loaded = False
91 self.__job = job 91 self.__job = job
92 self.__mutex = QMutex()
92 93
93 self.__pageName = self.__job.requestUrl().path() 94 self.__pageName = self.__job.requestUrl().path()
94 self.__buffer = QBuffer() 95 self.__buffer = QBuffer()
95 96
96 self.open(QIODevice.ReadOnly) 97 QTimer.singleShot(0, self.__loadPage)
97 self.__buffer.open(QIODevice.ReadWrite)
98 self.__loadPage()
99 98
100 def __loadPage(self): 99 def __loadPage(self):
101 """ 100 """
102 Private method to load the requested page. 101 Private method to load the requested page.
103 """ 102 """
104 if self.__loaded: 103 if self.__loaded:
105 return 104 return
106 105
107 stream = QTextStream(self.__buffer)
108 stream.setCodec("utf-8")
109
110 if self.__pageName == "adblock": 106 if self.__pageName == "adblock":
111 stream << self.__adBlockPage() 107 contents = self.__adBlockPage()
112 elif self.__pageName in ["home", "start", "startpage"]: 108 elif self.__pageName in ["home", "start", "startpage"]:
113 stream << self.__startPage() 109 contents = self.__startPage()
114 elif self.__pageName == "speeddial": 110 elif self.__pageName == "speeddial":
115 stream << self.__speedDialPage() 111 contents = self.__speedDialPage()
116 112 else:
117 stream.flush() 113 contents = ""
118 self.__buffer.reset() 114
115 lock = QMutexLocker(self.__mutex)
116 self.__buffer.setData(contents.encode("utf-8"))
117 self.__buffer.open(QIODevice.ReadOnly)
118 lock.unlock()
119
120 self.open(QIODevice.ReadOnly)
121 self.readyRead.emit()
122
119 self.__loaded = True 123 self.__loaded = True
120 124
121 def bytesAvailable(self): 125 def bytesAvailable(self):
122 """ 126 """
123 Public method to get the number of available bytes. 127 Public method to get the number of available bytes.
124 128
125 @return number of available bytes 129 @return number of available bytes
126 @rtype int 130 @rtype int
127 """ 131 """
132 lock = QMutexLocker(self.__mutex) # __IGNORE_WARNING__
128 return self.__buffer.bytesAvailable() 133 return self.__buffer.bytesAvailable()
129 134
130 def readData(self, maxlen): 135 def readData(self, maxlen):
131 """ 136 """
132 Public method to retrieve data from the reply object. 137 Public method to retrieve data from the reply object.
133 138
134 @param maxlen maximum number of bytes to read (integer) 139 @param maxlen maximum number of bytes to read (integer)
135 @return string containing the data (bytes) 140 @return string containing the data (bytes)
136 """ 141 """
142 lock = QMutexLocker(self.__mutex) # __IGNORE_WARNING__
137 return self.__buffer.read(maxlen) 143 return self.__buffer.read(maxlen)
138 144
139 def close(self): 145 def close(self):
140 """ 146 """
141 Public method used to cloase the reply. 147 Public method used to cloase the reply.

eric ide

mercurial