atuin 18.24.1

atuin - magical shell history
use std::sync::Arc;

use atuin_client::api_client;
use atuin_client::settings::Settings;
use atuin_common::time::DurationExt;
use colored::Colorize;
use eyre::{Result, bail};

use crate::i18n::fl;
use crate::{SHA, VERSION};

pub async fn run(settings: &Arc<Settings>) -> Result<()> {
    if !settings.logged_in().await? {
        bail!(fl!("sync-status-not-logged-in"));
    }

    let caps = api_client::caps_client(settings)?;
    let client = api_client::Client::new(
        settings.sync_address.clone(),
        &settings.sync_auth_token().await?,
        settings.network_connect_timeout,
        settings.network_timeout,
        &settings.extra_headers,
        caps,
    )?;

    let me = client.me().await?;
    let last_sync = settings.last_sync().await?;

    println!("{}\n", fl!("sync-status-version", version = VERSION, sha = SHA));

    println!("{}", fl!("sync-status-local").green());

    if settings.auto_sync {
        println!(
            "{}",
            fl!(
                "sync-status-frequency",
                frequency = settings.sync_frequency.display().largest_unit().to_string()
            )
        );
        println!(
            "{}",
            fl!(
                "sync-status-last-sync",
                time = last_sync.to_offset(settings.timezone.0).to_string()
            )
        );
    }

    if settings.auto_sync {
        println!("{}", fl!("sync-status-remote").green());
        println!("{}", fl!("sync-status-address", address = settings.sync_address.to_string()));
        println!("{}", fl!("sync-status-username", username = me.username));
    }

    Ok(())
}