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";
|
import "anki/collection.proto";
|
||||||
|
|
||||||
service DecksService {
|
service DecksService {
|
||||||
|
rpc NewDeck(generic.Empty) returns (Deck);
|
||||||
|
rpc AddDeck(Deck) returns (collection.OpChangesWithId);
|
||||||
rpc AddDeckLegacy(generic.Json) returns (collection.OpChangesWithId);
|
rpc AddDeckLegacy(generic.Json) returns (collection.OpChangesWithId);
|
||||||
rpc AddOrUpdateDeckLegacy(AddOrUpdateDeckLegacyRequest) returns (DeckId);
|
rpc AddOrUpdateDeckLegacy(AddOrUpdateDeckLegacyRequest) returns (DeckId);
|
||||||
rpc DeckTree(DeckTreeRequest) returns (DeckTreeNode);
|
rpc DeckTree(DeckTreeRequest) returns (DeckTreeNode);
|
||||||
|
|
|
@ -25,6 +25,7 @@ FilteredDeckConfig = decks_pb2.Deck.Filtered
|
||||||
DeckCollapseScope = decks_pb2.SetDeckCollapsedRequest.Scope
|
DeckCollapseScope = decks_pb2.SetDeckCollapsedRequest.Scope
|
||||||
DeckConfigsForUpdate = deckconfig_pb2.DeckConfigsForUpdate
|
DeckConfigsForUpdate = deckconfig_pb2.DeckConfigsForUpdate
|
||||||
UpdateDeckConfigs = deckconfig_pb2.UpdateDeckConfigsRequest
|
UpdateDeckConfigs = deckconfig_pb2.UpdateDeckConfigsRequest
|
||||||
|
Deck = decks_pb2.Deck
|
||||||
|
|
||||||
# type aliases until we can move away from dicts
|
# type aliases until we can move away from dicts
|
||||||
DeckDict = dict[str, Any]
|
DeckDict = dict[str, Any]
|
||||||
|
@ -104,9 +105,9 @@ class DeckManager(DeprecatedNamesMixin):
|
||||||
if id := self.col.decks.id_for_name(name):
|
if id := self.col.decks.id_for_name(name):
|
||||||
return OpChangesWithId(id=id)
|
return OpChangesWithId(id=id)
|
||||||
else:
|
else:
|
||||||
deck = self.col.decks.new_deck_legacy(filtered=False)
|
deck = self.col.decks.new_deck()
|
||||||
deck["name"] = name
|
deck.name = name
|
||||||
return self.add_deck_legacy(deck)
|
return self.add_deck(deck)
|
||||||
|
|
||||||
def add_deck_legacy(self, deck: DeckDict) -> OpChangesWithId:
|
def add_deck_legacy(self, deck: DeckDict) -> OpChangesWithId:
|
||||||
"Add a deck created with new_deck_legacy(). Must have id of 0."
|
"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]:
|
def get_all_legacy(self) -> list[DeckDict]:
|
||||||
return list(from_json_bytes(self.col._backend.get_all_decks_legacy()).values())
|
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:
|
def new_deck_legacy(self, filtered: bool) -> DeckDict:
|
||||||
deck = from_json_bytes(self.col._backend.new_deck_legacy(filtered))
|
deck = from_json_bytes(self.col._backend.new_deck_legacy(filtered))
|
||||||
if deck["dyn"]:
|
if deck["dyn"]:
|
||||||
|
|
|
@ -13,6 +13,15 @@ use crate::{
|
||||||
};
|
};
|
||||||
|
|
||||||
impl DecksService for Backend {
|
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> {
|
fn add_deck_legacy(&self, input: pb::Json) -> Result<pb::OpChangesWithId> {
|
||||||
let schema11: DeckSchema11 = serde_json::from_slice(&input.json)?;
|
let schema11: DeckSchema11 = serde_json::from_slice(&input.json)?;
|
||||||
let mut deck: Deck = schema11.into();
|
let mut deck: Deck = schema11.into();
|
||||||
|
|
Loading…
Reference in a new issue