| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // TODO(https://fxbug.dev/84961): Fix null safety and remove this language version. |
| // @dart=2.9 |
| |
| import 'dart:async'; |
| import 'dart:io'; |
| |
| import 'package:meta/meta.dart'; |
| import 'package:status/status.dart'; |
| |
| class DeviceData { |
| final String deviceName; |
| final String notes; |
| DeviceData({this.deviceName, this.notes}); |
| |
| @override |
| String toString() => '<DeviceData {deviceName: $deviceName} {notes: $notes}>'; |
| } |
| |
| class DeviceFilenameReader { |
| String getDeviceName({EnvReader envReader}) { |
| String deviceName; |
| // uses a file outside the build dir so that it is not removed by `gn clean` |
| File deviceFile = File('${envReader.getEnv('FUCHSIA_BUILD_DIR')}.device'); |
| if (deviceFile.existsSync()) { |
| List<String> lines = deviceFile.readAsLinesSync(); |
| if (lines.isNotEmpty) { |
| deviceName = lines[0]; |
| } |
| } |
| return deviceName; |
| } |
| } |
| |
| class PreferredDeviceReader { |
| DeviceData getDeviceName({ |
| @required EnvReader envReader, |
| DeviceFilenameReader filenameReader, |
| }) { |
| // if DEVICE_NAME was passed in fx -d, use it |
| String deviceName = envReader.getEnv('FUCHSIA_DEVICE_NAME'); |
| String notes = 'set by `fx -d`'; |
| if (deviceName == null) { |
| filenameReader ??= DeviceFilenameReader(); |
| deviceName = filenameReader.getDeviceName(envReader: envReader); |
| notes = deviceName != null ? 'set by `fx set-device`' : null; |
| } |
| return DeviceData(deviceName: deviceName, notes: notes); |
| } |
| } |
| |
| class EnvironmentCollector implements Collector { |
| @override |
| Future<List<Item>> collect({ |
| PreferredDeviceReader deviceReader, |
| DeviceFilenameReader filenameReader, |
| EnvReader envReader, |
| }) { |
| envReader ??= EnvReader.shared; |
| List<Item> result = []..add( |
| Item( |
| CategoryType.environmentInfo, |
| 'build_dir', |
| 'Current build directory', |
| envReader.getEnv('FUCHSIA_BUILD_DIR'), |
| ), |
| ); |
| |
| deviceReader ??= PreferredDeviceReader(); |
| DeviceData deviceData = deviceReader.getDeviceName( |
| filenameReader: filenameReader, |
| envReader: envReader, |
| ); |
| |
| if (deviceData.deviceName != null && deviceData.deviceName.isNotEmpty) { |
| result.add(Item(CategoryType.environmentInfo, 'device_name', |
| 'Device name', deviceData.deviceName, deviceData.notes)); |
| } |
| return Future.value(result); |
| } |
| } |