blob: 6ea8966e36fce5d2aa50ce1b144ec136232e20e6 [file] [log] [blame]
// 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);
}
}