From 930f4212b29ad28e2586ffd52b3c52ccdcad4ea8 Mon Sep 17 00:00:00 2001 From: RumovZ Date: Thu, 28 Apr 2022 18:51:22 +0200 Subject: [PATCH] Use IncrementalProgress in whole import_export code --- rslib/src/import_export/mod.rs | 25 ++++++++++++++++ .../package/apkg/import/media.rs | 29 ++----------------- .../package/apkg/import/notes.rs | 11 ++++--- .../import_export/package/colpkg/import.rs | 7 ++--- 4 files changed, 36 insertions(+), 36 deletions(-) diff --git a/rslib/src/import_export/mod.rs b/rslib/src/import_export/mod.rs index 3bc109924..6f23ce304 100644 --- a/rslib/src/import_export/mod.rs +++ b/rslib/src/import_export/mod.rs @@ -5,6 +5,8 @@ mod gather; mod insert; pub mod package; +use crate::prelude::*; + #[derive(Debug, Clone, Copy, PartialEq)] pub enum ImportProgress { Collection, @@ -12,3 +14,26 @@ pub enum ImportProgress { MediaCheck(usize), Notes(usize), } + +pub(crate) struct IncrementalProgress Result<()>> { + progress_fn: F, + counter: usize, +} + +impl Result<()>> IncrementalProgress { + pub(crate) fn new(progress_fn: F) -> Self { + Self { + progress_fn, + counter: 0, + } + } + + pub(crate) fn increment(&mut self) -> Result<()> { + self.counter += 1; + if self.counter % 17 == 0 { + (self.progress_fn)(self.counter) + } else { + Ok(()) + } + } +} diff --git a/rslib/src/import_export/package/apkg/import/media.rs b/rslib/src/import_export/package/apkg/import/media.rs index 69d506f2c..3b12eb1e6 100644 --- a/rslib/src/import_export/package/apkg/import/media.rs +++ b/rslib/src/import_export/package/apkg/import/media.rs @@ -12,7 +12,7 @@ use crate::{ media::{extract_media_entries, SafeMediaEntry}, Meta, }, - ImportProgress, + ImportProgress, IncrementalProgress, }, media::{ files::{add_hash_suffix_to_file_stem, sha1_of_reader}, @@ -32,29 +32,6 @@ pub(super) struct MediaUseMap { unchecked: Vec, } -struct ProgressHandler Result<()>> { - progress_fn: F, - counter: usize, -} - -impl Result<()>> ProgressHandler { - fn new(progress_fn: F) -> Self { - Self { - progress_fn, - counter: 0, - } - } - - fn increment(&mut self) -> Result<()> { - self.counter += 1; - if self.counter % 17 == 0 { - (self.progress_fn)(self.counter) - } else { - Ok(()) - } - } -} - impl Context<'_> { pub(super) fn prepare_media(&mut self) -> Result { let progress_fn = |u| (&mut self.progress_fn)(ImportProgress::MediaCheck(u)).is_ok(); @@ -69,7 +46,7 @@ impl Context<'_> { pub(super) fn copy_media(&mut self, media_map: &mut MediaUseMap) -> Result<()> { let mut progress = - ProgressHandler::new(|u| (&mut self.progress_fn)(ImportProgress::Media(u))); + IncrementalProgress::new(|u| (&mut self.progress_fn)(ImportProgress::Media(u))); for entry in media_map.used_entries() { progress.increment()?; entry.copy_from_archive(&mut self.archive, &self.target_col.media_folder)?; @@ -95,7 +72,7 @@ fn prepare_media( progress_fn: &mut impl FnMut(ImportProgress) -> Result<()>, ) -> Result { let mut media_map = MediaUseMap::default(); - let mut progress = ProgressHandler::new(|u| progress_fn(ImportProgress::MediaCheck(u))); + let mut progress = IncrementalProgress::new(|u| progress_fn(ImportProgress::MediaCheck(u))); for mut entry in extract_media_entries(meta, archive)? { progress.increment()?; diff --git a/rslib/src/import_export/package/apkg/import/notes.rs b/rslib/src/import_export/package/apkg/import/notes.rs index b7f1abd3f..805ea2feb 100644 --- a/rslib/src/import_export/package/apkg/import/notes.rs +++ b/rslib/src/import_export/package/apkg/import/notes.rs @@ -14,7 +14,7 @@ use super::{media::MediaUseMap, Context, ProgressFn}; use crate::{ import_export::{ package::{media::safe_normalized_file_name, LogNote, NoteLog}, - ImportProgress, + ImportProgress, IncrementalProgress, }, prelude::*, text::{ @@ -185,11 +185,10 @@ impl<'n> NoteContext<'n> { } fn import_notes(&mut self, notes: Vec, progress_fn: &mut ProgressFn) -> Result<()> { - for (idx, mut note) in notes.into_iter().enumerate() { - // FIXME: use ProgressHandler.increment()? - if idx % 17 == 0 { - progress_fn(ImportProgress::Notes(idx))?; - } + let mut progress = IncrementalProgress::new(|u| progress_fn(ImportProgress::Notes(u))); + + for mut note in notes.into_iter() { + progress.increment()?; if let Some(notetype_id) = self.remapped_notetypes.get(¬e.notetype_id) { if self.target_guids.contains_key(¬e.guid) { self.imports.log_conflicting(note); diff --git a/rslib/src/import_export/package/colpkg/import.rs b/rslib/src/import_export/package/colpkg/import.rs index e90a8b427..fa86eb59f 100644 --- a/rslib/src/import_export/package/colpkg/import.rs +++ b/rslib/src/import_export/package/colpkg/import.rs @@ -18,7 +18,7 @@ use crate::{ media::{extract_media_entries, SafeMediaEntry}, Meta, }, - ImportProgress, + ImportProgress, IncrementalProgress, }, io::{atomic_rename, tempfile_in_parent_of}, prelude::*, @@ -73,11 +73,10 @@ fn restore_media( ) -> Result<()> { let media_entries = extract_media_entries(meta, archive)?; std::fs::create_dir_all(media_folder)?; + let mut progress = IncrementalProgress::new(|u| progress_fn(ImportProgress::Media(u))); for entry in &media_entries { - if entry.index % 10 == 0 { - progress_fn(ImportProgress::Media(entry.index))?; - } + progress.increment()?; maybe_restore_media_file(meta, media_folder, archive, entry)?; }