rename: common data structures

This commit is contained in:
Seraphima
2024-08-16 13:56:35 +02:00
parent 877d5c0506
commit 8675a93f69
12 changed files with 84 additions and 84 deletions

View File

@@ -137,14 +137,14 @@ namespace
{
struct LaunchingApp
{
ProjectsData::Project::Application application;
WorkspacesData::WorkspacesProject::Application application;
HWND window;
std::wstring state;
};
using LaunchingApps = std::vector<LaunchingApp>;
LaunchingApps Prepare(std::vector<ProjectsData::Project::Application>& apps, const Utils::Apps::AppList& installedApps)
LaunchingApps Prepare(std::vector<WorkspacesData::WorkspacesProject::Application>& apps, const Utils::Apps::AppList& installedApps)
{
LaunchingApps launchedApps{};
launchedApps.reserve(apps.size());
@@ -171,16 +171,16 @@ namespace
return launchedApps;
}
auto launchFileName = ProjectsData::LaunchProjectsFile();
auto launchFileName = WorkspacesData::LaunchWorkspacesFile();
void UpdateLaunchStatus(LaunchingApps launchedApps)
{
ProjectsData::AppLaunchData appData = ProjectsData::AppLaunchData();
WorkspacesData::AppLaunchData appData = WorkspacesData::AppLaunchData();
appData.appLaunchInfoList.reserve(launchedApps.size());
appData.launcherProcessID = GetCurrentProcessId();
for (auto& app : launchedApps)
{
ProjectsData::AppLaunchInfo appLaunchInfo = ProjectsData::AppLaunchInfo();
WorkspacesData::AppLaunchInfo appLaunchInfo = WorkspacesData::AppLaunchInfo();
appLaunchInfo.name = app.application.name;
appLaunchInfo.path = app.application.path;
appLaunchInfo.state = app.state;
@@ -188,7 +188,7 @@ namespace
appData.appLaunchInfoList.push_back(appLaunchInfo);
}
json::to_file(launchFileName, ProjectsData::AppLaunchDataJSON::ToJson(appData));
json::to_file(launchFileName, WorkspacesData::AppLaunchDataJSON::ToJson(appData));
}
bool AllWindowsFound(const LaunchingApps& launchedApps)
@@ -232,7 +232,7 @@ namespace
DPIAware::InverseConvert(monitor, x, y);
DPIAware::InverseConvert(monitor, width, height);
ProjectsData::Project::Application::Position windowPosition{
WorkspacesData::WorkspacesProject::Application::Position windowPosition{
.x = static_cast<int>(std::round(x)),
.y = static_cast<int>(std::round(y)),
.width = static_cast<int>(std::round(width)),
@@ -320,7 +320,7 @@ bool LaunchPackagedApp(const std::wstring& packageFullName, ErrorList& launchErr
return false;
}
bool Launch(const ProjectsData::Project::Application& app, ErrorList& launchErrors)
bool Launch(const WorkspacesData::WorkspacesProject::Application& app, ErrorList& launchErrors)
{
bool launched{ false };
if (!app.packageFullName.empty() && app.commandLineArgs.empty() && !app.isElevated)
@@ -384,7 +384,7 @@ void Launch_UI()
}
}
bool Launch(ProjectsData::Project& project, const std::vector<ProjectsData::Project::Monitor>& monitors, ErrorList& launchErrors)
bool Launch(WorkspacesData::WorkspacesProject& project, const std::vector<WorkspacesData::WorkspacesProject::Monitor>& monitors, ErrorList& launchErrors)
{
bool launchedSuccessfully{ true };
@@ -456,7 +456,7 @@ bool Launch(ProjectsData::Project& project, const std::vector<ProjectsData::Proj
continue;
}
auto snapMonitorIter = std::find_if(project.monitors.begin(), project.monitors.end(), [&](const ProjectsData::Project::Monitor& val) { return val.number == app.monitor; });
auto snapMonitorIter = std::find_if(project.monitors.begin(), project.monitors.end(), [&](const WorkspacesData::WorkspacesProject::Monitor& val) { return val.number == app.monitor; });
if (snapMonitorIter == project.monitors.end())
{
Logger::error(L"No monitor saved for launching the app");
@@ -468,7 +468,7 @@ bool Launch(ProjectsData::Project& project, const std::vector<ProjectsData::Proj
HMONITOR currentMonitor{};
UINT currentDpi = DPIAware::DEFAULT_DPI;
auto currentMonitorIter = std::find_if(monitors.begin(), monitors.end(), [&](const ProjectsData::Project::Monitor& val) { return val.number == app.monitor; });
auto currentMonitorIter = std::find_if(monitors.begin(), monitors.end(), [&](const WorkspacesData::WorkspacesProject::Monitor& val) { return val.number == app.monitor; });
if (currentMonitorIter != monitors.end())
{
currentMonitor = currentMonitorIter->monitor;

View File

@@ -4,4 +4,4 @@
using ErrorList = std::vector<std::pair<std::wstring, std::wstring>>;
bool Launch(ProjectsData::Project& project, const std::vector<ProjectsData::Project::Monitor>& monitors, ErrorList& launchErrors);
bool Launch(WorkspacesData::WorkspacesProject& project, const std::vector<WorkspacesData::WorkspacesProject::Monitor>& monitors, ErrorList& launchErrors);

View File

@@ -1,4 +1,4 @@
#include "pch.h"
#include "pch.h"
#include <ProjectsLib/ProjectsData.h>
#include <ProjectsLib/trace.h>
@@ -59,14 +59,14 @@ int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, LPSTR cmdline, int cm
SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
// read projects
auto projectsFileName = ProjectsData::ProjectsFile();
std::vector<ProjectsData::Project> projects;
auto projectsFileName = WorkspacesData::WorkspacesFile();
std::vector<WorkspacesData::WorkspacesProject> projects;
try
{
auto savedProjectsJson = json::from_file(projectsFileName);
if (savedProjectsJson.has_value())
{
auto savedProjects = ProjectsData::ProjectsListJSON::FromJson(savedProjectsJson.value());
auto savedProjects = WorkspacesData::WorkspacesListJSON::FromJson(savedProjectsJson.value());
if (savedProjects.has_value())
{
projects = savedProjects.value();
@@ -103,7 +103,7 @@ int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, LPSTR cmdline, int cm
return 1;
}
ProjectsData::Project projectToLaunch{};
WorkspacesData::WorkspacesProject projectToLaunch{};
std::string cmdLineStr(cmdline);
auto cmdArgs = split(cmdLineStr, " ");
if (cmdArgs.size() < 1)
@@ -166,7 +166,7 @@ int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, LPSTR cmdline, int cm
break;
}
}
json::to_file(projectsFileName, ProjectsData::ProjectsListJSON::ToJson(projects));
json::to_file(projectsFileName, WorkspacesData::WorkspacesListJSON::ToJson(projects));
// telemetry
auto end = std::chrono::high_resolution_clock::now();
@@ -178,7 +178,7 @@ int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, LPSTR cmdline, int cm
{
for (const auto& monitor : projectToLaunch.monitors)
{
auto setup = std::find_if(monitors.begin(), monitors.end(), [&](const ProjectsData::Project::Monitor& val) { return val.dpi == monitor.dpi && val.monitorRectDpiAware == monitor.monitorRectDpiAware; });
auto setup = std::find_if(monitors.begin(), monitors.end(), [&](const WorkspacesData::WorkspacesProject::Monitor& val) { return val.dpi == monitor.dpi && val.monitorRectDpiAware == monitor.monitorRectDpiAware; });
if (setup == monitors.end())
{
differentSetup = true;

View File

@@ -8,7 +8,7 @@ namespace NonLocalizable
const inline wchar_t ModuleKey[] = L"Workspaces";
}
namespace ProjectsData
namespace WorkspacesData
{
std::wstring WorkspacesFile()
{
@@ -28,12 +28,12 @@ namespace ProjectsData
return settingsFolderPath + L"\\launch-workspaces.json";
}
RECT Project::Application::Position::toRect() const noexcept
RECT WorkspacesProject::Application::Position::toRect() const noexcept
{
return RECT{ .left = x, .top = y, .right = x + width, .bottom = y + height };
}
namespace ProjectJSON
namespace WorkspacesProjectJSON
{
namespace ApplicationJSON
{
@@ -47,7 +47,7 @@ namespace ProjectsData
const static wchar_t* HeightID = L"height";
}
json::JsonObject ToJson(const Project::Application::Position& position)
json::JsonObject ToJson(const WorkspacesProject::Application::Position& position)
{
json::JsonObject json{};
json.SetNamedValue(NonLocalizable::XAxisID, json::value(position.x));
@@ -57,9 +57,9 @@ namespace ProjectsData
return json;
}
std::optional<Project::Application::Position> FromJson(const json::JsonObject& json)
std::optional<WorkspacesProject::Application::Position> FromJson(const json::JsonObject& json)
{
Project::Application::Position result;
WorkspacesProject::Application::Position result;
try
{
result.x = static_cast<int>(json.GetNamedNumber(NonLocalizable::XAxisID, 0));
@@ -91,7 +91,7 @@ namespace ProjectsData
const static wchar_t* MonitorID = L"monitor";
}
json::JsonObject ToJson(const Project::Application& data)
json::JsonObject ToJson(const WorkspacesProject::Application& data)
{
json::JsonObject json{};
json.SetNamedValue(NonLocalizable::AppNameID, json::value(data.name));
@@ -109,9 +109,9 @@ namespace ProjectsData
return json;
}
std::optional<Project::Application> FromJson(const json::JsonObject& json)
std::optional<WorkspacesProject::Application> FromJson(const json::JsonObject& json)
{
Project::Application result;
WorkspacesProject::Application result;
try
{
if (json.HasKey(NonLocalizable::AppNameID))
@@ -173,7 +173,7 @@ namespace ProjectsData
const static wchar_t* HeightID = L"height";
}
json::JsonObject ToJson(const Project::Monitor::MonitorRect& data)
json::JsonObject ToJson(const WorkspacesProject::Monitor::MonitorRect& data)
{
json::JsonObject json{};
json.SetNamedValue(NonLocalizable::TopID, json::value(data.top));
@@ -184,9 +184,9 @@ namespace ProjectsData
return json;
}
std::optional<Project::Monitor::MonitorRect> FromJson(const json::JsonObject& json)
std::optional<WorkspacesProject::Monitor::MonitorRect> FromJson(const json::JsonObject& json)
{
Project::Monitor::MonitorRect result;
WorkspacesProject::Monitor::MonitorRect result;
try
{
result.top = static_cast<int>(json.GetNamedNumber(NonLocalizable::TopID));
@@ -213,7 +213,7 @@ namespace ProjectsData
const static wchar_t* MonitorRectDpiUnawareID = L"monitor-rect-dpi-unaware";
}
json::JsonObject ToJson(const Project::Monitor& data)
json::JsonObject ToJson(const WorkspacesProject::Monitor& data)
{
json::JsonObject json{};
json.SetNamedValue(NonLocalizable::MonitorID, json::value(data.id));
@@ -226,9 +226,9 @@ namespace ProjectsData
return json;
}
std::optional<Project::Monitor> FromJson(const json::JsonObject& json)
std::optional<WorkspacesProject::Monitor> FromJson(const json::JsonObject& json)
{
Project::Monitor result;
WorkspacesProject::Monitor result;
try
{
result.id = json.GetNamedString(NonLocalizable::MonitorID);
@@ -271,7 +271,7 @@ namespace ProjectsData
const static wchar_t* AppsID = L"applications";
}
json::JsonObject ToJson(const Project& data)
json::JsonObject ToJson(const WorkspacesProject& data)
{
json::JsonObject json{};
@@ -301,9 +301,9 @@ namespace ProjectsData
return json;
}
std::optional<Project> FromJson(const json::JsonObject& json)
std::optional<WorkspacesProject> FromJson(const json::JsonObject& json)
{
Project result{};
WorkspacesProject result{};
try
{
@@ -359,37 +359,37 @@ namespace ProjectsData
}
}
namespace ProjectsListJSON
namespace WorkspacesListJSON
{
namespace NonLocalizable
{
const static wchar_t* ProjectsID = L"projects";
}
json::JsonObject ToJson(const std::vector<Project>& data)
json::JsonObject ToJson(const std::vector<WorkspacesProject>& data)
{
json::JsonObject json{};
json::JsonArray projectsArray{};
for (const auto& project : data)
{
projectsArray.Append(ProjectJSON::ToJson(project));
projectsArray.Append(WorkspacesProjectJSON::ToJson(project));
}
json.SetNamedValue(NonLocalizable::ProjectsID, projectsArray);
return json;
}
std::optional<std::vector<Project>> FromJson(const json::JsonObject& json)
std::optional<std::vector<WorkspacesProject>> FromJson(const json::JsonObject& json)
{
std::vector<Project> result{};
std::vector<WorkspacesProject> result{};
try
{
auto array = json.GetNamedArray(NonLocalizable::ProjectsID);
for (uint32_t i = 0; i < array.Size(); ++i)
{
auto obj = ProjectJSON::FromJson(array.GetObjectAt(i));
auto obj = WorkspacesProjectJSON::FromJson(array.GetObjectAt(i));
if (obj.has_value())
{
result.push_back(obj.value());

View File

@@ -2,13 +2,13 @@
#include <common/utils/json.h>
namespace ProjectsData
namespace WorkspacesData
{
std::wstring WorkspacesFile();
std::wstring TempWorkspacesFile();
std::wstring LaunchWorkspacesFile();
struct Project
struct WorkspacesProject
{
struct Application
{
@@ -74,9 +74,9 @@ namespace ProjectsData
std::vector<Application> apps;
};
struct ProjectsList
struct WorkspacesList
{
std::vector<Project> projects;
std::vector<WorkspacesProject> projects;
};
struct AppLaunchInfo
@@ -107,39 +107,39 @@ namespace ProjectsData
json::JsonObject ToJson(const AppLaunchData& data);
}
namespace ProjectJSON
namespace WorkspacesProjectJSON
{
namespace ApplicationJSON
{
namespace PositionJSON
{
json::JsonObject ToJson(const Project::Application::Position& position);
std::optional<Project::Application::Position> FromJson(const json::JsonObject& json);
json::JsonObject ToJson(const WorkspacesProject::Application::Position& position);
std::optional<WorkspacesProject::Application::Position> FromJson(const json::JsonObject& json);
}
json::JsonObject ToJson(const Project::Application& data);
std::optional<Project::Application> FromJson(const json::JsonObject& json);
json::JsonObject ToJson(const WorkspacesProject::Application& data);
std::optional<WorkspacesProject::Application> FromJson(const json::JsonObject& json);
}
namespace MonitorJSON
{
namespace MonitorRectJSON
{
json::JsonObject ToJson(const Project::Monitor::MonitorRect& data);
std::optional<Project::Monitor::MonitorRect> FromJson(const json::JsonObject& json);
json::JsonObject ToJson(const WorkspacesProject::Monitor::MonitorRect& data);
std::optional<WorkspacesProject::Monitor::MonitorRect> FromJson(const json::JsonObject& json);
}
json::JsonObject ToJson(const Project::Monitor& data);
std::optional<Project::Monitor> FromJson(const json::JsonObject& json);
json::JsonObject ToJson(const WorkspacesProject::Monitor& data);
std::optional<WorkspacesProject::Monitor> FromJson(const json::JsonObject& json);
}
json::JsonObject ToJson(const Project& data);
std::optional<Project> FromJson(const json::JsonObject& json);
json::JsonObject ToJson(const WorkspacesProject& data);
std::optional<WorkspacesProject> FromJson(const json::JsonObject& json);
}
namespace ProjectsListJSON
namespace WorkspacesListJSON
{
json::JsonObject ToJson(const std::vector<Project>& data);
std::optional<std::vector<Project>> FromJson(const json::JsonObject& json);
json::JsonObject ToJson(const std::vector<WorkspacesProject>& data);
std::optional<std::vector<WorkspacesProject>> FromJson(const json::JsonObject& json);
}
};

View File

@@ -34,7 +34,7 @@ void Trace::Projects::Enable(bool enabled) noexcept
}
void Trace::Projects::Launch(bool success,
const ProjectsData::Project& project,
const WorkspacesData::WorkspacesProject& project,
InvokePoint invokePoint,
double launchTimeSeconds,
bool setupIsDifferent,

View File

@@ -16,7 +16,7 @@ public:
public:
static void Enable(bool enabled) noexcept;
static void Launch(bool success,
const ProjectsData::Project& project,
const WorkspacesData::WorkspacesProject& project,
InvokePoint invokePoint,
double launchTimeSeconds,
bool setupIsDifferent,

View File

@@ -8,15 +8,15 @@
namespace ProjectsJsonUtils
{
inline std::vector<ProjectsData::Project> Read(const std::wstring& fileName)
inline std::vector<WorkspacesData::WorkspacesProject> Read(const std::wstring& fileName)
{
std::vector<ProjectsData::Project> projects{};
std::vector<WorkspacesData::WorkspacesProject> projects{};
try
{
auto savedProjectsJson = json::from_file(fileName);
if (savedProjectsJson.has_value())
{
auto savedProjects = ProjectsData::ProjectsListJSON::FromJson(savedProjectsJson.value());
auto savedProjects = WorkspacesData::WorkspacesListJSON::FromJson(savedProjectsJson.value());
if (savedProjects.has_value())
{
projects = savedProjects.value();
@@ -25,33 +25,33 @@ namespace ProjectsJsonUtils
}
catch (std::exception ex)
{
Logger::error("Error reading projects file. {}", ex.what());
Logger::error("Error reading workspaces file. {}", ex.what());
}
return projects;
}
inline void Write(const std::wstring& fileName, const std::vector<ProjectsData::Project>& projects)
inline void Write(const std::wstring& fileName, const std::vector<WorkspacesData::WorkspacesProject>& projects)
{
try
{
json::to_file(fileName, ProjectsData::ProjectsListJSON::ToJson(projects));
json::to_file(fileName, WorkspacesData::WorkspacesListJSON::ToJson(projects));
}
catch (std::exception ex)
{
Logger::error("Error writing projects file. {}", ex.what());
Logger::error("Error writing workspaces file. {}", ex.what());
}
}
inline void Write(const std::wstring& fileName, const ProjectsData::Project& project)
inline void Write(const std::wstring& fileName, const WorkspacesData::WorkspacesProject& project)
{
try
{
json::to_file(fileName, ProjectsData::ProjectJSON::ToJson(project));
json::to_file(fileName, WorkspacesData::WorkspacesProjectJSON::ToJson(project));
}
catch (std::exception ex)
{
Logger::error("Error writing projects file. {}", ex.what());
Logger::error("Error writing workspaces file. {}", ex.what());
}
}
}

View File

@@ -167,9 +167,9 @@ namespace SnapshotUtils
return false;
}
std::vector<ProjectsData::Project::Application> GetApps(const std::function<unsigned int(HWND)> getMonitorNumberFromWindowHandle)
std::vector<WorkspacesData::WorkspacesProject::Application> GetApps(const std::function<unsigned int(HWND)> getMonitorNumberFromWindowHandle)
{
std::vector<ProjectsData::Project::Application> apps{};
std::vector<WorkspacesData::WorkspacesProject::Application> apps{};
auto installedApps = Utils::Apps::GetAppsList();
auto windows = WindowEnumerator::Enumerate(WindowFilter::Filter);
@@ -247,7 +247,7 @@ namespace SnapshotUtils
continue;
}
ProjectsData::Project::Application app{
WorkspacesData::WorkspacesProject::Application app{
.name = data.value().name,
.title = title,
.path = processPath,
@@ -257,7 +257,7 @@ namespace SnapshotUtils
.canLaunchElevated = data.value().canLaunchElevated,
.isMinimized = WindowUtils::IsMinimized(window),
.isMaximized = WindowUtils::IsMaximized(window),
.position = ProjectsData::Project::Application::Position{
.position = WorkspacesData::WorkspacesProject::Application::Position{
.x = rect.left,
.y = rect.top,
.width = rect.right - rect.left,

View File

@@ -4,5 +4,5 @@
namespace SnapshotUtils
{
std::vector<ProjectsData::Project::Application> GetApps(const std::function<unsigned int(HWND)> getMonitorNumberFromWindowHandle);
std::vector<WorkspacesData::WorkspacesProject::Application> GetApps(const std::function<unsigned int(HWND)> getMonitorNumberFromWindowHandle);
};

View File

@@ -56,7 +56,7 @@ int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, LPSTR cmdLine, int cm
// create new project
time_t creationTime = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
ProjectsData::Project project { .id = CreateGuidString(), .creationTime = creationTime };
WorkspacesData::WorkspacesProject project{ .id = CreateGuidString(), .creationTime = creationTime };
Logger::trace(L"Creating project {}:{}", project.name, project.id);
project.monitors = MonitorUtils::IdentifyMonitors();

View File

@@ -5,7 +5,7 @@
namespace MonitorUtils
{
inline std::vector<ProjectsData::Project::Monitor> IdentifyMonitors() noexcept
inline std::vector<WorkspacesData::WorkspacesProject::Monitor> IdentifyMonitors() noexcept
{
auto displaysResult = DisplayUtils::GetDisplays();
@@ -17,22 +17,22 @@ namespace MonitorUtils
retryCounter++;
}
std::vector<ProjectsData::Project::Monitor> result{};
std::vector<WorkspacesData::WorkspacesProject::Monitor> result{};
for (const auto& data : displaysResult.second)
{
result.emplace_back(ProjectsData::Project::Monitor{
result.emplace_back(WorkspacesData::WorkspacesProject::Monitor{
.monitor = data.monitor,
.id = data.id,
.instanceId = data.instanceId,
.number = data.number,
.dpi = data.dpi,
.monitorRectDpiAware = ProjectsData::Project::Monitor::MonitorRect{
.monitorRectDpiAware = WorkspacesData::WorkspacesProject::Monitor::MonitorRect{
.top = data.monitorRectDpiAware.top,
.left = data.monitorRectDpiAware.left,
.width = data.monitorRectDpiAware.right - data.monitorRectDpiAware.left,
.height = data.monitorRectDpiAware.bottom - data.monitorRectDpiAware.top,
},
.monitorRectDpiUnaware = ProjectsData::Project::Monitor::MonitorRect{
.monitorRectDpiUnaware = WorkspacesData::WorkspacesProject::Monitor::MonitorRect{
.top = data.monitorRectDpiUnaware.top,
.left = data.monitorRectDpiUnaware.left,
.width = data.monitorRectDpiUnaware.right - data.monitorRectDpiUnaware.left,