using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Terminal.Gui; using YamlDotNet.Serialization; namespace Akari.Provider.WaveshareUART.Users { public class UsersManager { public const string UsersFilePath = "users.yaml"; private readonly List _users; private IDeserializer _deserializer; private ISerializer _serializer; public int Count => _users.Count; public UsersManager() { _serializer = new SerializerBuilder().Build(); _deserializer = new DeserializerBuilder().Build(); try { if (!File.Exists(UsersFilePath)) { _users = new List(); } else { _users = _deserializer.Deserialize>(File.ReadAllText(UsersFilePath)); } } catch (Exception e) { Console.WriteLine($"Can't load users: {e.Message}"); Console.WriteLine(e.StackTrace); } } public User this[string name] => _users.FirstOrDefault(u => u.Name.Equals(name, StringComparison.OrdinalIgnoreCase)); public void Add(User user) { _users.Add(user); Save(); } public IReadOnlyCollection GetAll() { return _users.AsReadOnly(); } public void Remove(User user) { _users.Remove(user); Save(); } public void Clear() { _users.Clear(); Save(); } private void Save() { try { File.WriteAllText(UsersFilePath, _serializer.Serialize(_users)); } catch (Exception e) { Console.WriteLine($"Can't save users: {e.Message}"); Console.WriteLine(e.StackTrace); MessageBox.ErrorQuery("Users", $"Can't save users: {e.Message}"); } } } }