/
system.go
117 lines (102 loc) · 4.06 KB
/
system.go
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 core
import (
"fmt"
"path/filepath"
"github.com/golang/glog"
)
// System defines a system
type System struct {
ID string
Terms []string
Exts string
Scanners []string
Cleaners []string
}
var systems = map[string]System{
"3do": {"3do", nil, "", nil, nil},
"amiga": {"amiga", nil, "", nil, nil},
"amstradcpc": {"amstradcpc", nil, "", nil, nil},
"apple2": {"apple2", nil, "", nil, nil},
"arcade": {"arcade", []string{"arcade", "mame", "fba", "fbn", "burn", "raine", "capcom", "m.a.m.e", "cps", "cps1", "cps2", "cps3"}, ".zip .ZIP .7z .7Z .cue .CUE", []string{"map", "index"}, nil},
"atari800": {"atari800", nil, "", nil, nil},
"atari2600": {"atari2600", nil, "", nil, nil},
"atari5200": {"atari5200", nil, "", nil, nil},
"atari7800": {"atari7800", nil, "", nil, nil},
"atarilynx": {"atarilynx", nil, "", nil, nil},
"atarist": {"atarist", nil, "", nil, nil},
"atarijaguar": {"atarijaguar", nil, "", nil, nil},
"atarijaguarcd": {"atarijaguarcd", nil, "", nil, nil},
"atarixe": {"atarixe", nil, "", nil, nil},
"colecovision": {"colecovision", nil, "", nil, nil},
"c64": {"c64", nil, "", nil, nil},
"intellivision": {"intellivision", nil, "", nil, nil},
"macintosh": {"macintosh", nil, "", nil, nil},
"xbox": {"xbox", nil, "", nil, nil},
"xbox360": {"xbox360", nil, "", nil, nil},
"msx": {"msx", nil, "", nil, nil},
"neogeo": {"neogeo", nil, "", nil, nil},
"ngp": {"ngp", nil, "", nil, nil},
"ngpc": {"ngpc", nil, "", nil, nil},
"n3ds": {"n3ds", nil, "", nil, nil},
"n64": {"n64", nil, "", nil, nil},
"nds": {"nds", nil, "", nil, nil},
"nes": {"nes", nil, "", nil, nil},
"gb": {"gb", nil, "", nil, nil},
"gba": {"gba", nil, "", nil, nil},
"gbc": {"gbc", nil, "", nil, nil},
"gc": {"gc", nil, "", nil, nil},
"wii": {"wii", nil, "", nil, nil},
"wiiu": {"wiiu", nil, "", nil, nil},
"pc": {"pc", nil, "", nil, nil},
"sega32x": {"sega32x", nil, "", nil, nil},
"segacd": {"segacd", nil, "", nil, nil},
"dreamcast": {"dreamcast", nil, "", nil, nil},
"gamegear": {"gamegear", nil, "", nil, nil},
"genesis": {"genesis", nil, "", nil, nil},
"mastersystem": {"mastersystem", nil, "", nil, nil},
"megadrive": {"megadrive", nil, "", nil, nil},
"saturn": {"saturn", nil, "", nil, nil},
"ps": {"ps", []string{"psx"}, ".rar .zip .ZIP .7z .7Z .cue .CUE", []string{"map", "index"}, nil},
"ps2": {"ps2", nil, "", nil, nil},
"ps3": {"ps3", nil, "", nil, nil},
"ps4": {"ps4", nil, "", nil, nil},
"psvita": {"psvita", nil, "", nil, nil},
"psp": {"psp", nil, "", nil, nil},
"snes": {"snes", nil, "", nil, nil},
"pcengine": {"pcengine", nil, "", nil, nil},
"wonderswan": {"wonderswan", nil, "", nil, nil},
"wonderswancolor": {"wonderswancolor", nil, "", nil, nil},
"zxspectrum": {"zxspectrum", nil, "", nil, nil},
}
var systemIndex Index
// GetSystem returns a system key based on a key or path
func GetSystem(keyOrPath string) (System, error) {
glog.V(1).Infof("GetSystem(%s)", keyOrPath)
var err error
if systemIndex == nil {
systemIndex, err = CreateIndex([]string{"Scanners", "Cleaners"})
if err != nil {
glog.Error(err)
return System{}, err
}
for _, supportedSystem := range systems {
systemIndex.Add(supportedSystem.ID, supportedSystem)
if err != nil {
glog.Error(err)
return System{}, err
}
}
}
key := filepath.Base(keyOrPath)
result, err := systemIndex.Search(key)
if err != nil {
glog.Error(err)
return System{}, err
}
if len(result) == 0 || result[0].Score < 0.9 {
glog.Errorf("system %s not found", key)
return System{}, fmt.Errorf("system %s not found", key)
}
glog.V(1).Infof("%s -> %s", keyOrPath, result[0].Key)
return systems[result[0].Key], nil
}