|
1 # -*- coding: utf-8 -*- |
|
2 |
|
3 # Copyright (c) 2009 Detlev Offenbach <detlev@die-offenbachs.de> |
|
4 # |
|
5 |
|
6 """ |
|
7 Module implementing a network reply object for special data. |
|
8 """ |
|
9 |
|
10 from PyQt4.QtCore import * |
|
11 from PyQt4.QtNetwork import QNetworkReply, QNetworkRequest |
|
12 |
|
13 class NetworkReply(QNetworkReply): |
|
14 """ |
|
15 Class implementing a QNetworkReply subclass for special data. |
|
16 """ |
|
17 def __init__(self, request, fileData, mimeType): |
|
18 """ |
|
19 Constructor |
|
20 |
|
21 @param request reference to the request object (QNetworkRequest) |
|
22 @param fileData reference to the data buffer (QByteArray) |
|
23 @param mimeType for the reply (string) |
|
24 """ |
|
25 QNetworkReply.__init__(self) |
|
26 |
|
27 self.__data = fileData |
|
28 |
|
29 self.setRequest(request) |
|
30 self.setOpenMode(QIODevice.ReadOnly) |
|
31 |
|
32 self.setHeader(QNetworkRequest.ContentTypeHeader, QVariant(mimeType)) |
|
33 self.setHeader(QNetworkRequest.ContentLengthHeader, |
|
34 QVariant(QByteArray.number(fileData.length()))) |
|
35 QTimer.singleShot(0, self, SIGNAL("metaDataChanged()")) |
|
36 QTimer.singleShot(0, self, SIGNAL("readyRead()")) |
|
37 |
|
38 def abort(self): |
|
39 """ |
|
40 Public slot to abort the operation. |
|
41 """ |
|
42 # do nothing |
|
43 pass |
|
44 |
|
45 def bytesAvailable(self): |
|
46 """ |
|
47 Public method to determined the bytes available for being read. |
|
48 |
|
49 @return bytes available (integer) |
|
50 """ |
|
51 return self.__data.length() + QNetworkReply.bytesAvailable(self) |
|
52 |
|
53 def readData(self, maxlen): |
|
54 """ |
|
55 Protected method to retrieve data from the reply object. |
|
56 |
|
57 @param maxlen maximum number of bytes to read (integer) |
|
58 @return string containing the data (string) |
|
59 """ |
|
60 len_ = min(maxlen, self.__data.length()) |
|
61 buffer = str(self.__data[:len_]) |
|
62 self.__data.remove(0, len_) |
|
63 if self.__data.length() == 0: |
|
64 QTimer.singleShot(0, self, SIGNAL("finished()")) |
|
65 return buffer |