2015-12-13 15:17:15 -05:00
|
|
|
|
using System.IO;
|
2015-07-05 17:43:17 -04:00
|
|
|
|
using System.Linq;
|
2015-07-25 14:02:42 -04:00
|
|
|
|
using System.Threading.Tasks;
|
2015-06-26 12:42:20 -04:00
|
|
|
|
using AutoMapper;
|
|
|
|
|
using Filtration.ObjectModel;
|
|
|
|
|
using Filtration.ObjectModel.ThemeEditor;
|
|
|
|
|
using Filtration.ThemeEditor.Services;
|
|
|
|
|
using Filtration.ThemeEditor.ViewModels;
|
|
|
|
|
|
|
|
|
|
namespace Filtration.ThemeEditor.Providers
|
|
|
|
|
{
|
|
|
|
|
public interface IThemeProvider
|
|
|
|
|
{
|
2017-06-17 08:50:44 -04:00
|
|
|
|
IThemeEditorViewModel NewThemeForScript(IItemFilterScript script);
|
|
|
|
|
IThemeEditorViewModel MasterThemeForScript(IItemFilterScript script);
|
2015-07-25 14:02:42 -04:00
|
|
|
|
Task<IThemeEditorViewModel> LoadThemeFromFile(string filePath);
|
|
|
|
|
Task<Theme> LoadThemeModelFromFile(string filePath);
|
|
|
|
|
Task SaveThemeAsync(IThemeEditorViewModel themeEditorViewModel, string filePath);
|
2015-06-26 12:42:20 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal class ThemeProvider : IThemeProvider
|
|
|
|
|
{
|
|
|
|
|
private readonly IThemeViewModelFactory _themeViewModelFactory;
|
|
|
|
|
private readonly IThemePersistenceService _themePersistenceService;
|
|
|
|
|
|
|
|
|
|
public ThemeProvider(IThemeViewModelFactory themeViewModelFactory, IThemePersistenceService themePersistenceService)
|
|
|
|
|
{
|
|
|
|
|
_themeViewModelFactory = themeViewModelFactory;
|
|
|
|
|
_themePersistenceService = themePersistenceService;
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-17 08:50:44 -04:00
|
|
|
|
public IThemeEditorViewModel NewThemeForScript(IItemFilterScript script)
|
2015-06-26 12:42:20 -04:00
|
|
|
|
{
|
2015-07-05 17:43:17 -04:00
|
|
|
|
var themeComponentCollection = script.ThemeComponents.Aggregate(new ThemeComponentCollection(),
|
|
|
|
|
(c, component) =>
|
|
|
|
|
{
|
|
|
|
|
c.Add(new ThemeComponent(component.ComponentType, component.ComponentName, component.Color));
|
|
|
|
|
return c;
|
|
|
|
|
});
|
|
|
|
|
|
2015-06-26 12:42:20 -04:00
|
|
|
|
var themeViewModel = _themeViewModelFactory.Create();
|
2015-07-06 08:41:46 -04:00
|
|
|
|
themeViewModel.InitialiseForNewTheme(themeComponentCollection);
|
2015-06-26 12:42:20 -04:00
|
|
|
|
themeViewModel.FilePath = "Untitled.filtertheme";
|
|
|
|
|
|
|
|
|
|
return themeViewModel;
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-17 08:50:44 -04:00
|
|
|
|
public IThemeEditorViewModel MasterThemeForScript(IItemFilterScript script)
|
2015-07-05 17:43:17 -04:00
|
|
|
|
{
|
|
|
|
|
var themeViewModel = _themeViewModelFactory.Create();
|
2015-07-06 08:41:46 -04:00
|
|
|
|
themeViewModel.InitialiseForMasterTheme(script);
|
2015-07-05 17:43:17 -04:00
|
|
|
|
themeViewModel.FilePath = "<Master Theme> " + Path.GetFileName(script.FilePath);
|
|
|
|
|
|
|
|
|
|
return themeViewModel;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-25 14:02:42 -04:00
|
|
|
|
public async Task<IThemeEditorViewModel> LoadThemeFromFile(string filePath)
|
2015-06-26 12:42:20 -04:00
|
|
|
|
{
|
2015-07-25 14:02:42 -04:00
|
|
|
|
var model = await _themePersistenceService.LoadThemeAsync(filePath);
|
2015-07-05 17:43:17 -04:00
|
|
|
|
var viewModel = Mapper.Map<IThemeEditorViewModel>(model);
|
2015-06-26 12:42:20 -04:00
|
|
|
|
viewModel.FilePath = filePath;
|
|
|
|
|
return viewModel;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-25 14:02:42 -04:00
|
|
|
|
public async Task<Theme> LoadThemeModelFromFile(string filePath)
|
2015-06-26 16:54:20 -04:00
|
|
|
|
{
|
2015-07-25 14:02:42 -04:00
|
|
|
|
return await _themePersistenceService.LoadThemeAsync(filePath);
|
2015-06-26 16:54:20 -04:00
|
|
|
|
}
|
|
|
|
|
|
2015-07-25 14:02:42 -04:00
|
|
|
|
public async Task SaveThemeAsync(IThemeEditorViewModel themeEditorViewModel, string filePath)
|
2015-06-26 12:42:20 -04:00
|
|
|
|
{
|
2015-07-25 14:02:42 -04:00
|
|
|
|
await Task.Run(() =>
|
|
|
|
|
{
|
|
|
|
|
var theme = Mapper.Map<Theme>(themeEditorViewModel);
|
|
|
|
|
_themePersistenceService.SaveThemeAsync(theme, filePath);
|
|
|
|
|
});
|
2015-06-26 12:42:20 -04:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|