summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authortomsmeding <tom.smeding@gmail.com>2020-01-05 20:44:27 +0100
committertomsmeding <tom.smeding@gmail.com>2020-01-05 20:44:27 +0100
commit8421f2c03d6f905b58b5447a6e0469519c7f8fa6 (patch)
tree6258db477e638c43a6c51cb0549c070fb0f8f9b2 /src/main.rs
Initial
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..6760ee7
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,41 @@
+use std::io;
+use std::fs::File;
+use argparse::{ArgumentParser, StoreTrue, Store};
+use crate::options::{EncodingOptions, Options};
+
+mod encoding;
+mod error;
+mod id3v2;
+mod options;
+mod util;
+
+fn main() -> io::Result<()> {
+ let options = {
+ let mut options: Options = Default::default();
+
+ {
+ let mut ap = ArgumentParser::new();
+ ap.set_description("ID3v2 tag editor/fixer. Incomplete/work-in-progress.");
+ ap.refer(&mut options.latin1_as_utf8)
+ .add_option(&["--assume-utf8"], StoreTrue,
+ "Assume that all strings specified as Latin-1 are really UTF-8.");
+ ap.refer(&mut options.file)
+ .required()
+ .add_argument("file", Store,
+ "File to operate on (probably a .mp3)");
+ ap.parse_args_or_exit();
+ }
+
+ options
+ };
+
+ let mut f = File::open(options.file)?;
+ let tag = id3v2::ID3v2::from_stream(&mut f)?;
+ println!("{:?}", tag);
+
+ for frame in tag.frames {
+ println!("{:?}", frame.interpret(&EncodingOptions { latin1_as_utf8: options.latin1_as_utf8 }));
+ }
+
+ Ok(())
+}