From c55f50162de421e35619fba667d6af6cbc163ebe Mon Sep 17 00:00:00 2001 From: unspeaker Date: Sat, 5 Apr 2025 07:27:12 +0300 Subject: [PATCH] make parsing mode configurable --- src/model/entry.rs | 2 +- src/model/metadata.rs | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/model/entry.rs b/src/model/entry.rs index 03d1617..4066426 100644 --- a/src/model/entry.rs +++ b/src/model/entry.rs @@ -38,7 +38,7 @@ impl Entry { Ok(Some(Self { depth, path: path.to_path_buf().into(), - info: Arc::new(RwLock::new(Metadata::new(path)?)), + info: Arc::new(RwLock::new(Metadata::new(path, false)?)), })) } pub fn is_directory (&self) -> bool { diff --git a/src/model/metadata.rs b/src/model/metadata.rs index 702a1d0..6896dd2 100644 --- a/src/model/metadata.rs +++ b/src/model/metadata.rs @@ -3,7 +3,12 @@ use std::fs::File; use std::io::{BufReader, Read}; use std::borrow::Borrow; use byte_unit::{Byte, Unit::MB}; -use lofty::{file::TaggedFileExt, probe::Probe, tag::{Accessor, Tag, TagItem, ItemKey, ItemValue}}; +use lofty::{ + probe::Probe, + file::TaggedFileExt, + config::{ParseOptions, ParsingMode}, + tag::{Accessor, Tag, TagItem, ItemKey, ItemValue} +}; pub enum Metadata { Directory { @@ -33,10 +38,13 @@ pub enum Metadata { } impl Metadata { - pub fn new (path: &Path) -> Usually { - let reader = BufReader::new(File::open(path)?); - let probe = Probe::new(reader) - //.options(ParseOptions::new().parsing_mode(ParsingMode::Strict)) + pub fn new (path: &Path, strict: bool) -> Usually { + let probe = Probe::new(BufReader::new(File::open(path)?)) + .options(ParseOptions::new().parsing_mode(if strict { + ParsingMode::Strict + } else { + ParsingMode::BestAttempt + })) .guess_file_type()?; if probe.file_type().is_some() { let file = lofty::read_from_path(path)?;