mirror of
https://github.com/ankitects/anki.git
synced 2025-09-25 09:16:38 -04:00
Use IncrementalProgress in whole import_export code
This commit is contained in:
parent
87fbefb85e
commit
930f4212b2
4 changed files with 36 additions and 36 deletions
|
@ -5,6 +5,8 @@ mod gather;
|
||||||
mod insert;
|
mod insert;
|
||||||
pub mod package;
|
pub mod package;
|
||||||
|
|
||||||
|
use crate::prelude::*;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||||
pub enum ImportProgress {
|
pub enum ImportProgress {
|
||||||
Collection,
|
Collection,
|
||||||
|
@ -12,3 +14,26 @@ pub enum ImportProgress {
|
||||||
MediaCheck(usize),
|
MediaCheck(usize),
|
||||||
Notes(usize),
|
Notes(usize),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) struct IncrementalProgress<F: FnMut(usize) -> Result<()>> {
|
||||||
|
progress_fn: F,
|
||||||
|
counter: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<F: FnMut(usize) -> Result<()>> IncrementalProgress<F> {
|
||||||
|
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(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ use crate::{
|
||||||
media::{extract_media_entries, SafeMediaEntry},
|
media::{extract_media_entries, SafeMediaEntry},
|
||||||
Meta,
|
Meta,
|
||||||
},
|
},
|
||||||
ImportProgress,
|
ImportProgress, IncrementalProgress,
|
||||||
},
|
},
|
||||||
media::{
|
media::{
|
||||||
files::{add_hash_suffix_to_file_stem, sha1_of_reader},
|
files::{add_hash_suffix_to_file_stem, sha1_of_reader},
|
||||||
|
@ -32,29 +32,6 @@ pub(super) struct MediaUseMap {
|
||||||
unchecked: Vec<SafeMediaEntry>,
|
unchecked: Vec<SafeMediaEntry>,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ProgressHandler<F: FnMut(usize) -> Result<()>> {
|
|
||||||
progress_fn: F,
|
|
||||||
counter: usize,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<F: FnMut(usize) -> Result<()>> ProgressHandler<F> {
|
|
||||||
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<'_> {
|
impl Context<'_> {
|
||||||
pub(super) fn prepare_media(&mut self) -> Result<MediaUseMap> {
|
pub(super) fn prepare_media(&mut self) -> Result<MediaUseMap> {
|
||||||
let progress_fn = |u| (&mut self.progress_fn)(ImportProgress::MediaCheck(u)).is_ok();
|
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<()> {
|
pub(super) fn copy_media(&mut self, media_map: &mut MediaUseMap) -> Result<()> {
|
||||||
let mut progress =
|
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() {
|
for entry in media_map.used_entries() {
|
||||||
progress.increment()?;
|
progress.increment()?;
|
||||||
entry.copy_from_archive(&mut self.archive, &self.target_col.media_folder)?;
|
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<()>,
|
progress_fn: &mut impl FnMut(ImportProgress) -> Result<()>,
|
||||||
) -> Result<MediaUseMap> {
|
) -> Result<MediaUseMap> {
|
||||||
let mut media_map = MediaUseMap::default();
|
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)? {
|
for mut entry in extract_media_entries(meta, archive)? {
|
||||||
progress.increment()?;
|
progress.increment()?;
|
||||||
|
|
|
@ -14,7 +14,7 @@ use super::{media::MediaUseMap, Context, ProgressFn};
|
||||||
use crate::{
|
use crate::{
|
||||||
import_export::{
|
import_export::{
|
||||||
package::{media::safe_normalized_file_name, LogNote, NoteLog},
|
package::{media::safe_normalized_file_name, LogNote, NoteLog},
|
||||||
ImportProgress,
|
ImportProgress, IncrementalProgress,
|
||||||
},
|
},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
text::{
|
text::{
|
||||||
|
@ -185,11 +185,10 @@ impl<'n> NoteContext<'n> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn import_notes(&mut self, notes: Vec<Note>, progress_fn: &mut ProgressFn) -> Result<()> {
|
fn import_notes(&mut self, notes: Vec<Note>, progress_fn: &mut ProgressFn) -> Result<()> {
|
||||||
for (idx, mut note) in notes.into_iter().enumerate() {
|
let mut progress = IncrementalProgress::new(|u| progress_fn(ImportProgress::Notes(u)));
|
||||||
// FIXME: use ProgressHandler.increment()?
|
|
||||||
if idx % 17 == 0 {
|
for mut note in notes.into_iter() {
|
||||||
progress_fn(ImportProgress::Notes(idx))?;
|
progress.increment()?;
|
||||||
}
|
|
||||||
if let Some(notetype_id) = self.remapped_notetypes.get(¬e.notetype_id) {
|
if let Some(notetype_id) = self.remapped_notetypes.get(¬e.notetype_id) {
|
||||||
if self.target_guids.contains_key(¬e.guid) {
|
if self.target_guids.contains_key(¬e.guid) {
|
||||||
self.imports.log_conflicting(note);
|
self.imports.log_conflicting(note);
|
||||||
|
|
|
@ -18,7 +18,7 @@ use crate::{
|
||||||
media::{extract_media_entries, SafeMediaEntry},
|
media::{extract_media_entries, SafeMediaEntry},
|
||||||
Meta,
|
Meta,
|
||||||
},
|
},
|
||||||
ImportProgress,
|
ImportProgress, IncrementalProgress,
|
||||||
},
|
},
|
||||||
io::{atomic_rename, tempfile_in_parent_of},
|
io::{atomic_rename, tempfile_in_parent_of},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
|
@ -73,11 +73,10 @@ fn restore_media(
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let media_entries = extract_media_entries(meta, archive)?;
|
let media_entries = extract_media_entries(meta, archive)?;
|
||||||
std::fs::create_dir_all(media_folder)?;
|
std::fs::create_dir_all(media_folder)?;
|
||||||
|
let mut progress = IncrementalProgress::new(|u| progress_fn(ImportProgress::Media(u)));
|
||||||
|
|
||||||
for entry in &media_entries {
|
for entry in &media_entries {
|
||||||
if entry.index % 10 == 0 {
|
progress.increment()?;
|
||||||
progress_fn(ImportProgress::Media(entry.index))?;
|
|
||||||
}
|
|
||||||
maybe_restore_media_file(meta, media_folder, archive, entry)?;
|
maybe_restore_media_file(meta, media_folder, archive, entry)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue