diff --git a/ftl/core/importing.ftl b/ftl/core/importing.ftl index 9ecfbb3bf..027ea6d6d 100644 --- a/ftl/core/importing.ftl +++ b/ftl/core/importing.ftl @@ -79,3 +79,8 @@ importing-processed-media-file = } importing-importing-collection = Importing collection... importing-failed-to-import-media-file = Failed to import media file: { $debugInfo } +importing-processed-notes = + { $count -> + [one] Processed { $count } note... + *[other] Processed { $count } notes... + } diff --git a/rslib/src/backend/import_export.rs b/rslib/src/backend/import_export.rs index cb5ee2ca6..d8c2739cb 100644 --- a/rslib/src/backend/import_export.rs +++ b/rslib/src/backend/import_export.rs @@ -89,7 +89,10 @@ impl Backend { fn import_progress_fn(&self) -> impl FnMut(ImportProgress) -> Result<()> { let mut handler = self.new_progress_handler(); move |progress| { - let throttle = matches!(progress, ImportProgress::Media(_)); + let throttle = matches!( + progress, + ImportProgress::Media(_) | ImportProgress::Notes(_) + ); if handler.update(Progress::Import(progress), throttle) { Ok(()) } else { diff --git a/rslib/src/backend/progress.rs b/rslib/src/backend/progress.rs index 442efcf7e..7f7a26afb 100644 --- a/rslib/src/backend/progress.rs +++ b/rslib/src/backend/progress.rs @@ -111,6 +111,7 @@ pub(super) fn progress_to_proto(progress: Option, tr: &I18n) -> pb::Pr ImportProgress::Collection => tr.importing_importing_collection(), ImportProgress::Media(n) => tr.importing_processed_media_file(n), ImportProgress::MediaCheck(n) => tr.media_check_checked(n), + ImportProgress::Notes(n) => tr.importing_processed_notes(n), } .into(), ), diff --git a/rslib/src/import_export/mod.rs b/rslib/src/import_export/mod.rs index 0b40b1f50..3bc109924 100644 --- a/rslib/src/import_export/mod.rs +++ b/rslib/src/import_export/mod.rs @@ -10,4 +10,5 @@ pub enum ImportProgress { Collection, Media(usize), MediaCheck(usize), + Notes(usize), } diff --git a/rslib/src/import_export/package/apkg/import/notes.rs b/rslib/src/import_export/package/apkg/import/notes.rs index 554534a20..8d4d8f103 100644 --- a/rslib/src/import_export/package/apkg/import/notes.rs +++ b/rslib/src/import_export/package/apkg/import/notes.rs @@ -10,9 +10,12 @@ use std::{ use sha1::Sha1; -use super::{media::MediaUseMap, Context}; +use super::{media::MediaUseMap, Context, ProgressFn}; use crate::{ - import_export::package::{media::safe_normalized_file_name, LogNote, NoteLog}, + import_export::{ + package::{media::safe_normalized_file_name, LogNote, NoteLog}, + ImportProgress, + }, prelude::*, text::{replace_media_refs, strip_html_preserving_media_filenames, CowMapping}, }; @@ -100,7 +103,7 @@ impl Context<'_> { ) -> Result { let mut ctx = NoteContext::new(self.usn, self.target_col, media_map)?; ctx.import_notetypes(mem::take(&mut self.data.notetypes))?; - ctx.import_notes(mem::take(&mut self.data.notes))?; + ctx.import_notes(mem::take(&mut self.data.notes), self.progress_fn)?; Ok(ctx.imports) } } @@ -176,8 +179,12 @@ impl<'n> NoteContext<'n> { Ok(()) } - fn import_notes(&mut self, notes: Vec) -> Result<()> { - for mut note in notes { + 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))?; + } if let Some(notetype_id) = self.remapped_notetypes.get(¬e.notetype_id) { if self.target_guids.contains_key(¬e.guid) { // TODO: Log ignore @@ -356,7 +363,7 @@ mod test { ]; let mut ctx = NoteContext::new(Usn(1), &mut col, &mut media_map).unwrap(); ctx.remapped_notetypes.insert(NotetypeId(123), basic_ntid); - ctx.import_notes(notes).unwrap(); + ctx.import_notes(notes, &mut |_progress| Ok(())).unwrap(); assert_log( &ctx.imports.log.new,