all repos

anpi @ e2e6e9e

yaml to anki importer

anpi/anki/anki.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
implement notes adding, 1 year ago
1
package anki
2
3
type AnkiClient struct{}
4
5
func NewAnkiClient() AnkiClient {
6
	return AnkiClient{}
7
}
8
9
type ModelFieldNames []string
10
11
type ModelFieldNamesParams struct {
12
	ModelName string `json:"modelName"`
13
}
14
15
func (a *AnkiClient) GetModelFieldNames(modelName string) (ModelFieldNames, error) {
16
	res, err := request[ModelFieldNames]("modelFieldNames", ModelFieldNamesParams{
17
		ModelName: modelName,
18
	})
19
	if err != nil {
20
		return ModelFieldNames{}, err
21
	}
22
23
	return res.Result, nil
24
}
25
26
type DeckNames []string
27
28
func (a *AnkiClient) GetDeckNames() (DeckNames, error) {
29
	res, err := request[DeckNames]("deckNames", paramsDefault{})
30
	if err != nil {
31
		return DeckNames{}, err
32
	}
33
34
	return res.Result, nil
35
}
36
37
type (
38
	NoteID int
39
	Note   struct {
40
		DeckName  string            `json:"deckName"`
41
		ModelName string            `json:"modelName"`
42
		Fields    map[string]string `json:"fields"`
43
		Tags      []string          `json:"tags"`
44
	}
45
46
	internalNote struct {
47
		Note Note `json:"note"`
48
	}
49
)
50
51
func (a *AnkiClient) AddNote(
52
	deckName, modelName string,
53
	fields map[string]string,
54
	tags []string,
55
) (NoteID, error) {
56
	res, err := request[NoteID]("addNote", internalNote{Note{
57
		DeckName:  deckName,
58
		ModelName: modelName,
59
		Fields:    fields,
60
		Tags:      tags,
61
	}})
62
	if err != nil {
63
		return 0, err
64
	}
65
66
	return res.Result, nil
67
}