#pragma once #include "FancyZonesDataTypes.h" #include #include #include #include namespace JSONHelpers { namespace CanvasLayoutInfoJSON { json::JsonObject ToJson(const FancyZonesDataTypes::CanvasLayoutInfo& canvasInfo); std::optional FromJson(const json::JsonObject& infoJson); } namespace GridLayoutInfoJSON { json::JsonObject ToJson(const FancyZonesDataTypes::GridLayoutInfo& gridInfo); std::optional FromJson(const json::JsonObject& infoJson); } struct CustomZoneSetJSON { std::wstring uuid; FancyZonesDataTypes::CustomZoneSetData data; static json::JsonObject ToJson(const CustomZoneSetJSON& device); static std::optional FromJson(const json::JsonObject& customZoneSet); }; namespace ZoneSetDataJSON { json::JsonObject ToJson(const FancyZonesDataTypes::ZoneSetData& zoneSet); std::optional FromJson(const json::JsonObject& zoneSet); }; struct AppZoneHistoryJSON { std::wstring appPath; std::vector data; static json::JsonObject ToJson(const AppZoneHistoryJSON& appZoneHistory); static std::optional FromJson(const json::JsonObject& zoneSet); }; struct DeviceInfoJSON { std::wstring deviceId; FancyZonesDataTypes::DeviceInfoData data; static json::JsonObject ToJson(const DeviceInfoJSON& device); static std::optional FromJson(const json::JsonObject& device); }; using TAppZoneHistoryMap = std::unordered_map>; using TDeviceInfoMap = std::unordered_map; using TCustomZoneSetsMap = std::unordered_map; struct AppliedZonesetsJSON { static json::JsonObject ToJson(const TDeviceInfoMap& deviceInfoMap); static json::JsonObject ToJson(const TDeviceInfoMap& deviceInfoMap, const GUID& currentVirtualDesktop); static std::optional FromJson(const json::JsonObject& json); }; json::JsonObject GetPersistFancyZonesJSON(const std::wstring& zonesSettingsFileName, const std::wstring& appZoneHistoryFileName); void SaveZoneSettings(const std::wstring& zonesSettingsFileName, const TDeviceInfoMap& deviceInfoMap, const TCustomZoneSetsMap& customZoneSetsMap); void SaveAppZoneHistory(const std::wstring& appZoneHistoryFileName, const TAppZoneHistoryMap& appZoneHistoryMap); TAppZoneHistoryMap ParseAppZoneHistory(const json::JsonObject& fancyZonesDataJSON); json::JsonArray SerializeAppZoneHistory(const TAppZoneHistoryMap& appZoneHistoryMap); TDeviceInfoMap ParseDeviceInfos(const json::JsonObject& fancyZonesDataJSON); json::JsonArray SerializeDeviceInfos(const TDeviceInfoMap& deviceInfoMap); TCustomZoneSetsMap ParseCustomZoneSets(const json::JsonObject& fancyZonesDataJSON); json::JsonArray SerializeCustomZoneSets(const TCustomZoneSetsMap& customZoneSetsMap); void SerializeDeviceInfoToTmpFile(const TDeviceInfoMap& deviceInfoMap, const GUID& currentVirtualDesktop, std::wstring_view tmpFilePath); std::optional ParseDeviceInfoFromTmpFile(std::wstring_view tmpFilePath); std::vector ParseCustomZoneSetsFromTmpFile(std::wstring_view tmpFilePath); std::vector ParseDeletedCustomZoneSetsFromTmpFile(std::wstring_view tmpFilePath); #if defined(UNIT_TESTS) void SerializeCustomZoneSetsToTmpFile(const TCustomZoneSetsMap& customZoneSetsMap, std::wstring_view tmpFilePath); #endif }