diff --git a/rslib/src/media/sync.rs b/rslib/src/media/sync.rs index 5bf7dbcc6..88a879bb0 100644 --- a/rslib/src/media/sync.rs +++ b/rslib/src/media/sync.rs @@ -20,6 +20,7 @@ use std::collections::HashMap; use std::io::{Read, Write}; use std::path::Path; use std::{io, time}; +use unicode_normalization::is_nfc; static SYNC_MAX_FILES: usize = 25; static SYNC_MAX_BYTES: usize = (2.5 * 1024.0 * 1024.0) as usize; @@ -717,6 +718,16 @@ fn zip_files<'a>( break; } + #[cfg(target_vendor = "apple")] + { + if !is_nfc(&file.fname) { + // older Anki versions stored non-normalized filenames in the DB; clean them up + debug!(log, "clean up non-nfc entry"; "fname"=>&file.fname); + invalid_entries.push(&file.fname); + continue; + } + } + let file_data = if file.sha1.is_some() { match data_for_file(media_folder, &file.fname) { Ok(data) => data,