diff --git a/redis-desktop-manager/forms/connection.ui b/redis-desktop-manager/forms/connection.ui index 1fe79a9b9..17e3e53dc 100644 --- a/redis-desktop-manager/forms/connection.ui +++ b/redis-desktop-manager/forms/connection.ui @@ -98,7 +98,7 @@ - 0 + 1 @@ -122,8 +122,11 @@ + + 1 + - 100000 + 65535 6379 @@ -249,7 +252,7 @@ 1 - 10000 + 65535 22 diff --git a/redis-desktop-manager/include/redis/ConsoleConnectionWrapper.h b/redis-desktop-manager/include/redis/ConsoleConnectionWrapper.h index 497bbc65d..a72457291 100644 --- a/redis-desktop-manager/include/redis/ConsoleConnectionWrapper.h +++ b/redis-desktop-manager/include/redis/ConsoleConnectionWrapper.h @@ -1,24 +1,28 @@ #pragma once #include +#include "RedisConnectionConfig.h" -class RedisConnectionConfig; class RedisConnectionAbstract; -class consoleTab; class ConsoleConnectionWrapper : public QObject { Q_OBJECT public: - ConsoleConnectionWrapper(RedisConnectionConfig &, consoleTab &); + ConsoleConnectionWrapper(RedisConnectionConfig &); public slots: + void init(); void executeCommand(QString); + signals: + void changePrompt(QString); + void addOutput(QString); + private: RedisConnectionAbstract * connection; - consoleTab & consoleView; + RedisConnectionConfig config; bool connectionValid; }; diff --git a/redis-desktop-manager/include/widgets/consoleTab.h b/redis-desktop-manager/include/widgets/consoleTab.h index 5303fdcc6..22475d178 100644 --- a/redis-desktop-manager/include/widgets/consoleTab.h +++ b/redis-desktop-manager/include/widgets/consoleTab.h @@ -1,12 +1,8 @@ #pragma once -/** - Based on Console Qt widget from RedisConsole - https://github.com/ptrofimov/RedisConsole - author Petr Trofimov (petrofimov@yandex.ru) -**/ #include +#include class RedisConnectionConfig; class ConsoleConnectionWrapper; @@ -18,10 +14,12 @@ class consoleTab: public QPlainTextEdit public: consoleTab(RedisConnectionConfig&); ~consoleTab(void); - void output(QString); - void setPrompt(QString); void scrollDown(); +public slots: + void output(QString); + void setPrompt(QString); + protected: void keyPressEvent(QKeyEvent *); void mousePressEvent(QMouseEvent *); @@ -33,7 +31,7 @@ class consoleTab: public QPlainTextEdit QStringList *history; int historyPos; ConsoleConnectionWrapper * connection; - //QThread connectionThread; + QThread connectionThread; void onEnter(); void insertPrompt(bool insertNewBlock = true); diff --git a/redis-desktop-manager/source/demo.cpp b/redis-desktop-manager/source/demo.cpp index 4cb6f4fdd..8b75ca7d3 100644 --- a/redis-desktop-manager/source/demo.cpp +++ b/redis-desktop-manager/source/demo.cpp @@ -151,8 +151,9 @@ void MainWin::OnConnectionTreeClick(const QModelIndex & index) connections->updateFilter(); loadingInProgress = false; - if (!connected) { - QMessageBox::warning(this, "Can't connect to server", "Can't connect to server. Check connection settings"); + if (!connected) { + QMessageBox::warning(this, "Can't connect to server", + QString("Check connection settings \nError: %1").arg(server->getConnection()->getLastError())); } } break; diff --git a/redis-desktop-manager/source/main.cpp b/redis-desktop-manager/source/main.cpp index c52d3ab69..48f070420 100644 --- a/redis-desktop-manager/source/main.cpp +++ b/redis-desktop-manager/source/main.cpp @@ -6,7 +6,7 @@ int main(int argc, char *argv[]) QApplication a(argc, argv); QApplication::setApplicationName("Redis Desktop Manager"); - QApplication::setApplicationVersion("0.5.1"); + QApplication::setApplicationVersion("0.5.2"); QApplication::setOrganizationDomain("redisdesktop.com"); MainWin w; diff --git a/redis-desktop-manager/source/redis/ConsoleConnectionWrapper.cpp b/redis-desktop-manager/source/redis/ConsoleConnectionWrapper.cpp index 830dc3d00..7a6425f9b 100644 --- a/redis-desktop-manager/source/redis/ConsoleConnectionWrapper.cpp +++ b/redis-desktop-manager/source/redis/ConsoleConnectionWrapper.cpp @@ -6,40 +6,45 @@ #include "consoleTab.h" #include "Response.h" -ConsoleConnectionWrapper::ConsoleConnectionWrapper(RedisConnectionConfig &config, consoleTab &view) - : consoleView(view) , connectionValid(false) +ConsoleConnectionWrapper::ConsoleConnectionWrapper(RedisConnectionConfig &config) + : config(config), connectionValid(false) +{ +} + +void ConsoleConnectionWrapper::init() { if (config.isNull()) { - consoleView.output("Invalid config. Can't create connection."); + emit addOutput("Invalid config. Can't create connection."); return; } connection = (config.useSshTunnel()) ? (RedisConnectionAbstract *) new RedisConnectionOverSsh(config) - : (RedisConnectionAbstract *) new RedisConnection(config); + : (RedisConnectionAbstract *) new RedisConnection(config); if (!connection->connect()) { - consoleView.output("Invalid config. Can't create connection."); + emit addOutput("Invalid config. Can't create connection."); return; } connectionValid = true; - consoleView.setPrompt(QString("%1:0>").arg(config.name)); - consoleView.output("Connected."); + + emit changePrompt(QString("%1:0>").arg(config.name)); + emit addOutput("Connected."); } void ConsoleConnectionWrapper::executeCommand(QString cmd) { if (!connectionValid) { - consoleView.output("Invalid config. Can't create connection."); + emit addOutput("Invalid config. Can't create connection."); return; } if (!connection->isConnected() && !connection->connect()) { - consoleView.output("Connection error. Check network connection"); + emit addOutput("Connection error. Check network connection"); return; } @@ -51,12 +56,12 @@ void ConsoleConnectionWrapper::executeCommand(QString cmd) if (isSelectCommand) { - consoleView.setPrompt( + emit changePrompt( QString("%1:%2>") .arg(connection->config.name) .arg(selectDbRegex.cap(3)) ); } - consoleView.output(Response::valueToString(result)); + addOutput(Response::valueToString(result)); } diff --git a/redis-desktop-manager/source/redis/RedisConnectionOverSsh.cpp b/redis-desktop-manager/source/redis/RedisConnectionOverSsh.cpp index a7d01f942..956ba137e 100644 --- a/redis-desktop-manager/source/redis/RedisConnectionOverSsh.cpp +++ b/redis-desktop-manager/source/redis/RedisConnectionOverSsh.cpp @@ -112,7 +112,7 @@ void RedisConnectionOverSsh::OnSocketReadyRead() QString RedisConnectionOverSsh::getLastError() { if (socket == NULL) { - return QString("Error with ssh connection"); + return QString("SSH connection error"); } return socket->errorString(); diff --git a/redis-desktop-manager/source/widgets/consoleTab.cpp b/redis-desktop-manager/source/widgets/consoleTab.cpp index 5129d04fe..45813ea48 100644 --- a/redis-desktop-manager/source/widgets/consoleTab.cpp +++ b/redis-desktop-manager/source/widgets/consoleTab.cpp @@ -9,6 +9,7 @@ consoleTab::consoleTab(RedisConnectionConfig& config) { appendHtml("List of unsupported commands: PTTL, DUMP, RESTORE, AUTH, QUIT, MONITOR"); + appendHtml("Connecting ..."); QPalette p = palette(); p.setColor(QPalette::Base, QColor(57, 57, 57)); @@ -20,16 +21,23 @@ consoleTab::consoleTab(RedisConnectionConfig& config) insertPrompt(false); isLocked = false; - connection = new ConsoleConnectionWrapper(config, *this); + connection = new ConsoleConnectionWrapper(config); + connection->moveToThread(&connectionThread); + connect(&connectionThread, &QThread::finished, connection, &QObject::deleteLater); connect(this, SIGNAL(onCommand(QString)), connection, SLOT(executeCommand(QString))); + connect(connection, SIGNAL(changePrompt(QString)), this, SLOT(setPrompt(QString))); + connect(connection, SIGNAL(addOutput(QString)), this, SLOT(output(QString))); + connect(&connectionThread, SIGNAL(started()), connection, SLOT(init())); + + connectionThread.start(); } consoleTab::~consoleTab(void) { - //connectionThread.quit(); - ///connectionThread.wait(); + connectionThread.quit(); + connectionThread.wait(); } void consoleTab::setPrompt(QString str)