mirror of
https://github.com/atuinsh/atuin.git
synced 2024-11-22 16:23:54 +01:00
Adds stats summary (#384)
* stat command parsing is handled without subcommands * Updates match clause based on PR review Co-authored-by: Conrad Ludgate <oon@conradludgate.com> * updates value returned by match based on PR review * adds vscode to gitignore * use an if statement instead of match Co-authored-by: Satyarth <satyarth.sampath@gojek.com> Co-authored-by: Conrad Ludgate <oon@conradludgate.com>
This commit is contained in:
parent
7a394b0115
commit
4a839dab44
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@
|
||||
*/target
|
||||
.env
|
||||
.idea/
|
||||
.vscode/
|
||||
|
@ -29,7 +29,6 @@ pub enum Cmd {
|
||||
Import(import::Cmd),
|
||||
|
||||
/// Calculate statistics for your history
|
||||
#[clap(subcommand)]
|
||||
Stats(stats::Cmd),
|
||||
|
||||
/// Output shell setup
|
||||
|
@ -14,12 +14,9 @@ use atuin_client::{
|
||||
|
||||
#[derive(Parser)]
|
||||
#[clap(infer_subcommands = true)]
|
||||
pub enum Cmd {
|
||||
/// Compute statistics for all of time
|
||||
All,
|
||||
|
||||
/// Compute statistics for a single day
|
||||
Day { words: Vec<String> },
|
||||
pub struct Cmd {
|
||||
/// compute statistics for the specified period, leave blank for statistics since the beginning
|
||||
period: Vec<String>,
|
||||
}
|
||||
|
||||
fn compute_stats(history: &[History]) -> Result<()> {
|
||||
@ -28,7 +25,6 @@ fn compute_stats(history: &[History]) -> Result<()> {
|
||||
for i in history {
|
||||
*commands.entry(i.command.clone()).or_default() += 1;
|
||||
}
|
||||
|
||||
let most_common_command = commands.iter().max_by(|a, b| a.1.cmp(b.1));
|
||||
|
||||
if most_common_command.is_none() {
|
||||
@ -72,32 +68,19 @@ impl Cmd {
|
||||
settings: &Settings,
|
||||
) -> Result<()> {
|
||||
let context = current_context();
|
||||
|
||||
match self {
|
||||
Self::Day { words } => {
|
||||
let words = if words.is_empty() {
|
||||
String::from("yesterday")
|
||||
} else {
|
||||
words.join(" ")
|
||||
};
|
||||
|
||||
let start = parse_date_string(&words, Local::now(), settings.dialect.into())?;
|
||||
let end = start + Duration::days(1);
|
||||
|
||||
let history = db.range(start.into(), end.into()).await?;
|
||||
|
||||
compute_stats(&history)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Self::All => {
|
||||
let history = db.list(FilterMode::Global, &context, None, false).await?;
|
||||
|
||||
compute_stats(&history)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
let words = if self.period.is_empty() {
|
||||
String::from("all")
|
||||
} else {
|
||||
self.period.join(" ")
|
||||
};
|
||||
let history = if words.as_str() == "all" {
|
||||
db.list(FilterMode::Global, &context, None, false).await?
|
||||
} else {
|
||||
let start = parse_date_string(&words, Local::now(), settings.dialect.into())?;
|
||||
let end = start + Duration::days(1);
|
||||
db.range(start.into(), end.into()).await?
|
||||
};
|
||||
compute_stats(&history)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user