1use anyhow::Result;
2use colored::*;
3
4pub enum TelemetryCommand {
5 Status,
6 Enable,
7 Disable,
8}
9
10pub fn run(cmd: TelemetryCommand) -> Result<()> {
11 match cmd {
12 TelemetryCommand::Status => {
13 let cfg = crate::pkg::config::read_config()?;
14 let status = if cfg.telemetry_enabled {
15 "Enabled".green()
16 } else {
17 "Disabled".yellow()
18 };
19 println!("{} telemetry is currently {}.", "::".bold().blue(), status);
20
21 if cfg.telemetry_enabled {
22 let id = crate::pkg::telemetry::get_anonymous_id();
23 println!("Anonymous Client ID: {}", id.cyan());
24 println!(
25 "\nThank you for helping us improve Zoi! We collect minimal, anonymous data about:"
26 );
27 println!("- {} (OS, Arch, Distro, Shell)", "Environment".bold());
28 println!("- {} (Action, Scope, Reason)", "Operations".bold());
29 println!(
30 "- {} (Name, Version, Repo, License)",
31 "Package Metadata".bold()
32 );
33 } else {
34 println!(
35 "\nTelemetry is anonymous and helps us prioritize features and platforms."
36 );
37 println!("Run 'zoi telemetry enable' to help the project.");
38 }
39 }
40 TelemetryCommand::Enable => {
41 let mut cfg = crate::pkg::config::read_user_config()?;
42
43 println!(
44 "{}",
45 "Notice: Enabling telemetry shares anonymous usage data to help improve Zoi."
46 .dimmed()
47 );
48 println!(
49 "{}",
50 "No personal data or IP addresses are ever collected.".dimmed()
51 );
52 println!(
53 "{} {}",
54 "Full Privacy Policy:".dimmed(),
55 "https://zillowe.qzz.io/legal/privacy".cyan()
56 );
57
58 cfg.telemetry_enabled = true;
59 crate::pkg::config::write_user_config(&cfg)?;
60 println!("{} telemetry enabled", "Success:".green());
61 }
62 TelemetryCommand::Disable => {
63 let mut cfg = crate::pkg::config::read_user_config()?;
64 cfg.telemetry_enabled = false;
65 crate::pkg::config::write_user_config(&cfg)?;
66 println!("{} telemetry disabled", "Success:".green());
67 }
68 }
69 Ok(())
70}