From 69f5175210f5b7513a536edd70759c5ee7c42668 Mon Sep 17 00:00:00 2001 From: yenjo Date: Wed, 1 Apr 2026 03:59:36 +0900 Subject: [PATCH] fix: read ratings from Sony RAW files --- src-tauri/src/file_management.rs | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src-tauri/src/file_management.rs b/src-tauri/src/file_management.rs index 7329e10a3..0c45e643d 100644 --- a/src-tauri/src/file_management.rs +++ b/src-tauri/src/file_management.rs @@ -2213,15 +2213,18 @@ pub fn load_metadata(path: String, app_handle: AppHandle) -> Result Vec { pub fn sync_metadata_from_xmp(source_path: &Path, metadata: &mut ImageMetadata) -> bool { let xmp_path = source_path.with_extension("xmp"); let xmp_path_upper = source_path.with_extension("XMP"); - let actual_xmp = if xmp_path.exists() { - Some(xmp_path) + + let mut changed = false; + + let content_opt: Option = if xmp_path.exists() { + fs::read_to_string(&xmp_path).ok() } else if xmp_path_upper.exists() { - Some(xmp_path_upper) + fs::read_to_string(&xmp_path_upper).ok() } else { - None + (|| { + let bytes = fs::read(source_path).ok()?; + let start = bytes.windows(16).position(|w| w == b"")?; + String::from_utf8(bytes[start..close + 2].to_vec()).ok() + })() }; - let mut changed = false; - - if let Some(xmp_file) = actual_xmp - && let Ok(content) = fs::read_to_string(&xmp_file) + if let Some(content) = content_opt { if metadata.rating == 0 && let Some(rating) = extract_xmp_rating(&content)