Files
Akari.Provider.WaveshareUART/Users/UsersManager.cs

89 lines
2.1 KiB
C#

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<User> _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<User>();
}
else
{
_users = _deserializer.Deserialize<List<User>>(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<User> 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}");
}
}
}
}