blob: 131968b887c6baebbe7bb75acb6267174a378b5f [file] [log] [blame]
// Copyright (c) 2023, 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.
import 'package:clock/clock.dart';
import 'package:file/file.dart';
import 'constants.dart';
import 'utils.dart';
/// Creates the text file that will contain the client ID
/// which will be used across all related tools for analytics
/// reporting in GA.
void createClientIdFile({required File clientIdFile}) {
clientIdFile.createSync(recursive: true);
clientIdFile.writeAsStringSync(Uuid().generateV4());
}
/// Creates the configuration file with the default message
/// in the user's home directory.
void createConfigFile({
required File configFile,
required Directory homeDirectory,
}) {
configFile.createSync(recursive: true);
// If the user was previously opted out, then we will
// replace the line that assumes automatic opt in with
// an opt out from the start
if (legacyOptOut(homeDirectory: homeDirectory)) {
configFile.writeAsStringSync(
kConfigString.replaceAll('reporting=1', 'reporting=0'));
} else {
configFile.writeAsStringSync(kConfigString);
}
}
/// Creates that file that will persist dismissed survey ids.
void createDismissedSurveyFile({required File dismissedSurveyFile}) {
dismissedSurveyFile.createSync(recursive: true);
dismissedSurveyFile.writeAsStringSync('{}');
}
/// Creates that log file that will store the record formatted
/// events locally on the user's machine.
void createLogFile({required File logFile}) {
logFile.createSync(recursive: true);
}
/// Creates the session file which will contain
/// the current session id which is the current timestamp.
///
/// It also returns the timestamp used for the session if it needs
/// to be accessed.
DateTime createSessionFile({required File sessionFile}) {
final now = clock.now();
sessionFile.createSync(recursive: true);
writeSessionContents(sessionFile: sessionFile);
return now;
}
/// Performs all of the initialization checks for the required files.
///
/// Returns `true` if the config file was created indicating it is the first
/// time this package was run on a user's machine.
///
/// Checks for the following:
/// - Config file
/// - Client ID file
/// - Session JSON file
/// - Log file
/// - Dismissed survey JSON file
bool runInitialization({
required Directory homeDirectory,
}) {
var firstRun = false;
final dartToolDirectory =
homeDirectory.childDirectory(kDartToolDirectoryName);
// When the config file doesn't exist, initialize it with the default tools
// and the current date.
final configFile = dartToolDirectory.childFile(kConfigFileName);
if (!configFile.existsSync()) {
firstRun = true;
createConfigFile(
configFile: configFile,
homeDirectory: homeDirectory,
);
}
// Begin initialization checks for the client id.
final clientFile = dartToolDirectory.childFile(kClientIdFileName);
if (!clientFile.existsSync()) {
createClientIdFile(clientIdFile: clientFile);
}
// Begin initialization checks for the session file.
final sessionFile = dartToolDirectory.childFile(kSessionFileName);
if (!sessionFile.existsSync()) {
createSessionFile(sessionFile: sessionFile);
}
// Begin initialization checks for the log file to persist events locally.
final logFile = dartToolDirectory.childFile(kLogFileName);
if (!logFile.existsSync()) {
createLogFile(logFile: logFile);
}
// Begin initialization checks for the dismissed survey file.
final dismissedSurveyFile =
dartToolDirectory.childFile(kDismissedSurveyFileName);
if (!dismissedSurveyFile.existsSync()) {
createDismissedSurveyFile(dismissedSurveyFile: dismissedSurveyFile);
}
return firstRun;
}