Skip to content

Commit 2b73d3c

Browse files
committed
Plugin: add CDatabaseFilter
1 parent 8ed2d20 commit 2b73d3c

16 files changed

Lines changed: 241 additions & 13 deletions

Src/CMakeLists.txt

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,12 @@ list(APPEND PLUGIN_INSTALL_HEADER_FILES
5555
ParameterCompone/ParameterSSH.h
5656
ParameterCompone/ParameterSSHTunnelUI.h
5757
ParameterCompone/Stats.h
58-
ParameterCompone/ParameterDatabase.h
59-
ParameterCompone/ParameterDatabaseUI.h
6058
CheckBoxHeader.h
61-
Database.h
62-
DatabaseTree.h
59+
Database/Database.h
60+
Database/DatabaseTree.h
61+
Database/DatabaseFilter.h
62+
Database/ParameterDatabase.h
63+
Database/ParameterDatabaseUI.h
6364
)
6465

6566
list(APPEND PLUGIN_HEADER_FILES
@@ -106,16 +107,17 @@ list(APPEND PLUGIN_SOURCE_FILES
106107
ParameterCompone/ParameterSSH.cpp
107108
ParameterCompone/ParameterSSHTunnelUI.cpp
108109
ParameterCompone/Stats.cpp
109-
ParameterCompone/ParameterDatabase.cpp
110-
ParameterCompone/ParameterDatabaseUI.cpp
111110
DlgInputPassword.cpp
112111
DlgUserPassword.cpp
113112
Hook.cpp
114113
Unix/DesktopShortcuts.cpp
115114
StatsAppUsage.cpp
116115
CheckBoxHeader.cpp
117-
Database.cpp
118-
DatabaseTree.cpp
116+
Database/Database.cpp
117+
Database/DatabaseTree.cpp
118+
Database/DatabaseFilter.cpp
119+
Database/ParameterDatabase.cpp
120+
Database/ParameterDatabaseUI.cpp
119121
)
120122

121123
set(PLUGIN_UI_FILES
@@ -127,7 +129,7 @@ set(PLUGIN_UI_FILES
127129
ParameterCompone/ParameterNetUI.ui
128130
ParameterCompone/ParameterRecordUI.ui
129131
ParameterCompone/ParameterSSHTunnelUI.ui
130-
ParameterCompone/ParameterDatabaseUI.ui
132+
Database/ParameterDatabaseUI.ui
131133
)
132134

133135
if(WIN32)
@@ -356,6 +358,7 @@ ADD_TARGET(NAME ${PROJECT_NAME}
356358
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> # See: http://www.it1352.com/478094.html
357359
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>/ParameterCompone
358360
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>/Channel
361+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>/Database
359362
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
360363
${PLUGIN_INCLUDE_DIRS}
361364
INSTALL_HEADER_FILES ${PLUGIN_INSTALL_HEADER_FILES}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
#include "RabbitCommonDir.h"
1212
#include "RabbitCommonTools.h"
1313
#include "IconUtils.h"
14-
#include "Database.h"
1514

15+
#include "Database.h"
16+
#include "ParameterDatabase.h"
1617
static Q_LOGGING_CATEGORY(log, "DB")
1718
CDatabase::CDatabase(QObject *parent)
1819
: QObject{parent}

Src/Database.h renamed to Src/Database/Database.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
#include <QDateTime>
88
#include <QJsonObject>
99
#include "plugin_export.h"
10-
#include "ParameterDatabase.h"
1110

11+
class CParameterDatabase;
1212
class PLUGIN_EXPORT CDatabase : public QObject
1313
{
1414
Q_OBJECT

Src/Database/DatabaseFilter.cpp

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
#include <QSqlDatabase>
2+
#include <QSqlQuery>
3+
#include <QSqlError>
4+
#include <QJsonArray>
5+
#include <QJsonObject>
6+
#include <QLoggingCategory>
7+
8+
#include "DatabaseFilter.h"
9+
10+
static Q_LOGGING_CATEGORY(log, "DB.Filter")
11+
CDatabaseFilter::CDatabaseFilter(const QString& szSuffix, QObject *parent)
12+
: CDatabase{parent}
13+
, m_szTableName("filter")
14+
{
15+
if(!szSuffix.isEmpty()) {
16+
QString szSuf = szSuffix;
17+
szSuf = szSuf.replace("/", "_");
18+
m_szTableName = m_szTableName + "_" + szSuf;
19+
}
20+
}
21+
22+
bool CDatabaseFilter::contains(const QString& szKey)
23+
{
24+
bool bRet = false;
25+
QSqlQuery query(GetDatabase());
26+
27+
// Check if it already exists
28+
query.prepare("SELECT `key` FROM " + m_szTableName
29+
+ " WHERE `key` = :key "
30+
);
31+
query.bindValue(":key", szKey);
32+
bRet = query.exec();
33+
if(!bRet) {
34+
qCritical(log) << "Failed to contains[" + szKey + "]:"
35+
<< query.lastError().text()
36+
<< "Sql:" << query.executedQuery();
37+
return false;
38+
}
39+
return query.next();
40+
}
41+
42+
int CDatabaseFilter::AddKey(const QString &szKey)
43+
{
44+
45+
if(contains(szKey)) return false;
46+
47+
QSqlQuery query(GetDatabase());
48+
query.prepare(
49+
"INSERT INTO " + m_szTableName + " (`key`) VALUES (:key) "
50+
);
51+
query.bindValue(":key", szKey);
52+
bool bRet = query.exec();
53+
54+
if (!bRet) {
55+
qCritical(log) << "Failed to add key[" + szKey + "]:"
56+
<< query.lastError().text()
57+
<< "Sql:" << query.executedQuery();
58+
return -1;
59+
}
60+
return 0;
61+
}
62+
63+
int CDatabaseFilter::RemoveKey(const QString &szKey)
64+
{
65+
QSqlQuery query(GetDatabase());
66+
query.prepare("DELETE FROM " + m_szTableName + " WHERE `key` = :key");
67+
query.bindValue(":key", szKey);
68+
69+
bool bRet = query.exec();
70+
if (!bRet) {
71+
qCritical(log) << "Failed to remove key[" + szKey + "]:"
72+
<< query.lastError().text()
73+
<< "Sql:" << query.executedQuery();
74+
return -1;
75+
}
76+
return 0;
77+
}
78+
79+
int CDatabaseFilter::Clear()
80+
{
81+
QSqlQuery query(GetDatabase());
82+
query.prepare("DELETE FROM " + m_szTableName);
83+
bool bRet = query.exec();
84+
if (!bRet) {
85+
qCritical(log) << "Failed to clear:"
86+
<< query.lastError().text()
87+
<< "Sql:" << query.executedQuery();
88+
return -1;
89+
}
90+
return 0;
91+
}
92+
93+
bool CDatabaseFilter::isEmpty()
94+
{
95+
QSqlQuery query(GetDatabase());
96+
query.prepare("SELECT `key` FROM " + m_szTableName);
97+
bool bRet = query.exec();
98+
if(!bRet) {
99+
qCritical(log) << "Failed to isEmpty:"
100+
<< query.lastError().text()
101+
<< "Sql:" << query.executedQuery();
102+
return true;
103+
}
104+
return !query.next();
105+
}
106+
107+
bool CDatabaseFilter::ExportToJson(QJsonObject &obj)
108+
{
109+
return true;
110+
}
111+
112+
bool CDatabaseFilter::ImportFromJson(const QJsonObject &obj)
113+
{
114+
return true;
115+
}
116+
117+
bool CDatabaseFilter::OnInitializeSqliteDatabase()
118+
{
119+
return true;
120+
}
121+
122+
bool CDatabaseFilter::OnInitializeMySqlDatabase()
123+
{
124+
return true;
125+
}
126+
127+
bool CDatabaseFilter::OnInitializeDatabase()
128+
{
129+
QSqlQuery query(GetDatabase());
130+
131+
bool success = query.exec(
132+
"CREATE TABLE IF NOT EXISTS "
133+
+ m_szTableName +
134+
" ("
135+
" `key` TEXT PRIMARY KEY NOT NULL"
136+
" )"
137+
);
138+
139+
if (!success) {
140+
qCritical(log) << "Failed to create folders sqlite table:"
141+
<< m_szTableName << query.lastError().text()
142+
<< "Sql:" << query.executedQuery();
143+
return false;
144+
}
145+
146+
return true;
147+
}

Src/Database/DatabaseFilter.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Author: Kang Lin <kl222@126.com>
2+
3+
#pragma once
4+
5+
#include "Database.h"
6+
7+
class PLUGIN_EXPORT CDatabaseFilter : public CDatabase
8+
{
9+
public:
10+
explicit CDatabaseFilter(const QString& szSuffix = QString(), QObject* parent = nullptr);
11+
12+
bool contains(const QString& szKey);
13+
int AddKey(const QString& szKey);
14+
int RemoveKey(const QString& szKey);
15+
int Clear();
16+
virtual bool isEmpty();
17+
18+
virtual bool OnInitializeDatabase() override;
19+
virtual bool ExportToJson(QJsonObject &obj) override;
20+
virtual bool ImportFromJson(const QJsonObject &obj) override;
21+
22+
private:
23+
QString m_szTableName;
24+
25+
protected:
26+
virtual bool OnInitializeSqliteDatabase() override;
27+
virtual bool OnInitializeMySqlDatabase() override;
28+
};
29+
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)