DatabaseServiceImpl.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. using Ryujinx.HLE.HOS.Services.Mii.Types;
  2. using Ryujinx.HLE.HOS.Services.Settings;
  3. using System;
  4. namespace Ryujinx.HLE.HOS.Services.Mii.StaticService
  5. {
  6. class DatabaseServiceImpl : IDatabaseService
  7. {
  8. private DatabaseImpl _database;
  9. private DatabaseSessionMetadata _metadata;
  10. private bool _isSystem;
  11. public DatabaseServiceImpl(DatabaseImpl database, bool isSystem, SpecialMiiKeyCode miiKeyCode)
  12. {
  13. _database = database;
  14. _metadata = _database.CreateSessionMetadata(miiKeyCode);
  15. _isSystem = isSystem;
  16. }
  17. public bool IsDatabaseTestModeEnabled()
  18. {
  19. if (NxSettings.Settings.TryGetValue("mii!is_db_test_mode_enabled", out object isDatabaseTestModeEnabled))
  20. {
  21. return (bool)isDatabaseTestModeEnabled;
  22. }
  23. return false;
  24. }
  25. protected override bool IsUpdated(SourceFlag flag)
  26. {
  27. return _database.IsUpdated(_metadata, flag);
  28. }
  29. protected override bool IsFullDatabase()
  30. {
  31. return _database.IsFullDatabase();
  32. }
  33. protected override uint GetCount(SourceFlag flag)
  34. {
  35. return _database.GetCount(_metadata, flag);
  36. }
  37. protected override ResultCode Get(SourceFlag flag, out int count, Span<CharInfoElement> elements)
  38. {
  39. return _database.Get(_metadata, flag, out count, elements);
  40. }
  41. protected override ResultCode Get1(SourceFlag flag, out int count, Span<CharInfo> elements)
  42. {
  43. return _database.Get(_metadata, flag, out count, elements);
  44. }
  45. protected override ResultCode UpdateLatest(CharInfo oldCharInfo, SourceFlag flag, out CharInfo newCharInfo)
  46. {
  47. newCharInfo = default;
  48. return _database.UpdateLatest(_metadata, oldCharInfo, flag, newCharInfo);
  49. }
  50. protected override ResultCode BuildRandom(Age age, Gender gender, Race race, out CharInfo charInfo)
  51. {
  52. if (age > Age.All || gender > Gender.All || race > Race.All)
  53. {
  54. charInfo = default;
  55. return ResultCode.InvalidArgument;
  56. }
  57. _database.BuildRandom(age, gender, race, out charInfo);
  58. return ResultCode.Success;
  59. }
  60. protected override ResultCode BuildDefault(uint index, out CharInfo charInfo)
  61. {
  62. if (index >= DefaultMii.TableLength)
  63. {
  64. charInfo = default;
  65. return ResultCode.InvalidArgument;
  66. }
  67. _database.BuildDefault(index, out charInfo);
  68. return ResultCode.Success;
  69. }
  70. protected override ResultCode Get2(SourceFlag flag, out int count, Span<StoreDataElement> elements)
  71. {
  72. if (!_isSystem)
  73. {
  74. count = -1;
  75. return ResultCode.PermissionDenied;
  76. }
  77. return _database.Get(_metadata, flag, out count, elements);
  78. }
  79. protected override ResultCode Get3(SourceFlag flag, out int count, Span<StoreData> elements)
  80. {
  81. if (!_isSystem)
  82. {
  83. count = -1;
  84. return ResultCode.PermissionDenied;
  85. }
  86. return _database.Get(_metadata, flag, out count, elements);
  87. }
  88. protected override ResultCode UpdateLatest1(StoreData oldStoreData, SourceFlag flag, out StoreData newStoreData)
  89. {
  90. newStoreData = default;
  91. if (!_isSystem)
  92. {
  93. return ResultCode.PermissionDenied;
  94. }
  95. return _database.UpdateLatest(_metadata, oldStoreData, flag, newStoreData);
  96. }
  97. protected override ResultCode FindIndex(CreateId createId, bool isSpecial, out int index)
  98. {
  99. if (!_isSystem)
  100. {
  101. index = -1;
  102. return ResultCode.PermissionDenied;
  103. }
  104. index = _database.FindIndex(createId, isSpecial);
  105. return ResultCode.Success;
  106. }
  107. protected override ResultCode Move(CreateId createId, int newIndex)
  108. {
  109. if (!_isSystem)
  110. {
  111. return ResultCode.PermissionDenied;
  112. }
  113. if (newIndex > 0 && _database.GetCount(_metadata, SourceFlag.Database) > newIndex)
  114. {
  115. return _database.Move(_metadata, newIndex, createId);
  116. }
  117. return ResultCode.InvalidArgument;
  118. }
  119. protected override ResultCode AddOrReplace(StoreData storeData)
  120. {
  121. if (!_isSystem)
  122. {
  123. return ResultCode.PermissionDenied;
  124. }
  125. return _database.AddOrReplace(_metadata, storeData);
  126. }
  127. protected override ResultCode Delete(CreateId createId)
  128. {
  129. if (!_isSystem)
  130. {
  131. return ResultCode.PermissionDenied;
  132. }
  133. return _database.Delete(_metadata, createId);
  134. }
  135. protected override ResultCode DestroyFile()
  136. {
  137. if (!IsDatabaseTestModeEnabled())
  138. {
  139. return ResultCode.TestModeNotEnabled;
  140. }
  141. return _database.DestroyFile(_metadata);
  142. }
  143. protected override ResultCode DeleteFile()
  144. {
  145. if (!IsDatabaseTestModeEnabled())
  146. {
  147. return ResultCode.TestModeNotEnabled;
  148. }
  149. return _database.DeleteFile();
  150. }
  151. protected override ResultCode Format()
  152. {
  153. if (!IsDatabaseTestModeEnabled())
  154. {
  155. return ResultCode.TestModeNotEnabled;
  156. }
  157. _database.Format(_metadata);
  158. return ResultCode.Success;
  159. }
  160. protected override ResultCode Import(ReadOnlySpan<byte> data)
  161. {
  162. if (!IsDatabaseTestModeEnabled())
  163. {
  164. return ResultCode.TestModeNotEnabled;
  165. }
  166. throw new NotImplementedException();
  167. }
  168. protected override ResultCode Export(Span<byte> data)
  169. {
  170. if (!IsDatabaseTestModeEnabled())
  171. {
  172. return ResultCode.TestModeNotEnabled;
  173. }
  174. throw new NotImplementedException();
  175. }
  176. protected override ResultCode IsBrokenDatabaseWithClearFlag(out bool isBrokenDatabase)
  177. {
  178. if (!_isSystem)
  179. {
  180. isBrokenDatabase = false;
  181. return ResultCode.PermissionDenied;
  182. }
  183. isBrokenDatabase = _database.IsBrokenDatabaseWithClearFlag();
  184. return ResultCode.Success;
  185. }
  186. protected override ResultCode GetIndex(CharInfo charInfo, out int index)
  187. {
  188. return _database.GetIndex(_metadata, charInfo, out index);
  189. }
  190. protected override void SetInterfaceVersion(uint interfaceVersion)
  191. {
  192. _database.SetInterfaceVersion(_metadata, interfaceVersion);
  193. }
  194. protected override ResultCode Convert(Ver3StoreData ver3StoreData, out CharInfo charInfo)
  195. {
  196. throw new NotImplementedException();
  197. }
  198. protected override ResultCode ConvertCoreDataToCharInfo(CoreData coreData, out CharInfo charInfo)
  199. {
  200. return _database.ConvertCoreDataToCharInfo(coreData, out charInfo);
  201. }
  202. protected override ResultCode ConvertCharInfoToCoreData(CharInfo charInfo, out CoreData coreData)
  203. {
  204. return _database.ConvertCharInfoToCoreData(charInfo, out coreData);
  205. }
  206. }
  207. }