blob: fa7a77cd911e2cf09d370739001cfa70299fbec5 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import '../base/context.dart';
import '../base/user_messages.dart';
import '../doctor.dart';
import 'visual_studio.dart';
VisualStudioValidator get visualStudioValidator => context.get<VisualStudioValidator>();
class VisualStudioValidator extends DoctorValidator {
const VisualStudioValidator() : super('Visual Studio - develop for Windows');
int get majorVersion => visualStudio.fullVersion != null
? int.tryParse(visualStudio.fullVersion.split('.')[0])
: null;
@override
Future<ValidationResult> validate() async {
final List<ValidationMessage> messages = <ValidationMessage>[];
ValidationType status = ValidationType.missing;
String versionInfo;
if (visualStudio.isInstalled) {
status = ValidationType.installed;
messages.add(ValidationMessage(
userMessages.visualStudioLocation(visualStudio.installLocation)
));
messages.add(ValidationMessage(userMessages.visualStudioVersion(
visualStudio.displayName,
visualStudio.fullVersion,
)));
if (visualStudio.isPrerelease) {
messages.add(ValidationMessage(userMessages.visualStudioIsPrerelease));
}
// Messages for faulty installations.
if (visualStudio.isRebootRequired) {
status = ValidationType.partial;
messages.add(ValidationMessage.error(userMessages.visualStudioRebootRequired));
} else if (!visualStudio.isComplete) {
status = ValidationType.partial;
messages.add(ValidationMessage.error(userMessages.visualStudioIsIncomplete));
} else if (!visualStudio.isLaunchable) {
status = ValidationType.partial;
messages.add(ValidationMessage.error(userMessages.visualStudioNotLaunchable));
} else if (!visualStudio.hasNecessaryComponents) {
status = ValidationType.partial;
messages.add(ValidationMessage.error(
userMessages.visualStudioMissingComponents(
visualStudio.workloadDescription,
visualStudio.necessaryComponentDescriptions(majorVersion),
),
));
}
versionInfo = '${visualStudio.displayName} ${visualStudio.displayVersion}';
} else {
status = ValidationType.missing;
messages.add(ValidationMessage.error(
userMessages.visualStudioMissing(
visualStudio.workloadDescription,
visualStudio.necessaryComponentDescriptions(majorVersion),
),
));
}
return ValidationResult(status, messages, statusInfo: versionInfo);
}
}