Skip to content

Commit 25b2acf

Browse files
Merge pull request #92 from pawndev/feat/issue-78/add-knulli-game-metadata-to-gamelist-if-not-exist
feat(knulli): add grout to gamelist if not exist
2 parents cfcabdd + a274fd6 commit 25b2acf

4 files changed

Lines changed: 53 additions & 31 deletions

File tree

app/setup.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"errors"
55
"grout/cache"
66
"grout/cfw"
7+
"grout/cfw/knulli"
78
"grout/cfw/muos"
89
"grout/internal"
910
"grout/internal/environment"
@@ -82,12 +83,15 @@ func setup() SetupResult {
8283
log.Fatalf("Failed to initialize i18n: %v", err)
8384
}
8485

86+
if cfw.GetCFW() == cfw.Knulli {
87+
knulli.AddToToolsGameList()
88+
}
89+
8590
config, err := internal.LoadConfig()
8691
isFirstLaunch := err != nil || (len(config.Hosts) == 0 && config.Language == "")
8792

8893
if isFirstLaunch {
8994
logger.Debug("First launch detected, showing language selection")
90-
cfw.FirstLaunchSetup()
9195
languageScreen := ui.NewLanguageSelectionScreen()
9296
selectedLanguage, langErr := languageScreen.Draw()
9397
if langErr != nil {
Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ const (
1515
flagPath = "./knulli_restart_request"
1616
)
1717

18-
func FirstLaunchSetup(romDir string) {
19-
path := filepath.Join(romDir, "tools", "gamelist.xml")
18+
func AddToToolsGameList() {
19+
path := filepath.Join(GetRomDirectory(), "tools", "gamelist.xml")
2020
gaba.GetLogger().Debug("using filepath for knulli gamelist.xml", "path", path)
2121
gl := gamelist.New()
2222

@@ -37,6 +37,15 @@ func FirstLaunchSetup(romDir string) {
3737
}
3838
}
3939

40+
if gl.GameContainsElements(GroutEntryGameListName, []string{
41+
gamelist.PathElement, gamelist.DescElement,
42+
gamelist.ImageElement, gamelist.DeveloperElement,
43+
gamelist.PlayersElement, gamelist.GenreElement,
44+
}) {
45+
gaba.GetLogger().Debug("gamelist.xml already contains Grout entry, skipping addition", "path", path)
46+
return
47+
}
48+
4049
gl.AdddOrUpdateEntry(GroutEntryGameListName, map[string]string{
4150
gamelist.NameElement: GroutEntryGameListName,
4251
gamelist.DescElement: "Download games wirelessly from your RomM instance",

cfw/setup.go

Lines changed: 0 additions & 12 deletions
This file was deleted.

internal/gamelist/gamelist.go

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,31 @@ func (gl *GameList) Contains(element, value string) bool {
5959
return false
6060
}
6161

62+
func (gl *GameList) GetGameElementByName(name string) *etree.Element {
63+
root := gl.document.SelectElement(GameListElement)
64+
games := root.SelectElements(GameElement)
65+
for _, game := range games {
66+
nameElement := game.FindElement(NameElement)
67+
if nameElement != nil && nameElement.Text() == name {
68+
return game
69+
}
70+
}
71+
return nil
72+
}
73+
74+
func (gl *GameList) GameContainsElements(name string, elements []string) bool {
75+
e := gl.GetGameElementByName(name)
76+
if e == nil {
77+
return false
78+
}
79+
for _, element := range elements {
80+
if e.FindElement(element) == nil {
81+
return false
82+
}
83+
}
84+
return true
85+
}
86+
6287
func (gl *GameList) Save(filepath string) error {
6388
gl.document.Indent(4)
6489
if err := gl.document.WriteToFile(filepath); err != nil {
@@ -77,22 +102,18 @@ func (gl *GameList) AddGameEntry(info map[string]string) {
77102
}
78103

79104
func (gl *GameList) AdddOrUpdateEntry(name string, info map[string]string) {
80-
root := gl.document.SelectElement(GameListElement)
81-
games := root.SelectElements(GameElement)
82-
for _, game := range games {
83-
nameElement := game.FindElement(NameElement)
84-
if nameElement != nil && nameElement.Text() == name {
85-
// Update existing entry
86-
for key, value := range info {
87-
if element := game.FindElement(key); element != nil {
88-
element.SetText(value)
89-
} else {
90-
game.CreateElement(key).SetText(value)
91-
}
92-
}
93-
return
105+
game := gl.GetGameElementByName(name)
106+
if game == nil {
107+
gl.AddGameEntry(info)
108+
return
109+
}
110+
111+
for key, value := range info {
112+
if element := game.FindElement(key); element != nil {
113+
element.SetText(value)
114+
} else {
115+
game.CreateElement(key).SetText(value)
94116
}
95117
}
96-
// Add new entry
97-
gl.AddGameEntry(info)
118+
98119
}

0 commit comments

Comments
 (0)