Change ProjectSettings to Singleton interface
Signed-off-by: nggieber <52797929+AMZN-nggieber@users.noreply.github.com>
This commit is contained in:
@@ -111,6 +111,14 @@ namespace O3DE::ProjectManager
|
||||
}
|
||||
}
|
||||
|
||||
m_settings = AZStd::make_unique<Settings>();
|
||||
AZ_Assert(m_settings, "Failed to create Settings");
|
||||
|
||||
if (!m_settings->IsInitialized())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
const AZ::CommandLine* commandLine = GetCommandLine();
|
||||
AZ_Assert(commandLine, "Failed to get command line");
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <AzFramework/Application/Application.h>
|
||||
#include <QCoreApplication>
|
||||
#include <PythonBindings.h>
|
||||
#include <Settings.h>
|
||||
#include <ProjectManagerWindow.h>
|
||||
#endif
|
||||
|
||||
@@ -36,6 +37,7 @@ namespace O3DE::ProjectManager
|
||||
bool InitLog(const char* logName);
|
||||
|
||||
AZStd::unique_ptr<PythonBindings> m_pythonBindings;
|
||||
AZStd::unique_ptr<Settings> m_settings;
|
||||
QSharedPointer<QCoreApplication> m_app;
|
||||
QSharedPointer<ProjectManagerWindow> m_mainWindow;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
#include <ExternalLinkDialog.h>
|
||||
#include <LinkWidget.h>
|
||||
#include <ProjectManagerSettings.h>
|
||||
#include <SettingsInterface.h>
|
||||
|
||||
#include <QDialogButtonBox>
|
||||
#include <QLabel>
|
||||
@@ -85,6 +85,7 @@ namespace O3DE::ProjectManager
|
||||
|
||||
void ExternalLinkDialog::SetSkipDialogSetting(bool state)
|
||||
{
|
||||
PMSettings::SetProjectManagerKey(PMSettings::GetExternalLinkWarningKey(), state);
|
||||
auto settings = SettingsInterface::Get();
|
||||
settings->Set(QString(settings->ExternalLinkWarningKey), state);
|
||||
}
|
||||
} // namespace O3DE::ProjectManager
|
||||
|
||||
@@ -8,9 +8,7 @@
|
||||
|
||||
#include <LinkWidget.h>
|
||||
#include <ExternalLinkDialog.h>
|
||||
#include <ProjectManagerSettings.h>
|
||||
|
||||
#include <AzCore/Settings/SettingsRegistry.h>
|
||||
#include <SettingsInterface.h>
|
||||
|
||||
#include <QDesktopServices>
|
||||
#include <QEvent>
|
||||
@@ -33,7 +31,8 @@ namespace O3DE::ProjectManager
|
||||
{
|
||||
// Check if user request not to be shown external link warning dialog
|
||||
bool skipDialog = false;
|
||||
PMSettings::GetProjectManagerKey(skipDialog, PMSettings::GetExternalLinkWarningKey());
|
||||
auto settings = SettingsInterface::Get();
|
||||
settings->Get(skipDialog, QString(settings->ExternalLinkWarningKey));
|
||||
|
||||
if (!skipDialog)
|
||||
{
|
||||
|
||||
@@ -9,9 +9,7 @@
|
||||
#include <ProjectBuilderController.h>
|
||||
#include <ProjectBuilderWorker.h>
|
||||
#include <ProjectButtonWidget.h>
|
||||
#include <ProjectManagerSettings.h>
|
||||
|
||||
#include <AzCore/Settings/SettingsRegistry.h>
|
||||
#include <SettingsInterface.h>
|
||||
|
||||
#include <QMessageBox>
|
||||
#include <QDesktopServices>
|
||||
@@ -30,7 +28,7 @@ namespace O3DE::ProjectManager
|
||||
m_worker->moveToThread(&m_workerThread);
|
||||
|
||||
// Remove key here in case Project Manager crashing while building that causes HandleResults to not be called
|
||||
PMSettings::SetProjectBuiltSuccessfully(m_projectInfo, false);
|
||||
SettingsInterface::Get()->SetProjectBuiltSuccessfully(m_projectInfo, false);
|
||||
|
||||
connect(&m_workerThread, &QThread::finished, m_worker, &ProjectBuilderWorker::deleteLater);
|
||||
connect(&m_workerThread, &QThread::started, m_worker, &ProjectBuilderWorker::BuildProject);
|
||||
@@ -114,7 +112,7 @@ namespace O3DE::ProjectManager
|
||||
emit NotifyBuildProject(m_projectInfo);
|
||||
}
|
||||
|
||||
PMSettings::SetProjectBuiltSuccessfully(m_projectInfo, false);
|
||||
SettingsInterface::Get()->SetProjectBuiltSuccessfully(m_projectInfo, false);
|
||||
|
||||
emit Done(false);
|
||||
return;
|
||||
@@ -123,7 +121,7 @@ namespace O3DE::ProjectManager
|
||||
{
|
||||
m_projectInfo.m_buildFailed = false;
|
||||
|
||||
PMSettings::SetProjectBuiltSuccessfully(m_projectInfo, true);
|
||||
SettingsInterface::Get()->SetProjectBuiltSuccessfully(m_projectInfo, true);
|
||||
}
|
||||
|
||||
emit Done(true);
|
||||
|
||||
@@ -1,248 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include <ProjectManagerSettings.h>
|
||||
|
||||
#include <AzCore/Settings/SettingsRegistryMergeUtils.h>
|
||||
#include <AzCore/IO/ByteContainerStream.h>
|
||||
#include <AzCore/Utils/Utils.h>
|
||||
|
||||
namespace O3DE::ProjectManager
|
||||
{
|
||||
namespace PMSettings
|
||||
{
|
||||
bool SaveProjectManagerSettings()
|
||||
{
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
AZ::SettingsRegistryMergeUtils::DumperSettings dumperSettings;
|
||||
dumperSettings.m_prettifyOutput = true;
|
||||
dumperSettings.m_jsonPointerPrefix = ProjectManagerKeyPrefix;
|
||||
|
||||
AZStd::string stringBuffer;
|
||||
AZ::IO::ByteContainerStream stringStream(&stringBuffer);
|
||||
if (!AZ::SettingsRegistryMergeUtils::DumpSettingsRegistryToStream(
|
||||
*settingsRegistry, ProjectManagerKeyPrefix, stringStream, dumperSettings))
|
||||
{
|
||||
AZ_Warning("ProjectManager", false, "Could not save Project Manager settings to stream");
|
||||
return false;
|
||||
}
|
||||
|
||||
AZ::IO::FixedMaxPath o3deUserPath = AZ::Utils::GetO3deManifestDirectory();
|
||||
o3deUserPath /= AZ::SettingsRegistryInterface::RegistryFolder;
|
||||
o3deUserPath /= "ProjectManager.setreg";
|
||||
|
||||
bool saved = false;
|
||||
constexpr auto configurationMode =
|
||||
AZ::IO::SystemFile::SF_OPEN_CREATE | AZ::IO::SystemFile::SF_OPEN_CREATE_PATH | AZ::IO::SystemFile::SF_OPEN_WRITE_ONLY;
|
||||
|
||||
AZ::IO::SystemFile outputFile;
|
||||
if (outputFile.Open(o3deUserPath.c_str(), configurationMode))
|
||||
{
|
||||
saved = outputFile.Write(stringBuffer.data(), stringBuffer.size()) == stringBuffer.size();
|
||||
}
|
||||
|
||||
AZ_Warning("ProjectManager", saved, "Unable to save Project Manager registry file to path: %s", o3deUserPath.c_str());
|
||||
return saved;
|
||||
}
|
||||
|
||||
bool GetProjectManagerKey(QString& result, const QString& settingsKey)
|
||||
{
|
||||
bool success = false;
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
if (settingsRegistry)
|
||||
{
|
||||
AZStd::string settingsValue;
|
||||
success = settingsRegistry->Get(settingsValue, settingsKey.toStdString().c_str());
|
||||
|
||||
result = settingsValue.c_str();
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
bool GetProjectManagerKey(bool& result, const QString& settingsKey)
|
||||
{
|
||||
bool success = false;
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
if (settingsRegistry)
|
||||
{
|
||||
success = settingsRegistry->Get(result, settingsKey.toStdString().c_str());
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
bool SetProjectManagerKey(const QString& settingsKey, const QString& settingsValue, bool saveToDisk)
|
||||
{
|
||||
bool success = false;
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
if (settingsRegistry)
|
||||
{
|
||||
success = settingsRegistry->Set(settingsKey.toStdString().c_str(), settingsValue.toStdString().c_str());
|
||||
|
||||
if (saveToDisk)
|
||||
{
|
||||
SaveProjectManagerSettings();
|
||||
}
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
bool SetProjectManagerKey(const QString& settingsKey, bool settingsValue, bool saveToDisk)
|
||||
{
|
||||
bool success = false;
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
if (settingsRegistry)
|
||||
{
|
||||
success = settingsRegistry->Set(settingsKey.toStdString().c_str(), settingsValue);
|
||||
|
||||
if (saveToDisk)
|
||||
{
|
||||
SaveProjectManagerSettings();
|
||||
}
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
bool RemoveProjectManagerKey(const QString& settingsKey, bool saveToDisk)
|
||||
{
|
||||
bool success = false;
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
if (settingsRegistry)
|
||||
{
|
||||
success = settingsRegistry->Remove(settingsKey.toStdString().c_str());
|
||||
|
||||
if (saveToDisk)
|
||||
{
|
||||
SaveProjectManagerSettings();
|
||||
}
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
bool CopyProjectManagerKeyString(const QString& settingsKeyOrig, const QString& settingsKeyDest, bool removeOrig, bool saveToDisk)
|
||||
{
|
||||
bool success = false;
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
if (settingsRegistry)
|
||||
{
|
||||
AZStd::string settingsValue;
|
||||
success = settingsRegistry->Get(settingsValue, settingsKeyOrig.toStdString().c_str());
|
||||
|
||||
if (success)
|
||||
{
|
||||
success = settingsRegistry->Set(settingsKeyDest.toStdString().c_str(), settingsValue);
|
||||
if (success)
|
||||
{
|
||||
if (removeOrig)
|
||||
{
|
||||
success = settingsRegistry->Remove(settingsKeyOrig.toStdString().c_str());
|
||||
}
|
||||
|
||||
if (saveToDisk)
|
||||
{
|
||||
SaveProjectManagerSettings();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
QString GetProjectKey(const ProjectInfo& projectInfo)
|
||||
{
|
||||
return QString("%1/Projects/%2/%3").arg(ProjectManagerKeyPrefix, projectInfo.m_id, projectInfo.m_projectName);
|
||||
}
|
||||
|
||||
QString GetExternalLinkWarningKey()
|
||||
{
|
||||
return QString("%1/SkipExternalLinkWarning").arg(ProjectManagerKeyPrefix);
|
||||
}
|
||||
|
||||
QString GetProjectsBuiltSuccessfullyKey()
|
||||
{
|
||||
return QString("%1/SuccessfulBuildPaths").arg(ProjectManagerKeyPrefix);
|
||||
}
|
||||
|
||||
bool GetBuiltSuccessfullyPaths(AZStd::set<AZStd::string>& result)
|
||||
{
|
||||
bool success = false;
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
if (settingsRegistry)
|
||||
{
|
||||
QString builtKey = GetProjectsBuiltSuccessfullyKey();
|
||||
success = settingsRegistry->GetObject<AZStd::set<AZStd::string>>(result, builtKey.toStdString().c_str());
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
bool GetProjectBuiltSuccessfully(bool& result, const ProjectInfo& projectInfo)
|
||||
{
|
||||
AZStd::set<AZStd::string> builtPathsResult;
|
||||
bool success = GetBuiltSuccessfullyPaths(builtPathsResult);
|
||||
if (success)
|
||||
{
|
||||
// Check if buildPath is listed as successfully built
|
||||
AZStd::string projectPath = projectInfo.m_path.toStdString().c_str();
|
||||
if (builtPathsResult.contains(projectPath))
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
// No project built statuses known
|
||||
else
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
bool SetProjectBuiltSuccessfully(const ProjectInfo& projectInfo, bool successfullyBuilt, bool saveToDisk)
|
||||
{
|
||||
AZStd::set<AZStd::string> builtPathsResult;
|
||||
bool success = GetBuiltSuccessfullyPaths(builtPathsResult);
|
||||
|
||||
AZStd::string projectPath = projectInfo.m_path.toStdString().c_str();
|
||||
if (successfullyBuilt)
|
||||
{
|
||||
//Add successfully built path to set
|
||||
builtPathsResult.insert(projectPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Remove unsuccessfully built path from set
|
||||
builtPathsResult.erase(projectPath);
|
||||
}
|
||||
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
if (settingsRegistry)
|
||||
{
|
||||
QString builtKey = GetProjectsBuiltSuccessfullyKey();
|
||||
success = settingsRegistry->SetObject<AZStd::set<AZStd::string>>(builtKey.toStdString().c_str(), builtPathsResult);
|
||||
|
||||
if (saveToDisk)
|
||||
{
|
||||
SaveProjectManagerSettings();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
success = false;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
} // namespace PMSettings
|
||||
} // namespace O3DE::ProjectManager
|
||||
@@ -1,37 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#if !defined(Q_MOC_RUN)
|
||||
#include <QStringList>
|
||||
#include <ProjectInfo.h>
|
||||
#endif
|
||||
|
||||
namespace O3DE::ProjectManager
|
||||
{
|
||||
namespace PMSettings
|
||||
{
|
||||
static constexpr char ProjectManagerKeyPrefix[] = "/O3DE/ProjectManager";
|
||||
|
||||
bool SaveProjectManagerSettings();
|
||||
bool GetProjectManagerKey(QString& result, const QString& settingsKey);
|
||||
bool GetProjectManagerKey(bool& result, const QString& settingsKey);
|
||||
bool SetProjectManagerKey(const QString& settingsKey, const QString& settingsValue, bool saveToDisk = true);
|
||||
bool SetProjectManagerKey(const QString& settingsKey, bool settingsValue, bool saveToDisk = true);
|
||||
bool RemoveProjectManagerKey(const QString& settingsKey, bool saveToDisk = true);
|
||||
bool CopyProjectManagerKeyString(
|
||||
const QString& settingsKeyOrig, const QString& settingsKeyDest, bool removeOrig = false, bool saveToDisk = true);
|
||||
|
||||
QString GetProjectKey(const ProjectInfo& projectInfo);
|
||||
QString GetExternalLinkWarningKey();
|
||||
|
||||
bool GetProjectBuiltSuccessfully(bool& result, const ProjectInfo& projectInfo);
|
||||
bool SetProjectBuiltSuccessfully(const ProjectInfo& projectInfo, bool successfullyBuilt, bool saveToDisk = true);
|
||||
} // namespace PMSettings
|
||||
} // namespace O3DE::ProjectManager
|
||||
@@ -14,7 +14,7 @@
|
||||
#include <ProjectUtils.h>
|
||||
#include <ProjectBuilderController.h>
|
||||
#include <ScreensCtrl.h>
|
||||
#include <ProjectManagerSettings.h>
|
||||
#include <SettingsInterface.h>
|
||||
|
||||
#include <AzQtComponents/Components/FlowLayout.h>
|
||||
#include <AzCore/Platform.h>
|
||||
@@ -292,7 +292,7 @@ namespace O3DE::ProjectManager
|
||||
if (currentButton)
|
||||
{
|
||||
bool projectBuiltSuccessfully = false;
|
||||
PMSettings::GetProjectBuiltSuccessfully(projectBuiltSuccessfully, project);
|
||||
SettingsInterface::Get()->GetProjectBuiltSuccessfully(projectBuiltSuccessfully, project);
|
||||
|
||||
if (!projectBuiltSuccessfully)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,201 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include <Settings.h>
|
||||
|
||||
#include <AzCore/Settings/SettingsRegistryMergeUtils.h>
|
||||
#include <AzCore/IO/ByteContainerStream.h>
|
||||
#include <AzCore/Utils/Utils.h>
|
||||
|
||||
namespace O3DE::ProjectManager
|
||||
{
|
||||
Settings::Settings(bool saveToDisk)
|
||||
: m_saveToDisk(saveToDisk)
|
||||
{
|
||||
m_settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
|
||||
AZ_Assert(m_settingsRegistry, "Failed to create Settings");
|
||||
}
|
||||
|
||||
bool Settings::IsInitialized()
|
||||
{
|
||||
// Settings intialized correctly if it successfuly got the SettingsRegistry
|
||||
return m_settingsRegistry;
|
||||
}
|
||||
|
||||
bool Settings::Save()
|
||||
{
|
||||
AZ::SettingsRegistryMergeUtils::DumperSettings dumperSettings;
|
||||
dumperSettings.m_prettifyOutput = true;
|
||||
dumperSettings.m_jsonPointerPrefix = ProjectManagerKeyPrefix;
|
||||
|
||||
AZStd::string stringBuffer;
|
||||
AZ::IO::ByteContainerStream stringStream(&stringBuffer);
|
||||
if (!AZ::SettingsRegistryMergeUtils::DumpSettingsRegistryToStream(
|
||||
*m_settingsRegistry, ProjectManagerKeyPrefix, stringStream, dumperSettings))
|
||||
{
|
||||
AZ_Warning("ProjectManager", false, "Could not save Project Manager settings to stream");
|
||||
return false;
|
||||
}
|
||||
|
||||
AZ::IO::FixedMaxPath o3deUserPath = AZ::Utils::GetO3deManifestDirectory();
|
||||
o3deUserPath /= AZ::SettingsRegistryInterface::RegistryFolder;
|
||||
o3deUserPath /= "ProjectManager.setreg";
|
||||
|
||||
bool saved = false;
|
||||
constexpr auto configurationMode =
|
||||
AZ::IO::SystemFile::SF_OPEN_CREATE | AZ::IO::SystemFile::SF_OPEN_CREATE_PATH | AZ::IO::SystemFile::SF_OPEN_WRITE_ONLY;
|
||||
|
||||
AZ::IO::SystemFile outputFile;
|
||||
if (outputFile.Open(o3deUserPath.c_str(), configurationMode))
|
||||
{
|
||||
saved = outputFile.Write(stringBuffer.data(), stringBuffer.size()) == stringBuffer.size();
|
||||
}
|
||||
|
||||
AZ_Warning("ProjectManager", saved, "Unable to save Project Manager registry file to path: %s", o3deUserPath.c_str());
|
||||
return saved;
|
||||
}
|
||||
|
||||
bool Settings::Get(QString& result, const QString& settingsKey)
|
||||
{
|
||||
bool success = false;
|
||||
|
||||
AZStd::string settingsValue;
|
||||
success = m_settingsRegistry->Get(settingsValue, settingsKey.toStdString().c_str());
|
||||
|
||||
result = settingsValue.c_str();
|
||||
return success;
|
||||
}
|
||||
|
||||
bool Settings::Get(bool& result, const QString& settingsKey)
|
||||
{
|
||||
return m_settingsRegistry->Get(result, settingsKey.toStdString().c_str());
|
||||
}
|
||||
|
||||
bool Settings::Set(const QString& settingsKey, const QString& settingsValue)
|
||||
{
|
||||
bool success = false;
|
||||
|
||||
success = m_settingsRegistry->Set(settingsKey.toStdString().c_str(), settingsValue.toStdString().c_str());
|
||||
if (m_saveToDisk)
|
||||
{
|
||||
Save();
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
bool Settings::Set(const QString& settingsKey, bool settingsValue)
|
||||
{
|
||||
bool success = false;
|
||||
|
||||
success = m_settingsRegistry->Set(settingsKey.toStdString().c_str(), settingsValue);
|
||||
if (m_saveToDisk)
|
||||
{
|
||||
Save();
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
bool Settings::Remove(const QString& settingsKey)
|
||||
{
|
||||
bool success = false;
|
||||
|
||||
success = m_settingsRegistry->Remove(settingsKey.toStdString().c_str());
|
||||
if (m_saveToDisk)
|
||||
{
|
||||
Save();
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
bool Settings::Copy(const QString& settingsKeyOrig, const QString& settingsKeyDest, bool removeOrig)
|
||||
{
|
||||
bool success = false;
|
||||
AZStd::string settingsValue;
|
||||
|
||||
success = m_settingsRegistry->Get(settingsValue, settingsKeyOrig.toStdString().c_str());
|
||||
|
||||
if (success)
|
||||
{
|
||||
success = m_settingsRegistry->Set(settingsKeyDest.toStdString().c_str(), settingsValue);
|
||||
if (success)
|
||||
{
|
||||
if (removeOrig)
|
||||
{
|
||||
success = m_settingsRegistry->Remove(settingsKeyOrig.toStdString().c_str());
|
||||
}
|
||||
if (m_saveToDisk)
|
||||
{
|
||||
Save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
QString Settings::GetProjectKey(const ProjectInfo& projectInfo)
|
||||
{
|
||||
return QString("%1/Projects/%2/%3").arg(ProjectManagerKeyPrefix, projectInfo.m_id, projectInfo.m_projectName);
|
||||
}
|
||||
|
||||
bool Settings::GetBuiltSuccessfullyPaths(AZStd::set<AZStd::string>& result)
|
||||
{
|
||||
return m_settingsRegistry->GetObject<AZStd::set<AZStd::string>>(result, ProjectsBuiltSuccessfullyKey);
|
||||
}
|
||||
|
||||
bool Settings::GetProjectBuiltSuccessfully(bool& result, const ProjectInfo& projectInfo)
|
||||
{
|
||||
AZStd::set<AZStd::string> builtPathsResult;
|
||||
bool success = GetBuiltSuccessfullyPaths(builtPathsResult);
|
||||
|
||||
// Check if buildPath is listed as successfully built
|
||||
AZStd::string projectPath = projectInfo.m_path.toStdString().c_str();
|
||||
if (builtPathsResult.contains(projectPath))
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
// No project built statuses known
|
||||
else
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
bool Settings::SetProjectBuiltSuccessfully(const ProjectInfo& projectInfo, bool successfullyBuilt)
|
||||
{
|
||||
AZStd::set<AZStd::string> builtPathsResult;
|
||||
bool success = GetBuiltSuccessfullyPaths(builtPathsResult);
|
||||
|
||||
AZStd::string projectPath = projectInfo.m_path.toStdString().c_str();
|
||||
if (successfullyBuilt)
|
||||
{
|
||||
//Add successfully built path to set
|
||||
builtPathsResult.insert(projectPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Remove unsuccessfully built path from set
|
||||
builtPathsResult.erase(projectPath);
|
||||
}
|
||||
|
||||
success = m_settingsRegistry->SetObject<AZStd::set<AZStd::string>>(ProjectsBuiltSuccessfullyKey, builtPathsResult);
|
||||
if (m_saveToDisk)
|
||||
{
|
||||
Save();
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
} // namespace O3DE::ProjectManager
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <SettingsInterface.h>
|
||||
|
||||
#include <AzCore/std/containers/set.h>
|
||||
|
||||
namespace AZ
|
||||
{
|
||||
class SettingsRegistryInterface;
|
||||
}
|
||||
|
||||
namespace O3DE::ProjectManager
|
||||
{
|
||||
class Settings
|
||||
: public SettingsInterface::Registrar
|
||||
{
|
||||
public:
|
||||
Settings(bool saveToDisk = true);
|
||||
|
||||
bool IsInitialized() override;
|
||||
|
||||
bool Get(QString& result, const QString& settingsKey) override;
|
||||
bool Get(bool& result, const QString& settingsKey) override;
|
||||
bool Set(const QString& settingsKey, const QString& settingsValue) override;
|
||||
bool Set(const QString& settingsKey, bool settingsValue) override;
|
||||
bool Remove(const QString& settingsKey) override;
|
||||
bool Copy(const QString& settingsKeyOrig, const QString& settingsKeyDest, bool removeOrig = false) override;
|
||||
|
||||
QString GetProjectKey(const ProjectInfo& projectInfo) override;
|
||||
|
||||
bool GetProjectBuiltSuccessfully(bool& result, const ProjectInfo& projectInfo) override;
|
||||
bool SetProjectBuiltSuccessfully(const ProjectInfo& projectInfo, bool successfullyBuilt) override;
|
||||
|
||||
private:
|
||||
bool Save();
|
||||
|
||||
bool GetBuiltSuccessfullyPaths(AZStd::set<AZStd::string>& result);
|
||||
|
||||
bool m_saveToDisk;
|
||||
AZ::SettingsRegistryInterface* m_settingsRegistry = nullptr;
|
||||
};
|
||||
} // namespace O3DE::ProjectManager
|
||||
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <ProjectInfo.h>
|
||||
|
||||
#include <AzCore/EBus/EBus.h>
|
||||
#include <AzCore/Interface/Interface.h>
|
||||
|
||||
namespace O3DE::ProjectManager
|
||||
{
|
||||
//! Interface used to interact with the settings functions
|
||||
class ISettings
|
||||
{
|
||||
public:
|
||||
AZ_RTTI(O3DE::ProjectManager::ISettings, "{95D87D95-0E04-462F-8B0B-ED15C0A9F090}");
|
||||
AZ_DISABLE_COPY_MOVE(ISettings);
|
||||
|
||||
static constexpr char ProjectManagerKeyPrefix[] = "/O3DE/ProjectManager";
|
||||
static constexpr char ExternalLinkWarningKey[] = "/O3DE/ProjectManager/SkipExternalLinkWarning";
|
||||
static constexpr char ProjectsBuiltSuccessfullyKey[] = "/O3DE/ProjectManager/SkipExternalLinkWarning";
|
||||
|
||||
ISettings() = default;
|
||||
virtual ~ISettings() = default;
|
||||
|
||||
/**
|
||||
* This checks if Settings is in a usable state
|
||||
* @return true Settings is ready to be used, false otherwise
|
||||
*/
|
||||
virtual bool IsInitialized() = 0;
|
||||
|
||||
/**
|
||||
* Get info about a Gem.
|
||||
* @param path The absolute path to the Gem
|
||||
* @param projectPath (Optional) The absolute path to the Gem project
|
||||
* @return an outcome with GemInfo on success
|
||||
*/
|
||||
virtual bool Get(QString& result, const QString& settingsKey) = 0;
|
||||
virtual bool Get(bool& result, const QString& settingsKey) = 0;
|
||||
virtual bool Set(const QString& settingsKey, const QString& settingsValue) = 0;
|
||||
virtual bool Set(const QString& settingsKey, bool settingsValue) = 0;
|
||||
virtual bool Remove(const QString& settingsKey) = 0;
|
||||
virtual bool Copy(const QString& settingsKeyOrig, const QString& settingsKeyDest, bool removeOrig = false) = 0;
|
||||
|
||||
virtual QString GetProjectKey(const ProjectInfo& projectInfo) = 0;
|
||||
|
||||
virtual bool GetProjectBuiltSuccessfully(bool& result, const ProjectInfo& projectInfo) = 0;
|
||||
virtual bool SetProjectBuiltSuccessfully(const ProjectInfo& projectInfo, bool successfullyBuilt) = 0;
|
||||
};
|
||||
|
||||
using SettingsInterface = AZ::Interface<ISettings>;
|
||||
} // namespace O3DE::ProjectManager
|
||||
@@ -16,7 +16,7 @@
|
||||
#include <UpdateProjectSettingsScreen.h>
|
||||
#include <ProjectUtils.h>
|
||||
#include <DownloadController.h>
|
||||
#include <ProjectManagerSettings.h>
|
||||
#include <SettingsInterface.h>
|
||||
|
||||
#include <QDialogButtonBox>
|
||||
#include <QMessageBox>
|
||||
@@ -307,8 +307,9 @@ namespace O3DE::ProjectManager
|
||||
{
|
||||
// Remove project build successfully paths for both old and new project names
|
||||
// because a full rebuild is required when moving projects
|
||||
PMSettings::SetProjectBuiltSuccessfully(m_projectInfo, false);
|
||||
PMSettings::SetProjectBuiltSuccessfully(newProjectSettings, false);
|
||||
auto settings = SettingsInterface::Get();
|
||||
settings->SetProjectBuiltSuccessfully(m_projectInfo, false);
|
||||
settings->SetProjectBuiltSuccessfully(newProjectSettings, false);
|
||||
}
|
||||
|
||||
if (!newProjectSettings.m_newPreviewImagePath.isEmpty())
|
||||
|
||||
Reference in New Issue
Block a user