mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 16:56:36 -04:00
Fix parent deck gathering
This commit is contained in:
parent
f0cc027db6
commit
7af0b08375
3 changed files with 33 additions and 20 deletions
|
@ -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 {
|
||||
|
|
|
@ -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,23 +172,36 @@ 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) {
|
||||
parents.push(
|
||||
self.storage
|
||||
.get_deck_by_name(parent_name)?
|
||||
.ok_or(AnkiError::DatabaseCheckRequired)?,
|
||||
)
|
||||
}
|
||||
}
|
||||
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(())
|
||||
}
|
||||
|
||||
fn gather_notetypes(&mut self) -> Result<Vec<Notetype>> {
|
||||
self.storage.get_notetypes_for_search_notes()
|
||||
}
|
||||
|
|
|
@ -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()? {
|
||||
|
|
Loading…
Reference in a new issue