update reporting and logging and make bug fixes

Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com>
This commit is contained in:
chcurran
2021-09-15 17:03:16 -07:00
parent 296fca722e
commit 9196e98ee6
13 changed files with 122 additions and 106 deletions
@@ -519,7 +519,7 @@ namespace ScriptCanvasEditor
if (validationResults.HasErrors())
{
AZ::Interface<IUpgradeRequests>::Get()->GraphNeedsManualUpgrade(sm->m_asset.GetId());
sm->MarkError("Failed to Parse");
for (auto& err : validationResults.GetEvents())
{
@@ -735,7 +735,7 @@ namespace ScriptCanvasEditor
{
AZ::SystemTickBus::Handler::BusDisconnect();
OnComplete(exitStatus);
OnComplete(m_error.empty() ? exitStatus : IState::ExitStatus::Skipped);
}
}
@@ -215,20 +215,6 @@ namespace ScriptCanvasEditor
using EditorLoggingComponentNotificationBus = AZ::EBus<EditorLoggingComponentNotifications>;
class IUpgradeRequests
{
public:
AZ_TYPE_INFO(IUpgradeRequests, "{D25318F2-4DDA-4E76-98CB-6D561BB6234D}");
using AssetList = AZStd::list<AZ::Data::AssetInfo>;
virtual void ClearGraphsThatNeedUpgrade() = 0;
virtual void GraphNeedsManualUpgrade(const AZ::Data::AssetId&) = 0;
virtual const AZStd::vector<AZ::Data::AssetId>& GetGraphsThatNeedManualUpgrade() const = 0;
virtual bool IsUpgrading() = 0;
virtual void SetIsUpgrading(bool isUpgrading) = 0;
};
class UpgradeNotifications
: public AZ::EBusTraits
{
@@ -133,18 +133,23 @@ namespace ScriptCanvasEditor
bool GetVerbose() const;
const AZStd::string GetError() const { return m_error; }
void SetVerbose(bool isVerbose);
const AZStd::string& GetDebugPrefix() const;
void SetDebugPrefix(AZStd::string_view);
void MarkError(AZStd::string_view error) { m_error = error; }
AZStd::shared_ptr<IState> m_currentState = nullptr;
AZStd::vector<AZStd::shared_ptr<IState>> m_states;
private:
bool m_isVerbose = true;
AZStd::string m_debugPrefix;
AZStd::string m_error;
};
//! This state machine will collect and share a variety of data from the EditorGraph
@@ -3435,18 +3435,18 @@ namespace ScriptCanvasEditor
void MainWindow::RunUpgradeTool()
{
using namespace VersionExplorer;
auto versionExplorer = aznew VersionExplorer::Controller(this);
versionExplorer->exec();
// update and fix this
// Manual correction
// size_t assetsThatNeedManualInspection = AZ::Interface<IUpgradeRequests>::Get()->GetGraphsThatNeedManualUpgrade().size();
// // If there are graphs that need manual correction, show the helper
// if (assetsThatNeedManualInspection > 0)
// {
// UpgradeHelper* upgradeHelper = new UpgradeHelper(this);
// upgradeHelper->show();
// }
const ModificationResults* result = nullptr;
ModelRequestsBus::BroadcastResult(result, &ModelRequestsTraits::GetResults);
if (result && !result->m_failures.empty())
{
// If there are graphs that need manual correction, show the helper
UpgradeHelper* upgradeHelper = new UpgradeHelper(this);
upgradeHelper->show();
}
delete versionExplorer;
}
@@ -58,6 +58,7 @@ namespace ScriptCanvasEditor
m_view->progressBar->setValue(0);
m_view->progressBar->setVisible(false);
UpgradeNotificationsBus::Handler::BusConnect();
ModelNotificationsBus::Handler::BusConnect();
}
@@ -78,8 +79,8 @@ namespace ScriptCanvasEditor
for (auto& entry : *logs)
{
auto line = "\n" + entry;
textCursor.insertText(line.c_str());
textCursor.insertText("\n");
textCursor.insertText(entry.c_str());
}
scrollBar->setValue(scrollBar->maximum());
@@ -253,6 +254,7 @@ namespace ScriptCanvasEditor
m_view->progressBar->setVisible(true);
++m_handledAssetCount;
m_view->progressBar->setValue(m_handledAssetCount);
AddLogEntries();
}
void Controller::OnGraphUpgradeComplete(AZ::Data::Asset<AZ::Data::AssetData>& asset, bool skipped)
@@ -408,7 +410,7 @@ namespace ScriptCanvasEditor
void Controller::OnUpgradeBegin
( const ModifyConfiguration& config
, [[maybe_unused]] const AZStd::vector<AZ::Data::AssetInfo>& assets)
, [[maybe_unused]] const WorkingAssets& assets)
{
for (int row = 0; row < m_view->tableWidget->rowCount(); ++row)
{
@@ -447,6 +449,7 @@ namespace ScriptCanvasEditor
, result.m_failures.size()));
m_view->spinner->SetText(spinnerText);
SetSpinnerIsBusy(false);
AddLogEntries();
}
void Controller::OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result)
@@ -472,11 +475,12 @@ namespace ScriptCanvasEditor
m_view->progressBar->setVisible(true);
++m_handledAssetCount;
m_view->progressBar->setValue(m_handledAssetCount);
AddLogEntries();
}
void Controller::OnUpgradeDependencySortBegin
( [[maybe_unused]] const ModifyConfiguration& config
, const AZStd::vector<AZ::Data::AssetInfo>& assets)
, const WorkingAssets& assets)
{
m_handledAssetCount = 0;
m_view->progressBar->setVisible(true);
@@ -502,7 +506,7 @@ namespace ScriptCanvasEditor
void Controller::OnUpgradeDependencySortEnd
( [[maybe_unused]] const ModifyConfiguration& config
, const AZStd::vector<AZ::Data::AssetInfo>& assets
, const WorkingAssets& assets
, [[maybe_unused]] const AZStd::vector<size_t>& sortedOrder)
{
m_handledAssetCount = 0;
@@ -522,6 +526,7 @@ namespace ScriptCanvasEditor
QString spinnerText = QStringLiteral("Upgrade in progress - gathering dependencies is complete");
m_view->spinner->SetText(spinnerText);
SetSpinnerIsBusy(false);
AddLogEntries();
}
void Controller::SetRowBusy(int index)
@@ -50,7 +50,7 @@ namespace ScriptCanvasEditor
AZ_CLASS_ALLOCATOR(Controller, AZ::SystemAllocator, 0);
explicit Controller(QWidget* parent = nullptr);
private:
static constexpr int ColumnAsset = 0;
static constexpr int ColumnAction = 1;
@@ -61,7 +61,6 @@ namespace ScriptCanvasEditor
int m_handledAssetCount = 0;
void AddLogEntries();
void OnButtonPressClose();
void OnButtonPressScan();
void OnButtonPressUpgrade();
@@ -78,15 +77,13 @@ namespace ScriptCanvasEditor
void OnScannedGraphResult(const AZ::Data::AssetInfo& info);
// for single operation UI updates, just check the assets size, or note it on the request
void OnUpgradeBegin(const ModifyConfiguration& config, const AZStd::vector<AZ::Data::AssetInfo>& assets) override;
void OnUpgradeBegin(const ModifyConfiguration& config, const WorkingAssets& assets) override;
void OnUpgradeComplete(const ModificationResults& results) override;
void OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) override;
void OnUpgradeDependencySortBegin
( const ModifyConfiguration& config
, const AZStd::vector<AZ::Data::AssetInfo>& assets) override;
void OnUpgradeDependencySortBegin(const ModifyConfiguration& config, const WorkingAssets& assets) override;
void OnUpgradeDependencySortEnd
( const ModifyConfiguration& config
, const AZStd::vector<AZ::Data::AssetInfo>& assets
, const WorkingAssets& assets
, const AZStd::vector<size_t>& sortedOrder) override;
void OnUpgradeModificationBegin(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info) override;
void OnUpgradeModificationEnd(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info, ModificationResult result) override;
@@ -61,10 +61,16 @@ namespace ScriptCanvasEditor
ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false;
}
const ModificationResults* Model::GetResults()
{
return !IsWorking() ? &m_modResults : nullptr;
}
void Model::Idle()
{
m_state = State::Idle;
m_keepEditorAlive.reset();
m_log.Deactivate();
}
bool Model::IsReadyToModify() const
@@ -95,7 +101,9 @@ namespace ScriptCanvasEditor
return;
}
m_modResults = {};
m_state = State::Modifying;
m_log.Activate();
m_keepEditorAlive = AZStd::make_unique<EditorKeepAlive>();
auto results = m_scanner->TakeResult();
m_modifier = AZStd::make_unique<Modifier>(modification, AZStd::move(results.m_unfiltered), [this](){ OnModificationComplete(); });
@@ -124,6 +132,7 @@ namespace ScriptCanvasEditor
}
m_state = State::Scanning;
m_log.Activate();
m_keepEditorAlive = AZStd::make_unique<EditorKeepAlive>();
m_scanner = AZStd::make_unique<Scanner>(config, [this](){ OnScanComplete(); });
}
@@ -43,6 +43,8 @@ namespace ScriptCanvasEditor
Model();
const ModificationResults* GetResults() override;
void Modify(const ModifyConfiguration& modification) override;
void Scan(const ScanConfiguration& config) override;
@@ -64,6 +66,8 @@ namespace ScriptCanvasEditor
AZStd::unique_ptr<ScriptCanvas::Grammar::SettingsCache> m_settingsCache;
AZStd::unique_ptr<EditorKeepAlive> m_keepEditorAlive;
ModificationResults m_modResults;
void CacheSettings();
void Idle();
bool IsReadyToModify() const;
@@ -14,6 +14,14 @@ namespace ScriptCanvasEditor
{
namespace VersionExplorer
{
struct WorkingAsset
{
AZ::Data::Asset<AZ::Data::AssetData> asset;
AZ::Data::AssetInfo info;
};
using WorkingAssets = AZStd::vector<WorkingAsset>;
struct ModifyConfiguration
{
AZStd::function<void(AZ::Data::Asset<AZ::Data::AssetData>)> modification;
@@ -30,13 +38,11 @@ namespace ScriptCanvasEditor
AZStd::string errorMessage;
};
class ModificationNotificationsTraits
: public AZ::EBusTraits
struct ModificationResults
{
public:
virtual void ModificationComplete(const ModificationResult& result) = 0;
AZStd::vector<AZ::Data::AssetInfo> m_successes;
AZStd::vector<ModificationResult> m_failures;
};
using ModificationNotificationsBus = AZ::EBus<ModificationNotificationsTraits>;
struct ScanConfiguration
{
@@ -44,25 +50,10 @@ namespace ScriptCanvasEditor
bool reportFilteredGraphs = false;
};
class ModelRequestsTraits
: public AZ::EBusTraits
{
public:
virtual void Modify(const ModifyConfiguration& modification) = 0;
virtual void Scan(const ScanConfiguration& filter) = 0;
};
using ModelRequestsBus = AZ::EBus<ModelRequestsTraits>;
struct ModificationResults
{
AZStd::vector<AZ::Data::AssetInfo> m_successes;
AZStd::vector<ModificationResult> m_failures;
};
struct ScanResult
{
AZStd::vector<AZ::Data::AssetInfo> m_catalogAssets;
AZStd::vector<AZ::Data::AssetInfo> m_unfiltered;
WorkingAssets m_unfiltered;
AZStd::vector<AZ::Data::AssetInfo> m_filteredAssets;
AZStd::vector<AZ::Data::AssetInfo> m_loadErrors;
};
@@ -73,6 +64,24 @@ namespace ScriptCanvasEditor
Success
};
class ModificationNotificationsTraits
: public AZ::EBusTraits
{
public:
virtual void ModificationComplete(const ModificationResult& result) = 0;
};
using ModificationNotificationsBus = AZ::EBus<ModificationNotificationsTraits>;
class ModelRequestsTraits
: public AZ::EBusTraits
{
public:
virtual const ModificationResults* GetResults() = 0;
virtual void Modify(const ModifyConfiguration& modification) = 0;
virtual void Scan(const ScanConfiguration& filter) = 0;
};
using ModelRequestsBus = AZ::EBus<ModelRequestsTraits>;
class ModelNotificationsTraits
: public AZ::EBusTraits
{
@@ -83,15 +92,13 @@ namespace ScriptCanvasEditor
virtual void OnScanLoadFailure(const AZ::Data::AssetInfo& info) = 0;
virtual void OnScanUnFilteredGraph(const AZ::Data::AssetInfo& info) = 0;
virtual void OnUpgradeBegin(const ModifyConfiguration& config, const AZStd::vector<AZ::Data::AssetInfo>& assets) = 0;
virtual void OnUpgradeBegin(const ModifyConfiguration& config, const WorkingAssets& assets) = 0;
virtual void OnUpgradeComplete(const ModificationResults& results) = 0;
virtual void OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) = 0;
virtual void OnUpgradeDependencySortBegin
( const ModifyConfiguration& config
, const AZStd::vector<AZ::Data::AssetInfo>& assets) = 0;
virtual void OnUpgradeDependencySortBegin(const ModifyConfiguration& config, const WorkingAssets& assets) = 0;
virtual void OnUpgradeDependencySortEnd
( const ModifyConfiguration& config
, const AZStd::vector<AZ::Data::AssetInfo>& assets
, const WorkingAssets& assets
, const AZStd::vector<size_t>& sortedOrder) = 0;
virtual void OnUpgradeModificationBegin(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info) = 0;
virtual void OnUpgradeModificationEnd(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info, ModificationResult result) = 0;
@@ -23,7 +23,7 @@ namespace ScriptCanvasEditor
{
Modifier::Modifier
( const ModifyConfiguration& modification
, AZStd::vector<AZ::Data::AssetInfo>&& assets
, WorkingAssets&& assets
, AZStd::function<void()> onComplete)
: m_state(State::GatheringDependencies)
, m_config(modification)
@@ -38,8 +38,8 @@ namespace ScriptCanvasEditor
const AZ::Data::AssetInfo& Modifier::GetCurrentAsset() const
{
return m_state == State::GatheringDependencies
? m_assets[m_assetIndex]
: m_assets[m_dependencyOrderedAssetIndicies[m_assetIndex]];
? m_assets[m_assetIndex].info
: m_assets[m_dependencyOrderedAssetIndicies[m_assetIndex]].info;
}
AZStd::unordered_set<size_t>& Modifier::GetOrCreateDependencyIndexSet()
@@ -183,6 +183,7 @@ namespace ScriptCanvasEditor
{
ModelNotificationsBus::Broadcast
( &ModelNotificationsTraits::OnUpgradeModificationEnd, m_config, GetCurrentAsset(), m_result);
ModificationNotificationsBus::Handler::BusDisconnect();
m_modifyState = ModifyState::Idle;
++m_assetIndex;
m_result = {};
@@ -271,7 +272,7 @@ namespace ScriptCanvasEditor
for (size_t index = 0; index != m_assets.size(); ++index)
{
m_assetInfoIndexById.insert({ m_assets[index].m_assetId.m_guid, index });
m_assetInfoIndexById.insert({ m_assets[index].info.m_assetId.m_guid, index });
}
}
else
@@ -26,7 +26,7 @@ namespace ScriptCanvasEditor
Modifier
( const ModifyConfiguration& modification
, AZStd::vector<AZ::Data::AssetInfo>&& assets
, WorkingAssets&& assets
, AZStd::function<void()> onComplete);
const ModificationResults& GetResult() const;
@@ -66,7 +66,7 @@ namespace ScriptCanvasEditor
size_t m_assetIndex = 0;
AZStd::function<void()> m_onComplete;
// asset infos in scanned order
AZStd::vector<AZ::Data::AssetInfo> m_assets;
WorkingAssets m_assets;
// dependency sorted order indices into the asset vector
AZStd::vector<size_t> m_dependencyOrderedAssetIndicies;
// dependency indices by asset info index (only exist if graphs have them)
@@ -45,7 +45,7 @@ namespace ScriptCanvasEditor
else
{
VE_LOG("Scanner: Included: %s ", GetCurrentAsset().m_relativePath.c_str());
m_result.m_unfiltered.push_back(GetCurrentAsset());
m_result.m_unfiltered.push_back({ asset, GetCurrentAsset() });
ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanUnFilteredGraph, GetCurrentAsset());
}
}
@@ -6,37 +6,32 @@
*
*/
#include <QDateTime>
#include <QDir>
#include <QMessageBox>
#include <QProcess>
#include <QDir>
#include <QScrollBar>
#include <QDateTime>
#include <QToolButton>
#include "UpgradeHelper.h"
#include <AzCore/Component/ComponentApplicationBus.h>
#include <AzCore/Component/TickBus.h>
#include <AzCore/IO/SystemFile.h>
#include <AzCore/UserSettings/UserSettingsProvider.h>
#include <AzFramework/Asset/AssetSystemBus.h>
#include <AzFramework/IO/FileOperations.h>
#include <AzQtComponents/Components/Widgets/CheckBox.h>
#include <AzQtComponents/Utilities/DesktopUtilities.h>
#include <AzToolsFramework/API/EditorAssetSystemAPI.h>
#include <AzToolsFramework/API/ToolsApplicationAPI.h>
#include <AzToolsFramework/SourceControl/SourceControlAPI.h>
#include <AzQtComponents/Components/Widgets/CheckBox.h>
#include <Editor/Assets/ScriptCanvasAssetHelpers.h>
#include <Editor/Settings.h>
#include <Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h>
#include <Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.h>
#include <Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.h>
#include <Editor/View/Windows/Tools/UpgradeTool/ui_UpgradeHelper.h>
#include <ScriptCanvas/Bus/EditorScriptCanvasBus.h>
#include <ScriptCanvas/Components/EditorGraph.h>
#include <AzQtComponents/Utilities/DesktopUtilities.h>
#include <Editor/Assets/ScriptCanvasAssetHelpers.h>
namespace ScriptCanvasEditor
{
@@ -52,40 +47,47 @@ namespace ScriptCanvasEditor
m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
int rows = 0;
auto& graphsToUpgrade = AZ::Interface<IUpgradeRequests>::Get()->GetGraphsThatNeedManualUpgrade();
for (auto& assetId : graphsToUpgrade)
const VersionExplorer::ModificationResults* result = nullptr;
VersionExplorer::ModelRequestsBus::BroadcastResult(result, &VersionExplorer::ModelRequestsTraits::GetResults);
if (result && !result->m_failures.empty())
{
auto assetInfo = ScriptCanvasEditor::AssetHelpers::GetAssetInfo(assetId);
m_ui->tableWidget->insertRow(rows);
for (auto& failedUpdate : result->m_failures)
{
auto& assetInfo = failedUpdate.assetInfo;
auto assetId = assetInfo.m_assetId;
connect(m_ui->closeButton, &QPushButton::pressed, this, &QDialog::accept);
connect(m_ui->tableWidget, &QTableWidget::itemDoubleClicked, this, [this, rows, assetId](QTableWidgetItem* item)
{
if (item && item->data(Qt::UserRole).toInt() == rows)
m_ui->tableWidget->insertRow(rows);
connect(m_ui->closeButton, &QPushButton::pressed, this, &QDialog::accept);
connect(m_ui->tableWidget, &QTableWidget::itemDoubleClicked, this, [this, rows, assetId](QTableWidgetItem* item)
{
OpenGraph(assetId);
if (item && item->data(Qt::UserRole).toInt() == rows)
{
OpenGraph(assetId);
}
}
}
);
);
auto openGraph = [this, assetId] {
OpenGraph(assetId);
};
auto openGraph = [this, assetId] {
OpenGraph(assetId);
};
QTableWidgetItem* rowName = new QTableWidgetItem(tr(assetInfo.m_relativePath.c_str()));
rowName->setData(Qt::UserRole, rows);
m_ui->tableWidget->setItem(rows, 0, rowName);
QTableWidgetItem* rowName = new QTableWidgetItem(tr(assetInfo.m_relativePath.c_str()));
rowName->setData(Qt::UserRole, rows);
m_ui->tableWidget->setItem(rows, 0, rowName);
QToolButton* rowGoToButton = new QToolButton(this);
rowGoToButton->setIcon(QIcon(":/stylesheet/img/UI20/open-in-internal-app.svg"));
rowGoToButton->setToolTip("Open Graph");
connect(rowGoToButton, &QToolButton::clicked, openGraph);
QToolButton* rowGoToButton = new QToolButton(this);
rowGoToButton->setIcon(QIcon(":/stylesheet/img/UI20/open-in-internal-app.svg"));
rowGoToButton->setToolTip("Open Graph");
m_ui->tableWidget->setCellWidget(rows, 1, rowGoToButton);
connect(rowGoToButton, &QToolButton::clicked, openGraph);
++rows;
m_ui->tableWidget->setCellWidget(rows, 1, rowGoToButton);
++rows;
}
}
}