Add a libraries list command

This commit is contained in:
Marc Plano-Lesay 2024-12-03 19:30:08 +11:00
parent 776c9b005f
commit 331f24e9af
Signed by: kernald
GPG key ID: 66A41B08CC62A6CF
6 changed files with 66 additions and 0 deletions

View file

@ -5,6 +5,7 @@ use crate::{
use chrono::{DateTime, Utc};
use color_eyre::eyre::Result;
use tabled::{settings::Style, Table, Tabled};
#[derive(Tabled)]
struct Album {
#[tabled(rename = "Name")]

View file

@ -10,6 +10,7 @@ use tabled::{
},
Table, Tabled,
};
#[derive(Tabled)]
struct Asset {
#[tabled(rename = "Path")]

View file

@ -0,0 +1,58 @@
use std::fmt::Display;
use crate::{
actions::{action::Action, fetch_all_libraries::FetchAllLibraries},
context::Context,
};
use chrono::{DateTime, Utc};
use color_eyre::eyre::Result;
use tabled::{settings::Style, Table, Tabled};
#[derive(Tabled)]
struct Library {
#[tabled(rename = "Name")]
name: String,
#[tabled(rename = "Assets count")]
assets_count: u32,
#[tabled(display_with = "display_paths", rename = "Import paths")]
import_paths: Vec<String>,
#[tabled(rename = "Updated at")]
updated_at: DateTime<Utc>,
#[tabled(display_with = "display_option", rename = "Refreshed at")]
refreshed_at: Option<DateTime<Utc>>,
}
pub async fn list_libraries(ctx: Context) -> Result<()> {
let mut libraries: Vec<_> = FetchAllLibraries::new(())
.execute(&ctx)
.await?
.into_iter()
.map(|library| Library {
name: library.name,
assets_count: library.asset_count as u32,
import_paths: library.import_paths,
updated_at: library.updated_at,
refreshed_at: library.refreshed_at,
})
.collect();
libraries.sort_by_key(|library| library.name.to_lowercase());
println!("{}", Table::new(libraries).with(Style::rounded()),);
Ok(())
}
fn display_option<T>(o: &Option<T>) -> String
where
T: Display,
{
match o {
Some(s) => format!("{}", s),
None => String::new(),
}
}
fn display_paths(paths: &[String]) -> String {
paths.join(", ")
}

View file

@ -3,6 +3,7 @@ pub mod delete_albums;
pub mod delete_assets;
pub mod list_albums;
pub mod list_assets;
pub mod list_libraries;
pub mod missing_date_of_birth;
pub mod scan_libraries;
pub mod server_features;