11using System . IO ;
22using System . Net . Http ;
3- using System . Text ;
43using System . Xml . Linq ;
5- using Gameloop . Vdf ;
6- using Gameloop . Vdf . Linq ;
4+ using LightSteamAccountSwitcher . Core ;
75using LightSteamAccountSwitcher . Core . Models ;
8- using LightSteamAccountSwitcher . Core . Services ;
96using LightSteamAccountSwitcher . Windows ;
7+ using VdfSerializer ;
8+ using VdfSerializer . Linq ;
109
1110namespace LightSteamAccountSwitcher . Steam ;
1211
@@ -29,12 +28,7 @@ public SteamService()
2928 private static string ? GetLoginUsersPath ( )
3029 {
3130 var steamPath = SteamRegistryHelper . GetSteamPath ( ) ;
32- if ( string . IsNullOrEmpty ( steamPath ) )
33- {
34- return null ;
35- }
36-
37- return Path . Combine ( steamPath , "config" , "loginusers.vdf" ) ;
31+ return string . IsNullOrEmpty ( steamPath ) ? null : Path . Combine ( steamPath , "config" , "loginusers.vdf" ) ;
3832 }
3933
4034 public static string ? GetActiveAccountName ( )
@@ -77,7 +71,7 @@ public List<SteamAccount> GetSteamUsers()
7771 }
7872 catch ( Exception ex )
7973 {
80- Console . WriteLine ( $ "Error parsing loginusers.vdf: { ex . Message } ") ;
74+ Logger . Error ( $ "Error parsing loginusers.vdf: { ex . Message } ") ;
8175 }
8276
8377 return accounts ;
@@ -91,12 +85,12 @@ public List<SteamAccount> GetSteamUsers()
9185 return null ;
9286 }
9387
94- var accountName = userDetails . Value < string > ( "AccountName" ) ;
95- var personaName = userDetails . Value < string > ( "PersonaName" ) ;
96- var timestamp = userDetails . Value < string > ( "Timestamp" ) ;
97- var wantsOffline = userDetails . Value < string > ( "WantsOfflineMode" ) ;
98- var mostRecent = userDetails . Value < string > ( "MostRec" ) ;
99- var remember = userDetails . Value < string > ( "RememberPassword" ) ;
88+ var accountName = userDetails . Value < string > ( "AccountName" ) ! ;
89+ var personaName = userDetails . Value < string > ( "PersonaName" ) ! ;
90+ var timestamp = userDetails . Value < string > ( "Timestamp" ) ! ;
91+ var wantsOffline = userDetails . Value < string > ( "WantsOfflineMode" ) ! ;
92+ var mostRecent = userDetails . Value < string > ( "MostRec" ) ! ;
93+ var remember = userDetails . Value < string > ( "RememberPassword" ) ! ;
10094
10195 if ( string . IsNullOrEmpty ( accountName ) )
10296 {
@@ -185,7 +179,7 @@ public async Task EnrichAccountInfo(SteamAccount? account)
185179 }
186180 catch ( Exception ex )
187181 {
188- Console . WriteLine ( $ "Error fetching profile for { account . AccountName } : { ex . Message } ") ;
182+ Logger . Error ( $ "Error fetching profile for { account . AccountName } : { ex . Message } ") ;
189183 }
190184 }
191185
@@ -237,7 +231,7 @@ public static void ForgetAccount(string steamId)
237231 }
238232 catch ( Exception ex )
239233 {
240- Console . WriteLine ( $ "Error forgetting account: { ex } ") ;
234+ Logger . Error ( $ "Error forgetting account: { ex } ") ;
241235 }
242236 }
243237
@@ -254,44 +248,46 @@ private void PatchLoginUsers(string targetSteamId, int personaState = -1)
254248 var vdfText = File . ReadAllText ( path ) ;
255249 var root = VdfConvert . Deserialize ( vdfText ) ;
256250
257- if ( root . Value is VObject usersObj )
251+ if ( root . Value is not VObject usersObj )
252+ {
253+ return ;
254+ }
255+
256+ foreach ( var userProp in usersObj )
258257 {
259- foreach ( var userProp in usersObj )
258+ if ( userProp . Value is not VObject userDetails )
259+ {
260+ continue ;
261+ }
262+
263+ if ( userDetails . ContainsKey ( "MostRec" ) )
264+ {
265+ userDetails [ "MostRec" ] = new VValue ( "0" ) ;
266+ }
267+
268+ if ( userProp . Key != targetSteamId )
260269 {
261- if ( userProp . Value is not VObject userDetails )
262- {
263- continue ;
264- }
265-
266- if ( userDetails . ContainsKey ( "MostRec" ) )
267- {
268- userDetails [ "MostRec" ] = new VValue ( "0" ) ;
269- }
270-
271- if ( userProp . Key != targetSteamId )
272- {
273- continue ;
274- }
275-
276- userDetails [ "MostRec" ] = new VValue ( "1" ) ;
277- userDetails [ "RememberPassword" ] = new VValue ( "1" ) ;
278-
279- if ( personaState == - 1 )
280- {
281- continue ;
282- }
283-
284- var wantsOffline = personaState == 0 ? "1" : "0" ;
285- userDetails [ "WantsOfflineMode" ] = new VValue ( wantsOffline ) ;
286- userDetails [ "SkipOfflineModeWarning" ] = new VValue ( wantsOffline ) ;
270+ continue ;
287271 }
272+
273+ userDetails [ "MostRec" ] = new VValue ( "1" ) ;
274+ userDetails [ "RememberPassword" ] = new VValue ( "1" ) ;
275+
276+ if ( personaState == - 1 )
277+ {
278+ continue ;
279+ }
280+
281+ var wantsOffline = personaState == 0 ? "1" : "0" ;
282+ userDetails [ "WantsOfflineMode" ] = new VValue ( wantsOffline ) ;
283+ userDetails [ "SkipOfflineModeWarning" ] = new VValue ( wantsOffline ) ;
288284 }
289285
290286 File . WriteAllText ( path , root . ToString ( ) ) ;
291287 }
292288 catch ( Exception ex )
293289 {
294- Console . WriteLine ( $ "Error patching vdf: { ex } ") ;
290+ Logger . Error ( $ "Error patching vdf: { ex } ") ;
295291 }
296292 }
297293
@@ -319,34 +315,21 @@ private void SetPersonaState(string steamId64, int state)
319315 }
320316
321317 var localConfigText = File . ReadAllText ( localConfigPath ) ;
318+ var root = VdfConvert . Deserialize ( localConfigText ) ;
322319
323- var positionOfVar = localConfigText . IndexOf ( "\" ePersonaState\" " , StringComparison . Ordinal ) ;
324- if ( positionOfVar == - 1 )
325- {
326- return ;
327- }
328-
329- var valStartQuote = localConfigText . IndexOf ( '"' , positionOfVar + 15 ) ;
330- if ( valStartQuote == - 1 )
320+ if ( root . Value is not VObject rootObj ||
321+ ! rootObj . ContainsKey ( "friends" ) ||
322+ rootObj [ "friends" ] is not VObject friendsObj )
331323 {
332324 return ;
333325 }
334326
335- var valEndQuote = localConfigText . IndexOf ( '"' , valStartQuote + 1 ) ;
336- if ( valEndQuote == - 1 )
337- {
338- return ;
339- }
340-
341- var sb = new StringBuilder ( localConfigText ) ;
342- sb . Remove ( valStartQuote + 1 , valEndQuote - valStartQuote - 1 ) ;
343- sb . Insert ( valStartQuote + 1 , state ) ;
344-
345- File . WriteAllText ( localConfigPath , sb . ToString ( ) ) ;
327+ friendsObj [ "ePersonaState" ] = new VValue ( state . ToString ( ) ) ;
328+ File . WriteAllText ( localConfigPath , root . ToString ( ) ) ;
346329 }
347330 catch ( Exception ex )
348331 {
349- Console . WriteLine ( $ "Error setting persona state: { ex . Message } ") ;
332+ Logger . Error ( $ "Error setting persona state: { ex . Message } ") ;
350333 }
351334 }
352335
0 commit comments