HardwareDBLoader.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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.DeleteTable("Mini8Config");
  38. orm.CreateTable<Mini8Data>("Mini8Config");
  39. orm.CreateTable<ChannelData>("ChannelConfigConfig");
  40. foreach (var mini8 in hardwares.Mini8s.Values)
  41. {
  42. if (!orm.AddOrUpdate("Mini8Config", mini8, t => t.Index == mini8.Index))
  43. return false;
  44. }
  45. foreach (var channels in hardwares.Mini8Channels.Values)
  46. {
  47. foreach (var channel in channels)
  48. {
  49. ChannelData channelData = channel.Value;
  50. if (!orm.AddOrUpdate("ChannelConfigConfig", channelData, t => t.Mini8Index == channelData.Mini8Index && t.ChannelIndex == channelData.ChannelIndex))
  51. return false;
  52. }
  53. }
  54. return true;
  55. }
  56. public bool SaveSingleMini8(byte mini8Index)
  57. {
  58. if (ormCollections == null || ormCollections.MainORM is null)
  59. return false;
  60. IORM orm = ormCollections.MainORM;
  61. orm.CreateTable<Mini8Data>("Mini8Config");
  62. orm.CreateTable<ChannelData>("ChannelConfigConfig");
  63. if (!hardwares.Mini8s.TryGetValue(mini8Index, out Mini8Data? mini8) || mini8 is null)
  64. return false;
  65. if (!hardwares.Mini8Channels.TryGetValue(mini8Index, out ConcurrentDictionary<byte, ChannelData>? channels) || channels is null)
  66. return false;
  67. if (!orm.AddOrUpdate("Mini8Config", mini8, t => t.Index == mini8.Index))
  68. return false;
  69. foreach (var channel in channels)
  70. {
  71. ChannelData channelData = channel.Value;
  72. if (!orm.AddOrUpdate("ChannelConfigConfig", channelData, t => t.Mini8Index == channelData.Mini8Index && t.ChannelIndex == channelData.ChannelIndex))
  73. return false;
  74. }
  75. return true;
  76. }
  77. public bool SaveMini8MainConfig(byte mini8Index)
  78. {
  79. if (ormCollections == null || ormCollections.MainORM is null)
  80. return false;
  81. IORM orm = ormCollections.MainORM;
  82. orm.CreateTable<Mini8Data>("Mini8Config");
  83. orm.CreateTable<ChannelData>("ChannelConfigConfig");
  84. if (!hardwares.Mini8s.TryGetValue(mini8Index, out Mini8Data? mini8) || mini8 is null)
  85. return false;
  86. return orm.AddOrUpdate("Mini8Config", mini8, t => t.Index == mini8.Index);
  87. }
  88. }