-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Favorites.cs
91 lines (82 loc) · 3.01 KB
/
Favorites.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using Leosac.WpfApp;
using System.Collections.ObjectModel;
using System.Text;
namespace Leosac.KeyManager.Library.UI
{
public class Favorites : PermanentConfig<Favorites>
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod()?.DeclaringType);
private static readonly object _objlock = new();
private static Favorites? _singleton;
private static KMSettings? _settings;
public static EventHandler? SingletonCreated { get; set; }
private static void OnSingletonCreated()
{
SingletonCreated?.Invoke(_singleton, new EventArgs());
}
public static Favorites? GetSingletonInstance()
{
return GetSingletonInstance(false);
}
public static Favorites? GetSingletonInstance(bool forceRecreate)
{
lock (_objlock)
{
if (_singleton == null || forceRecreate)
{
try
{
_settings = KMSettings.LoadFromFile();
if (!string.IsNullOrEmpty(_settings?.FavoritesPath))
{
_singleton = LoadFromFile(_settings.FavoritesPath);
}
else
{
_singleton = LoadFromFile();
}
OnSingletonCreated();
}
catch (Exception ex)
{
log.Error("Cannot load Favorites from file.", ex);
}
}
return _singleton;
}
}
public override void SaveToFile()
{
if (!string.IsNullOrEmpty(_settings?.FavoritesPath))
{
SaveToFile(_settings.FavoritesPath);
}
else
{
base.SaveToFile();
}
}
public ObservableCollection<Favorite> KeyStores { get; set; } = new ObservableCollection<Favorite>();
public Favorite CreateFromKeyStore(KeyStore.KeyStore store)
{
return CreateFromKeyStore(store, true);
}
public Favorite CreateFromKeyStore(KeyStore.KeyStore store, bool save)
{
var favorite = new Favorite
{
Name = string.Format("{0} Key Store - ({1})", store.Name, DateTimeOffset.Now.ToUnixTimeSeconds()),
Properties = store.Properties
};
KeyStores.Add(favorite);
if (save)
{
SaveToFile();
}
log.Info(string.Format("New Favorite `{0}` saved.", favorite.Name));
store.Attributes[KeyStore.KeyStore.ATTRIBUTE_NAME] = favorite.Name;
store.Attributes[KeyStore.KeyStore.ATTRIBUTE_HEXNAME] = Convert.ToHexString(Encoding.UTF8.GetBytes(favorite.Name));
return favorite;
}
}
}