use libmirage::Context;
use libmirage::LanguagePackType;
use libmirage::prelude::*;
use std::env;
use std::fmt;
mod utils;
fn main() {
unsafe { libmirage::init() }.expect("mirage should init successfully");
let context = Context::new();
let disc = context
.load_image(&[&env::var("IMAGE_PATH").expect("`IMAGE_PATH` should be set")])
.expect("image should be loaded");
for track_index in 0..disc.number_of_tracks() {
let track = disc
.track_by_index(track_index)
.expect("track should exist");
let length = track.layout_get_length();
let duration = utils::duration_from_sectors(length);
println!(
"track {}, duration: {:?}, isrc: {:?}",
track.layout_get_track_number(),
fmt::from_fn(|f| utils::format_duration(f, duration)),
track.isrc()
);
track.enumerate_languages(|language| {
println!(" language {}", language.code());
for (name, type_) in LANGUAGE_PACK_TYPES {
if let Ok(value) = language.pack_data(*type_) {
println!(" {name}: {}", String::from_utf8_lossy(&value));
}
}
true
});
}
}
static LANGUAGE_PACK_TYPES: &[(&str, LanguagePackType)] = &[
("title", LanguagePackType::Title),
("performer", LanguagePackType::Performer),
("songwriter", LanguagePackType::Songwriter),
("composer", LanguagePackType::Composer),
("arranger", LanguagePackType::Arranger),
("message", LanguagePackType::Message),
("discid", LanguagePackType::DiscId),
("genre", LanguagePackType::Genre),
("toc", LanguagePackType::Toc),
("toc2", LanguagePackType::Toc2),
("res8a", LanguagePackType::Res8a),
("res8b", LanguagePackType::Res8b),
("res8c", LanguagePackType::Res8c),
("closedinfo", LanguagePackType::ClosedInfo),
("upcisrc", LanguagePackType::UpcIsrc),
("size", LanguagePackType::Size),
];