expose the ability to get/set aux notetype/template keys
template keys are not currently adjusted when card templates are repositioned.
This commit is contained in:
parent
050ef11a96
commit
e9309c5378
@ -824,6 +824,40 @@ class Collection:
|
|||||||
) -> OpChanges:
|
) -> OpChanges:
|
||||||
return self._backend.set_config_string(key=key, value=value, undoable=undoable)
|
return self._backend.set_config_string(key=key, value=value, undoable=undoable)
|
||||||
|
|
||||||
|
def get_aux_notetype_config(
|
||||||
|
self, id: NotetypeId, key: str, default: Any = None
|
||||||
|
) -> Any:
|
||||||
|
key = self._backend.get_aux_notetype_config_key(id=id, key=key)
|
||||||
|
return self.get_config(key, default=default)
|
||||||
|
|
||||||
|
def set_aux_notetype_config(
|
||||||
|
self, id: NotetypeId, key: str, value: Any, *, undoable: bool = False
|
||||||
|
) -> OpChanges:
|
||||||
|
key = self._backend.get_aux_notetype_config_key(id=id, key=key)
|
||||||
|
return self.set_config(key, value, undoable=undoable)
|
||||||
|
|
||||||
|
def get_aux_template_config(
|
||||||
|
self, id: NotetypeId, card_ordinal: int, key: str, default: Any = None
|
||||||
|
) -> Any:
|
||||||
|
key = self._backend.get_aux_template_config_key(
|
||||||
|
notetype_id=id, card_ordinal=card_ordinal, key=key
|
||||||
|
)
|
||||||
|
return self.get_config(key, default=default)
|
||||||
|
|
||||||
|
def set_aux_template_config(
|
||||||
|
self,
|
||||||
|
id: NotetypeId,
|
||||||
|
card_ordinal: int,
|
||||||
|
key: str,
|
||||||
|
value: Any,
|
||||||
|
*,
|
||||||
|
undoable: bool = False,
|
||||||
|
) -> OpChanges:
|
||||||
|
key = self._backend.get_aux_template_config_key(
|
||||||
|
notetype_id=id, card_ordinal=card_ordinal, key=key
|
||||||
|
)
|
||||||
|
return self.set_config(key, value, undoable=undoable)
|
||||||
|
|
||||||
# Stats
|
# Stats
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
|
@ -77,8 +77,7 @@ def test_gendeck():
|
|||||||
assert note.cards()[0].did == 1
|
assert note.cards()[0].did == 1
|
||||||
# set the model to a new default col
|
# set the model to a new default col
|
||||||
newId = col.decks.id("new")
|
newId = col.decks.id("new")
|
||||||
# fixme: dedicated API for this
|
col.set_aux_notetype_config(cloze["id"], "lastDeck", newId)
|
||||||
col.set_config(f"_nt_{cloze['id']}_lastDeck", newId)
|
|
||||||
col.models.save(cloze, updateReqs=False)
|
col.models.save(cloze, updateReqs=False)
|
||||||
# a newly generated card should share the first card's col
|
# a newly generated card should share the first card's col
|
||||||
note["Text"] += "{{c2::two}}"
|
note["Text"] += "{{c2::two}}"
|
||||||
|
@ -213,6 +213,8 @@ service NotetypesService {
|
|||||||
rpc GetNotetypeNamesAndCounts(Empty) returns (NotetypeUseCounts);
|
rpc GetNotetypeNamesAndCounts(Empty) returns (NotetypeUseCounts);
|
||||||
rpc GetNotetypeIdByName(String) returns (NotetypeId);
|
rpc GetNotetypeIdByName(String) returns (NotetypeId);
|
||||||
rpc RemoveNotetype(NotetypeId) returns (OpChanges);
|
rpc RemoveNotetype(NotetypeId) returns (OpChanges);
|
||||||
|
rpc GetAuxNotetypeConfigKey(GetAuxConfigKeyIn) returns (String);
|
||||||
|
rpc GetAuxTemplateConfigKey(GetAuxTemplateConfigKeyIn) returns (String);
|
||||||
}
|
}
|
||||||
|
|
||||||
service CardRenderingService {
|
service CardRenderingService {
|
||||||
@ -1621,3 +1623,14 @@ message SetFlagIn {
|
|||||||
repeated int64 card_ids = 1;
|
repeated int64 card_ids = 1;
|
||||||
uint32 flag = 2;
|
uint32 flag = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message GetAuxConfigKeyIn {
|
||||||
|
int64 id = 1;
|
||||||
|
string key = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetAuxTemplateConfigKeyIn {
|
||||||
|
int64 notetype_id = 1;
|
||||||
|
uint32 card_ordinal = 2;
|
||||||
|
string key = 3;
|
||||||
|
}
|
||||||
|
@ -5,6 +5,7 @@ use super::Backend;
|
|||||||
pub(super) use crate::backend_proto::notetypes_service::Service as NotetypesService;
|
pub(super) use crate::backend_proto::notetypes_service::Service as NotetypesService;
|
||||||
use crate::{
|
use crate::{
|
||||||
backend_proto as pb,
|
backend_proto as pb,
|
||||||
|
config::get_aux_notetype_config_key,
|
||||||
notetype::{all_stock_notetypes, Notetype, NotetypeSchema11},
|
notetype::{all_stock_notetypes, Notetype, NotetypeSchema11},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
};
|
};
|
||||||
@ -134,6 +135,24 @@ impl NotetypesService for Backend {
|
|||||||
self.with_col(|col| col.remove_notetype(input.into()))
|
self.with_col(|col| col.remove_notetype(input.into()))
|
||||||
.map(Into::into)
|
.map(Into::into)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_aux_notetype_config_key(&self, input: pb::GetAuxConfigKeyIn) -> Result<pb::String> {
|
||||||
|
Ok(get_aux_notetype_config_key(input.id.into(), &input.key).into())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_aux_template_config_key(
|
||||||
|
&self,
|
||||||
|
input: pb::GetAuxTemplateConfigKeyIn,
|
||||||
|
) -> Result<pb::String> {
|
||||||
|
self.with_col(|col| {
|
||||||
|
col.get_aux_template_config_key(
|
||||||
|
input.notetype_id.into(),
|
||||||
|
input.card_ordinal as usize,
|
||||||
|
&input.key,
|
||||||
|
)
|
||||||
|
.map(Into::into)
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<pb::Notetype> for Notetype {
|
impl From<pb::Notetype> for Notetype {
|
||||||
|
@ -13,7 +13,7 @@ use serde_repr::{Deserialize_repr, Serialize_repr};
|
|||||||
use slog::warn;
|
use slog::warn;
|
||||||
use strum::IntoStaticStr;
|
use strum::IntoStaticStr;
|
||||||
|
|
||||||
pub use self::{bool::BoolKey, string::StringKey};
|
pub use self::{bool::BoolKey, notetype::get_aux_notetype_config_key, string::StringKey};
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
/// Only used when updating/undoing.
|
/// Only used when updating/undoing.
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
use strum::IntoStaticStr;
|
use strum::IntoStaticStr;
|
||||||
|
|
||||||
use super::ConfigKey;
|
use super::ConfigKey;
|
||||||
use crate::prelude::*;
|
use crate::{notetype::NotetypeKind, prelude::*};
|
||||||
|
|
||||||
/// Notetype config packed into a collection config key. This may change
|
/// Notetype config packed into a collection config key. This may change
|
||||||
/// frequently, and we want to avoid the potentially expensive notetype
|
/// frequently, and we want to avoid the potentially expensive notetype
|
||||||
@ -16,9 +16,29 @@ enum NotetypeConfigKey {
|
|||||||
LastDeckAddedTo,
|
LastDeckAddedTo,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Collection {
|
||||||
|
pub fn get_aux_template_config_key(
|
||||||
|
&mut self,
|
||||||
|
ntid: NotetypeId,
|
||||||
|
card_ordinal: usize,
|
||||||
|
key: &str,
|
||||||
|
) -> Result<String> {
|
||||||
|
let nt = self.get_notetype(ntid)?.ok_or(AnkiError::NotFound)?;
|
||||||
|
let ordinal = if matches!(nt.config.kind(), NotetypeKind::Cloze) {
|
||||||
|
0
|
||||||
|
} else {
|
||||||
|
card_ordinal
|
||||||
|
};
|
||||||
|
Ok(get_aux_notetype_config_key(
|
||||||
|
ntid,
|
||||||
|
&format!("{}_{}", key, ordinal),
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl NotetypeConfigKey {
|
impl NotetypeConfigKey {
|
||||||
fn for_notetype(self, ntid: NotetypeId) -> String {
|
fn for_notetype(self, ntid: NotetypeId) -> String {
|
||||||
build_aux_notetype_key(ntid, <&'static str>::from(self))
|
get_aux_notetype_config_key(ntid, <&'static str>::from(self))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,7 +54,7 @@ impl Collection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn clear_aux_config_for_notetype(&mut self, ntid: NotetypeId) -> Result<()> {
|
pub(crate) fn clear_aux_config_for_notetype(&mut self, ntid: NotetypeId) -> Result<()> {
|
||||||
self.remove_config_prefix(&build_aux_notetype_key(ntid, ""))
|
self.remove_config_prefix(&get_aux_notetype_config_key(ntid, ""))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn get_last_deck_added_to_for_notetype(&self, id: NotetypeId) -> Option<DeckId> {
|
pub(crate) fn get_last_deck_added_to_for_notetype(&self, id: NotetypeId) -> Option<DeckId> {
|
||||||
@ -48,6 +68,6 @@ impl Collection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build_aux_notetype_key(ntid: NotetypeId, key: &str) -> String {
|
pub fn get_aux_notetype_config_key(ntid: NotetypeId, key: &str) -> String {
|
||||||
format!("_nt_{ntid}_{key}", ntid = ntid, key = key)
|
format!("_nt_{ntid}_{key}", ntid = ntid, key = key)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user