devalang_core/utils/
first_usage.rs1use crossterm::style::{Attribute, SetAttribute};
2use std::fmt::Write;
3
4use crate::{
5 config::settings::{get_devalang_homedir, set_user_config_bool, write_user_config_file},
6 utils::signature::get_signature,
7};
8
9pub fn check_is_first_usage() {
10 if get_devalang_homedir()
11 .join("config.json")
12 .try_exists()
13 .is_ok()
14 {
15 } else {
17 first_usage_welcome();
18 write_user_config_file();
19 }
20}
21
22pub fn first_usage_welcome() {
23 let version = env!("CARGO_PKG_VERSION");
24 print!("{}", get_signature(version));
25
26 let mut s = String::new();
27 let welcome_msg = format!(
28 "Welcome to Devalang ! \n\
29 It looks like this is your first time using the tool.\n\
30 A configuration file will be created in your home directory.\n\
31 ({})",
32 get_devalang_homedir().display()
33 );
34
35 write!(&mut s, "{}", SetAttribute(Attribute::Bold)).unwrap();
36 write!(&mut s, "{}", welcome_msg).unwrap();
37 write!(&mut s, "{}", SetAttribute(Attribute::Reset)).unwrap();
38
39 println!("");
40 println!("{}", s);
41 println!("");
42
43 first_usage_ask_for_telemetry();
44}
45
46pub fn first_usage_ask_for_telemetry() {
47 let telemetry_msg = "Would you like to enable anonymous telemetry ?";
48 let telemetry_desc = "This data helps us improve the tool. You can opt-out at any time.";
49
50 let telemetry_prompt = inquire::Confirm::new(telemetry_msg)
51 .with_help_message(telemetry_desc)
52 .with_default(false)
53 .prompt();
54
55 let telemetry_response = telemetry_prompt.unwrap_or(false);
56
57 write_user_config_file();
58
59 if telemetry_response == true {
60 println!("");
61 println!(
62 "Telemetry enabled. You can opt-out at any time by using 'devalang telemetry disable'"
63 );
64 println!("");
65
66 set_user_config_bool("telemetry", true);
67 } else {
68 println!("");
69 println!(
70 "Telemetry disabled. You can enable it at any time by using 'devalang telemetry enable'"
71 );
72 println!("");
73
74 set_user_config_bool("telemetry", false);
75 }
76}