ConfigUtil.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "pch.h"
  2. #include "ConfigUtil.h"
  3. #include <winrt\Windows.Storage.AccessCache.h>
  4. namespace winrt::Maple_App::implementation {
  5. using namespace Windows::Foundation;
  6. using namespace Windows::Storage;
  7. using namespace Windows::Storage::AccessCache;
  8. ApplicationData ConfigUtil::GetCurrentAppData()
  9. {
  10. static ApplicationData currentAppData{ ApplicationData::Current() };
  11. return currentAppData;
  12. }
  13. IAsyncOperation<StorageFolder> ConfigUtil::GetDefaultConfigFolder()
  14. {
  15. auto configItem = co_await LocalFolder.TryGetItemAsync(LocalFolderConfigDirName);
  16. if (configItem == nullptr || configItem.IsOfType(StorageItemTypes::File)) {
  17. configItem = co_await LocalFolder.CreateFolderAsync(LocalFolderConfigDirName, CreationCollisionOption::ReplaceExisting);
  18. }
  19. co_return configItem.as<StorageFolder>();
  20. }
  21. IAsyncOperation<IStorageFolder> ConfigUtil::GetConfigFolder()
  22. {
  23. if (cachedConfigFolder)
  24. {
  25. co_return cachedConfigFolder;
  26. }
  27. StorageFolder folder{ nullptr };
  28. try {
  29. folder = co_await StorageApplicationPermissions::FutureAccessList().GetFolderAsync(ConfigFolderAccessListKey);
  30. }
  31. catch (hresult_invalid_argument const&) {}
  32. usingDefaultConfigFolder = !static_cast<bool>(folder);
  33. if (!folder)
  34. {
  35. folder = co_await GetDefaultConfigFolder();
  36. }
  37. cachedConfigFolder = folder;
  38. co_return folder;
  39. }
  40. void ConfigUtil::SetConfigFolder(IStorageFolder folder)
  41. {
  42. if (folder) {
  43. StorageApplicationPermissions::FutureAccessList().AddOrReplace(ConfigFolderAccessListKey, folder);
  44. }
  45. else
  46. {
  47. StorageApplicationPermissions::FutureAccessList().Remove(ConfigFolderAccessListKey);
  48. }
  49. cachedConfigFolder = nullptr;
  50. usingDefaultConfigFolder = !static_cast<bool>(folder);
  51. }
  52. bool ConfigUtil::UsingDefaultConfigFolder() noexcept {
  53. return usingDefaultConfigFolder;
  54. }
  55. }