This commit is contained in:
@@ -1,86 +1,76 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using PluginManager.Others;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PluginManager
|
||||
{
|
||||
internal class AppConfig
|
||||
{
|
||||
public Dictionary<string, string> ApplicationVariables { get; set; }
|
||||
public List<string> ProtectedKeyWords { get; set; }
|
||||
}
|
||||
|
||||
public static class Config
|
||||
{
|
||||
private static readonly Dictionary<string, string> ApplicationVariables = new();
|
||||
private static readonly List<string> ConstantTokens = new() { "token" };
|
||||
private static AppConfig appConfig = null;
|
||||
|
||||
public static void AppendToDictionary(Dictionary<string, string> dictionary)
|
||||
public static bool AddValueToVariables(string key, string value, bool isReadOnly)
|
||||
{
|
||||
foreach (var kvp in dictionary) ApplicationVariables.TryAdd(kvp.Key, kvp.Value);
|
||||
}
|
||||
|
||||
public static bool AddValueToVariables(string key, string value, bool constant)
|
||||
{
|
||||
bool req = AddValueToVariables(key, value);
|
||||
if (constant) ConstantTokens.Add(key);
|
||||
|
||||
return req;
|
||||
}
|
||||
|
||||
public static bool AddValueToVariables(string key, string value)
|
||||
{
|
||||
if (ApplicationVariables.ContainsKey(key))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
ApplicationVariables.Add(key, value);
|
||||
if (appConfig.ApplicationVariables.ContainsKey(key)) return false;
|
||||
appConfig.ApplicationVariables.Add(key, value);
|
||||
if (isReadOnly) appConfig.ProtectedKeyWords.Add(key);
|
||||
SaveConfig();
|
||||
return true;
|
||||
}
|
||||
|
||||
public static string? GetValue(string key)
|
||||
{
|
||||
if (!ApplicationVariables.ContainsKey(key))
|
||||
{
|
||||
if (key != "token") Console.WriteLine("The key is not present in the dictionary");
|
||||
return null;
|
||||
}
|
||||
|
||||
return ApplicationVariables[key];
|
||||
if (!appConfig.ApplicationVariables.ContainsKey(key)) return null;
|
||||
return appConfig.ApplicationVariables[key];
|
||||
}
|
||||
|
||||
public static bool SetValue(string key, string value)
|
||||
{
|
||||
if (!ApplicationVariables.ContainsKey(key)) return false;
|
||||
if (ConstantTokens.Contains(key)) return false;
|
||||
ApplicationVariables[key] = value;
|
||||
if (!appConfig.ApplicationVariables.ContainsKey(key)) return false;
|
||||
if (appConfig.ProtectedKeyWords.Contains(key)) return false;
|
||||
appConfig.ApplicationVariables[key] = value;
|
||||
SaveConfig();
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool RemoveKey(string key)
|
||||
{
|
||||
if (ConstantTokens.Contains(key)) return false;
|
||||
|
||||
|
||||
ApplicationVariables.Remove(key);
|
||||
appConfig.ApplicationVariables.Remove(key);
|
||||
appConfig.ProtectedKeyWords.Remove(key);
|
||||
return true;
|
||||
}
|
||||
|
||||
public static async void SaveDictionary()
|
||||
public static async void SaveConfig()
|
||||
{
|
||||
string path = Functions.dataFolder + "var.dat";
|
||||
await Functions.SaveToJsonFile(path, ApplicationVariables);
|
||||
await Functions.SaveToJsonFile<AppConfig>(path, appConfig);
|
||||
}
|
||||
|
||||
public static async void LoadDictionary()
|
||||
public static async Task LoadConfig()
|
||||
{
|
||||
string path = Functions.dataFolder + "var.dat";
|
||||
var d = await Functions.ConvertFromJson<Dictionary<string, string>>(path);
|
||||
ApplicationVariables.Clear();
|
||||
AppendToDictionary(d);
|
||||
if (File.Exists(path))
|
||||
{
|
||||
appConfig = await Functions.ConvertFromJson<AppConfig>(path);
|
||||
Functions.WriteLogFile($"Loaded {appConfig.ApplicationVariables.Keys.Count} application variables.\nLoaded {appConfig.ProtectedKeyWords.Count} readonly variables.");
|
||||
//Console.WriteLine($"Loaded {appConfig.ApplicationVariables.Count} application variables !");
|
||||
}
|
||||
else
|
||||
appConfig = new() { ApplicationVariables = new Dictionary<string, string>(), ProtectedKeyWords = new List<string>() };
|
||||
}
|
||||
|
||||
public static string GetKey(string value) => ApplicationVariables.Keys.FirstOrDefault(x => ApplicationVariables[x] == value);
|
||||
public static bool ContainsValue(string value) => ApplicationVariables.ContainsValue(value);
|
||||
public static bool ContainsKey(string key) => ApplicationVariables.ContainsKey(key);
|
||||
public static string? GetKey(string value) => appConfig.ApplicationVariables.Keys.FirstOrDefault(x => appConfig.ApplicationVariables[x] == value);
|
||||
public static bool ContainsValue(string value) => appConfig.ApplicationVariables.ContainsValue(value);
|
||||
public static bool ContainsKey(string key) => appConfig.ApplicationVariables.ContainsKey(key);
|
||||
|
||||
public static Dictionary<string, string> GetAllVariables() => new Dictionary<string, string>(appConfig.ApplicationVariables);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,12 +203,12 @@ namespace PluginManager.Items
|
||||
if (args.Length < 3) return;
|
||||
string in1 = args[1];
|
||||
if (!Config.ContainsKey(in1))
|
||||
Config.AddValueToVariables(in1, Functions.MergeStrings(args, 2));
|
||||
Config.AddValueToVariables(in1, Functions.MergeStrings(args, 2), false);
|
||||
else
|
||||
Config.SetValue(in1, Functions.MergeStrings(args, 2));
|
||||
|
||||
Console.WriteLine($"Updated config file with the following command: {in1} => {Config.GetValue(in1)}");
|
||||
Config.SaveDictionary();
|
||||
Config.SaveConfig();
|
||||
}
|
||||
);
|
||||
|
||||
@@ -216,7 +216,20 @@ namespace PluginManager.Items
|
||||
{
|
||||
if (args.Length < 2) return;
|
||||
Config.RemoveKey(args[1]);
|
||||
Config.SaveDictionary();
|
||||
Config.SaveConfig();
|
||||
}
|
||||
);
|
||||
|
||||
AddCommand("vars", "Display all variables", () =>
|
||||
{
|
||||
var d = Config.GetAllVariables();
|
||||
List<string[]> data = new List<string[]>();
|
||||
data.Add(new string[] { "-", "-" });
|
||||
data.Add(new string[] { "Key", "Value" });
|
||||
data.Add(new string[] { "-", "-" });
|
||||
foreach (var kvp in d) data.Add(new string[] { kvp.Key, kvp.Value });
|
||||
data.Add(new string[] { "-", "-" });
|
||||
Console_Utilities.FormatAndAlignTable(data);
|
||||
}
|
||||
);
|
||||
|
||||
@@ -224,7 +237,7 @@ namespace PluginManager.Items
|
||||
{
|
||||
await client.StopAsync();
|
||||
await client.DisposeAsync();
|
||||
Config.SaveDictionary();
|
||||
Config.SaveConfig();
|
||||
Environment.Exit(0);
|
||||
}
|
||||
);
|
||||
|
||||
@@ -71,9 +71,9 @@ namespace PluginManager.Others
|
||||
/// <param name="data">The List of arrays of strings that represent the rows.</param>
|
||||
public static void FormatAndAlignTable(List<string[]> data)
|
||||
{
|
||||
char tableLine = '-';
|
||||
char tableLine = '-';
|
||||
char tableCross = '+';
|
||||
char tableWall = '|';
|
||||
char tableWall = '|';
|
||||
|
||||
int[] len = new int[data[0].Length];
|
||||
foreach (var line in data)
|
||||
|
||||
@@ -97,31 +97,6 @@ namespace PluginManager.Others
|
||||
File.AppendAllText(errPath, ErrMessage + " \n");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write to settings file
|
||||
/// </summary>
|
||||
/// <param name="file">The settings file path</param>
|
||||
/// <param name="Code">The Key value of the setting</param>
|
||||
/// <param name="newValue">The new value of the settings</param>
|
||||
/// <param name="separator">The separator between the key and the value</param>
|
||||
public static void WriteToSettings(string file, string Code, string newValue, char separator)
|
||||
{
|
||||
|
||||
string[] lines = File.ReadAllLines(file);
|
||||
File.Delete(file);
|
||||
bool ok = false;
|
||||
foreach (var line in lines)
|
||||
if (line.StartsWith(Code))
|
||||
{
|
||||
File.AppendAllText(file, Code + separator + newValue + "\n");
|
||||
ok = true;
|
||||
}
|
||||
else
|
||||
File.AppendAllText(file, line + "\n");
|
||||
|
||||
if (!ok) File.AppendAllText(file, Code + separator + newValue + "\n");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Merge one array of strings into one string
|
||||
/// </summary>
|
||||
@@ -161,29 +136,6 @@ namespace PluginManager.Others
|
||||
return command.Arguments;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Write setting
|
||||
/// </summary>
|
||||
/// <param name="SettingName">The full path to the setting</param>
|
||||
/// <param name="NewValue">The new Value</param>
|
||||
public static void WriteToSettingsFast(string SettingName, string NewValue)
|
||||
{
|
||||
|
||||
string path = dataFolder; // Resources/
|
||||
|
||||
string[] args = SettingName.Split('.');
|
||||
|
||||
int len = args.Length;
|
||||
if (len < 2) return;
|
||||
for (int i = 0; i < len - 2; i++) path += args[i] + "/";
|
||||
path += args[len - 2] + ".txt";
|
||||
|
||||
|
||||
WriteToSettings(path, args[len - 1].Replace('_', ' '), NewValue, '=');
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Copy one Stream to another <see langword="async"/>
|
||||
/// </summary>
|
||||
@@ -253,6 +205,11 @@ namespace PluginManager.Others
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Convert Bytes to highest measurement unit possible
|
||||
/// </summary>
|
||||
/// <param name="bytes">The amount of bytes</param>
|
||||
/// <returns></returns>
|
||||
public static (double, string) ConvertBytes(long bytes)
|
||||
{
|
||||
if (bytes < 1024) return (bytes, "B");
|
||||
@@ -262,12 +219,25 @@ namespace PluginManager.Others
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Save to JSON file
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The class type</typeparam>
|
||||
/// <param name="file">The file path</param>
|
||||
/// <param name="Data">The values</param>
|
||||
/// <returns></returns>
|
||||
public static async Task SaveToJsonFile<T>(string file, T Data)
|
||||
{
|
||||
string jsonText = JsonSerializer.Serialize(Data, typeof(T), new JsonSerializerOptions() { WriteIndented = true });
|
||||
string jsonText = JsonSerializer.Serialize(Data, typeof(T), new JsonSerializerOptions { WriteIndented = true });
|
||||
await File.WriteAllTextAsync(file, jsonText);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert json text or file to some kind of data
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The data type</typeparam>
|
||||
/// <param name="input">The file or json text</param>
|
||||
/// <returns></returns>
|
||||
public static async Task<T> ConvertFromJson<T>(string input)
|
||||
{
|
||||
Stream text;
|
||||
|
||||
Reference in New Issue
Block a user