blob: 8237c0160f1493fb74e905797e4e8a3c5add4280 [file] [log] [blame]
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// dart:io based strategy for loading resources.
import "dart:io" show File, HttpClient, HttpClientRequest, HttpClientResponse;
import "dart:async" show Future, Stream;
import "dart:convert" show Encoding, UTF8;
import "package:typed_data/typed_buffers.dart" show Uint8Buffer;
Stream<List<int>> readAsStream(Uri uri) async* {
if (uri.scheme == "file") {
yield* new File.fromUri(uri).openRead();
return;
}
if (uri.scheme == "http" || uri.scheme == "https") {
HttpClientResponse response = await _httpGet(uri);
yield* response;
return;
}
throw new UnsupportedError("Unsupported scheme: $uri");
}
Future<List<int>> readAsBytes(Uri uri) async {
if (uri.scheme == "file") {
return new File.fromUri(uri).readAsBytes();
}
if (uri.scheme == "http" || uri.scheme == "https") {
HttpClientResponse response = await _httpGet(uri);
Uint8Buffer buffer = new Uint8Buffer();
await for (var bytes in response) {
buffer.addAll(bytes);
}
return buffer.toList();
}
throw new UnsupportedError("Unsupported scheme: $uri");
}
Future<String> readAsString(Uri uri, Encoding encoding) async {
if (encoding == null) encoding = UTF8;
if (uri.scheme == "file") {
return new File.fromUri(uri).readAsString(encoding: encoding);
}
if (uri.scheme == "http" || uri.scheme == "https") {
HttpClientResponse response = await _httpGet(uri);
Uint8Buffer buffer = new Uint8Buffer();
await for (var bytes in response) {
buffer.addAll(bytes);
}
new String.fromCharCodes(buffer.toList());
}
throw new UnsupportedError("Unsupported scheme: $uri");
}
Future<HttpClientResponse> _httpGet(Uri uri) async {
HttpClientRequest request = await new HttpClient().getUrl(uri);
return await request.close();
}