Use QtConcurrent::run.then chain in DatabaseWindow too.

This commit is contained in:
eelke 2022-01-16 18:21:18 +01:00
parent 521e5d7370
commit badd46ea8f
2 changed files with 13 additions and 34 deletions

View file

@ -9,6 +9,7 @@
#include "TaskExecutor.h"
#include <QAction>
#include <QApplication>
#include <QtConcurrent>
#include <QCloseEvent>
#include <QFileDialog>
#include <QMenuBar>
@ -30,9 +31,6 @@ DatabaseWindow::DatabaseWindow(MasterController *master, QWidget *parent)
: QMainWindow(parent)
, m_masterController(master)
{
connect(&loadWatcher, &QFutureWatcher<LoadCatalog::Result>::finished,
this, &DatabaseWindow::catalogLoaded);
m_tabWidget = new QTabWidget(this);
m_tabWidget->setObjectName("m_tabWidget");
setCentralWidget(m_tabWidget);
@ -107,8 +105,15 @@ void DatabaseWindow::setConfig(const ConnectionConfig &config)
title += m_config.name();
setWindowTitle(title);
auto f = TaskExecutor::run(new LoadCatalog(m_config));
loadWatcher.setFuture(f);
auto cfg = m_config;
auto qthis = QPointer(this);
QtConcurrent::run([cfg] {
return OpenDatabase::createOpenDatabase(cfg);
}).then(qApp, [qthis](OpenDatabase::OpenDatabaseSPtr db) {
if (qthis) {
qthis.data()->catalogLoaded(db);
}
});
} catch (std::runtime_error &ex) {
QMessageBox::critical(this, "Error reading database",
@ -316,15 +321,10 @@ void DatabaseWindow::openSqlFile(QString file_name)
}
void DatabaseWindow::catalogLoaded()
void DatabaseWindow::catalogLoaded(OpenDatabase::OpenDatabaseSPtr db)
{
try {
m_database = loadWatcher.future().result();
// for (auto f : { "user", "pg_catalog", "information_schema" }) {
// // TODO open inspector windows
// }
// newCreateTablePage();
m_database = db;
actionNewSql_triggered();
} catch (const OpenDatabaseException &ex) {
QMessageBox::critical(this, "Error reading database", ex.text());

View file

@ -7,7 +7,6 @@
#include "Pgsql_Connection.h"
#include "ControllableTask.h"
#include "IDatabaseWindow.h"
#include <QFutureWatcher>
#include <QMainWindow>
#include <memory>
@ -100,24 +99,6 @@ private:
QMenu *menuCrud = nullptr;
QMenu *menuWindow = nullptr;
class LoadCatalog: public ControllableTask<OpenDatabase::OpenDatabaseSPtr> {
public:
LoadCatalog(ConnectionConfig config)
: m_config(config)
{}
OpenDatabase::OpenDatabaseSPtr run(TaskControl& ) override
{
return OpenDatabase::createOpenDatabase(m_config);
}
private:
ConnectionConfig m_config;
};
QFutureWatcher<LoadCatalog::Result> loadWatcher;
void createActions();
void initMenus();
@ -139,10 +120,8 @@ private:
QAction* createAction(QString caption, void (DatabaseWindow::*func)());
private slots:
void catalogLoaded();
void catalogLoaded(OpenDatabase::OpenDatabaseSPtr db);
void tableSelected(Oid tableoid);
// void tabWidget_tabCloseRequested(int index);
// void tabWidget_currentChanged(int index);
void actionAbout_triggered();
void actionCancelQuery_triggered();