示例#1
0
class ResourceRenderReply(QNetworkReply):
    def __init__(self, parent, request):
        QNetworkReply.__init__(self, parent)
        res = ":" + str(request.url().path().toUtf8())
        self.file = None
        self.filepath = res
        self.connect(self, SIGNAL('aboutToClose()'), self.__close)

        self.setRequest(request)
        self.setOperation(QNetworkAccessManager.GetOperation)
        self.open()
        self.setUrl(request.url())
        self.connect(parent, SIGNAL("ready"), self.ready)

    def ready(self):
        self.emit(SIGNAL("readyRead()"))
        self.emit(SIGNAL("finished()"))

    def abort(self):
        self.close()

    def __del__(self):
        if self.file:
            self.__close()

    def open(self, mode=None):
        try:
            self.file = QFile(self)
            self.file.setFileName(QString(self.filepath))
            self.file.open(QIODevice.ReadOnly | QIODevice.Unbuffered)
            self.setOpenMode(QIODevice.ReadOnly | QIODevice.Unbuffered)
            return True
        except (AttributeError, IOError):
            return False

    def seek(self, pos):
        if self.file:
            return self.file.seek(pos)
        return False

    def __close(self):
        if self.file:
            self.file.close()
            self.file = None
        return True

    def readData(self, size):
        if self.file:
            return self.file.read(size)
        return ""

    def pos(self):
        if self.file:
            self.file.pos()
        return 0

    def isSequential(self):
        if self.file:
            return self.file.isSequential()
        return False

    def size(self):
        return self.file.size()

    def reset(self):
        if self.file:
            self.file.seek(0)
            return True
        return False

    def atEnd(self):
        if self.file:
            return self.file.atEnd()
        return False