@@ -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+
6287func (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
79104func (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