1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
use librius::cli::{build_cli, run_cli};
use librius::config;
use librius::db;
use librius::i18n::{load_language, tr, tr_with};
use librius::utils::icons::ERR;
use librius::utils::{is_verbose, print_err, print_info, print_ok, set_verbose};
fn main() {
// ------------------------------------------------------------
// 1️⃣ Legge eventuali flag --lang e --verbose da CLI minimale
// ------------------------------------------------------------
let mut lang_arg: Option<String> = None;
let mut verbose = false;
{
let mut args = std::env::args().peekable();
while let Some(arg) = args.next() {
match arg.as_str() {
"-l" | "--lang" => {
if let Some(val) = args.peek() {
lang_arg = Some(val.clone());
args.next(); // consuma valore
}
}
"-v" | "--verbose" => {
verbose = true;
}
_ => {}
}
}
}
set_verbose(verbose);
// ------------------------------------------------------------
// 2️⃣ Carica o inizializza il file di configurazione
// ------------------------------------------------------------
print_info("Loading configuration...", is_verbose());
let config = config::load_or_init().unwrap_or_else(|_| panic!("{}Unable to load config", ERR));
// ------------------------------------------------------------
// 3️⃣ Determina la lingua effettiva
// ------------------------------------------------------------
let lang_code = lang_arg
.or_else(|| {
// tenta di leggere dal file di configurazione
Some(config.language.clone())
})
.unwrap_or_else(|| "en".to_string());
// Carica la lingua selezionata
load_language(&lang_code);
print_info(
&tr_with("app.language.loaded", &[("lang", &lang_code)]),
is_verbose(),
);
// ------------------------------------------------------------
// 4️⃣ Inizializza o apre il database
// ------------------------------------------------------------
let mut conn = db::start_db(&config)
.unwrap_or_else(|_| panic!("{}", &tr_with("db.open.failed", &[("icon-err", ERR)])));
// ------------------------------------------------------------
// 5️⃣ Esegue migrazioni DB e config
// ------------------------------------------------------------
if let Err(e) = db::migrate_db::run_migrations(&conn) {
print_err(&tr_with("db.migrate.failed", &[("error", &e.to_string())]));
} else {
print_ok(&tr("db.schema.verified"), is_verbose());
}
if let Err(e) = config::migrate_config(&conn, &config::config_file_path()) {
print_err(&tr_with(
"config.migrate.failed",
&[("error", &e.to_string())],
));
} else {
print_ok(&tr("config.schema.verified"), is_verbose());
}
// ------------------------------------------------------------
// 6️⃣ CLI localizzata ed esecuzione comandi
// ------------------------------------------------------------
let matches = build_cli().get_matches();
if let Err(e) = run_cli(&config, &matches, &mut conn) {
print_err(&format!("{} {}", ERR, e));
}
}