From d1dd0586bdcf9737056d97623e396cfc9c63b0da Mon Sep 17 00:00:00 2001 From: RumovZ Date: Wed, 30 Mar 2022 21:24:42 +0200 Subject: [PATCH] Only store file folder once in MediaIter --- rslib/src/import_export/gather.rs | 6 +++--- rslib/src/import_export/package/apkg/export.rs | 4 ++-- rslib/src/import_export/package/colpkg/export.rs | 14 +++++++++++--- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/rslib/src/import_export/gather.rs b/rslib/src/import_export/gather.rs index 90c775159..1bc4dae99 100644 --- a/rslib/src/import_export/gather.rs +++ b/rslib/src/import_export/gather.rs @@ -3,7 +3,7 @@ use std::{ collections::{HashMap, HashSet}, - path::{Path, PathBuf}, + path::PathBuf, }; use itertools::Itertools; @@ -70,10 +70,10 @@ impl ExportData { Ok(()) } - pub(super) fn gather_media_paths(&mut self, media_folder: &Path) { + pub(super) fn gather_media_paths(&mut self) { let mut inserter = |name: &str| { if filename_is_safe(name) { - self.media_paths.insert(media_folder.join(name)); + self.media_paths.insert(PathBuf::from(name)); } }; let svg_getter = svg_getter(&self.notetypes); diff --git a/rslib/src/import_export/package/apkg/export.rs b/rslib/src/import_export/package/apkg/export.rs index 12135b5a4..e3a8be855 100644 --- a/rslib/src/import_export/package/apkg/export.rs +++ b/rslib/src/import_export/package/apkg/export.rs @@ -47,7 +47,7 @@ impl Collection { let media = if let Some(media_fn) = media_fn { media_fn(media) } else { - MediaIter::from_file_list(media) + MediaIter::from_file_list(media, self.media_folder.clone()) }; let col_size = temp_col.as_file().metadata()?.len() as usize; @@ -73,7 +73,7 @@ impl Collection { let mut data = ExportData::default(); data.gather_data(self, deck_id, with_scheduling)?; if with_media { - data.gather_media_paths(&self.media_folder); + data.gather_media_paths(); } let mut temp_col = Collection::new_minimal(path)?; diff --git a/rslib/src/import_export/package/colpkg/export.rs b/rslib/src/import_export/package/colpkg/export.rs index 5e1a7c3b8..1d07aa5e7 100644 --- a/rslib/src/import_export/package/colpkg/export.rs +++ b/rslib/src/import_export/package/colpkg/export.rs @@ -71,16 +71,24 @@ impl Collection { pub struct MediaIter(Box>>); impl MediaIter { + /// Iterator over all files in the given path, without traversing subfolders. pub fn from_folder(path: &Path) -> Result { Ok(Self(Box::new( read_dir_files(path)?.map(|res| res.map(|entry| entry.path())), ))) } - /// Skips missing paths. - pub fn from_file_list(list: impl IntoIterator + 'static) -> Self { + /// Iterator over all given files in the given folder. + /// Missing files are silently ignored. + pub fn from_file_list( + list: impl IntoIterator + 'static, + folder: PathBuf, + ) -> Self { Self(Box::new( - list.into_iter().filter(|path| path.exists()).map(Ok), + list.into_iter() + .map(move |file| folder.join(file)) + .filter(|path| path.exists()) + .map(Ok), )) }