iris-chat 0.1.51

Iris Chat command line client and shared encrypted chat core
Documentation
use super::*;

pub(super) fn run(cli: Cli) -> Result<()> {
    if super::iris_service::route(&cli)? {
        return Ok(());
    }
    let Cli {
        json: json_output,
        data_dir,
        no_background_sync,
        command,
    } = cli;
    let command = match command {
        Commands::Maintenance(MaintenanceTopCommands::Update(cmd)) => {
            return run_iris_update(cmd, json_output);
        }
        other => other,
    };

    let data_dir = data_dir.unwrap_or_else(default_data_dir);
    ensure_private_data_dir(&data_dir)?;
    let command_name = command_name(&command).to_string();
    let data = match command {
        Commands::Messages(MessageTopCommands::Search { query, limit }) => {
            search_messages(&data_dir, &query, limit)?
        }
        Commands::Messages(MessageTopCommands::Tail {
            limit,
            follow,
            chat,
            interval_ms,
        }) => {
            if follow {
                follow_messages(&data_dir, chat.as_deref(), interval_ms, "tail")?;
                return Ok(());
            }
            tail_messages(&data_dir, limit, chat.as_deref())?
        }
        Commands::Messages(MessageTopCommands::Listen {
            chat,
            interval_ms,
            nearby_lan,
        }) => {
            listen(&data_dir, chat.as_deref(), interval_ms, nearby_lan)?;
            return Ok(());
        }
        command => {
            let cli_app = CliApp::open(&data_dir)?;
            let data = handle_command(&cli_app, &data_dir, command)?;
            let background_sync =
                !no_background_sync && should_spawn_background_sync(&cli_app.app.state(), &data);
            cli_app.app.shutdown();
            drop(cli_app);
            print_output(json_output, &command_name, data)?;
            if background_sync {
                spawn_background_sync(&data_dir);
            }
            return Ok(());
        }
    };
    print_output(json_output, &command_name, data)
}