mirror of
https://github.com/ankitects/anki.git
synced 2025-09-25 01:06:35 -04:00
as_str() -> as_native_str()
This commit is contained in:
parent
1acc679e8f
commit
e71f7714ad
8 changed files with 30 additions and 22 deletions
|
@ -430,7 +430,11 @@ mod test {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
col.storage.get_deck(DeckId(123))?.unwrap().name.as_str(),
|
col.storage
|
||||||
|
.get_deck(DeckId(123))?
|
||||||
|
.unwrap()
|
||||||
|
.name
|
||||||
|
.as_native_str(),
|
||||||
"recovered123"
|
"recovered123"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -105,7 +105,7 @@ impl Collection {
|
||||||
/// Returns an error if a DB operation fails, or if the first existing parent is a filtered deck.
|
/// Returns an error if a DB operation fails, or if the first existing parent is a filtered deck.
|
||||||
fn match_or_create_parents(&mut self, deck: &mut Deck, usn: Usn) -> Result<()> {
|
fn match_or_create_parents(&mut self, deck: &mut Deck, usn: Usn) -> Result<()> {
|
||||||
let child_split: Vec<_> = deck.name.components().collect();
|
let child_split: Vec<_> = deck.name.components().collect();
|
||||||
if let Some(parent_deck) = self.first_existing_parent(deck.name.as_str(), 0)? {
|
if let Some(parent_deck) = self.first_existing_parent(deck.name.as_native_str(), 0)? {
|
||||||
if parent_deck.is_filtered() {
|
if parent_deck.is_filtered() {
|
||||||
return Err(FilteredDeckError::MustBeLeafNode.into());
|
return Err(FilteredDeckError::MustBeLeafNode.into());
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ impl Collection {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_missing_parents(&mut self, name: &NativeDeckName, usn: Usn) -> Result<()> {
|
fn create_missing_parents(&mut self, name: &NativeDeckName, usn: Usn) -> Result<()> {
|
||||||
let mut machine_name = name.as_str();
|
let mut machine_name = name.as_native_str();
|
||||||
while let Some(parent_name) = immediate_parent_name(machine_name) {
|
while let Some(parent_name) = immediate_parent_name(machine_name) {
|
||||||
if self.storage.get_deck_id(parent_name)?.is_none() {
|
if self.storage.get_deck_id(parent_name)?.is_none() {
|
||||||
self.add_parent_deck(parent_name, usn)?;
|
self.add_parent_deck(parent_name, usn)?;
|
||||||
|
|
|
@ -150,7 +150,7 @@ impl Collection {
|
||||||
|
|
||||||
pub fn get_or_create_normal_deck(&mut self, human_name: &str) -> Result<Deck> {
|
pub fn get_or_create_normal_deck(&mut self, human_name: &str) -> Result<Deck> {
|
||||||
let name = NativeDeckName::from_human_name(human_name);
|
let name = NativeDeckName::from_human_name(human_name);
|
||||||
if let Some(did) = self.storage.get_deck_id(name.as_str())? {
|
if let Some(did) = self.storage.get_deck_id(name.as_native_str())? {
|
||||||
self.storage.get_deck(did).map(|opt| opt.unwrap())
|
self.storage.get_deck(did).map(|opt| opt.unwrap())
|
||||||
} else {
|
} else {
|
||||||
let mut deck = Deck::new_normal();
|
let mut deck = Deck::new_normal();
|
||||||
|
@ -164,7 +164,7 @@ impl Collection {
|
||||||
/// use the method in storage instead.
|
/// use the method in storage instead.
|
||||||
pub(crate) fn get_deck_id(&self, human_name: &str) -> Result<Option<DeckId>> {
|
pub(crate) fn get_deck_id(&self, human_name: &str) -> Result<Option<DeckId>> {
|
||||||
self.storage
|
self.storage
|
||||||
.get_deck_id(NativeDeckName::from_human_name(human_name).as_str())
|
.get_deck_id(NativeDeckName::from_human_name(human_name).as_native_str())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,7 +248,7 @@ mod test {
|
||||||
// should handle name conflicts
|
// should handle name conflicts
|
||||||
middle.name = NativeDeckName::from_native_str("other");
|
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_native_str(), "other+");
|
||||||
|
|
||||||
// public function takes human name
|
// public function takes human name
|
||||||
col.rename_deck(middle.id, "one::two")?;
|
col.rename_deck(middle.id, "one::two")?;
|
||||||
|
|
|
@ -8,10 +8,7 @@ use std::borrow::Cow;
|
||||||
pub struct NativeDeckName(String);
|
pub struct NativeDeckName(String);
|
||||||
|
|
||||||
impl NativeDeckName {
|
impl NativeDeckName {
|
||||||
pub fn from_native_str<N: Into<String>>(name: N) -> Self {
|
/// Create from a '::'-separated string
|
||||||
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("::")
|
||||||
|
@ -20,6 +17,7 @@ impl NativeDeckName {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Return a '::'-separated string.
|
||||||
pub fn human_name(&self) -> String {
|
pub fn human_name(&self) -> String {
|
||||||
self.0.replace('\x1f', "::")
|
self.0.replace('\x1f', "::")
|
||||||
}
|
}
|
||||||
|
@ -28,7 +26,13 @@ impl NativeDeckName {
|
||||||
self.0 += suffix
|
self.0 += suffix
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn as_str(&self) -> &str {
|
/// Create from an '\x1f'-separated string
|
||||||
|
pub(crate) fn from_native_str<N: Into<String>>(name: N) -> Self {
|
||||||
|
NativeDeckName(name.into())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Return a reference to the inner '\x1f'-separated string.
|
||||||
|
pub(crate) fn as_native_str(&self) -> &str {
|
||||||
&self.0
|
&self.0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +62,7 @@ impl NativeDeckName {
|
||||||
/// Replace the old parent's name with the new parent's name in self's name, where the old
|
/// Replace the old parent's name with the new parent's name in self's name, where the old
|
||||||
/// parent's name is expected to be a prefix.
|
/// parent's name is expected to be a prefix.
|
||||||
fn reparent(&mut self, old_parent: &NativeDeckName, new_parent: &NativeDeckName) {
|
fn reparent(&mut self, old_parent: &NativeDeckName, new_parent: &NativeDeckName) {
|
||||||
self.0 = std::iter::once(new_parent.as_str())
|
self.0 = std::iter::once(new_parent.as_native_str())
|
||||||
.chain(self.components().skip(old_parent.components().count()))
|
.chain(self.components().skip(old_parent.components().count()))
|
||||||
.join("\x1f")
|
.join("\x1f")
|
||||||
}
|
}
|
||||||
|
@ -117,7 +121,7 @@ impl Collection {
|
||||||
|
|
||||||
pub(crate) fn ensure_deck_name_unique(&self, deck: &mut Deck, usn: Usn) -> Result<()> {
|
pub(crate) fn ensure_deck_name_unique(&self, deck: &mut Deck, usn: Usn) -> Result<()> {
|
||||||
loop {
|
loop {
|
||||||
match self.storage.get_deck_id(deck.name.as_str())? {
|
match self.storage.get_deck_id(deck.name.as_native_str())? {
|
||||||
Some(did) if did == deck.id => break,
|
Some(did) if did == deck.id => break,
|
||||||
None => break,
|
None => break,
|
||||||
_ => (),
|
_ => (),
|
||||||
|
|
|
@ -267,7 +267,7 @@ impl Collection {
|
||||||
if let Some(now) = now {
|
if let Some(now) = now {
|
||||||
let limit = top_deck_id.and_then(|did| {
|
let limit = top_deck_id.and_then(|did| {
|
||||||
if let Some(deck) = decks_map.get(&did) {
|
if let Some(deck) = decks_map.get(&did) {
|
||||||
Some(deck.name.as_str())
|
Some(deck.name.as_native_str())
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ pub(super) fn remaining_limits_capped_to_parents(
|
||||||
today: u32,
|
today: u32,
|
||||||
) -> Vec<RemainingLimits> {
|
) -> Vec<RemainingLimits> {
|
||||||
let mut limits = get_remaining_limits(decks, config, today);
|
let mut limits = get_remaining_limits(decks, config, today);
|
||||||
cap_limits_to_parents(decks.iter().map(|d| d.name.as_str()), &mut limits);
|
cap_limits_to_parents(decks.iter().map(|d| d.name.as_native_str()), &mut limits);
|
||||||
limits
|
limits
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -347,11 +347,11 @@ impl SqlWriter<'_> {
|
||||||
.get_deck(current_did)?
|
.get_deck(current_did)?
|
||||||
.map(|d| d.name)
|
.map(|d| d.name)
|
||||||
.unwrap_or_else(|| NativeDeckName::from_native_str("Default"))
|
.unwrap_or_else(|| NativeDeckName::from_native_str("Default"))
|
||||||
.as_str(),
|
.as_native_str(),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
NativeDeckName::from_human_name(&to_re(deck))
|
NativeDeckName::from_human_name(&to_re(deck))
|
||||||
.as_str()
|
.as_native_str()
|
||||||
.to_string()
|
.to_string()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -124,7 +124,7 @@ impl SqliteStorage {
|
||||||
let mut kind = vec![];
|
let mut kind = vec![];
|
||||||
kind_enum.encode(&mut kind)?;
|
kind_enum.encode(&mut kind)?;
|
||||||
let count = stmt.execute(params![
|
let count = stmt.execute(params![
|
||||||
deck.name.as_str(),
|
deck.name.as_native_str(),
|
||||||
deck.mtime_secs,
|
deck.mtime_secs,
|
||||||
deck.usn,
|
deck.usn,
|
||||||
common,
|
common,
|
||||||
|
@ -159,7 +159,7 @@ impl SqliteStorage {
|
||||||
kind_enum.encode(&mut kind)?;
|
kind_enum.encode(&mut kind)?;
|
||||||
stmt.execute(params![
|
stmt.execute(params![
|
||||||
deck.id,
|
deck.id,
|
||||||
deck.name.as_str(),
|
deck.name.as_native_str(),
|
||||||
deck.mtime_secs,
|
deck.mtime_secs,
|
||||||
deck.usn,
|
deck.usn,
|
||||||
common,
|
common,
|
||||||
|
@ -234,7 +234,7 @@ impl SqliteStorage {
|
||||||
.last()
|
.last()
|
||||||
.map(|d| &d.name)
|
.map(|d| &d.name)
|
||||||
.unwrap_or_else(|| &child.name)
|
.unwrap_or_else(|| &child.name)
|
||||||
.as_str(),
|
.as_native_str(),
|
||||||
) {
|
) {
|
||||||
if let Some(parent_did) = self.get_deck_id(parent_name)? {
|
if let Some(parent_did) = self.get_deck_id(parent_name)? {
|
||||||
let parent = self.get_deck(parent_did)?.unwrap();
|
let parent = self.get_deck(parent_did)?.unwrap();
|
||||||
|
@ -329,7 +329,7 @@ impl SqliteStorage {
|
||||||
"create temporary table active_decks (id integer primary key not null);"
|
"create temporary table active_decks (id integer primary key not null);"
|
||||||
))?;
|
))?;
|
||||||
|
|
||||||
let top = current.name.as_str();
|
let top = current.name.as_native_str();
|
||||||
let prefix_start = &format!("{}\x1f", top);
|
let prefix_start = &format!("{}\x1f", top);
|
||||||
let prefix_end = &format!("{}\x20", top);
|
let prefix_end = &format!("{}\x20", top);
|
||||||
|
|
||||||
|
@ -361,7 +361,7 @@ impl SqliteStorage {
|
||||||
deck.set_modified(usn);
|
deck.set_modified(usn);
|
||||||
}
|
}
|
||||||
loop {
|
loop {
|
||||||
let name = UniCase::new(deck.name.as_str().to_string());
|
let name = UniCase::new(deck.name.as_native_str().to_string());
|
||||||
if !names.contains(&name) {
|
if !names.contains(&name) {
|
||||||
names.insert(name);
|
names.insert(name);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue