Improve the workflow for extensions that fail on import

This commit is contained in:
baldurk
2026-08-28 15:46:23 +01:00
parent f5240a4a47
commit a1b76c231e
6 changed files with 39 additions and 6 deletions
+10 -1
View File
@@ -248,7 +248,7 @@ MainWindow::MainWindow(ICaptureContext &ctx) : QMainWindow(NULL), ui(new Ui::Mai
QObject::connect(extensionReload, &RDToolButton::clicked, [this]() {
rdcarray<ExtensionMetadata> exts = m_Ctx.Extensions().GetInstalledExtensions();
for(const ExtensionMetadata &m : exts)
if(m.hasChanges)
if(m.hasChanges || m.failedLoad)
m_Ctx.Extensions().LoadExtension(m.package);
});
QObject::connect(PythonContext::GetExtensionContext(), &PythonContext::extensionLoaded, this,
@@ -1358,6 +1358,15 @@ void MainWindow::PythonStatusUpdate()
break;
}
}
for(const ExtensionMetadata &m : m_Ctx.Extensions().GetInstalledExtensions())
{
if(m.failedLoad)
{
text += tr(" (some failed to load)");
reloadVisible = true;
break;
}
}
extensionReload->setVisible(reloadVisible);
if(PythonContext::IsDebuggerConnected())
+12 -1
View File
@@ -476,6 +476,11 @@ PythonShell::PythonShell(ICaptureContext &ctx, QWidget *parent)
updateRecentFiles(false);
updateExtensionProjects();
// on first launch we could be creating the python shell before extensions are loaded while
// initialising the UI. Refresh the extension projects after a short delay to pick up any
// additional information on loading status.
QTimer::singleShot(200, [this]() { updateExtensionProjects(); });
ui->projectExplorer->endUpdate();
ui->projectExplorer->expandItem(m_RecentFiles);
@@ -729,12 +734,18 @@ void PythonShell::updateExtensionProjects()
if(ext.hasChanges)
name += tr(" (Reload required)");
if(ext.failedLoad)
name += tr(" (Failed to load)");
RDTreeWidgetItem *root = new RDTreeWidgetItem({name});
root->setData(0, Qt::UserRole + 1, ext.package);
if(ext.hasChanges)
root->setItalic(true);
if(m_Ctx.Config().AlwaysLoad_Extensions.contains(ext.package))
root->setBold(true);
addExtensionDirItems(root, QDir(ext.filePath));
m_UIExtensions->addChild(root);
@@ -1949,7 +1960,7 @@ void PythonShell::projectExplorer_contextMenu(const QPoint &pos)
{
if(m.package == rdcstr(itemPath))
{
reloadExtension.setEnabled(m.hasChanges);
reloadExtension.setEnabled(m.hasChanges || m.failedLoad);
diskLocation = QFileInfo(m.filePath).absoluteFilePath();
break;
}