aboutsummaryrefslogtreecommitdiff
path: root/go/game/set.go
blob: 23cc7084d2c65eb11af585efee6589154219ba19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package game

import (
	"log"
	"net/http"
	"path"
	"strings"

	"golang.org/x/net/html"
)

type SetIdentifier int

const (
	Base SetIdentifier = iota + 1
	Magic
	Equipments
	Misc
	Nautics
	Potions
	Kraken
	Tyrant
	Exp1
)

func (si SetIdentifier) String() string {
	switch si {
	case Base:
		return "base"
	case Magic:
		return "magic"
	case Equipments:
		return "equipments"
	case Misc:
		return "misc"
	case Nautics:
		return "nautics"
	case Potions:
		return "potions"
	case Kraken:
		return "kraken"
	case Tyrant:
		return "tyrant"
	case Exp1:
		return "exp1"
	}
	log.Panicf("Switch not exhausting %d", si)
	return ""
}

var Sets = struct {
	Base       SetIdentifier
	Magic      SetIdentifier
	Equipments SetIdentifier
	Misc       SetIdentifier
	Nautics    SetIdentifier
	Potions    SetIdentifier
	Kraken     SetIdentifier
	Tyrant     SetIdentifier
	Exp1       SetIdentifier
}{
	Base:       Base,
	Magic:      Magic,
	Equipments: Equipments,
	Misc:       Misc,
	Nautics:    Nautics,
	Potions:    Potions,
	Kraken:     Kraken,
	Tyrant:     Tyrant,
	Exp1:       Exp1,
}

var SetNames = map[string]SetIdentifier{
	"base":       Base,
	"magic":      Magic,
	"equipments": Equipments,
	"misc":       Misc,
	"nautics":    Nautics,
	"potions":    Potions,
	"kraken":     Kraken,
	"tyrant":     Tyrant,
	"exp1":       Exp1,
}

func (set SetIdentifier) CardPaths() []string {
	url := PROTOCOL + path.Join(BASE_URL, CARD_DATA_URL, set.String())
	log.Printf("loading %s\n", url)
	resp, err := http.Get(url)
	if err != nil {
		log.Fatal(err)
	}

	defer resp.Body.Close()

	doc, err := html.Parse(resp.Body)
	if err != nil {
		log.Fatal(err)
	}

	paths := []string{}
	var walk func(*html.Node)
	walk = func(n *html.Node) {
		if n.Type == html.ElementNode && n.Data == "a" {
			for _, a := range n.Attr {
				if a.Key == "href" {
					paths = append(paths, path.Join(set.String(), strings.TrimSuffix(a.Val, ".yml")))
					break
				}
			}
		}
		for c := n.FirstChild; c != nil; c = c.NextSibling {
			walk(c)
		}
	}
	walk(doc)
	return paths
}