Skip to content

Commit 9e77b63

Browse files
committed
Camelot in renamer
1 parent e8d9fbb commit 9e77b63

File tree

4 files changed

+44
-6
lines changed

4 files changed

+44
-6
lines changed

crates/onetagger-autotag/src/lib.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use crossbeam_channel::{unbounded, Sender, Receiver};
2323
use onetagger_tag::{AudioFileFormat, Tag, Field, TagDate, CoverType, TagImpl, EXTENSIONS};
2424
use onetagger_shared::Settings;
2525
use onetagger_player::AudioSources;
26-
use onetagger_tagger::{Track, AudioFileInfo, TaggerConfig, StylesOptions, AutotaggerSource, AutotaggerSourceBuilder, CAMELOT_NOTES};
26+
use onetagger_tagger::{Track, AudioFileInfo, TaggerConfig, StylesOptions, AutotaggerSource, AutotaggerSourceBuilder};
2727

2828
use crate::shazam::Shazam;
2929
mod shazam;
@@ -121,9 +121,7 @@ impl TrackImpl for Track {
121121
let mut value = self.key.as_ref().unwrap().to_string();
122122
// Convert to camelot
123123
if config.camelot {
124-
if let Some((_, c)) = CAMELOT_NOTES.iter().find(|(o, _)| o == &value) {
125-
value = c.to_string();
126-
}
124+
value = onetagger_tagger::to_camelot(&value).to_owned();
127125
}
128126
tag.set_field(Field::Key, vec![value], config.overwrite_tag(SupportedTag::Key));
129127
}

crates/onetagger-renamer/src/docs.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ lazy_static! {
4242
SymbolDoc::prop("last", "Get the last item in an array"),
4343
];
4444

45-
pub static ref FUNCTIONS: [SymbolDoc; 15] = [
45+
pub static ref FUNCTIONS: [SymbolDoc; 17] = [
4646
SymbolDoc::f("lower", "Convert all to lowercase", vec![]),
4747
SymbolDoc::f("lowercase", "Convert all to lowercase", vec![]),
4848
SymbolDoc::f("upper", "Convert all to uppercase", vec![]),
@@ -58,7 +58,8 @@ lazy_static! {
5858
SymbolDoc::f("join", "Join array into string with custom separator", vec![DocParameter::s("separator", true)]),
5959
SymbolDoc::f("parent", "Get parent folder of path", vec![]),
6060
SymbolDoc::f("filename", "Get file/folder name of path", vec![]),
61-
61+
SymbolDoc::f("camelot", "Convert key to camelot, or keep original", vec![DocParameter::s("value", true)]),
62+
SymbolDoc::f("uncamelot", "Convert key from camelot, or keep original", vec![DocParameter::s("value", true)]),
6263
];
6364
}
6465

crates/onetagger-renamer/src/parser.rs

+22
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,28 @@ impl Token for TokenFunction {
786786
Some(Data::String(a.last()?.to_string()))
787787
},
788788
}
789+
},
790+
// Conver to camelot
791+
"camelot" => {
792+
match data {
793+
Data::String(s) => {
794+
Some(Data::String(onetagger_tagger::to_camelot(s).to_owned()))
795+
},
796+
Data::Array(a) => {
797+
Some(Data::Array(a.iter().map(|v| onetagger_tagger::to_camelot(v).to_owned()).collect()))
798+
}
799+
}
800+
},
801+
// Convert from camelot
802+
"uncamelot" => {
803+
match data {
804+
Data::String(s) => {
805+
Some(Data::String(onetagger_tagger::from_camelot(s).to_owned()))
806+
},
807+
Data::Array(a) => {
808+
Some(Data::Array(a.iter().map(|v| onetagger_tagger::from_camelot(v).to_owned()).collect()))
809+
}
810+
}
789811
}
790812
f => {
791813
error!("Invalid function: {f}!");

crates/onetagger-tagger/src/lib.rs

+17
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,23 @@ pub const CAMELOT_NOTES: [(&str, &str); 35] = [
474474
("E", "12B"),
475475
];
476476

477+
/// Convert to camelot or return original
478+
pub fn to_camelot(key: &str) -> &str {
479+
if let Some((_, v)) = CAMELOT_NOTES.iter().find(|(k, _)| *k == key.trim()) {
480+
return *v;
481+
}
482+
key
483+
}
484+
485+
/// Convert from camelot to normal key
486+
pub fn from_camelot(key: &str) -> &str {
487+
if let Some((v, _)) = CAMELOT_NOTES.iter().find(|(_, k)| *k == key.trim()) {
488+
return *v;
489+
}
490+
key
491+
}
492+
493+
477494
pub trait LyricsExt {
478495
/// Generate LRC data
479496
/// If meta is present, will be written

0 commit comments

Comments
 (0)