check_checksums/
check_checksums.rs

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