mirror of
https://github.com/chylex/Backup-Essentials.git
synced 2025-06-17 06:39:56 +02:00
86 lines
2.9 KiB
C#
86 lines
2.9 KiB
C#
using BackupEssentials.Utils;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Linq;
|
|
|
|
namespace BackupEssentials.Backup.Data{
|
|
class DataStorage{
|
|
public enum Type{
|
|
Locations
|
|
}
|
|
|
|
private static readonly ScheduledUpdate SaveTimer = ScheduledUpdate.Forever(10,() => {
|
|
Save(true);
|
|
});
|
|
|
|
private static Dictionary<Type,bool> LoadedData = new Dictionary<Type,bool>();
|
|
|
|
public static readonly ObservableCollection<BackupLocation> BackupLocationList = new ObservableCollection<BackupLocation>(new List<BackupLocation>(8));
|
|
public static bool BackupLocationListChanged = false;
|
|
|
|
static DataStorage(){
|
|
SaveTimer.Start();
|
|
|
|
BackupLocationList.CollectionChanged += (sender, args) => {
|
|
BackupLocationListChanged = true;
|
|
Save();
|
|
};
|
|
|
|
foreach(Type type in Enum.GetValues(typeof(Type))){
|
|
LoadedData[type] = false;
|
|
}
|
|
}
|
|
|
|
static bool ShouldLoad(Type[] types, Type type){
|
|
return types.Length == 0 || types.Contains(type);
|
|
}
|
|
|
|
public static void Load(params Type[] types){
|
|
if (File.Exists("DS.Locations.dat") && ShouldLoad(types,Type.Locations)){
|
|
LoadedData[Type.Locations] = true;
|
|
|
|
try{
|
|
using(FileStream fileStream = new FileStream("DS.Locations.dat",FileMode.Open)){
|
|
using(StreamReader reader = new StreamReader(fileStream)){
|
|
string line;
|
|
|
|
while((line = reader.ReadLine()) != null){
|
|
if (line.Length == 0)continue;
|
|
BackupLocation loc = new BackupLocation();
|
|
StringDictionarySerializer.FromString(loc,line);
|
|
BackupLocationList.Add(loc);
|
|
}
|
|
}
|
|
}
|
|
}catch(Exception e){
|
|
Debug.WriteLine(e.ToString());
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void Save(){
|
|
Save(false);
|
|
}
|
|
|
|
public static void Save(bool force){
|
|
if (!force){
|
|
SaveTimer.NeedsUpdate = true;
|
|
return;
|
|
}
|
|
|
|
if (BackupLocationListChanged && LoadedData[Type.Locations]){
|
|
BackupLocationListChanged = false;
|
|
|
|
using(FileStream fileStream = new FileStream("DS.Locations.dat",FileMode.Create)){
|
|
using(StreamWriter writer = new StreamWriter(fileStream)){
|
|
foreach(BackupLocation loc in BackupLocationList)writer.WriteLine(StringDictionarySerializer.ToString(loc));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|