blob: a33039a7ae4270b4f746edeadf51cf4952a23f54 [file] [edit]
// Copyright (c) 2014, the timezone 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.
/// TimeZone initialization for browser environments.
///
/// ```dart
/// import 'package:timezone/browser.dart';
///
/// initializeTimeZone().then((_) {
/// final detroit = getLocation('America/Detroit');
/// final now = TZDateTime.now(detroit);
/// });
library;
import 'package:http/browser_client.dart' as browser;
import 'timezone.dart';
export 'package:timezone/timezone.dart'
show
Location,
TZDateTime,
TimeZone,
getLocation,
setLocalLocation,
timeZoneDatabase;
/// Path to the Time Zone default database.
const String tzDataDefaultPath =
'packages/timezone/data/$tzDataDefaultFilename';
/// Initialize Time Zone database.
///
/// Throws [TimeZoneInitException] when something is wrong.
///
/// ```dart
/// import 'package:timezone/browser.dart';
///
/// initializeTimeZone().then(() {
/// final detroit = getLocation('America/Detroit');
/// final detroitNow = TZDateTime.now(detroit);
/// });
/// ```
Future<void> initializeTimeZone([String path = tzDataDefaultPath]) async {
final client = browser.BrowserClient();
try {
final response = await client.get(
Uri.parse(path),
headers: {'Accept': 'application/octet-stream'},
);
if (response.statusCode == 200) {
initializeDatabase(response.bodyBytes);
} else {
throw TimeZoneInitException(
'Request failed with status: ${response.statusCode}',
);
}
} on TimeZoneInitException {
rethrow;
} on Exception catch (e) {
throw TimeZoneInitException(e.toString());
} finally {
client.close();
}
}