DFLayoutEmbeddedMediaValue.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System;
  2. using System.Text;
  3. namespace InABox.Core
  4. {
  5. public class DFLayoutEmbeddedMediaValue : IDFLayoutValue<byte[]>
  6. {
  7. public Guid ID { get; set; }
  8. public byte[]? Data { get; set; }
  9. public byte[]? Thumbnail { get; set; }
  10. public void Deserialize(DFLoadStorageEntry storage)
  11. {
  12. var value = storage.GetValue();
  13. if (value is Guid id)
  14. {
  15. ID = id;
  16. }
  17. else if (value is string str)
  18. {
  19. if(Guid.TryParse(str, out id))
  20. ID = id;
  21. else
  22. {
  23. try
  24. {
  25. var tuple = Serialization.Deserialize<(Guid, byte[])>(str,true);
  26. ID = tuple.Item1;
  27. Thumbnail = tuple.Item2;
  28. return;
  29. }
  30. catch (Exception e)
  31. {
  32. try
  33. {
  34. var data = Convert.FromBase64String(str);
  35. ID = Guid.Empty;
  36. Thumbnail = data;
  37. Data = data;
  38. return;
  39. }
  40. catch (Exception e2)
  41. {
  42. ID = Guid.Empty;
  43. }
  44. }
  45. }
  46. }
  47. Thumbnail = storage.GetValue<byte[]>("Thumbnail");
  48. }
  49. public void Serialize(DFSaveStorageEntry storage)
  50. {
  51. storage.SetValue(ID);
  52. storage.AddBlobValue("Thumbnail", Thumbnail);
  53. }
  54. }
  55. }