Support license string

This commit is contained in:
Jaby 2024-08-21 20:46:03 +02:00
parent 0a1bcfacb1
commit 0608f220ac
3 changed files with 34 additions and 16 deletions

View File

@ -7,11 +7,12 @@ use crate::{config_reader::Directory, types::LicenseFile};
use super::{CDAudioFile, CommonProperties, Configuration, Error, File, FileKind, LZ4State}; use super::{CDAudioFile, CommonProperties, Configuration, Error, File, FileKind, LZ4State};
mod attribute_names { mod attribute_names {
pub const NAME: &'static str = "name"; pub const NAME: &'static str = "name";
pub const HIDDEN: &'static str = "hidden"; pub const HIDDEN: &'static str = "hidden";
pub const PADDED_SIZE: &'static str = "padded_size"; pub const PADDED_SIZE: &'static str = "padded_size";
pub const LBA_SOURCE: &'static str = "lba_source"; pub const LBA_SOURCE: &'static str = "lba_source";
pub const LZ4_STATE: &'static str = "lz4"; pub const LZ4_STATE: &'static str = "lz4";
pub const ALTLICENSE_TEXT: &'static str = "text";
} }
mod tag_names { mod tag_names {
@ -68,7 +69,7 @@ fn parse_description(description: roxmltree::Node, config: &mut Configuration) -
} }
fn parse_altlicense_path(license: roxmltree::Node) -> LicenseFile { fn parse_altlicense_path(license: roxmltree::Node) -> LicenseFile {
LicenseFile::from_tmd_option(path_from_node(&license, tag_names::ALTLICENSE).ok()) LicenseFile::from_tmd_option(path_from_node(&license, tag_names::ALTLICENSE).ok(), license.attribute(attribute_names::ALTLICENSE_TEXT))
} }
for node in description.descendants() { for node in description.descendants() {

View File

@ -235,7 +235,7 @@ fn process_system_area(system_area: &SystemArea, sec_writer: &mut dyn SectorWrit
format_if_error!(write_audio_zeros(sec_writer), "Writing license audio zeros failed with: {error_text}") format_if_error!(write_audio_zeros(sec_writer), "Writing license audio zeros failed with: {error_text}")
} }
fn write_tmd_file(sec_writer: &mut dyn SectorWriter, tmd_file: BufferedInputFile) -> Result<(), Error> { fn write_tmd_file(sec_writer: &mut dyn SectorWriter, tmd_file: BufferedInputFile, lic_text: &Option<String>) -> Result<(), Error> {
fn write_license_string(sec_writer: &mut dyn SectorWriter, text: &str) -> Result<(), Error> { fn write_license_string(sec_writer: &mut dyn SectorWriter, text: &str) -> Result<(), Error> {
let text_len = text.len(); let text_len = text.len();
@ -275,10 +275,20 @@ fn process_system_area(system_area: &SystemArea, sec_writer: &mut dyn SectorWrit
Ok(()) Ok(())
} }
format_if_error!(write_data_zeros(sec_writer), "Writing alt-license data zeros failed with: {error_text}")?; let lic_text = {
format_if_error!(write_license_string(sec_writer, " Not licensed by Sony Will not work on all hardware/software"), "Writing alt-license string from file failed with: {error_text}")?; if let Some(lic_text) = lic_text {
format_if_error!(write_license_logo(sec_writer, tmd_file), "Writing alt-license logo from file failed with: {error_text}")?; lic_text.as_ref()
format_if_error!(write_audio_zeros(sec_writer), "Writing alt-license audio zeros failed with: {error_text}") }
else {
""
}
};
format_if_error!(write_data_zeros(sec_writer), "Writing alt-license data zeros failed with: {error_text}")?;
format_if_error!(write_license_string(sec_writer, lic_text), "Writing alt-license string from file failed with: {error_text}")?;
format_if_error!(write_license_logo(sec_writer, tmd_file), "Writing alt-license logo from file failed with: {error_text}")?;
format_if_error!(write_audio_zeros(sec_writer), "Writing alt-license audio zeros failed with: {error_text}")
} }
let system_area_lba = system_area.lba.get_track_relative(); let system_area_lba = system_area.lba.get_track_relative();
@ -292,10 +302,10 @@ fn process_system_area(system_area: &SystemArea, sec_writer: &mut dyn SectorWrit
let license_file = format_if_error!(open_input_file_buffered(license_path), "Loading license file from {} failed with: {error_text}", license_path.to_string_lossy())?; let license_file = format_if_error!(open_input_file_buffered(license_path), "Loading license file from {} failed with: {error_text}", license_path.to_string_lossy())?;
write_license_file(sec_writer, license_file) write_license_file(sec_writer, license_file)
}, },
LicenseFile::TMD(tmd_path) => { LicenseFile::TMD(tmd_path, lic_text) => {
print_warning(format!("WARNING: An alternative license file was provided. {}", NOT_BOOTING_CD_STR)); print_warning(format!("WARNING: An alternative license file was provided. {}", NOT_BOOTING_CD_STR));
let tmd_file = format_if_error!(open_input_file_buffered(tmd_path), "Loading TMD file from {} failed with: {error_text}", tmd_path.to_string_lossy())?; let tmd_file = format_if_error!(open_input_file_buffered(tmd_path), "Loading TMD file from {} failed with: {error_text}", tmd_path.to_string_lossy())?;
write_tmd_file(sec_writer, tmd_file) write_tmd_file(sec_writer, tmd_file, lic_text)
}, },
LicenseFile::None => { LicenseFile::None => {
// No license specified - filling it with zeros // No license specified - filling it with zeros

View File

@ -108,7 +108,7 @@ impl CDDesc {
pub enum LicenseFile { pub enum LicenseFile {
None, None,
Authentic(PathBuf), Authentic(PathBuf),
TMD(PathBuf) TMD(PathBuf, Option<String>)
} }
impl LicenseFile { impl LicenseFile {
@ -122,9 +122,16 @@ impl LicenseFile {
} }
} }
pub fn from_tmd_option(option: Option<PathBuf>) -> LicenseFile { pub fn from_tmd_option(option: Option<PathBuf>, lic_text: Option<&str>) -> LicenseFile {
if let Some(path) = option { if let Some(path) = option {
LicenseFile::TMD(path) LicenseFile::TMD(path, {
if let Some(lic_text) = lic_text {
Some(lic_text.to_owned())
}
else {
None
}
})
} }
else { else {