LocalPalettesFetcher.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using PixiEditor.Helpers.Extensions;
  2. using PixiEditor.Models.DataHolders;
  3. using PixiEditor.Models.DataHolders.Palettes;
  4. using PixiEditor.Models.IO;
  5. using System;
  6. using System.Collections;
  7. using System.Collections.Generic;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Threading.Tasks;
  11. namespace PixiEditor.Models.DataProviders
  12. {
  13. public class LocalPalettesFetcher : PaletteListDataSource
  14. {
  15. public string PathToPalettesFolder { get; private set; } = Path.Join(
  16. Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
  17. "PixiEditor", "Palettes");
  18. public override async Task<PaletteList> FetchPaletteList()
  19. {
  20. string[] files = DirectoryExtensions.GetFiles(PathToPalettesFolder, string.Join("|", AvailableParsers.SelectMany(x => x.SupportedFileExtensions)), SearchOption.TopDirectoryOnly);
  21. PaletteList result = new PaletteList
  22. {
  23. Palettes = new WpfObservableRangeCollection<Palette>()
  24. };
  25. for (int i = 0; i < files.Length; i++)
  26. {
  27. string filePath = files[i];
  28. string extension = Path.GetExtension(filePath);
  29. var foundParser = AvailableParsers.First(x => x.SupportedFileExtensions.Contains(extension));
  30. if (foundParser != null)
  31. {
  32. PaletteFileData fileData = await foundParser.Parse(filePath);
  33. result.Palettes.Add(new Palette(fileData.Title, new List<string>(fileData.GetHexColors()), fileData.Tags));
  34. }
  35. }
  36. result.FetchedCorrectly = true;
  37. return result;
  38. }
  39. public override void Initialize()
  40. {
  41. if(!Directory.Exists(PathToPalettesFolder))
  42. {
  43. Directory.CreateDirectory(PathToPalettesFolder);
  44. }
  45. }
  46. }
  47. }