Add import_deck_configs()

This commit is contained in:
RumovZ 2022-04-08 10:52:12 +02:00
parent 7520afd9c5
commit ffdd8b741e

View file

@ -39,6 +39,7 @@ struct Context<'a> {
remapped_notetypes: HashMap<NotetypeId, NotetypeId>, remapped_notetypes: HashMap<NotetypeId, NotetypeId>,
remapped_notes: HashMap<NoteId, NoteId>, remapped_notes: HashMap<NoteId, NoteId>,
remapped_decks: HashMap<DeckId, DeckId>, remapped_decks: HashMap<DeckId, DeckId>,
remapped_deck_configs: HashMap<DeckConfigId, DeckConfigId>,
data: ExchangeData, data: ExchangeData,
usn: Usn, usn: Usn,
/// Map of source media files, that do not already exist in the target. /// Map of source media files, that do not already exist in the target.
@ -99,6 +100,7 @@ impl Collection {
ctx.prepare_media()?; ctx.prepare_media()?;
ctx.import_notetypes()?; ctx.import_notetypes()?;
ctx.import_notes()?; ctx.import_notes()?;
ctx.import_deck_configs()?;
ctx.import_decks()?; ctx.import_decks()?;
ctx.copy_media()?; ctx.copy_media()?;
Ok(()) Ok(())
@ -149,6 +151,7 @@ impl<'a> Context<'a> {
remapped_notetypes: HashMap::new(), remapped_notetypes: HashMap::new(),
remapped_notes: HashMap::new(), remapped_notes: HashMap::new(),
remapped_decks: HashMap::new(), remapped_decks: HashMap::new(),
remapped_deck_configs: HashMap::new(),
used_media_entries: HashMap::new(), used_media_entries: HashMap::new(),
normalize_notes, normalize_notes,
}) })
@ -324,12 +327,24 @@ impl<'a> Context<'a> {
}) })
} }
fn import_deck_configs(&mut self) -> Result<()> {
// TODO: keep ids if possible?
for mut config in mem::take(&mut self.data.deck_configs) {
let old_id = mem::take(&mut config.id);
self.target_col
.add_deck_config_inner(&mut config, Some(self.usn))?;
self.remapped_deck_configs.insert(old_id, config.id);
}
Ok(())
}
fn import_decks(&mut self) -> Result<()> { fn import_decks(&mut self) -> Result<()> {
// TODO: ensure alphabetical order, so parents are seen first // TODO: ensure alphabetical order, so parents are seen first
let mut renamed_parents = Vec::new(); let mut renamed_parents = Vec::new();
for mut deck in mem::take(&mut self.data.decks) { for mut deck in mem::take(&mut self.data.decks) {
deck.maybe_reparent(&renamed_parents); deck.maybe_reparent(&renamed_parents);
self.remap_deck_config_id(&mut deck)?;
if let Some(original) = self.get_deck_by_name(&deck)? { if let Some(original) = self.get_deck_by_name(&deck)? {
if original.is_filtered() { if original.is_filtered() {
deck.uniquify_name(&mut renamed_parents); deck.uniquify_name(&mut renamed_parents);
@ -345,6 +360,16 @@ impl<'a> Context<'a> {
Ok(()) Ok(())
} }
fn remap_deck_config_id(&mut self, deck: &mut Deck) -> Result<()> {
if let Some(config_id) = self
.remapped_deck_configs
.get(&DeckConfigId(deck.normal()?.config_id))
{
deck.normal_mut()?.config_id = config_id.0;
}
Ok(())
}
fn add_deck(&mut self, deck: &mut Deck) -> Result<()> { fn add_deck(&mut self, deck: &mut Deck) -> Result<()> {
let old_id = mem::take(&mut deck.id); let old_id = mem::take(&mut deck.id);
self.target_col.add_deck_inner(deck, self.usn)?; self.target_col.add_deck_inner(deck, self.usn)?;