Skip to main content

zoi_cli/cmd/
telemetry.rs

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}