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)