check_checksums/
check_checksums.rs

1/*
2SPDX-License-Identifier: GPL-3.0-or-later
3Copyright © 2024 Mike Robeson [dijksterhuis]
4*/
5mod helpers;
6use helpers::*;
7use ot_tools_io::{
8    ArrangementFile, BankFile, CalculateChecksum, CheckChecksum, OctatrackFileIO,
9    SampleSettingsFile,
10};
11use std::path::PathBuf;
12
13#[allow(dead_code)]
14fn arrangement_check() -> RBoxErr<()> {
15    let fp = PathBuf::from("test-data")
16        .join("arrange")
17        .join("full-options.work");
18    let bin = ArrangementFile::from_data_file(&fp)?;
19    println!("checksum from arrangement file: {:?}", bin.checksum);
20
21    let checksum = bin.calculate_checksum()?;
22    println!("calculated checksum for arrangement file: {checksum:?}");
23
24    if bin.check_checksum()? {
25        println!("arrangement file checksum is ok");
26    } else {
27        println!("bad arrangement file checksum");
28        panic!()
29    };
30    Ok(())
31}
32
33fn bank_check() -> RBoxErr<()> {
34    let fp = PathBuf::from("test-data")
35        .join("blank-project")
36        .join("bank01.work");
37    let bin = BankFile::from_data_file(&fp)?;
38    println!("checksum from bank file: {:?}", bin.checksum);
39
40    let checksum = bin.calculate_checksum()?;
41    println!("calculated checksum for bank file: {checksum:?}");
42
43    if bin.check_checksum()? {
44        println!("bank file checksum is ok");
45    } else {
46        println!("bad bank file checksum");
47        panic!()
48    };
49    Ok(())
50}
51
52fn markers_check() -> RBoxErr<()> {
53    let fp = PathBuf::from("test-data")
54        .join("blank-project")
55        .join("markers.work");
56    let bin = ArrangementFile::from_data_file(&fp)?;
57    println!("checksum from markers file: {:?}", bin.checksum);
58
59    let checksum = bin.calculate_checksum()?;
60    println!("calculated checksum for markers file: {checksum:?}");
61
62    if bin.check_checksum()? {
63        println!("markers file checksum is ok");
64    } else {
65        println!("bad markers file checksum");
66        panic!()
67    };
68
69    Ok(())
70}
71
72fn sample_check() -> RBoxErr<()> {
73    let fp = PathBuf::from("test-data").join("samples").join("sample.ot");
74    let bin = SampleSettingsFile::from_data_file(&fp)?;
75    println!("checksum from sample settings file: {:?}", bin.checksum);
76
77    let checksum = bin.calculate_checksum()?;
78    println!("calculated checksum for sample settings file: {checksum:?}");
79
80    if bin.check_checksum()? {
81        println!("sample settings file checksum is ok");
82    } else {
83        println!("bad sample settings file checksum");
84        panic!()
85    };
86    Ok(())
87}
88
89fn main() -> RBoxErr<()> {
90    println!("-------------------------");
91    // TODO: Arrangement checksums are yet to be reverse engineered
92    //       the `calculate_checksum` method will always return 0 until then
93    // arrangement_check();
94    // println!("-------------------------");
95    bank_check()?;
96    println!("-------------------------");
97    markers_check()?;
98    println!("-------------------------");
99    sample_check()?;
100    println!("-------------------------");
101    Ok(())
102}