Falta mejorar Eliminar
This commit is contained in:
parent
13f78d7723
commit
59b5300356
|
@ -17,4 +17,10 @@
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="libObsidean">
|
||||||
|
<HintPath>..\Libraries\libObsidean\bin\Debug\net8.0-windows\libObsidean.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -0,0 +1,107 @@
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.IO;
|
||||||
|
using libObsidean;
|
||||||
|
|
||||||
|
namespace EscribePassword
|
||||||
|
{
|
||||||
|
internal class EstadoPersistente
|
||||||
|
{
|
||||||
|
// Ruta donde se guardará el estado
|
||||||
|
private static readonly string _filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "estado.json");
|
||||||
|
|
||||||
|
// Instancia privada estática, parte del patrón Singleton
|
||||||
|
private static EstadoPersistente _instance;
|
||||||
|
|
||||||
|
private List<Passwords> passwords;
|
||||||
|
|
||||||
|
public List<Passwords> Passwords
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (passwords == null) passwords = new List<Passwords>();
|
||||||
|
return passwords;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
passwords = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constructor público sin parámetros requerido para la deserialización
|
||||||
|
public EstadoPersistente()
|
||||||
|
{
|
||||||
|
passwords = new List<Passwords>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Propiedad pública estática para acceder a la instancia
|
||||||
|
public static EstadoPersistente Instance
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_instance == null)
|
||||||
|
{
|
||||||
|
_instance = CargarEstado(TiposEstadosPersistentes.Obsidean);
|
||||||
|
}
|
||||||
|
return _instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Método para guardar el estado en un archivo JSON
|
||||||
|
public void GuardarEstado(TiposEstadosPersistentes tipo)
|
||||||
|
{
|
||||||
|
if (tipo == TiposEstadosPersistentes.Json)
|
||||||
|
{
|
||||||
|
var options = new JsonSerializerOptions
|
||||||
|
{
|
||||||
|
WriteIndented = true // para una salida JSON formateada legiblemente
|
||||||
|
};
|
||||||
|
string json = JsonSerializer.Serialize(this, options);
|
||||||
|
File.WriteAllText(_filePath, json);
|
||||||
|
}
|
||||||
|
else if (tipo == TiposEstadosPersistentes.Obsidean)
|
||||||
|
{
|
||||||
|
Obsidean obs = new Obsidean();
|
||||||
|
var tabla = EscribePassword.Passwords.ConvertPasswordsListToArray(Passwords);
|
||||||
|
obs.EscribirPasswords(tabla);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Método estático para cargar el estado desde un archivo JSON
|
||||||
|
private static EstadoPersistente CargarEstado(TiposEstadosPersistentes tipo)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (tipo == TiposEstadosPersistentes.Json)
|
||||||
|
{
|
||||||
|
if (File.Exists(_filePath))
|
||||||
|
{
|
||||||
|
string json = File.ReadAllText(_filePath);
|
||||||
|
return JsonSerializer.Deserialize<EstadoPersistente>(json);
|
||||||
|
}
|
||||||
|
return new EstadoPersistente(); // Devuelve una nueva instancia si no existe el archivo
|
||||||
|
}
|
||||||
|
else if (tipo == TiposEstadosPersistentes.Obsidean)
|
||||||
|
{
|
||||||
|
Obsidean obs = new Obsidean();
|
||||||
|
var tabla = obs.LeerPasswords();
|
||||||
|
if (tabla != null)
|
||||||
|
{
|
||||||
|
var newEP = new EstadoPersistente();
|
||||||
|
newEP.Passwords = EscribePassword.Passwords.ConvertArrayToPasswordsList(tabla);
|
||||||
|
return newEP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new EstadoPersistente();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return new EstadoPersistente(); // Devuelve una nueva instancia si hay un error durante la carga
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum TiposEstadosPersistentes
|
||||||
|
{
|
||||||
|
Obsidean,
|
||||||
|
Json
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,6 +18,51 @@ namespace EscribePassword
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private string categoria;
|
private string categoria;
|
||||||
|
|
||||||
|
public static List<Passwords> ConvertArrayToPasswordsList(string[,] tableArray)
|
||||||
|
{
|
||||||
|
var passwordsList = new List<Passwords>();
|
||||||
|
|
||||||
|
for (int i = 0; i < tableArray.GetLength(0); i++)
|
||||||
|
{
|
||||||
|
var passwords = new Passwords();
|
||||||
|
|
||||||
|
if (tableArray.GetLength(1) >= 1)
|
||||||
|
passwords.Categoria = tableArray[i, 0];
|
||||||
|
if (tableArray.GetLength(1) >= 2)
|
||||||
|
passwords.Usuario = tableArray[i, 1];
|
||||||
|
if (tableArray.GetLength(1) >= 3)
|
||||||
|
passwords.Password = tableArray[i, 2];
|
||||||
|
passwordsList.Add(passwords);
|
||||||
|
}
|
||||||
|
|
||||||
|
return passwordsList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string[,] ConvertPasswordsListToArray(List<Passwords> passwordsList)
|
||||||
|
{
|
||||||
|
if (passwordsList == null || passwordsList.Count == 0)
|
||||||
|
return new string[0, 0];
|
||||||
|
|
||||||
|
int rows = passwordsList.Count;
|
||||||
|
int columns = 3; // Asumimos que siempre hay tres columnas: Usuario, Password, Categoria
|
||||||
|
|
||||||
|
string[,] tableArray = new string[rows + 1, columns];
|
||||||
|
|
||||||
|
// Fill header
|
||||||
|
tableArray[0, 0] = "Class";
|
||||||
|
tableArray[0, 1] = "User";
|
||||||
|
tableArray[0, 2] = "Password";
|
||||||
|
|
||||||
|
// Fill data
|
||||||
|
for (int i = 0; i < rows; i++)
|
||||||
|
{
|
||||||
|
tableArray[i + 1, 0] = passwordsList[i].Usuario;
|
||||||
|
tableArray[i + 1, 1] = passwordsList[i].Password;
|
||||||
|
tableArray[i + 1, 2] = passwordsList[i].Categoria;
|
||||||
|
}
|
||||||
|
|
||||||
|
return tableArray;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class KeyboardHelper
|
public class KeyboardHelper
|
||||||
|
|
|
@ -142,7 +142,7 @@ namespace EscribePassword
|
||||||
private void OnApplicationExit(object sender, ExitEventArgs e)
|
private void OnApplicationExit(object sender, ExitEventArgs e)
|
||||||
{
|
{
|
||||||
EstadoPersistente.Instance.Passwords = new List<Passwords>(passwords);
|
EstadoPersistente.Instance.Passwords = new List<Passwords>(passwords);
|
||||||
EstadoPersistente.Instance.GuardarEstado();
|
EstadoPersistente.Instance.GuardarEstado(TiposEstadosPersistentes.Obsidean);
|
||||||
}
|
}
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
|
@ -184,75 +184,4 @@ namespace EscribePassword
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class EstadoPersistente
|
|
||||||
{
|
|
||||||
// Ruta donde se guardará el estado
|
|
||||||
private static readonly string _filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "estado.json");
|
|
||||||
|
|
||||||
// Instancia privada estática, parte del patrón Singleton
|
|
||||||
private static EstadoPersistente _instance;
|
|
||||||
|
|
||||||
private List<Passwords> passwords;
|
|
||||||
|
|
||||||
public List<Passwords> Passwords
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (passwords == null) passwords = new List<Passwords>();
|
|
||||||
return passwords;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
passwords = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Constructor público sin parámetros requerido para la deserialización
|
|
||||||
public EstadoPersistente()
|
|
||||||
{
|
|
||||||
passwords = new List<Passwords>();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Propiedad pública estática para acceder a la instancia
|
|
||||||
public static EstadoPersistente Instance
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (_instance == null)
|
|
||||||
{
|
|
||||||
_instance = CargarEstado();
|
|
||||||
}
|
|
||||||
return _instance;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Método para guardar el estado en un archivo JSON
|
|
||||||
public void GuardarEstado()
|
|
||||||
{
|
|
||||||
var options = new JsonSerializerOptions
|
|
||||||
{
|
|
||||||
WriteIndented = true // para una salida JSON formateada legiblemente
|
|
||||||
};
|
|
||||||
string json = JsonSerializer.Serialize(this, options);
|
|
||||||
File.WriteAllText(_filePath, json);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Método estático para cargar el estado desde un archivo JSON
|
|
||||||
private static EstadoPersistente CargarEstado()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (File.Exists(_filePath))
|
|
||||||
{
|
|
||||||
string json = File.ReadAllText(_filePath);
|
|
||||||
return JsonSerializer.Deserialize<EstadoPersistente>(json);
|
|
||||||
}
|
|
||||||
return new EstadoPersistente(); // Devuelve una nueva instancia si no existe el archivo
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
return new EstadoPersistente(); // Devuelve una nueva instancia si hay un error durante la carga
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue