DFLayoutEmbeddedMediaValues.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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 DFLayoutEmbeddedMediaValues(String json = "")
  26. {
  27. if (String.IsNullOrWhiteSpace(json))
  28. return;
  29. _values.Clear();
  30. List<string> values = Serialization.Deserialize<List<string>>(json) ?? new List<string>();
  31. foreach (string s in values)
  32. {
  33. if (!String.IsNullOrWhiteSpace(s))
  34. {
  35. if (Guid.TryParse(s, out Guid id) && (id != Guid.Empty))
  36. {
  37. // DigitalFormDocumentHandler.LoadDocument(id, data =>
  38. // {
  39. // Add(new DigitalFormEmbeddedMediaValue()
  40. // {
  41. // ID = id,
  42. // Data = data
  43. // });
  44. // });
  45. }
  46. else if (s.IsBase64String())
  47. {
  48. Add(new DFLayoutEmbeddedMediaValue()
  49. {
  50. ID = Guid.Empty,
  51. Data = Convert.FromBase64String(s)
  52. });
  53. }
  54. }
  55. }
  56. }
  57. public override String ToString()
  58. {
  59. List<String> results = new List<string>();
  60. foreach (var value in _values)
  61. results.Add(value.ToString());
  62. return Serialization.Serialize(results);
  63. }
  64. public IEnumerator<DFLayoutEmbeddedMediaValue> GetEnumerator() => _values.GetEnumerator();
  65. IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
  66. public void Add(DFLayoutEmbeddedMediaValue value)
  67. {
  68. _values.Add(value);
  69. OnPropertyChanged(nameof(Values));
  70. }
  71. public void Remove(DFLayoutEmbeddedMediaValue value)
  72. {
  73. if (_values.Contains(value))
  74. {
  75. _values.Remove(value);
  76. OnPropertyChanged(nameof(Values));
  77. }
  78. }
  79. public void Clear()
  80. {
  81. _values.Clear();
  82. OnPropertyChanged(nameof(Values));
  83. }
  84. public event PropertyChangedEventHandler? PropertyChanged;
  85. protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
  86. {
  87. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  88. }
  89. protected bool SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = "")
  90. {
  91. if (EqualityComparer<T>.Default.Equals(field, value)) return false;
  92. field = value;
  93. OnPropertyChanged(propertyName);
  94. return true;
  95. }
  96. }
  97. }