HardwareDBLoader.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. namespace MinicsConsole.Helper;
  2. public class HardwareDBLoader(OrmCollections ormCollections, Hardwares hardwares)
  3. {
  4. public bool Load()
  5. {
  6. if (ormCollections == null || ormCollections.MainORM is null)
  7. return false;
  8. IORM orm = ormCollections.MainORM;
  9. var result = orm.Query<Mini8Data>("Mini8Config", (mini8s) =>
  10. {
  11. foreach (Mini8Data mini8 in mini8s)
  12. hardwares.Mini8s[mini8.Index] = mini8;
  13. }).Result;
  14. result &= orm.Query<ChannelData>("ChannelConfigConfig", (channelDatas) =>
  15. {
  16. foreach (ChannelData channelData in channelDatas)
  17. {
  18. if (!hardwares.Mini8Channels.TryGetValue(channelData.Mini8Index, out ConcurrentDictionary<byte, ChannelData>? channels) || channels is null)
  19. {
  20. channels = [];
  21. hardwares.Mini8Channels[channelData.Mini8Index] = channels;
  22. }
  23. channels[channelData.ChannelIndex] = channelData;
  24. }
  25. }).Result;
  26. if (hardwares.Mini8s is null || hardwares.Mini8s.IsEmpty)
  27. return false;
  28. if (hardwares.Mini8Channels is null || hardwares.Mini8Channels.IsEmpty)
  29. return false;
  30. return result;
  31. }
  32. public bool Save()
  33. {
  34. if (ormCollections == null || ormCollections.MainORM is null)
  35. return false;
  36. IORM orm = ormCollections.MainORM;
  37. orm.CreateTable<Mini8Data>("Mini8Config");
  38. orm.CreateTable<ChannelData>("ChannelConfigConfig");
  39. foreach (var mini8 in hardwares.Mini8s.Values)
  40. {
  41. if (!orm.AddOrUpdate("Mini8Config", mini8, t => t.Index == mini8.Index))
  42. return false;
  43. }
  44. foreach (var channels in hardwares.Mini8Channels.Values)
  45. {
  46. foreach (var channel in channels)
  47. {
  48. ChannelData channelData = channel.Value;
  49. if (!orm.AddOrUpdate("ChannelConfigConfig", channelData, t => t.Mini8Index == channelData.Mini8Index && t.ChannelIndex == channelData.ChannelIndex))
  50. return false;
  51. }
  52. }
  53. return true;
  54. }
  55. public bool SaveSingleMini8(byte mini8Index)
  56. {
  57. if (ormCollections == null || ormCollections.MainORM is null)
  58. return false;
  59. IORM orm = ormCollections.MainORM;
  60. orm.CreateTable<Mini8Data>("Mini8Config");
  61. orm.CreateTable<ChannelData>("ChannelConfigConfig");
  62. if (!hardwares.Mini8s.TryGetValue(mini8Index, out Mini8Data? mini8) || mini8 is null)
  63. return false;
  64. if (!hardwares.Mini8Channels.TryGetValue(mini8Index, out ConcurrentDictionary<byte, ChannelData>? channels) || channels is null)
  65. return false;
  66. if (!orm.AddOrUpdate("Mini8Config", mini8, t => t.Index == mini8.Index))
  67. return false;
  68. foreach (var channel in channels)
  69. {
  70. ChannelData channelData = channel.Value;
  71. if (!orm.AddOrUpdate("ChannelConfigConfig", channelData, t => t.Mini8Index == channelData.Mini8Index && t.ChannelIndex == channelData.ChannelIndex))
  72. return false;
  73. }
  74. return true;
  75. }
  76. }