From da48e2a391b95aef15a577ae8dbf46a5d9088544 Mon Sep 17 00:00:00 2001 From: Ian Hickson Date: Thu, 24 Mar 2016 22:31:03 -0700 Subject: [PATCH] Clean up prints in services/* We really shouldn't have two separate network library wrappers... I filed https://github.com/flutter/flutter/issues/2889 on that. But for now, this makes one of them have a generally better error handling story, and makes the other one only dump to the console in debug mode. It also makes both use debugPrint instead of print, and makes one use the 'mojom' prefix for mojom imports. --- .../flutter/lib/src/http/mojo_client.dart | 10 ++++- packages/flutter/lib/src/services/fetch.dart | 39 +++++++++++++------ .../flutter/lib/src/services/image_cache.dart | 15 ++++--- 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/packages/flutter/lib/src/http/mojo_client.dart b/packages/flutter/lib/src/http/mojo_client.dart index 3665f4220a1..af1d8f066aa 100644 --- a/packages/flutter/lib/src/http/mojo_client.dart +++ b/packages/flutter/lib/src/http/mojo_client.dart @@ -149,8 +149,14 @@ class MojoClient { ByteData data = await mojo.DataPipeDrainer.drainHandle(response.body); Uint8List bodyBytes = new Uint8List.view(data.buffer); return new Response(bodyBytes: bodyBytes, statusCode: response.statusCode); - } catch (e) { - print("NetworkService unavailable $e"); + } catch (exception) { + assert(() { + debugPrint('-- EXCEPTION CAUGHT BY NETWORKING HTTP LIBRARY -------------------------'); + debugPrint('An exception was raised while sending bytes to the Mojo network library:'); + debugPrint('$exception'); + debugPrint('------------------------------------------------------------------------'); + return true; + }); return new Response(statusCode: 500); } finally { loader.close(); diff --git a/packages/flutter/lib/src/services/fetch.dart b/packages/flutter/lib/src/services/fetch.dart index fbe8b594794..bf2f7fc1f8a 100644 --- a/packages/flutter/lib/src/services/fetch.dart +++ b/packages/flutter/lib/src/services/fetch.dart @@ -4,32 +4,47 @@ import 'dart:async'; -import 'package:mojo/mojo/url_request.mojom.dart'; -import 'package:mojo/mojo/url_response.mojom.dart'; -import 'package:mojo_services/mojo/url_loader.mojom.dart'; +import 'package:mojo/mojo/url_request.mojom.dart' as mojom; +import 'package:mojo/mojo/url_response.mojom.dart' as mojom; +import 'package:mojo_services/mojo/url_loader.mojom.dart' as mojom; import '../http/mojo_client.dart'; +import 'print.dart'; export 'package:mojo/mojo/url_response.mojom.dart' show UrlResponse; -Future fetch(UrlRequest request) async { - UrlLoaderProxy loader = new UrlLoaderProxy.unbound(); +Future fetch(mojom.UrlRequest request, { bool require200: false }) async { + mojom.UrlLoaderProxy loader = new mojom.UrlLoaderProxy.unbound(); try { MojoClient.networkService.ptr.createUrlLoader(loader); - UrlResponse response = (await loader.ptr.start(request)).response; + mojom.UrlResponse response = (await loader.ptr.start(request)).response; + if (require200 && (response.error != null || response.statusCode != 200)) { + StringBuffer message = new StringBuffer(); + message.writeln('Could not ${request.method ?? "fetch"} ${request.url ?? "resource"}'); + if (response.error != null) + message.writeln('Network error: ${response.error.code} ${response.error.description ?? ""}'); + if (response.statusCode != 200) + message.writeln('Protocol error: ${response.statusCode} ${response.statusLine ?? ""}'); + if (response.url != request.url) + message.writeln('Final URL after redirects was: ${response.url}'); + throw message; + } return response; - } catch (e) { - print("NetworkService unavailable $e"); - return new UrlResponse()..statusCode = 500; + } catch (exception) { + debugPrint('-- EXCEPTION CAUGHT BY NETWORKING HTTP LIBRARY -------------------------'); + debugPrint('An exception was raised while sending bytes to the Mojo network library:'); + debugPrint('$exception'); + debugPrint('------------------------------------------------------------------------'); + return null; } finally { loader.close(); } } -Future fetchUrl(String relativeUrl) { +Future fetchUrl(String relativeUrl, { bool require200: false }) { String url = Uri.base.resolve(relativeUrl).toString(); - UrlRequest request = new UrlRequest() + mojom.UrlRequest request = new mojom.UrlRequest() ..url = url ..autoFollowRedirects = true; - return fetch(request); + return fetch(request, require200: require200); } diff --git a/packages/flutter/lib/src/services/image_cache.dart b/packages/flutter/lib/src/services/image_cache.dart index 4141210ae9f..560e182c447 100644 --- a/packages/flutter/lib/src/services/image_cache.dart +++ b/packages/flutter/lib/src/services/image_cache.dart @@ -52,15 +52,14 @@ class _UrlFetcher implements ImageProvider { @override Future loadImage() async { - UrlResponse response = await fetchUrl(_url); - if (response.statusCode >= 400) { - print("Failed (${response.statusCode}) to load image $_url"); - return null; + UrlResponse response = await fetchUrl(_url, require200: true); + if (response != null) { + return new ImageInfo( + image: await decodeImageFromDataPipe(response.body), + scale: _scale + ); } - return new ImageInfo( - image: await decodeImageFromDataPipe(response.body), - scale: _scale - ); + return null; } @override