Switched ConnectionConfig to QString from std::string to fit better into Qt framework
This commit is contained in:
parent
bcfd82c27d
commit
082293e58a
20 changed files with 1077 additions and 211 deletions
|
|
@ -4,11 +4,13 @@
|
|||
|
||||
#include <botan/cryptobox.h>
|
||||
#include <QDir>
|
||||
#include <QMimeData>
|
||||
#include <QSettings>
|
||||
#include <QSqlDatabase>
|
||||
#include <QSqlError>
|
||||
#include <QSqlQuery>
|
||||
#include <QStandardPaths>
|
||||
#include <QStringBuilder>
|
||||
|
||||
|
||||
namespace {
|
||||
|
|
@ -24,19 +26,19 @@ CREATE TABLE IF NOT EXISTS conngroup (
|
|||
R"__(
|
||||
CREATE TABLE IF NOT EXISTS connection (
|
||||
uuid TEXT PRIMARY KEY,
|
||||
cname TEXT NOT NULL,
|
||||
cname TEXT,
|
||||
conngroup_id INTEGER NOT NULL,
|
||||
host TEXT NOT NULL,
|
||||
hostaddr TEXT NOT NULL,
|
||||
host TEXT ,
|
||||
hostaddr TEXT ,
|
||||
port INTEGER NOT NULL,
|
||||
user TEXT NOT NULL,
|
||||
dbname TEXT NOT NULL,
|
||||
user TEXT ,
|
||||
dbname TEXT ,
|
||||
sslmode INTEGER NOT NULL,
|
||||
sslcert TEXT NOT NULL,
|
||||
sslkey TEXT NOT NULL,
|
||||
sslrootcert TEXT NOT NULL,
|
||||
sslcrl TEXT NOT NULL,
|
||||
password TEXT NOT NULL
|
||||
sslcert TEXT ,
|
||||
sslkey TEXT ,
|
||||
sslrootcert TEXT ,
|
||||
sslcrl TEXT ,
|
||||
password TEXT
|
||||
);)__";
|
||||
|
||||
|
||||
|
|
@ -68,22 +70,23 @@ R"__(INSERT OR REPLACE INTO connection
|
|||
QSqlQuery q(db);
|
||||
q.prepare(q_insert_or_replace_into_connection);
|
||||
q.bindValue(":uuid", cc.uuid().toString());
|
||||
q.bindValue(":name", stdStrToQ(cc.name()));
|
||||
q.bindValue(":name", cc.name());
|
||||
q.bindValue(":conngroup_id", conngroup_id);
|
||||
q.bindValue(":host", stdStrToQ(cc.host()));
|
||||
q.bindValue(":hostaddr", stdStrToQ(cc.hostAddr()));
|
||||
q.bindValue(":port", cc.port());
|
||||
q.bindValue(":user", stdStrToQ(cc.user()));
|
||||
q.bindValue(":dbname", stdStrToQ(cc.dbname()));
|
||||
q.bindValue(":host", cc.host());
|
||||
q.bindValue(":hostaddr", cc.hostAddr());
|
||||
q.bindValue(":port", (int)cc.port());
|
||||
q.bindValue(":user", cc.user());
|
||||
q.bindValue(":dbname", cc.dbname());
|
||||
q.bindValue(":sslmode", static_cast<int>(cc.sslMode()));
|
||||
q.bindValue(":sslcert", stdStrToQ(cc.sslCert()));
|
||||
q.bindValue(":sslkey", stdStrToQ(cc.sslKey()));
|
||||
q.bindValue(":sslrootcert", stdStrToQ(cc.sslRootCert()));
|
||||
q.bindValue(":sslcrl", stdStrToQ(cc.sslCrl()));
|
||||
q.bindValue(":password", stdStrToQ(cc.encodedPassword()));
|
||||
q.bindValue(":sslcert", cc.sslCert());
|
||||
q.bindValue(":sslkey", cc.sslKey());
|
||||
q.bindValue(":sslrootcert", cc.sslRootCert());
|
||||
q.bindValue(":sslcrl", cc.sslCrl());
|
||||
q.bindValue(":password", cc.encodedPassword());
|
||||
|
||||
if (!q.exec()) {
|
||||
return q.lastError();
|
||||
auto sql_error = q.lastError();
|
||||
return { sql_error };
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
|
@ -129,18 +132,18 @@ void ConnectionTreeModel::load()
|
|||
while (q.next()) {
|
||||
auto cc = std::make_shared<ConnectionConfig>();
|
||||
cc->setUuid(q.value(0).toUuid());
|
||||
cc->setName(qvarToStdStr(q.value(1)));
|
||||
cc->setHost(qvarToStdStr(q.value(3)));
|
||||
cc->setHostAddr(qvarToStdStr(q.value(4)));
|
||||
cc->setName(q.value(1).toString());
|
||||
cc->setHost(q.value(3).toString());
|
||||
cc->setHostAddr(q.value(4).toString());
|
||||
cc->setPort(static_cast<uint16_t>(q.value(5).toInt()));
|
||||
cc->setUser(qvarToStdStr(q.value(6)));
|
||||
cc->setDbname(qvarToStdStr(q.value(7)));
|
||||
cc->setUser(q.value(6).toString());
|
||||
cc->setDbname(q.value(7).toString());
|
||||
cc->setSslMode(static_cast<SslMode>(q.value(8).toInt()));
|
||||
cc->setSslCert(qvarToStdStr(q.value(9)));
|
||||
cc->setSslKey(qvarToStdStr(q.value(10)));
|
||||
cc->setSslRootCert(qvarToStdStr(q.value(11)));
|
||||
cc->setSslCrl(qvarToStdStr(q.value(12)));
|
||||
cc->setEncodedPassword(qvarToStdStr(q.value(13)));
|
||||
cc->setSslCert(q.value(9).toString());
|
||||
cc->setSslKey(q.value(10).toString());
|
||||
cc->setSslRootCert(q.value(11).toString());
|
||||
cc->setSslCrl(q.value(12).toString());
|
||||
cc->setEncodedPassword(q.value(13).toByteArray());
|
||||
|
||||
int group_id = q.value(2).toInt();
|
||||
auto find_res = std::find_if(m_groups.begin(), m_groups.end(),
|
||||
|
|
@ -173,11 +176,11 @@ QVariant ConnectionTreeModel::data(const QModelIndex &index, int role) const
|
|||
// This is a connection
|
||||
if (role == Qt::DisplayRole) {
|
||||
switch (index.column()) {
|
||||
case Name: v = stdStrToQ(conn->name()); break;
|
||||
case Host: v = stdStrToQ(conn->host()); break;
|
||||
case Name: v = conn->name(); break;
|
||||
case Host: v = conn->host(); break;
|
||||
case Port: v = conn->port(); break;
|
||||
case User: v = stdStrToQ(conn->user()); break;
|
||||
case DbName: v= stdStrToQ(conn->dbname()); break;
|
||||
case User: v = conn->user(); break;
|
||||
case DbName: v= conn->dbname(); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -338,7 +341,11 @@ void ConnectionTreeModel::save(const QString &group_name, const ConnectionConfig
|
|||
new_grp->add(node);
|
||||
auto save_res = saveToDb(*node);
|
||||
if (save_res) {
|
||||
throw std::runtime_error("SqlError2");
|
||||
QString msg = save_res->text()
|
||||
% "\n" % save_res->driverText()
|
||||
% "\n" % save_res->databaseText();
|
||||
|
||||
throw std::runtime_error(msg.toUtf8().data());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -446,3 +453,68 @@ std::optional<QSqlError> ConnectionTreeModel::saveToDb(const ConnectionConfig &c
|
|||
{
|
||||
return SaveConnectionConfig(m_db, cc, cc.parent()->conngroup_id);
|
||||
}
|
||||
|
||||
|
||||
Qt::DropActions ConnectionTreeModel::supportedDropActions() const
|
||||
{
|
||||
return Qt::MoveAction;
|
||||
}
|
||||
|
||||
Qt::DropActions ConnectionTreeModel::supportedDragActions() const
|
||||
{
|
||||
return Qt::MoveAction;
|
||||
}
|
||||
|
||||
Qt::ItemFlags ConnectionTreeModel::flags(const QModelIndex &index) const
|
||||
{
|
||||
Qt::ItemFlags defaultFlags = QAbstractItemModel::flags(index);
|
||||
|
||||
ConnectionConfig* cfg = getConfigFromModelIndex(index);
|
||||
|
||||
if (cfg)
|
||||
return Qt::ItemIsDragEnabled | defaultFlags;
|
||||
else
|
||||
return Qt::ItemIsDropEnabled | defaultFlags;
|
||||
}
|
||||
|
||||
//bool ConnectionTreeModel::insertRows(int row, int count, const QModelIndex &parent)
|
||||
//{
|
||||
// return false;
|
||||
//}
|
||||
|
||||
//bool ConnectionTreeModel::moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild)
|
||||
//{
|
||||
// return false;
|
||||
//}
|
||||
namespace {
|
||||
const auto mimeType = "application/vnd.pgLab.connection";
|
||||
}
|
||||
|
||||
QStringList ConnectionTreeModel::mimeTypes() const
|
||||
{
|
||||
return { mimeType };
|
||||
}
|
||||
|
||||
QMimeData *ConnectionTreeModel::mimeData(const QModelIndexList &indexes) const
|
||||
{
|
||||
QMimeData *mimeData = new QMimeData;
|
||||
QByteArray encodedData;
|
||||
|
||||
QDataStream stream(&encodedData, QIODevice::WriteOnly);
|
||||
|
||||
for (const QModelIndex &index : indexes) {
|
||||
if (index.isValid()) {
|
||||
QString text = data(index, Qt::DisplayRole).toString();
|
||||
stream << text;
|
||||
}
|
||||
}
|
||||
|
||||
mimeData->setData(mimeType, encodedData);
|
||||
return mimeData;
|
||||
}
|
||||
|
||||
bool ConnectionTreeModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
|
||||
{
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue