all repos

anpi @ 496483f

yaml to anki importer

anpi/main.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
implement notes adding, 1 year ago
1
package main
2
3
import (
4
	"fmt"
5
	"log/slog"
6
	"os"
7
8
	"github.com/olexsmir/anpi/anki"
9
	"github.com/olexsmir/anpi/parser"
10
)
11
12
const importFile = "import.yml"
13
14
func main() {
15
	if err := run(); err != nil {
16
		fmt.Fprintf(os.Stderr, "error: %v\n", err)
17
		os.Exit(1)
18
	}
19
}
20
21
func run() error {
22
	anki := anki.NewAnkiClient()
23
24
	f, err := os.ReadFile(importFile)
25
	if err != nil {
26
		return err
27
	}
28
29
	data, err := parser.Parse(f)
30
	if err != nil {
31
		return err
32
	}
33
34
	slog.Info("data", "data", data)
35
36
	for _, deck := range data {
37
		for _, note := range deck.Notes {
38
			fields := make(map[string]string)
39
			for k, v := range note.Fields {
40
				slog.Info("chicken jokey", "k", k, "v", v, "yep", deck.FieldLookUp(k))
41
				fields[deck.FieldLookUp(k)] = v
42
			}
43
44
			slog.Info("got fields", "fields", fields)
45
46
			tags := mergeTags(deck.Tags, note.Tags)
47
			if _, err := anki.AddNote(deck.Deck, deck.Type, fields, tags); err != nil {
48
				return err
49
			}
50
		}
51
	}
52
53
	return nil
54
}
55
56
func mergeTags(global, local []string) []string {
57
	unique := make(map[string]struct{})
58
59
	for _, tag := range global {
60
		unique[tag] = struct{}{}
61
	}
62
	for _, tag := range local {
63
		unique[tag] = struct{}{}
64
	}
65
66
	result := make([]string, 0, len(unique))
67
	for tag := range unique {
68
		result = append(result, tag)
69
	}
70
71
	return result
72
}