Update ApplicationProjectReader.cpp and RecentProjectsComponent.cpp | fix invalid projects not being removed from recent. Mark as invalid perhaps?
This commit is contained in:
@@ -11,102 +11,100 @@
|
||||
|
||||
namespace Noggit::Project
|
||||
{
|
||||
std::optional<NoggitProject> ApplicationProjectReader::readProject(std::filesystem::path const& project_path)
|
||||
std::optional<NoggitProject> ApplicationProjectReader::readProject(std::filesystem::path const& project_path)
|
||||
{
|
||||
for (const auto& entry: std::filesystem::directory_iterator(project_path))
|
||||
{
|
||||
for (const auto& entry : std::filesystem::directory_iterator(project_path))
|
||||
if (entry.path().extension() == ".noggitproj")
|
||||
{
|
||||
QFile input_file(QString::fromStdString(entry.path().generic_string()));
|
||||
input_file.open(QIODevice::ReadOnly);
|
||||
|
||||
auto document = QJsonDocument().fromJson(input_file.readAll());
|
||||
auto root = document.object();
|
||||
|
||||
auto project = NoggitProject();
|
||||
project.ProjectPath = project_path.generic_string();
|
||||
if (root.contains("Project") && root["Project"].isObject())
|
||||
{
|
||||
if (entry.path().extension() == ".noggitproj")
|
||||
auto project_configuration = root["Project"].toObject();
|
||||
if (project_configuration.contains("ProjectName"))
|
||||
project.ProjectName = project_configuration["ProjectName"].toString().toStdString();
|
||||
|
||||
if (project_configuration.contains("Bookmarks") && project_configuration["Bookmarks"].isArray())
|
||||
{
|
||||
auto project_bookmarks = project_configuration["Bookmarks"].toArray();
|
||||
|
||||
for (auto const& json_bookmark: project_bookmarks)
|
||||
{
|
||||
QFile input_file(QString::fromStdString(entry.path().generic_string()));
|
||||
input_file.open(QIODevice::ReadOnly);
|
||||
auto bookmark = NoggitProjectBookmarkMap();
|
||||
bookmark.map_id = json_bookmark.toObject().value("MapId").toInt();
|
||||
bookmark.name = json_bookmark.toObject().value("BookmarkName").toString().toStdString();
|
||||
bookmark.camera_pitch = json_bookmark.toObject().value("CameraPitch").toDouble();
|
||||
bookmark.camera_yaw = json_bookmark.toObject().value("CameraYaw").toDouble();
|
||||
|
||||
auto document = QJsonDocument().fromJson(input_file.readAll());
|
||||
auto root = document.object();
|
||||
auto bookmark_position = json_bookmark.toObject().value("Position");
|
||||
auto bookmark_position_x = bookmark_position.toObject().value("X").toDouble();
|
||||
auto bookmark_position_y = bookmark_position.toObject().value("Y").toDouble();
|
||||
auto bookmark_position_z = bookmark_position.toObject().value("Z").toDouble();
|
||||
bookmark.position = glm::vec3(bookmark_position_x, bookmark_position_y, bookmark_position_z);
|
||||
|
||||
auto project = NoggitProject();
|
||||
project.ProjectPath = project_path.generic_string();
|
||||
if (root.contains("Project") && root["Project"].isObject())
|
||||
{
|
||||
auto project_configuration = root["Project"].toObject();
|
||||
if (project_configuration.contains("ProjectName"))
|
||||
project.ProjectName = project_configuration["ProjectName"].toString().toStdString();
|
||||
|
||||
if (project_configuration.contains("Bookmarks") && project_configuration["Bookmarks"].isArray())
|
||||
{
|
||||
auto project_bookmarks = project_configuration["Bookmarks"].toArray();
|
||||
|
||||
for (auto const& json_bookmark : project_bookmarks)
|
||||
{
|
||||
auto bookmark = NoggitProjectBookmarkMap();
|
||||
bookmark.map_id = json_bookmark.toObject().value("MapId").toInt();
|
||||
bookmark.name = json_bookmark.toObject().value("BookmarkName").toString().toStdString();
|
||||
bookmark.camera_pitch = json_bookmark.toObject().value("CameraPitch").toDouble();
|
||||
bookmark.camera_yaw = json_bookmark.toObject().value("CameraYaw").toDouble();
|
||||
|
||||
auto bookmark_position = json_bookmark.toObject().value("Position");
|
||||
auto bookmark_position_x = bookmark_position.toObject().value("X").toDouble();
|
||||
auto bookmark_position_y = bookmark_position.toObject().value("Y").toDouble();
|
||||
auto bookmark_position_z = bookmark_position.toObject().value("Z").toDouble();
|
||||
bookmark.position = glm::vec3(bookmark_position_x, bookmark_position_y, bookmark_position_z);
|
||||
|
||||
project.Bookmarks.push_back(bookmark);
|
||||
}
|
||||
}
|
||||
|
||||
if (project_configuration.contains("PinnedMaps") && project_configuration["PinnedMaps"].isArray())
|
||||
{
|
||||
auto project_pinned_maps = project_configuration["PinnedMaps"].toArray();
|
||||
|
||||
for(auto const &json_pinned_map : project_pinned_maps)
|
||||
{
|
||||
auto pinned_map = NoggitProjectPinnedMap();
|
||||
pinned_map.MapId = json_pinned_map.toObject().value("MapId").toInt();
|
||||
pinned_map.MapName = json_pinned_map.toObject().value("MapName").toString().toStdString();
|
||||
project.PinnedMaps.push_back(pinned_map);
|
||||
}
|
||||
}
|
||||
|
||||
if (project_configuration.contains("Client") && project_configuration["Client"].isObject())
|
||||
{
|
||||
auto project_client_configuration = project_configuration["Client"].toObject();
|
||||
|
||||
if (project_client_configuration.contains("ClientPath"))
|
||||
{
|
||||
project.ClientPath = project_client_configuration["ClientPath"].toString().toStdString();
|
||||
}
|
||||
|
||||
if (project_client_configuration.contains("ClientVersion"))
|
||||
{
|
||||
auto client_version = project_client_configuration["ClientVersion"].toString().toStdString();
|
||||
|
||||
auto client_version_enum = Noggit::Project::ProjectVersion::WOTLK;
|
||||
if (client_version == std::string("Shadowlands"))
|
||||
{
|
||||
client_version_enum = Noggit::Project::ProjectVersion::SL;
|
||||
}
|
||||
|
||||
if (client_version == std::string("Wrath Of The Lich King"))
|
||||
{
|
||||
client_version_enum = Noggit::Project::ProjectVersion::WOTLK;
|
||||
}
|
||||
|
||||
project.projectVersion = client_version_enum;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return {};
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
return project;
|
||||
project.Bookmarks.push_back(bookmark);
|
||||
}
|
||||
}
|
||||
|
||||
if (project_configuration.contains("PinnedMaps") && project_configuration["PinnedMaps"].isArray())
|
||||
{
|
||||
auto project_pinned_maps = project_configuration["PinnedMaps"].toArray();
|
||||
|
||||
for (auto const& json_pinned_map: project_pinned_maps)
|
||||
{
|
||||
auto pinned_map = NoggitProjectPinnedMap();
|
||||
pinned_map.MapId = json_pinned_map.toObject().value("MapId").toInt();
|
||||
pinned_map.MapName = json_pinned_map.toObject().value("MapName").toString().toStdString();
|
||||
project.PinnedMaps.push_back(pinned_map);
|
||||
}
|
||||
}
|
||||
|
||||
if (project_configuration.contains("Client") && project_configuration["Client"].isObject())
|
||||
{
|
||||
auto project_client_configuration = project_configuration["Client"].toObject();
|
||||
|
||||
if (project_client_configuration.contains("ClientPath"))
|
||||
{
|
||||
project.ClientPath = project_client_configuration["ClientPath"].toString().toStdString();
|
||||
}
|
||||
|
||||
if (project_client_configuration.contains("ClientVersion"))
|
||||
{
|
||||
auto client_version = project_client_configuration["ClientVersion"].toString().toStdString();
|
||||
|
||||
auto client_version_enum = Noggit::Project::ProjectVersion::WOTLK;
|
||||
if (client_version == std::string("Shadowlands"))
|
||||
{
|
||||
client_version_enum = Noggit::Project::ProjectVersion::SL;
|
||||
}
|
||||
|
||||
if (client_version == std::string("Wrath Of The Lich King"))
|
||||
{
|
||||
client_version_enum = Noggit::Project::ProjectVersion::WOTLK;
|
||||
}
|
||||
|
||||
project.projectVersion = client_version_enum;
|
||||
}
|
||||
} else
|
||||
{
|
||||
return {};
|
||||
}
|
||||
} else
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
return {};
|
||||
return project;
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
#include "RecentProjectsComponent.hpp"
|
||||
|
||||
#include <QList>
|
||||
|
||||
#include <filesystem>
|
||||
|
||||
using namespace Noggit::Ui::Component;
|
||||
|
||||
@@ -22,17 +22,18 @@ void RecentProjectsComponent::buildRecentProjectsList(Noggit::Ui::Windows::Noggi
|
||||
settings.setArrayIndex(i);
|
||||
std::filesystem::path project_path = settings.value("project_path").toString().toStdString().c_str();
|
||||
|
||||
auto item = new QListWidgetItem(parent->_ui->listView);
|
||||
auto project_reader = Noggit::Project::ApplicationProjectReader();
|
||||
|
||||
if (!std::filesystem::exists(project_path) || !std::filesystem::is_directory(project_path))
|
||||
continue;
|
||||
|
||||
auto project_reader = Noggit::Project::ApplicationProjectReader();
|
||||
|
||||
auto project = project_reader.readProject(project_path);
|
||||
|
||||
if (!project.has_value())
|
||||
continue;
|
||||
|
||||
auto item = new QListWidgetItem(parent->_ui->listView);
|
||||
|
||||
auto project_data = Noggit::Ui::Widget::ProjectListItemData();
|
||||
project_data.project_version = project->projectVersion;
|
||||
project_data.project_directory = QString::fromStdString(project_path.generic_string());
|
||||
@@ -91,7 +92,19 @@ void RecentProjectsComponent::registerProjectChange(std::string const& project_p
|
||||
for (int i = 0; i < size; ++i)
|
||||
{
|
||||
settings.setArrayIndex(i);
|
||||
recent_projects.append(settings.value("project_path").toString());
|
||||
QString p_path = settings.value("project_path").toString();
|
||||
|
||||
std::string std_project_path = p_path.toStdString();
|
||||
|
||||
if (std::filesystem::exists(std_project_path)
|
||||
&& std::filesystem::is_directory(std_project_path))
|
||||
{
|
||||
recent_projects.append(p_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
size--;
|
||||
}
|
||||
}
|
||||
settings.endArray();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user