mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 14:02:21 -04:00
Add non-legacy backend interface for adding new decks
This commit is contained in:
parent
e2193950a9
commit
0bcb3a3564
3 changed files with 22 additions and 3 deletions
|
@ -11,6 +11,8 @@ import "anki/generic.proto";
|
|||
import "anki/collection.proto";
|
||||
|
||||
service DecksService {
|
||||
rpc NewDeck(generic.Empty) returns (Deck);
|
||||
rpc AddDeck(Deck) returns (collection.OpChangesWithId);
|
||||
rpc AddDeckLegacy(generic.Json) returns (collection.OpChangesWithId);
|
||||
rpc AddOrUpdateDeckLegacy(AddOrUpdateDeckLegacyRequest) returns (DeckId);
|
||||
rpc DeckTree(DeckTreeRequest) returns (DeckTreeNode);
|
||||
|
|
|
@ -25,6 +25,7 @@ FilteredDeckConfig = decks_pb2.Deck.Filtered
|
|||
DeckCollapseScope = decks_pb2.SetDeckCollapsedRequest.Scope
|
||||
DeckConfigsForUpdate = deckconfig_pb2.DeckConfigsForUpdate
|
||||
UpdateDeckConfigs = deckconfig_pb2.UpdateDeckConfigsRequest
|
||||
Deck = decks_pb2.Deck
|
||||
|
||||
# type aliases until we can move away from dicts
|
||||
DeckDict = dict[str, Any]
|
||||
|
@ -104,9 +105,9 @@ class DeckManager(DeprecatedNamesMixin):
|
|||
if id := self.col.decks.id_for_name(name):
|
||||
return OpChangesWithId(id=id)
|
||||
else:
|
||||
deck = self.col.decks.new_deck_legacy(filtered=False)
|
||||
deck["name"] = name
|
||||
return self.add_deck_legacy(deck)
|
||||
deck = self.col.decks.new_deck()
|
||||
deck.name = name
|
||||
return self.add_deck(deck)
|
||||
|
||||
def add_deck_legacy(self, deck: DeckDict) -> OpChangesWithId:
|
||||
"Add a deck created with new_deck_legacy(). Must have id of 0."
|
||||
|
@ -161,6 +162,13 @@ class DeckManager(DeprecatedNamesMixin):
|
|||
def get_all_legacy(self) -> list[DeckDict]:
|
||||
return list(from_json_bytes(self.col._backend.get_all_decks_legacy()).values())
|
||||
|
||||
def new_deck(self) -> Deck:
|
||||
"Return a new normal deck. It must be added with .add_deck() after a name assigned."
|
||||
return self.col._backend.new_deck()
|
||||
|
||||
def add_deck(self, deck: Deck) -> OpChangesWithId:
|
||||
return self.col._backend.add_deck(message=deck)
|
||||
|
||||
def new_deck_legacy(self, filtered: bool) -> DeckDict:
|
||||
deck = from_json_bytes(self.col._backend.new_deck_legacy(filtered))
|
||||
if deck["dyn"]:
|
||||
|
|
|
@ -13,6 +13,15 @@ use crate::{
|
|||
};
|
||||
|
||||
impl DecksService for Backend {
|
||||
fn new_deck(&self, _input: pb::Empty) -> Result<pb::Deck> {
|
||||
Ok(Deck::new_normal().into())
|
||||
}
|
||||
|
||||
fn add_deck(&self, deck: pb::Deck) -> Result<pb::OpChangesWithId> {
|
||||
let mut deck: Deck = deck.try_into()?;
|
||||
self.with_col(|col| Ok(col.add_deck(&mut deck)?.map(|_| deck.id.0).into()))
|
||||
}
|
||||
|
||||
fn add_deck_legacy(&self, input: pb::Json) -> Result<pb::OpChangesWithId> {
|
||||
let schema11: DeckSchema11 = serde_json::from_slice(&input.json)?;
|
||||
let mut deck: Deck = schema11.into();
|
||||
|
|
Loading…
Reference in a new issue