@@ -97,15 +97,8 @@ private OneOf<GOGGame, ErrorMessage> ParseSubKey(IRegistryKey gogKey, string sub
9797 return new ErrorMessage ( $ "Unable to open { gogKey } \\ { subKeyName } ") ;
9898 }
9999
100- if ( ! subKey . TryGetString ( "gameID" , out var sId ) )
101- {
102- return new ErrorMessage ( $ "{ subKey . GetName ( ) } doesn't have a string value \" gameID\" ") ;
103- }
104-
105- if ( ! long . TryParse ( sId , NumberStyles . Integer , CultureInfo . InvariantCulture , out var id ) )
106- {
107- return new ErrorMessage ( $ "The value \" gameID\" of { subKey . GetName ( ) } is not a number: \" { sId } \" ") ;
108- }
100+ var idResult = GetId ( subKey , subKeyName ) ;
101+ if ( idResult . IsT1 ) return idResult . AsT1 ;
109102
110103 if ( ! subKey . TryGetString ( "gameName" , out var name ) )
111104 {
@@ -128,7 +121,7 @@ private OneOf<GOGGame, ErrorMessage> ParseSubKey(IRegistryKey gogKey, string sub
128121 }
129122
130123 var game = new GOGGame (
131- GOGGameId . From ( id ) ,
124+ GOGGameId . From ( idResult . AsT0 ) ,
132125 name ,
133126 _fileSystem . FromUnsanitizedFullPath ( path ) ,
134127 buildId
@@ -141,4 +134,37 @@ private OneOf<GOGGame, ErrorMessage> ParseSubKey(IRegistryKey gogKey, string sub
141134 return new ErrorMessage ( e , $ "Exception while parsing registry key { gogKey } \\ { subKeyName } ") ;
142135 }
143136 }
137+
138+ private static OneOf < long , ErrorMessage > GetId ( IRegistryKey subKey , string subKeyName )
139+ {
140+ ErrorMessage ? subKeyError = null ;
141+ ErrorMessage ? idError = null ;
142+
143+ if ( ! long . TryParse ( subKeyName , CultureInfo . InvariantCulture , out var subKeyId ) )
144+ {
145+ subKeyError = new ErrorMessage ( $ "`{ subKeyName } ` of `{ subKey . GetName ( ) } ` is not a number!") ;
146+ }
147+
148+ long id = - 1 ;
149+ if ( subKey . TryGetString ( "gameID" , out var sID ) )
150+ {
151+ if ( ! long . TryParse ( sID , CultureInfo . InvariantCulture , out id ) )
152+ {
153+ idError = new ErrorMessage ( $ "The value \" gameID\" of { subKey . GetName ( ) } is not a number: \" { sID } \" ") ;
154+ }
155+ }
156+ else
157+ {
158+ idError = new ErrorMessage ( $ "{ subKey . GetName ( ) } doesn't have a string value \" gameID\" ") ;
159+ }
160+
161+ if ( subKeyError . HasValue && idError . HasValue )
162+ {
163+ return new ErrorMessage ( $ "{ subKeyError . Value } | { idError . Value } ") ;
164+ }
165+
166+ if ( subKeyError . HasValue && ! idError . HasValue ) return id ;
167+ if ( ! subKeyError . HasValue && idError . HasValue ) return subKeyId ;
168+ return id ;
169+ }
144170}
0 commit comments