From 6cec6a954bb447946ec9a10a95834e2f7b7dad32 Mon Sep 17 00:00:00 2001 From: T1ti <40864460+T1ti@users.noreply.github.com> Date: Thu, 25 Apr 2024 04:54:44 +0200 Subject: [PATCH] add extra logging and error handling on initial load --- src/noggit/World.cpp | 2 +- src/noggit/application/NoggitApplication.cpp | 9 +++++++++ src/noggit/project/ApplicationProject.h | 7 ++++++- src/noggit/project/ApplicationProjectReader.cpp | 6 ++++++ src/noggit/ui/windows/noggitWindow/NoggitWindow.cpp | 3 +++ .../projectCreation/NoggitProjectCreationDialog.cpp | 8 +++++++- .../projectSelection/NoggitProjectSelectionWindow.cpp | 8 ++++++++ .../components/LoadProjectComponent.hpp | 10 ++++++++++ 8 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/noggit/World.cpp b/src/noggit/World.cpp index fc3e53ca..580ef111 100755 --- a/src/noggit/World.cpp +++ b/src/noggit/World.cpp @@ -49,7 +49,7 @@ bool World::IsEditableWorld(BlizzardDatabaseLib::Structures::BlizzardDatabaseRow if (!Noggit::Application::NoggitApplication::instance()->clientData()->exists(ssfilename.str())) { - Log << "World " << record.RecordId << ": " << lMapName << " has no WDT file!" << std::endl; + LogDebug << "World " << record.RecordId << ": " << lMapName << " has no WDT file!" << std::endl; return false; } diff --git a/src/noggit/application/NoggitApplication.cpp b/src/noggit/application/NoggitApplication.cpp index 043ac159..de5ba3dc 100755 --- a/src/noggit/application/NoggitApplication.cpp +++ b/src/noggit/application/NoggitApplication.cpp @@ -2,6 +2,8 @@ #include #include +#include + namespace Noggit::Application { void NoggitApplication::initalize(int argc, char* argv[], std::vector Parser) @@ -9,8 +11,13 @@ namespace Noggit::Application InitLogging(); Command = Parser; + QLocale locale = QLocale(QLocale::English); + QString dateTimeText = locale.toString(QDateTime::currentDateTime(), "dd MMMM yyyy hh:mm:ss"); + Log << "Start time : " << dateTimeText.toStdString() << std::endl; + //Locate application relative path Log << "Noggit Studio - " << STRPRODUCTVER << std::endl; + Log << "Build Date : " << __DATE__ ", " __TIME__ << std::endl; auto applicationLocation = std::filesystem::path(argv[0]); Log << "Noggit Application Path: " << applicationLocation << std::endl; @@ -133,6 +140,8 @@ namespace Noggit::Application ); } LogError << "std::terminate: " << reason << std::endl; + + CloseLogging(); } bool NoggitApplication::GetCommand(int index) diff --git a/src/noggit/project/ApplicationProject.h b/src/noggit/project/ApplicationProject.h index 1bb362e5..b66b9e4e 100755 --- a/src/noggit/project/ApplicationProject.h +++ b/src/noggit/project/ApplicationProject.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -251,8 +252,12 @@ namespace Noggit::Project ApplicationProjectReader project_reader{}; auto project = project_reader.readProject(project_path); - if(!project.has_value()) + if (!project.has_value()) + { + LogError << "loadProject() failed, Project is null" << std::endl; return {}; + } + project_reader.readPalettes(&project.value()); project_reader.readObjectSelectionGroups(&project.value()); diff --git a/src/noggit/project/ApplicationProjectReader.cpp b/src/noggit/project/ApplicationProjectReader.cpp index 5bc70e65..e608a95b 100755 --- a/src/noggit/project/ApplicationProjectReader.cpp +++ b/src/noggit/project/ApplicationProjectReader.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -15,7 +16,10 @@ namespace Noggit::Project { if (!std::filesystem::exists(project_path) || !std::filesystem::is_directory(project_path)) + { + LogError << "Failed to read project path : " << project_path << std::endl; return {}; + } for (const auto& entry: std::filesystem::directory_iterator(project_path)) { @@ -102,6 +106,7 @@ namespace Noggit::Project } } else { + LogError << "Project file is corrupted : " << project_path << std::endl; input_file.close(); return {}; } @@ -110,6 +115,7 @@ namespace Noggit::Project } } + LogError << "Failed to find a .noggitproj file in project path : " << project_path << std::endl; return {}; } void ApplicationProjectReader::readPalettes(NoggitProject* project) diff --git a/src/noggit/ui/windows/noggitWindow/NoggitWindow.cpp b/src/noggit/ui/windows/noggitWindow/NoggitWindow.cpp index 52af87a5..722ff481 100755 --- a/src/noggit/ui/windows/noggitWindow/NoggitWindow.cpp +++ b/src/noggit/ui/windows/noggitWindow/NoggitWindow.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -64,6 +65,8 @@ namespace Noggit::Ui::Windows setWindowTitle(QString::fromStdString(title.str())); setWindowIcon(QIcon(":/icon")); + Log << "Project version : " << Noggit::Project::ClientVersionFactory::MapToStringVersion(project->projectVersion).c_str() << std::endl; + if (project->projectVersion == Project::ProjectVersion::WOTLK) { OpenDBs(project->ClientData); diff --git a/src/noggit/ui/windows/projectCreation/NoggitProjectCreationDialog.cpp b/src/noggit/ui/windows/projectCreation/NoggitProjectCreationDialog.cpp index c3201150..3d0bcfe0 100755 --- a/src/noggit/ui/windows/projectCreation/NoggitProjectCreationDialog.cpp +++ b/src/noggit/ui/windows/projectCreation/NoggitProjectCreationDialog.cpp @@ -78,7 +78,7 @@ NoggitProjectCreationDialog::NoggitProjectCreationDialog(ProjectInformation& pro std::filesystem::path game_path(project_information.game_client_path); if (!std::filesystem::exists(game_path)) { - QMessageBox::critical(this, "Error", "Game client path does not exist."); + QMessageBox::critical(this, "Error", "Game client path does not exist. \nAvoid special characters."); return; } @@ -92,6 +92,12 @@ NoggitProjectCreationDialog::NoggitProjectCreationDialog(ProjectInformation& pro return; } + if (!std::filesystem::exists(project_path)) + { + QMessageBox::critical(this, "Error", "Project path does not exist. \nAvoid special characters."); + return; + } + project_information.game_client_version = ui->project_expansion->currentText().toStdString(); diff --git a/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.cpp b/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.cpp index a58254a9..51ea7af0 100755 --- a/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.cpp +++ b/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -87,7 +88,11 @@ NoggitProjectSelectionWindow::NoggitProjectSelectionWindow(Noggit::Application:: "*.noggitproj"); if (proj_file.isEmpty()) + { + QMessageBox::critical(this, "Error", "Failed to read project: project file is empty"); return; + } + std::filesystem::path filepath(proj_file.toStdString()); @@ -130,7 +135,10 @@ NoggitProjectSelectionWindow::NoggitProjectSelectionWindow(Noggit::Application:: auto selected_project = _load_project_component->loadProject(this); if (!selected_project) + { + LogError << "Selected Project is null, loading failed." << std::endl; return; + } Noggit::Project::CurrentProject::initialize(selected_project.get()); diff --git a/src/noggit/ui/windows/projectSelection/components/LoadProjectComponent.hpp b/src/noggit/ui/windows/projectSelection/components/LoadProjectComponent.hpp index 9828eb0a..35d77a58 100755 --- a/src/noggit/ui/windows/projectSelection/components/LoadProjectComponent.hpp +++ b/src/noggit/ui/windows/projectSelection/components/LoadProjectComponent.hpp @@ -3,6 +3,7 @@ #include #include +#include #include #include @@ -29,7 +30,11 @@ namespace Noggit::Ui::Component auto application_project_service = Noggit::Project::ApplicationProject(application_configuration); if (!QDir(project_path).exists()) + { + LogError << "Project path does not exist : " << project_path.toStdString() << std::endl; return {}; + } + Log << "Loading Project path : " << project_path.toStdString() << std::endl; // check if current filesystem is case sensitive QDir q_project_path{project_path}; @@ -46,6 +51,7 @@ namespace Noggit::Ui::Component } else { + LogError << "Failed to open file : " << file_1_path.toStdString() << std::endl; assert(false); return {}; } @@ -59,6 +65,7 @@ namespace Noggit::Ui::Component } else { + LogError << "Failed to open file : " << file_2_path.toStdString() << std::endl; assert(false); return {}; } @@ -77,6 +84,7 @@ namespace Noggit::Ui::Component } else { + LogError << "Failed to read file content : " << file_1_path.toStdString() << std::endl; assert(false); return {}; } @@ -160,6 +168,8 @@ namespace Noggit::Ui::Component //This to not be static, but its hard to remove if (project) Noggit::Application::NoggitApplication::instance()->setClientData(project->ClientData); + else + LogError << "Couldn't set client data : Project loading failed." << std::endl; return project; }