33using System . Diagnostics ;
44using System . IO ;
55using System . Text ;
6- using System . Text . Json ;
76using System . Threading . Tasks ;
87using System . Windows ;
98using AuroraRgb . Modules . Gamebar ;
109using AuroraRgb . Modules . Logitech ;
1110using AuroraRgb . Modules . Razer ;
1211using AuroraRgb . Utils ;
12+ using AuroraRgb . Utils . Json ;
1313using Common . Devices ;
1414using Common . Utils ;
15+ using Newtonsoft . Json ;
16+ using JsonSerializer = System . Text . Json . JsonSerializer ;
1517
1618namespace AuroraRgb . Settings ;
1719
@@ -66,7 +68,12 @@ private static async Task<Configuration> Parse()
6668 return await CreateDefaultConfigurationFile ( ) ;
6769
6870 var content = await File . ReadAllTextAsync ( Configuration . ConfigFile , Encoding . UTF8 ) ;
69- return JsonSerializer . Deserialize < Configuration > ( content ) ?? await CreateDefaultConfigurationFile ( ) ;
71+ return JsonConvert . DeserializeObject < Configuration > ( content ,
72+ new JsonSerializerSettings
73+ {
74+ ObjectCreationHandling = ObjectCreationHandling . Replace ,
75+ TypeNameHandling = TypeNameHandling . All ,
76+ } ) ?? await CreateDefaultConfigurationFile ( ) ;
7077 }
7178
7279 public static async Task < DeviceConfig > LoadDeviceConfig ( )
@@ -92,14 +99,19 @@ private static async Task<DeviceConfig> TryLoadDevice()
9299 {
93100 if ( ! File . Exists ( DeviceConfig . ConfigFile ) )
94101 {
102+ if ( File . Exists ( Configuration . ConfigFile ) )
103+ // v194 Migration
104+ return await MigrateDeviceConfig ( ) ;
105+
95106 // first time start
96107 var deviceConfig = new DeviceConfig ( ) ;
97108 await SaveAsync ( deviceConfig ) ;
98109 return deviceConfig ;
110+
99111 }
100112
101113 var content = await File . ReadAllTextAsync ( DeviceConfig . ConfigFile , Encoding . UTF8 ) ;
102- return JsonSerializer . Deserialize ( content , CommonSourceGenerationContext . Default . DeviceConfig ) ?? new DeviceConfig ( ) ;
114+ return JsonSerializer . Deserialize ( content , CommonSourceGenerationContext . Default . DeviceConfig ) ?? await MigrateDeviceConfig ( ) ;
103115 }
104116
105117 public static async Task < GamebarConfig > LoadGamebarConfig ( )
@@ -201,7 +213,10 @@ public static void Save(IAuroraConfig configuration)
201213
202214 LastSaveTimes [ path ] = currentTime ;
203215
204- var content = JsonSerializer . Serialize ( configuration ) ;
216+ var content = JsonConvert . SerializeObject ( configuration , Formatting . Indented , new JsonSerializerSettings
217+ {
218+ TypeNameHandling = TypeNameHandling . Auto , SerializationBinder = new AuroraSerializationBinder ( )
219+ } ) ;
205220
206221 Directory . CreateDirectory ( Path . GetDirectoryName ( path ) ) ;
207222 File . WriteAllText ( path , content , Encoding . UTF8 ) ;
@@ -216,7 +231,10 @@ public static async Task SaveAsync(IAuroraConfig configuration)
216231
217232 LastSaveTimes [ path ] = currentTime ;
218233
219- var content = JsonSerializer . Serialize ( configuration ) ;
234+ var content = JsonConvert . SerializeObject ( configuration , Formatting . Indented , new JsonSerializerSettings
235+ {
236+ TypeNameHandling = TypeNameHandling . Auto , SerializationBinder = new AuroraSerializationBinder ( )
237+ } ) ;
220238
221239 Directory . CreateDirectory ( Path . GetDirectoryName ( path ) ) ;
222240 await File . WriteAllTextAsync ( path , content , Encoding . UTF8 ) ;
@@ -230,6 +248,20 @@ private static async Task<Configuration> CreateDefaultConfigurationFile()
230248 return config ;
231249 }
232250
251+ private static async Task < DeviceConfig > MigrateDeviceConfig ( )
252+ {
253+ Global . logger . Information ( "Migrating default device configuration" ) ;
254+ var content = await File . ReadAllTextAsync ( Configuration . ConfigFile , Encoding . UTF8 ) ;
255+ var config = JsonConvert . DeserializeObject < DeviceConfig > ( content ,
256+ new JsonSerializerSettings
257+ {
258+ ObjectCreationHandling = ObjectCreationHandling . Replace ,
259+ SerializationBinder = new AuroraSerializationBinder ( ) ,
260+ } ) ?? new DeviceConfig ( ) ;
261+ File . Copy ( Configuration . ConfigFile , Configuration . ConfigFile + ".v194" , true ) ;
262+ return config ;
263+ }
264+
233265 public static async Task < SensitiveData > LoadSensitiveData ( )
234266 {
235267 var exists = File . Exists ( SensitiveData . ConfigFile ) ;
0 commit comments