46 """ |
46 """ |
47 Class method to get a reference to our singleton. |
47 Class method to get a reference to our singleton. |
48 |
48 |
49 @param networkAccessManager reference to the network access manager |
49 @param networkAccessManager reference to the network access manager |
50 (QNetworkAccessManager) |
50 (QNetworkAccessManager) |
|
51 @return reference to the network monitor singleton (E5NetworkMonitor) |
51 """ |
52 """ |
52 if cls._monitor is None: |
53 if cls._monitor is None: |
53 cls._monitor = E5NetworkMonitor(networkAccessManager) |
54 cls._monitor = E5NetworkMonitor(networkAccessManager) |
54 cls._monitor.setAttribute(Qt.WA_DeleteOnClose, True) |
55 cls._monitor.setAttribute(Qt.WA_DeleteOnClose, True) |
55 |
56 |
84 self.__replyHeaders = QStandardItemModel(self) |
85 self.__replyHeaders = QStandardItemModel(self) |
85 self.__replyHeaders.setHorizontalHeaderLabels( |
86 self.__replyHeaders.setHorizontalHeaderLabels( |
86 [self.trUtf8("Name"), self.trUtf8("Value")]) |
87 [self.trUtf8("Name"), self.trUtf8("Value")]) |
87 self.responseHeadersList.setModel(self.__replyHeaders) |
88 self.responseHeadersList.setModel(self.__replyHeaders) |
88 self.responseHeadersList.horizontalHeader().setStretchLastSection(True) |
89 self.responseHeadersList.horizontalHeader().setStretchLastSection(True) |
89 self.responseHeadersList.doubleClicked.connect(self.__showHeaderDetails) |
90 self.responseHeadersList.doubleClicked.connect( |
|
91 self.__showHeaderDetails) |
90 |
92 |
91 self.requestsList.horizontalHeader().setStretchLastSection(True) |
93 self.requestsList.horizontalHeader().setStretchLastSection(True) |
92 self.requestsList.verticalHeader().setMinimumSectionSize(-1) |
94 self.requestsList.verticalHeader().setMinimumSectionSize(-1) |
93 |
95 |
94 self.__proxyModel = QSortFilterProxyModel(self) |
96 self.__proxyModel = QSortFilterProxyModel(self) |
95 self.__proxyModel.setFilterKeyColumn(-1) |
97 self.__proxyModel.setFilterKeyColumn(-1) |
96 self.searchEdit.textChanged.connect(self.__proxyModel.setFilterFixedString) |
98 self.searchEdit.textChanged.connect( |
|
99 self.__proxyModel.setFilterFixedString) |
97 |
100 |
98 self.removeButton.clicked[()].connect(self.requestsList.removeSelected) |
101 self.removeButton.clicked[()].connect(self.requestsList.removeSelected) |
99 self.removeAllButton.clicked[()].connect(self.requestsList.removeAll) |
102 self.removeAllButton.clicked[()].connect(self.requestsList.removeAll) |
100 |
103 |
101 self.__model = E5RequestModel(networkAccessManager, self) |
104 self.__model = E5RequestModel(networkAccessManager, self) |
102 self.__proxyModel.setSourceModel(self.__model) |
105 self.__proxyModel.setSourceModel(self.__model) |
103 self.requestsList.setModel(self.__proxyModel) |
106 self.requestsList.setModel(self.__proxyModel) |
104 self.__proxyModel.rowsInserted.connect(self.requestsList.scrollToBottom) |
107 self.__proxyModel.rowsInserted.connect( |
105 self.requestsList.selectionModel().currentChanged[QModelIndex, QModelIndex]\ |
108 self.requestsList.scrollToBottom) |
|
109 self.requestsList.selectionModel()\ |
|
110 .currentChanged[QModelIndex, QModelIndex]\ |
106 .connect(self.__currentChanged) |
111 .connect(self.__currentChanged) |
107 |
112 |
108 fm = self.fontMetrics() |
113 fm = self.fontMetrics() |
109 em = fm.width("m") |
114 em = fm.width("m") |
110 self.requestsList.horizontalHeader().resizeSection(0, em * 5) |
115 self.requestsList.horizontalHeader().resizeSection(0, em * 5) |
188 |
193 |
189 row = index.row() |
194 row = index.row() |
190 name = headerList.model().data(headerList.model().index(row, 0)) |
195 name = headerList.model().data(headerList.model().index(row, 0)) |
191 value = headerList.model().data(headerList.model().index(row, 1)) |
196 value = headerList.model().data(headerList.model().index(row, 1)) |
192 if self.__headersDlg is None: |
197 if self.__headersDlg is None: |
193 from .E5NetworkHeaderDetailsDialog import E5NetworkHeaderDetailsDialog |
198 from .E5NetworkHeaderDetailsDialog import \ |
|
199 E5NetworkHeaderDetailsDialog |
194 self.__headersDlg = E5NetworkHeaderDetailsDialog(self) |
200 self.__headersDlg = E5NetworkHeaderDetailsDialog(self) |
195 self.__headersDlg.setData(name, value) |
201 self.__headersDlg.setData(name, value) |
196 self.__headersDlg.show() |
202 self.__headersDlg.show() |
197 |
203 |
198 |
204 |
247 """ |
253 """ |
248 Private method to add a request object to the model. |
254 Private method to add a request object to the model. |
249 |
255 |
250 @param req reference to the request object (E5NetworkRequest) |
256 @param req reference to the request object (E5NetworkRequest) |
251 """ |
257 """ |
252 self.beginInsertRows(QModelIndex(), len(self.requests), len(self.requests)) |
258 self.beginInsertRows( |
|
259 QModelIndex(), len(self.requests), len(self.requests)) |
253 self.requests.append(req) |
260 self.requests.append(req) |
254 req.reply.finished[()].connect(self.__addReply) |
261 req.reply.finished[()].connect(self.__addReply) |
255 self.endInsertRows() |
262 self.endInsertRows() |
256 |
263 |
257 def __addReply(self): |
264 def __addReply(self): |
275 self.requests[offset].replyHeaders.append(( |
282 self.requests[offset].replyHeaders.append(( |
276 str(header, "utf-8"), str(reply.rawHeader(header), "utf-8"))) |
283 str(header, "utf-8"), str(reply.rawHeader(header), "utf-8"))) |
277 |
284 |
278 # save reply info to be displayed |
285 # save reply info to be displayed |
279 status = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) or 0 |
286 status = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) or 0 |
280 reason = reply.attribute(QNetworkRequest.HttpReasonPhraseAttribute) or "" |
287 reason = \ |
|
288 reply.attribute(QNetworkRequest.HttpReasonPhraseAttribute) or "" |
281 self.requests[offset].response = "{0:d} {1}".format(status, reason) |
289 self.requests[offset].response = "{0:d} {1}".format(status, reason) |
282 self.requests[offset].length = reply.header(QNetworkRequest.ContentLengthHeader) |
290 self.requests[offset].length = \ |
283 self.requests[offset].contentType = reply.header(QNetworkRequest.ContentTypeHeader) |
291 reply.header(QNetworkRequest.ContentLengthHeader) |
|
292 self.requests[offset].contentType = \ |
|
293 reply.header(QNetworkRequest.ContentTypeHeader) |
284 |
294 |
285 if status == 302: |
295 if status == 302: |
286 target = reply.attribute(QNetworkRequest.RedirectionTargetAttribute) or QUrl() |
296 target = reply.attribute( |
|
297 QNetworkRequest.RedirectionTargetAttribute) or QUrl() |
287 self.requests[offset].info = \ |
298 self.requests[offset].info = \ |
288 self.trUtf8("Redirect: {0}").format(target.toString()) |
299 self.trUtf8("Redirect: {0}").format(target.toString()) |
289 |
300 |
290 def headerData(self, section, orientation, role=Qt.DisplayRole): |
301 def headerData(self, section, orientation, role=Qt.DisplayRole): |
291 """ |
302 """ |