Filtration/Filtration.ThemeEditor/Services/ThemePersistenceService.cs

49 lines
1.3 KiB
C#

using System.IO;
using System.Threading.Tasks;
using System.Xml.Serialization;
using Filtration.ObjectModel.ThemeEditor;
namespace Filtration.ThemeEditor.Services
{
internal interface IThemePersistenceService
{
Task<Theme> LoadThemeAsync(string filePath);
Task SaveThemeAsync(Theme theme, string filePath);
}
internal class ThemePersistenceService : IThemePersistenceService
{
public async Task<Theme> LoadThemeAsync(string filePath)
{
Theme loadedTheme = null;
await Task.Run(() =>
{
var xmlSerializer = new XmlSerializer(typeof (Theme));
using (Stream reader = new FileStream(filePath, FileMode.Open))
{
loadedTheme = (Theme) xmlSerializer.Deserialize(reader);
}
loadedTheme.FilePath = filePath;
});
return loadedTheme;
}
public async Task SaveThemeAsync(Theme theme, string filePath)
{
await Task.Run(() =>
{
var xmlSerializer = new XmlSerializer(typeof (Theme));
using (Stream writer = new FileStream(filePath, FileMode.Create))
{
xmlSerializer.Serialize(writer, theme);
}
});
}
}
}