Skip to content

Commit

Permalink
Optimize save config files
Browse files Browse the repository at this point in the history
  • Loading branch information
2dust committed Dec 7, 2024
1 parent dbd4f55 commit 83ad83b
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 70 deletions.
40 changes: 4 additions & 36 deletions v2rayN/ServiceLib/Common/JsonUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,9 @@ public static T DeepCopy<T>(T obj)
/// </summary>
/// <param name="obj"></param>
/// <param name="indented"></param>
/// <param name="nullValue"></param>
/// <returns></returns>
public static string Serialize(object? obj, bool indented = true)
public static string Serialize(object? obj, bool indented = true, bool nullValue = false)
{
var result = string.Empty;
try
Expand All @@ -82,8 +83,8 @@ public static string Serialize(object? obj, bool indented = true)
}
var options = new JsonSerializerOptions
{
WriteIndented = indented ? true : false,
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
WriteIndented = indented,
DefaultIgnoreCondition = nullValue ? JsonIgnoreCondition.Never : JsonIgnoreCondition.WhenWritingNull
};
result = JsonSerializer.Serialize(obj, options);
}
Expand All @@ -100,38 +101,5 @@ public static string Serialize(object? obj, bool indented = true)
/// <param name="obj"></param>
/// <returns></returns>
public static JsonNode? SerializeToNode(object? obj) => JsonSerializer.SerializeToNode(obj);

/// <summary>
/// Save as json file
/// </summary>
/// <param name="obj"></param>
/// <param name="filePath"></param>
/// <param name="nullValue"></param>
/// <returns></returns>
public static int ToFile(object? obj, string? filePath, bool nullValue = true)
{
if (filePath is null)
{
return -1;
}
try
{
using var file = File.Create(filePath);

var options = new JsonSerializerOptions
{
WriteIndented = true,
DefaultIgnoreCondition = nullValue ? JsonIgnoreCondition.Never : JsonIgnoreCondition.WhenWritingNull
};

JsonSerializer.Serialize(file, obj, options);
return 0;
}
catch (Exception ex)
{
Logging.SaveLog(ex.Message, ex);
return -1;
}
}
}
}
55 changes: 25 additions & 30 deletions v2rayN/ServiceLib/Handler/ConfigHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ namespace ServiceLib.Handler
public class ConfigHandler
{
private static readonly string _configRes = Global.ConfigFileName;
private static readonly object _objLock = new();

#region ConfigHandler

Expand Down Expand Up @@ -67,7 +66,6 @@ public class ConfigHandler
}

config.RoutingBasicItem ??= new();

if (Utils.IsNullOrEmpty(config.RoutingBasicItem.DomainStrategy))
{
config.RoutingBasicItem.DomainStrategy = Global.DomainStrategies.First();//"IPIfNonMatch";
Expand Down Expand Up @@ -120,15 +118,6 @@ public class ConfigHandler
}

config.ConstItem ??= new ConstItem();
if (Utils.IsNotEmpty(config.ConstItem.DefIEProxyExceptions))
{
config.SystemProxyItem.SystemProxyExceptions = $"{config.ConstItem.DefIEProxyExceptions};{config.SystemProxyItem.SystemProxyExceptions}";
config.ConstItem.DefIEProxyExceptions = string.Empty;
}
if (config.SystemProxyItem.SystemProxyExceptions.IsNullOrEmpty())
{
config.SystemProxyItem.SystemProxyExceptions = Utils.IsWindows() ? Global.SystemProxyExceptionsWindows : Global.SystemProxyExceptionsLinux;
}

config.SpeedTestItem ??= new();
if (config.SpeedTestItem.SpeedTestTimeout < 10)
Expand Down Expand Up @@ -167,6 +156,16 @@ public class ConfigHandler
config.WebDavItem ??= new();
config.CheckUpdateItem ??= new();

if (Utils.IsNotEmpty(config.ConstItem.DefIEProxyExceptions))
{
config.SystemProxyItem.SystemProxyExceptions = $"{config.ConstItem.DefIEProxyExceptions};{config.SystemProxyItem.SystemProxyExceptions}";
config.ConstItem.DefIEProxyExceptions = string.Empty;
}
if (config.SystemProxyItem.SystemProxyExceptions.IsNullOrEmpty())
{
config.SystemProxyItem.SystemProxyExceptions = Utils.IsWindows() ? Global.SystemProxyExceptionsWindows : Global.SystemProxyExceptionsLinux;
}

return config;
}

Expand All @@ -177,30 +176,26 @@ public class ConfigHandler
/// <returns></returns>
public static async Task<int> SaveConfig(Config config)
{
lock (_objLock)
try
{
try
{
//save temp file
var resPath = Utils.GetConfigPath(_configRes);
var tempPath = $"{resPath}_temp";
if (JsonUtils.ToFile(config, tempPath) != 0)
{
return -1;
}
//save temp file
var resPath = Utils.GetConfigPath(_configRes);
var tempPath = $"{resPath}_temp";

if (File.Exists(resPath))
{
File.Delete(resPath);
}
//rename
File.Move(tempPath, resPath);
}
catch (Exception ex)
var content = JsonUtils.Serialize(config, true, true);
if (content.IsNullOrEmpty())
{
Logging.SaveLog("ToJsonFile", ex);
return -1;
}
await File.WriteAllTextAsync(tempPath, content);

//rename
File.Move(tempPath, resPath, true);
}
catch (Exception ex)
{
Logging.SaveLog("ToJsonFile", ex);
return -1;
}

return 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,9 @@ public async Task<RetResult> GenerateClientCustomConfig(ProfileItem node, string
{
await GenInbounds(singboxConfig);
await GenExperimental(singboxConfig);
JsonUtils.ToFile(singboxConfig, fileName, false);

var content = JsonUtils.Serialize(singboxConfig, true);
await File.WriteAllTextAsync(fileName, content);
}
}
else
Expand Down
6 changes: 3 additions & 3 deletions v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -282,16 +282,16 @@ public async Task MyAppExitAsync(bool blWindowsShutDown)
{
try
{
Logging.SaveLog("MyAppExit Begin");
await SysProxyHandler.UpdateSysProxy(_config, true);
Logging.SaveLog("MyAppExitAsync Begin");

await ConfigHandler.SaveConfig(_config);
await SysProxyHandler.UpdateSysProxy(_config, true);
await ProfileExHandler.Instance.SaveTo();
await StatisticsHandler.Instance.SaveTo();
StatisticsHandler.Instance.Close();
await CoreHandler.Instance.CoreStop();

Logging.SaveLog("MyAppExit End");
Logging.SaveLog("MyAppExitAsync End");
}
catch { }
finally
Expand Down

0 comments on commit 83ad83b

Please sign in to comment.