From 97ee7f249e9d00428e384355471fe61aaa2e23b6 Mon Sep 17 00:00:00 2001 From: Alex Janka Date: Sat, 10 Jul 2021 13:58:09 +1000 Subject: [PATCH] work begins... --- src/bin/converter.rs | 10 +++++----- src/fixers.rs | 18 ++++++++++++++++++ src/lib.rs | 7 +++++++ 3 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 src/fixers.rs diff --git a/src/bin/converter.rs b/src/bin/converter.rs index bac32f0..56ac174 100644 --- a/src/bin/converter.rs +++ b/src/bin/converter.rs @@ -1,9 +1,9 @@ -use ableton_rack_converter; -use xml_dom::level2::RefNode; +use ableton_rack_converter::{self, fixers}; fn main() { let file_load = String::from("C:\\Users\\janka\\Documents\\Projects\\Programming\\ableton-rack-converter\\validation\\Utility10.adg"); - let file_save = String::from("C:\\Users\\janka\\Documents\\Projects\\Programming\\ableton-rack-converter\\validation\\Utility10_save.adg"); - let device: RefNode = ableton_rack_converter::load_adg(&file_load); - ableton_rack_converter::save_adg(&device, &file_save); + let file_save = String::from("C:\\Users\\janka\\Documents\\Projects\\Programming\\ableton-rack-converter\\validation\\Utility10_save.xml"); + let mut device = ableton_rack_converter::load_adg(&file_load); + fixers::traverse_children(&mut device); + ableton_rack_converter::save_uncompressed(&device, &file_save); } diff --git a/src/fixers.rs b/src/fixers.rs new file mode 100644 index 0000000..ce8a2f9 --- /dev/null +++ b/src/fixers.rs @@ -0,0 +1,18 @@ +use xml_dom::level2::{Element, Node, RefNode}; + +pub fn traverse_children(node: &mut RefNode) { + match node.node_name().to_string().as_str() { + "OverwriteProtectionNumber" => fix_overwrite_protection(node), + _ => { + for mut e in node.child_nodes() { + traverse_children(&mut e); + } + } + } +} + +fn fix_overwrite_protection(node: &mut RefNode) { + node.set_attribute("Value", "FINDABLE") + .expect("couldnt set node value"); + println!("{}", node); +} diff --git a/src/lib.rs b/src/lib.rs index 8004798..a4b6352 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,6 +6,8 @@ use std::{ }; use xml_dom::{level2::RefNode, parser}; +pub mod fixers; + pub fn load_adg(filename: &str) -> RefNode { let contents = File::open(filename).expect("failed to load file"); let xml = decompress(contents); @@ -31,6 +33,11 @@ pub fn save_adg(dom: &RefNode, filename: &str) { fs::write(filename, compressed).expect("could not write file"); } +pub fn save_uncompressed(dom: &RefNode, filename: &str) { + let xml = encode(dom); + fs::write(filename, xml.as_bytes()).expect("could not write file"); +} + fn compress(xml: &str) -> Vec { let mut encoder = GzEncoder::new(Vec::new(), Compression::default()); encoder