mirror of
https://github.com/ankitects/anki.git
synced 2025-09-25 01:06:35 -04:00
on upgrade, mark decks modified that are renamed
This commit is contained in:
parent
8e895aa247
commit
263bfb2e8e
5 changed files with 16 additions and 10 deletions
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)?;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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()?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue