hide NativeName inner value, and require explicit accessors
This commit is contained in:
parent
f924539574
commit
1acc679e8f
@ -84,7 +84,7 @@ impl Collection {
|
|||||||
pub(crate) fn recover_missing_deck(&mut self, did: DeckId, usn: Usn) -> Result<()> {
|
pub(crate) fn recover_missing_deck(&mut self, did: DeckId, usn: Usn) -> Result<()> {
|
||||||
let mut deck = Deck::new_normal();
|
let mut deck = Deck::new_normal();
|
||||||
deck.id = did;
|
deck.id = did;
|
||||||
deck.name = NativeDeckName(format!("recovered{}", did));
|
deck.name = NativeDeckName::from_native_str(format!("recovered{}", did));
|
||||||
deck.set_modified(usn);
|
deck.set_modified(usn);
|
||||||
self.add_or_update_single_deck_with_existing_id(&mut deck, usn)
|
self.add_or_update_single_deck_with_existing_id(&mut deck, usn)
|
||||||
}
|
}
|
||||||
@ -95,7 +95,7 @@ impl Collection {
|
|||||||
/// Caller must have done necessarily validation on name.
|
/// Caller must have done necessarily validation on name.
|
||||||
fn add_parent_deck(&mut self, machine_name: &str, usn: Usn) -> Result<()> {
|
fn add_parent_deck(&mut self, machine_name: &str, usn: Usn) -> Result<()> {
|
||||||
let mut deck = Deck::new_normal();
|
let mut deck = Deck::new_normal();
|
||||||
deck.name = NativeDeckName(machine_name.into());
|
deck.name = NativeDeckName::from_native_str(machine_name);
|
||||||
deck.set_modified(usn);
|
deck.set_modified(usn);
|
||||||
self.add_deck_undoable(&mut deck)
|
self.add_deck_undoable(&mut deck)
|
||||||
}
|
}
|
||||||
@ -111,7 +111,7 @@ impl Collection {
|
|||||||
}
|
}
|
||||||
let parent_count = parent_deck.name.components().count();
|
let parent_count = parent_deck.name.components().count();
|
||||||
let need_create = parent_count != child_split.len() - 1;
|
let need_create = parent_count != child_split.len() - 1;
|
||||||
deck.name = NativeDeckName(format!(
|
deck.name = NativeDeckName::from_native_str(format!(
|
||||||
"{}\x1f{}",
|
"{}\x1f{}",
|
||||||
parent_deck.name,
|
parent_deck.name,
|
||||||
&child_split[parent_count..].join("\x1f")
|
&child_split[parent_count..].join("\x1f")
|
||||||
|
@ -23,7 +23,7 @@ impl Deck {
|
|||||||
filt.reschedule = true;
|
filt.reschedule = true;
|
||||||
Deck {
|
Deck {
|
||||||
id: DeckId(0),
|
id: DeckId(0),
|
||||||
name: NativeDeckName("".into()),
|
name: NativeDeckName::from_native_str(""),
|
||||||
mtime_secs: TimestampSecs(0),
|
mtime_secs: TimestampSecs(0),
|
||||||
usn: Usn(0),
|
usn: Usn(0),
|
||||||
common: DeckCommon {
|
common: DeckCommon {
|
||||||
|
@ -46,7 +46,7 @@ impl Deck {
|
|||||||
pub fn new_normal() -> Deck {
|
pub fn new_normal() -> Deck {
|
||||||
Deck {
|
Deck {
|
||||||
id: DeckId(0),
|
id: DeckId(0),
|
||||||
name: NativeDeckName("".into()),
|
name: NativeDeckName::from_native_str(""),
|
||||||
mtime_secs: TimestampSecs(0),
|
mtime_secs: TimestampSecs(0),
|
||||||
usn: Usn(0),
|
usn: Usn(0),
|
||||||
common: DeckCommon {
|
common: DeckCommon {
|
||||||
@ -207,7 +207,7 @@ mod test {
|
|||||||
|
|
||||||
let _ = col.get_or_create_normal_deck("foo::bar::baz")?;
|
let _ = col.get_or_create_normal_deck("foo::bar::baz")?;
|
||||||
let mut top_deck = col.get_or_create_normal_deck("foo")?;
|
let mut top_deck = col.get_or_create_normal_deck("foo")?;
|
||||||
top_deck.name = NativeDeckName("other".into());
|
top_deck.name = NativeDeckName::from_native_str("other");
|
||||||
col.add_or_update_deck(&mut top_deck)?;
|
col.add_or_update_deck(&mut top_deck)?;
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
sorted_names(&col),
|
sorted_names(&col),
|
||||||
@ -216,7 +216,7 @@ mod test {
|
|||||||
|
|
||||||
// should do the right thing in the middle of the tree as well
|
// should do the right thing in the middle of the tree as well
|
||||||
let mut middle = col.get_or_create_normal_deck("other::bar")?;
|
let mut middle = col.get_or_create_normal_deck("other::bar")?;
|
||||||
middle.name = NativeDeckName("quux\x1ffoo".into());
|
middle.name = NativeDeckName::from_native_str("quux\x1ffoo");
|
||||||
col.add_or_update_deck(&mut middle)?;
|
col.add_or_update_deck(&mut middle)?;
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
sorted_names(&col),
|
sorted_names(&col),
|
||||||
@ -229,7 +229,7 @@ mod test {
|
|||||||
// quux::foo -> quux::foo::baz::four
|
// quux::foo -> quux::foo::baz::four
|
||||||
// means quux::foo::baz2 should be quux::foo::baz::four::baz2
|
// means quux::foo::baz2 should be quux::foo::baz::four::baz2
|
||||||
// and a new quux::foo should have been created
|
// and a new quux::foo should have been created
|
||||||
middle.name = NativeDeckName("quux\x1ffoo\x1fbaz\x1ffour".into());
|
middle.name = NativeDeckName::from_native_str("quux\x1ffoo\x1fbaz\x1ffour");
|
||||||
col.add_or_update_deck(&mut middle)?;
|
col.add_or_update_deck(&mut middle)?;
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
sorted_names(&col),
|
sorted_names(&col),
|
||||||
@ -246,7 +246,7 @@ mod test {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// should handle name conflicts
|
// should handle name conflicts
|
||||||
middle.name = NativeDeckName("other".into());
|
middle.name = NativeDeckName::from_native_str("other");
|
||||||
col.add_or_update_deck(&mut middle)?;
|
col.add_or_update_deck(&mut middle)?;
|
||||||
assert_eq!(middle.name.as_str(), "other+");
|
assert_eq!(middle.name.as_str(), "other+");
|
||||||
|
|
||||||
@ -277,7 +277,7 @@ mod test {
|
|||||||
let mut col = open_test_collection();
|
let mut col = open_test_collection();
|
||||||
|
|
||||||
let mut default = col.get_or_create_normal_deck("default")?;
|
let mut default = col.get_or_create_normal_deck("default")?;
|
||||||
default.name = NativeDeckName("one\x1ftwo".into());
|
default.name = NativeDeckName::from_native_str("one\x1ftwo");
|
||||||
col.add_or_update_deck(&mut default)?;
|
col.add_or_update_deck(&mut default)?;
|
||||||
|
|
||||||
// create a non-default deck confusingly named "default"
|
// create a non-default deck confusingly named "default"
|
||||||
|
@ -5,9 +5,13 @@ use itertools::Itertools;
|
|||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq)]
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
pub struct NativeDeckName(pub String);
|
pub struct NativeDeckName(String);
|
||||||
|
|
||||||
impl NativeDeckName {
|
impl NativeDeckName {
|
||||||
|
pub fn from_native_str<N: Into<String>>(name: N) -> Self {
|
||||||
|
NativeDeckName(name.into())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn from_human_name(name: &str) -> Self {
|
pub fn from_human_name(name: &str) -> Self {
|
||||||
NativeDeckName(
|
NativeDeckName(
|
||||||
name.split("::")
|
name.split("::")
|
||||||
|
@ -37,7 +37,8 @@ impl Collection {
|
|||||||
// if the default deck is included, just ensure it's reset to the default
|
// if the default deck is included, just ensure it's reset to the default
|
||||||
// name, as we've already removed its cards
|
// name, as we've already removed its cards
|
||||||
let mut modified_default = deck.clone();
|
let mut modified_default = deck.clone();
|
||||||
modified_default.name = NativeDeckName(self.tr.deck_config_default_name().into());
|
modified_default.name =
|
||||||
|
NativeDeckName::from_native_str(self.tr.deck_config_default_name());
|
||||||
self.prepare_deck_for_update(&mut modified_default, usn)?;
|
self.prepare_deck_for_update(&mut modified_default, usn)?;
|
||||||
modified_default.set_modified(usn);
|
modified_default.set_modified(usn);
|
||||||
self.update_single_deck_undoable(&mut modified_default, deck.clone())?;
|
self.update_single_deck_undoable(&mut modified_default, deck.clone())?;
|
||||||
|
@ -147,7 +147,7 @@ impl Collection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn get_next_filtered_deck_name(&self) -> NativeDeckName {
|
fn get_next_filtered_deck_name(&self) -> NativeDeckName {
|
||||||
NativeDeckName(format!(
|
NativeDeckName::from_native_str(format!(
|
||||||
"Filtered Deck {}",
|
"Filtered Deck {}",
|
||||||
TimestampSecs::now().time_string()
|
TimestampSecs::now().time_string()
|
||||||
))
|
))
|
||||||
|
@ -346,11 +346,13 @@ impl SqlWriter<'_> {
|
|||||||
.storage
|
.storage
|
||||||
.get_deck(current_did)?
|
.get_deck(current_did)?
|
||||||
.map(|d| d.name)
|
.map(|d| d.name)
|
||||||
.unwrap_or_else(|| NativeDeckName("Default".into()))
|
.unwrap_or_else(|| NativeDeckName::from_native_str("Default"))
|
||||||
.as_str(),
|
.as_str(),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
NativeDeckName::from_human_name(&to_re(deck)).0
|
NativeDeckName::from_human_name(&to_re(deck))
|
||||||
|
.as_str()
|
||||||
|
.to_string()
|
||||||
};
|
};
|
||||||
|
|
||||||
// convert to a regex that includes child decks
|
// convert to a regex that includes child decks
|
||||||
|
@ -24,7 +24,7 @@ fn row_to_deck(row: &Row) -> Result<Deck> {
|
|||||||
let id = row.get(0)?;
|
let id = row.get(0)?;
|
||||||
Ok(Deck {
|
Ok(Deck {
|
||||||
id,
|
id,
|
||||||
name: NativeDeckName(row.get(1)?),
|
name: NativeDeckName::from_native_str(row.get_raw(1).as_str()?),
|
||||||
mtime_secs: row.get(2)?,
|
mtime_secs: row.get(2)?,
|
||||||
usn: row.get(3)?,
|
usn: row.get(3)?,
|
||||||
common,
|
common,
|
||||||
@ -346,7 +346,7 @@ impl SqliteStorage {
|
|||||||
let mut deck = Deck::new_normal();
|
let mut deck = Deck::new_normal();
|
||||||
deck.id.0 = 1;
|
deck.id.0 = 1;
|
||||||
// fixme: separate key
|
// fixme: separate key
|
||||||
deck.name = NativeDeckName(tr.deck_config_default_name().into());
|
deck.name = NativeDeckName::from_native_str(tr.deck_config_default_name());
|
||||||
self.add_or_update_deck_with_existing_id(&deck)
|
self.add_or_update_deck_with_existing_id(&deck)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -361,7 +361,7 @@ impl SqliteStorage {
|
|||||||
deck.set_modified(usn);
|
deck.set_modified(usn);
|
||||||
}
|
}
|
||||||
loop {
|
loop {
|
||||||
let name = UniCase::new(deck.name.0.clone());
|
let name = UniCase::new(deck.name.as_str().to_string());
|
||||||
if !names.contains(&name) {
|
if !names.contains(&name) {
|
||||||
names.insert(name);
|
names.insert(name);
|
||||||
break;
|
break;
|
||||||
|
@ -1500,7 +1500,7 @@ mod test {
|
|||||||
})?;
|
})?;
|
||||||
|
|
||||||
let mut deck = col2.storage.get_deck(deck.id)?.unwrap();
|
let mut deck = col2.storage.get_deck(deck.id)?.unwrap();
|
||||||
deck.name = NativeDeckName("newer".into());
|
deck.name = NativeDeckName::from_native_str("newer");
|
||||||
col2.add_or_update_deck(&mut deck)?;
|
col2.add_or_update_deck(&mut deck)?;
|
||||||
|
|
||||||
let mut nt = col2.storage.get_notetype(nt.id)?.unwrap();
|
let mut nt = col2.storage.get_notetype(nt.id)?.unwrap();
|
||||||
|
Loading…
Reference in New Issue
Block a user