diff -r 19dff9c9cf26 -r 36c4b21c9f7b WebBrowser/Network/EricSchemeHandler.py --- a/WebBrowser/Network/EricSchemeHandler.py Sun Mar 13 20:54:42 2016 +0100 +++ b/WebBrowser/Network/EricSchemeHandler.py Mon Mar 14 20:48:01 2016 +0100 @@ -9,8 +9,8 @@ from __future__ import unicode_literals -from PyQt5.QtCore import QByteArray, QBuffer, QIODevice, QTextStream, \ - QUrlQuery +from PyQt5.QtCore import pyqtSignal, QByteArray, QBuffer, QIODevice, \ + QTextStream, QUrlQuery from PyQt5.QtWebEngineCore import QWebEngineUrlSchemeHandler from ..Tools.WebBrowserTools import readAllFileContents @@ -31,6 +31,8 @@ @type QObject """ super(EricSchemeHandler, self).__init__(parent) + + self.__replies = [] def requestStarted(self, job): """ @@ -40,17 +42,32 @@ @type QWebEngineUrlRequestJob """ if job.requestUrl().path() in self.SupportedPages: - job.reply(b"text/html", EricSchemeReply(job)) + reply = EricSchemeReply(job) + reply.closed.connect(self.__replyClosed) + self.__replies.append(reply) + job.reply(b"text/html", reply) else: job.reply(QByteArray(), QBuffer()) # job.fail(QWebEngineUrlRequestJob.UrlNotFound) + + def __replyClosed(self): + """ + Private slot handling the closed signal of a reply. + """ + object = self.sender() + if object and object in self.__replies: + self.__replies.remove(object) class EricSchemeReply(QIODevice): """ Class implementing a reply for a requested eric: page. + + @signal closed emitted to signal that the web engine has read + the data """ - # TODO: SchemeHandler: debug this further + closed = pyqtSignal() + def __init__(self, job, parent=None): """ Constructor @@ -96,7 +113,6 @@ @return number of available bytes @rtype int """ - print("bytesAvailable", self.__buffer.bytesAvailable()) return self.__buffer.bytesAvailable() def readData(self, maxlen): @@ -106,12 +122,14 @@ @param maxlen maximum number of bytes to read (integer) @return string containing the data (bytes) """ - print("readData") - self.__loadPage() return self.__buffer.read(maxlen) - def writeData(self, data, len): - return 0 + def close(self): + """ + Public method used to cloase the reply. + """ + super(EricSchemeReply, self).close() + self.closed.emit() def __adBlockPage(self): """