j_cli/command/
category.rs1use crate::config::YamlConfig;
2use crate::constants::{self, section};
3use crate::{error, info, usage};
4
5const VALID_CATEGORIES: &[&str] = constants::NOTE_CATEGORIES;
7
8pub fn handle_note(alias: &str, category: &str, config: &mut YamlConfig) {
11 if !config.contains(section::PATH, alias)
13 && !config.contains(section::INNER_URL, alias)
14 && !config.contains(section::OUTER_URL, alias)
15 {
16 error!("❌ 别名 {} 不存在", alias);
17 return;
18 }
19
20 if !VALID_CATEGORIES.contains(&category) {
22 usage!(
23 "j note <alias> <category> (可选: {})",
24 VALID_CATEGORIES.join(", ")
25 );
26 return;
27 }
28
29 match category {
30 c if c == section::OUTER_URL => {
31 if let Some(url) = config.get_property(section::INNER_URL, alias).cloned() {
33 config.set_property(section::OUTER_URL, alias, &url);
34 config.remove_property(section::INNER_URL, alias);
35 info!("✅ 将别名 {} 标记为 OUTER_URL 成功", alias);
36 } else {
37 error!("❌ 别名 {} 不在 INNER_URL 中,无法标记为 OUTER_URL", alias);
38 }
39 }
40 _ => {
41 if let Some(path) = config.get_property(section::PATH, alias).cloned() {
43 config.set_property(category, alias, &path);
44 info!(
45 "✅ 将别名 {} 标记为 {} 成功",
46 alias,
47 category.to_uppercase()
48 );
49 } else {
50 error!("❌ 别名 {} 不在 PATH 中,无法标记", alias);
51 }
52 }
53 }
54}
55
56pub fn handle_denote(alias: &str, category: &str, config: &mut YamlConfig) {
59 if !VALID_CATEGORIES.contains(&category) {
61 usage!(
62 "j denote <alias> <category> (可选: {})",
63 VALID_CATEGORIES.join(", ")
64 );
65 return;
66 }
67
68 if !config.contains(category, alias) {
69 error!("❌ 别名 {} 不在 {} 分类中", alias, category.to_uppercase());
70 return;
71 }
72
73 config.remove_property(category, alias);
74 info!(
75 "✅ 已将别名 {} 从 {} 中移除",
76 alias,
77 category.to_uppercase()
78 );
79}