| ... |
... |
@@ -305,6 +305,8 @@ class HTTPRequest(GObject.GObject): |
|
305
|
305
|
|
|
306
|
306
|
def _on_timeout(self) -> None:
|
|
307
|
307
|
self._timeout_reached = True
|
|
|
308
|
+ self._timeout_id = None
|
|
|
309
|
+ self._set_error(HTTPRequestError.TIMEOUT)
|
|
308
|
310
|
self.cancel()
|
|
309
|
311
|
|
|
310
|
312
|
def _on_response(self,
|
| ... |
... |
@@ -312,9 +314,6 @@ class HTTPRequest(GObject.GObject): |
|
312
|
314
|
result: Gio.AsyncResult
|
|
313
|
315
|
) -> None:
|
|
314
|
316
|
|
|
315
|
|
- if self._is_finished:
|
|
316
|
|
- return
|
|
317
|
|
-
|
|
318
|
317
|
self._log.info('Request response received')
|
|
319
|
318
|
try:
|
|
320
|
319
|
self._input_stream = session.send_finish(result)
|
| ... |
... |
@@ -351,9 +350,6 @@ class HTTPRequest(GObject.GObject): |
|
351
|
350
|
input_stream: Gio.InputStream,
|
|
352
|
351
|
result: Gio.AsyncResult) -> None:
|
|
353
|
352
|
|
|
354
|
|
- if self._is_finished:
|
|
355
|
|
- return
|
|
356
|
|
-
|
|
357
|
353
|
try:
|
|
358
|
354
|
data = input_stream.read_bytes_finish(result)
|
|
359
|
355
|
except GLib.Error as error:
|
| ... |
... |
@@ -463,7 +459,8 @@ class HTTPRequest(GObject.GObject): |
|
463
|
459
|
|
|
464
|
460
|
def _check_content_overflow(self) -> None:
|
|
465
|
461
|
if self._received_size > self._response_content_length:
|
|
466
|
|
- self._finish_read(HTTPRequestError.CONTENT_OVERFLOW)
|
|
|
462
|
+ self._set_error(HTTPRequestError.CONTENT_OVERFLOW)
|
|
|
463
|
+ self.cancel()
|
|
467
|
464
|
|
|
468
|
465
|
def _on_restarted(self, _message: Soup.Message) -> None:
|
|
469
|
466
|
self._log.info('Restarted')
|
| ... |
... |
@@ -503,14 +500,16 @@ class HTTPRequest(GObject.GObject): |
|
503
|
500
|
|
|
504
|
501
|
self._set_complete()
|
|
505
|
502
|
|
|
|
503
|
+ def _set_error(self, error: HTTPRequestError) -> None:
|
|
|
504
|
+ self._log.info('Set Error: %s', error)
|
|
|
505
|
+ self._error = error
|
|
|
506
|
+
|
|
506
|
507
|
def _set_failed(self, error: HTTPRequestError) -> None:
|
|
507
|
508
|
self._log.info('Set Failed: %s', error)
|
|
508
|
509
|
self._is_finished = True
|
|
509
|
|
- if self._timeout_reached:
|
|
510
|
|
- self._timeout_id = None
|
|
511
|
|
- self._error = HTTPRequestError.TIMEOUT
|
|
512
|
|
- else:
|
|
513
|
|
- self._error = error
|
|
|
510
|
+
|
|
|
511
|
+ if self._error is None:
|
|
|
512
|
+ self._set_error(error)
|
|
514
|
513
|
|
|
515
|
514
|
self._close_all_streams()
|
|
516
|
515
|
self.emit('finished')
|