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. |