DFLayoutEmbeddedMediaValues.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Linq;
  6. using System.Runtime.CompilerServices;
  7. using InABox.Core;
  8. namespace InABox.Core
  9. {
  10. public class DFLayoutEmbeddedMediaValues : IEnumerable<DFLayoutEmbeddedMediaValue>, INotifyPropertyChanged
  11. {
  12. private readonly List<DFLayoutEmbeddedMediaValue> _values = new List<DFLayoutEmbeddedMediaValue>();
  13. public DFLayoutEmbeddedMediaValue[] Values => _values.ToArray();
  14. public List<byte[]> AsByteArrays
  15. {
  16. get => _values.Select(x => x?.Data).OfType<byte[]>().ToList();
  17. set
  18. {
  19. _values.Clear();
  20. foreach (var bytes in value)
  21. _values.Add(new DFLayoutEmbeddedMediaValue() { ID = Guid.Empty, Data = bytes});
  22. OnPropertyChanged(nameof(Values));
  23. }
  24. }
  25. public void Load(String serialized)
  26. {
  27. _values.Clear();
  28. List<string> values = Serialization.Deserialize<List<string>>(serialized) ?? new List<string>();
  29. foreach (string s in values)
  30. {
  31. if (!String.IsNullOrWhiteSpace(s))
  32. {
  33. var externaldata = Serialization.Deserialize<(Guid, byte[])>(s);
  34. if (externaldata.Item1 != Guid.Empty)
  35. {
  36. _values.Add(new DFLayoutEmbeddedMediaValue()
  37. {
  38. ID = externaldata.Item1,
  39. Thumbnail = externaldata.Item2
  40. });
  41. }
  42. }
  43. }
  44. }
  45. public override String ToString()
  46. {
  47. List<String> results = new List<string>();
  48. foreach (var value in _values)
  49. results.Add(value.ToString());
  50. return Serialization.Serialize(results);
  51. }
  52. public IEnumerator<DFLayoutEmbeddedMediaValue> GetEnumerator() => _values.GetEnumerator();
  53. IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
  54. public void Add(DFLayoutEmbeddedMediaValue value)
  55. {
  56. _values.Add(value);
  57. OnPropertyChanged(nameof(Values));
  58. }
  59. public void Remove(DFLayoutEmbeddedMediaValue value)
  60. {
  61. if (_values.Contains(value))
  62. {
  63. _values.Remove(value);
  64. OnPropertyChanged(nameof(Values));
  65. }
  66. }
  67. public void Clear()
  68. {
  69. _values.Clear();
  70. OnPropertyChanged(nameof(Values));
  71. }
  72. public event PropertyChangedEventHandler? PropertyChanged;
  73. protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
  74. {
  75. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  76. }
  77. protected bool SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = "")
  78. {
  79. if (EqualityComparer<T>.Default.Equals(field, value)) return false;
  80. field = value;
  81. OnPropertyChanged(propertyName);
  82. return true;
  83. }
  84. }
  85. }