on upgrade, mark decks modified that are renamed

This commit is contained in:
Damien Elmes 2020-06-14 14:48:58 +10:00
parent 8e895aa247
commit 263bfb2e8e
5 changed files with 16 additions and 10 deletions

View file

@ -22,7 +22,7 @@ pub fn open_collection<P: Into<PathBuf>>(
log: Logger, log: Logger,
) -> Result<Collection> { ) -> Result<Collection> {
let col_path = path.into(); let col_path = path.into();
let storage = SqliteStorage::open_or_create(&col_path, &i18n)?; let storage = SqliteStorage::open_or_create(&col_path, &i18n, server)?;
let col = Collection { let col = Collection {
storage, storage,

View file

@ -260,7 +260,7 @@ mod test {
#[test] #[test]
fn add_card() { fn add_card() {
let i18n = I18n::new(&[""], "", log::terminal()); let i18n = I18n::new(&[""], "", log::terminal());
let storage = SqliteStorage::open_or_create(Path::new(":memory:"), &i18n).unwrap(); let storage = SqliteStorage::open_or_create(Path::new(":memory:"), &i18n, false).unwrap();
let mut card = Card::default(); let mut card = Card::default();
storage.add_card(&mut card).unwrap(); storage.add_card(&mut card).unwrap();
let id1 = card.id; let id1 = card.id;

View file

@ -99,9 +99,10 @@ impl SqliteStorage {
}) })
} }
// fixme: bail instead of assert
pub(crate) fn update_deck(&self, deck: &Deck) -> Result<()> { pub(crate) fn update_deck(&self, deck: &Deck) -> Result<()> {
assert!(deck.id.0 != 0); if deck.id.0 == 0 {
return Err(AnkiError::invalid_input("deck with id 0"));
}
self.add_or_update_deck(deck) self.add_or_update_deck(deck)
} }
@ -257,12 +258,16 @@ impl SqliteStorage {
self.update_deck(&deck) self.update_deck(&deck)
} }
// fixme: make sure conflicting deck names don't break things pub(crate) fn upgrade_decks_to_schema15(&self, server: bool) -> Result<()> {
pub(crate) fn upgrade_decks_to_schema15(&self) -> Result<()> { let usn = self.usn(server)?;
let decks = self.get_schema11_decks()?; let decks = self.get_schema11_decks()?;
let mut names = HashSet::new(); let mut names = HashSet::new();
for (_id, deck) in decks { for (_id, deck) in decks {
let oldname = deck.name().to_string();
let mut deck = Deck::from(deck); let mut deck = Deck::from(deck);
if deck.human_name() != oldname {
deck.set_modified(usn);
}
loop { loop {
let name = UniCase::new(deck.name.clone()); let name = UniCase::new(deck.name.clone());
if !names.contains(&name) { if !names.contains(&name) {
@ -270,6 +275,7 @@ impl SqliteStorage {
break; break;
} }
deck.name.push('_'); deck.name.push('_');
deck.set_modified(usn);
} }
self.update_deck(&deck)?; self.update_deck(&deck)?;
} }

View file

@ -138,7 +138,7 @@ fn trace(s: &str) {
} }
impl SqliteStorage { impl SqliteStorage {
pub(crate) fn open_or_create(path: &Path, i18n: &I18n) -> Result<Self> { pub(crate) fn open_or_create(path: &Path, i18n: &I18n, server: bool) -> Result<Self> {
let db = open_or_create_collection_db(path)?; let db = open_or_create_collection_db(path)?;
let (create, ver) = schema_version(&db)?; let (create, ver) = schema_version(&db)?;
@ -180,7 +180,7 @@ impl SqliteStorage {
let storage = Self { db }; let storage = Self { db };
if create || upgrade { if create || upgrade {
storage.upgrade_to_latest_schema(ver)?; storage.upgrade_to_latest_schema(ver, server)?;
} }
if create { if create {

View file

@ -5,7 +5,7 @@ use super::SqliteStorage;
use crate::err::Result; use crate::err::Result;
impl SqliteStorage { impl SqliteStorage {
pub(super) fn upgrade_to_latest_schema(&self, ver: u8) -> Result<()> { pub(super) fn upgrade_to_latest_schema(&self, ver: u8, server: bool) -> Result<()> {
if ver < 14 { if ver < 14 {
self.db self.db
.execute_batch(include_str!("schema14_upgrade.sql"))?; .execute_batch(include_str!("schema14_upgrade.sql"))?;
@ -17,7 +17,7 @@ impl SqliteStorage {
self.db self.db
.execute_batch(include_str!("schema15_upgrade.sql"))?; .execute_batch(include_str!("schema15_upgrade.sql"))?;
self.upgrade_notetypes_to_schema15()?; self.upgrade_notetypes_to_schema15()?;
self.upgrade_decks_to_schema15()?; self.upgrade_decks_to_schema15(server)?;
self.upgrade_deck_conf_to_schema15()?; self.upgrade_deck_conf_to_schema15()?;
} }