Fix parent deck gathering

This commit is contained in:
RumovZ 2022-04-15 11:25:48 +02:00
parent f0cc027db6
commit 7af0b08375
3 changed files with 33 additions and 20 deletions

View file

@ -82,10 +82,6 @@ impl NativeDeckName {
.chain(self.components().skip(old_parent.components().count()))
.join("\x1f")
}
pub(crate) fn immediate_parent_name(&self) -> Option<&str> {
immediate_parent_name(self.as_native_str())
}
}
impl std::fmt::Display for NativeDeckName {

View file

@ -9,7 +9,7 @@ use std::{
use itertools::Itertools;
use crate::{
decks::NormalDeck,
decks::{immediate_parent_name, NormalDeck},
io::filename_is_safe,
latex::extract_latex,
prelude::*,
@ -172,21 +172,34 @@ impl Collection {
}
fn get_parent_decks(&mut self, decks: &[Deck]) -> Result<Vec<Deck>> {
let mut parent_names: HashSet<&str> =
decks.iter().map(|deck| deck.name.as_native_str()).collect();
let mut parent_names: HashSet<String> = decks
.iter()
.map(|deck| deck.name.as_native_str().to_owned())
.collect();
let mut parents = Vec::new();
for deck in decks {
while let Some(parent_name) = deck.name.immediate_parent_name() {
if parent_names.insert(parent_name) {
self.add_parent_decks(deck.name.as_native_str(), &mut parent_names, &mut parents)?;
}
Ok(parents)
}
fn add_parent_decks(
&mut self,
name: &str,
parent_names: &mut HashSet<String>,
parents: &mut Vec<Deck>,
) -> Result<()> {
if let Some(parent_name) = immediate_parent_name(name) {
if parent_names.insert(parent_name.to_owned()) {
parents.push(
self.storage
.get_deck_by_name(parent_name)?
.ok_or(AnkiError::DatabaseCheckRequired)?,
)
);
self.add_parent_decks(parent_name, parent_names, parents)?;
}
}
}
Ok(parents)
Ok(())
}
fn gather_notetypes(&mut self) -> Result<Vec<Notetype>> {

View file

@ -67,10 +67,7 @@ impl ExchangeData {
search: impl TryIntoSearch,
with_scheduling: bool,
) -> Result<Self> {
let mut zip_file = archive.by_name(Meta::new_legacy().collection_filename())?;
let mut tempfile = NamedTempFile::new()?;
io::copy(&mut zip_file, &mut tempfile)?;
let tempfile = collection_to_tempfile(archive)?;
let mut col = CollectionBuilder::new(tempfile.path()).build()?;
col.maybe_upgrade_scheduler()?;
@ -81,6 +78,13 @@ impl ExchangeData {
}
}
fn collection_to_tempfile(archive: &mut ZipArchive<File>) -> Result<NamedTempFile> {
let mut zip_file = archive.by_name(Meta::new_legacy().collection_filename())?;
let mut tempfile = NamedTempFile::new()?;
io::copy(&mut zip_file, &mut tempfile)?;
Ok(tempfile)
}
impl Collection {
fn maybe_upgrade_scheduler(&mut self) -> Result<()> {
if self.scheduling_included()? {