mirror of
https://github.com/tnodir/fort
synced 2024-11-15 09:45:44 +00:00
UI: Options: AppGroup: Add "Kill Process" option
This commit is contained in:
parent
59bd6992cd
commit
decfcb2e80
@ -137,6 +137,14 @@ void AppGroup::setName(const QString &name)
|
||||
}
|
||||
}
|
||||
|
||||
void AppGroup::setKillText(const QString &killText)
|
||||
{
|
||||
if (m_killText != killText) {
|
||||
m_killText = killText;
|
||||
setEdited(true);
|
||||
}
|
||||
}
|
||||
|
||||
void AppGroup::setBlockText(const QString &blockText)
|
||||
{
|
||||
if (m_blockText != blockText) {
|
||||
@ -217,6 +225,7 @@ void AppGroup::copy(const AppGroup &o)
|
||||
m_id = o.id();
|
||||
m_name = o.name();
|
||||
|
||||
m_killText = o.killText();
|
||||
m_blockText = o.blockText();
|
||||
m_allowText = o.allowText();
|
||||
}
|
||||
@ -250,6 +259,7 @@ QVariant AppGroup::toVariant() const
|
||||
map["id"] = id();
|
||||
map["name"] = name();
|
||||
|
||||
map["killText"] = killText();
|
||||
map["blockText"] = blockText();
|
||||
map["allowText"] = allowText();
|
||||
|
||||
@ -285,6 +295,7 @@ void AppGroup::fromVariant(const QVariant &v)
|
||||
m_id = map["id"].toLongLong();
|
||||
m_name = map["name"].toString();
|
||||
|
||||
m_killText = map["killText"].toString();
|
||||
m_blockText = map["blockText"].toString();
|
||||
m_allowText = map["allowText"].toString();
|
||||
}
|
||||
|
@ -70,6 +70,9 @@ public:
|
||||
QString name() const { return m_name; }
|
||||
void setName(const QString &name);
|
||||
|
||||
QString killText() const { return m_killText; }
|
||||
void setKillText(const QString &killText);
|
||||
|
||||
QString blockText() const { return m_blockText; }
|
||||
void setBlockText(const QString &blockText);
|
||||
|
||||
@ -117,6 +120,7 @@ private:
|
||||
|
||||
QString m_name;
|
||||
|
||||
QString m_killText;
|
||||
QString m_blockText;
|
||||
QString m_allowText;
|
||||
|
||||
|
@ -37,7 +37,7 @@ namespace {
|
||||
|
||||
const QLoggingCategory LC("conf");
|
||||
|
||||
constexpr int DATABASE_USER_VERSION = 23;
|
||||
constexpr int DATABASE_USER_VERSION = 24;
|
||||
|
||||
constexpr int APP_END_TIMER_INTERVAL_MIN = 100;
|
||||
constexpr int APP_END_TIMER_INTERVAL_MAX = 24 * 60 * 60 * 1000; // 1 day
|
||||
@ -54,7 +54,7 @@ const char *const sqlSelectAppGroups = "SELECT app_group_id, enabled, apply_chil
|
||||
" speed_limit_in, speed_limit_out,"
|
||||
" limit_packet_loss, limit_latency,"
|
||||
" limit_bufsize_in, limit_bufsize_out,"
|
||||
" name, block_text, allow_text,"
|
||||
" name, kill_text, block_text, allow_text,"
|
||||
" period_from, period_to"
|
||||
" FROM app_group"
|
||||
" ORDER BY order_index;";
|
||||
@ -78,10 +78,10 @@ const char *const sqlInsertAppGroup = "INSERT INTO app_group(app_group_id, order
|
||||
" speed_limit_in, speed_limit_out,"
|
||||
" limit_packet_loss, limit_latency,"
|
||||
" limit_bufsize_in, limit_bufsize_out,"
|
||||
" name, block_text, allow_text,"
|
||||
" name, kill_text, block_text, allow_text,"
|
||||
" period_from, period_to)"
|
||||
" VALUES(?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12,"
|
||||
" ?13, ?14, ?15, ?16, ?17, ?18, ?19, ?20, ?21);";
|
||||
" ?13, ?14, ?15, ?16, ?17, ?18, ?19, ?20, ?21, ?22);";
|
||||
|
||||
const char *const sqlUpdateAppGroup = "UPDATE app_group"
|
||||
" SET order_index = ?2, enabled = ?3,"
|
||||
@ -91,8 +91,8 @@ const char *const sqlUpdateAppGroup = "UPDATE app_group"
|
||||
" speed_limit_in = ?11, speed_limit_out = ?12,"
|
||||
" limit_packet_loss = ?13, limit_latency = ?14,"
|
||||
" limit_bufsize_in = ?15, limit_bufsize_out = ?16,"
|
||||
" name = ?17, block_text = ?18, allow_text = ?19,"
|
||||
" period_from = ?20, period_to = ?21"
|
||||
" name = ?17, kill_text = ?18, block_text = ?19,"
|
||||
" allow_text = ?20, period_from = ?21, period_to = ?22"
|
||||
" WHERE app_group_id = ?1;";
|
||||
|
||||
const char *const sqlDeleteAppGroup = "DELETE FROM app_group"
|
||||
@ -423,10 +423,11 @@ bool loadAppGroups(SqliteDb *db, FirewallConf &conf)
|
||||
appGroup->setLimitBufferSizeIn(quint32(stmt.columnInt(13)));
|
||||
appGroup->setLimitBufferSizeOut(quint32(stmt.columnInt(14)));
|
||||
appGroup->setName(stmt.columnText(15));
|
||||
appGroup->setBlockText(stmt.columnText(16));
|
||||
appGroup->setAllowText(stmt.columnText(17));
|
||||
appGroup->setPeriodFrom(stmt.columnText(18));
|
||||
appGroup->setPeriodTo(stmt.columnText(19));
|
||||
appGroup->setKillText(stmt.columnText(16));
|
||||
appGroup->setBlockText(stmt.columnText(17));
|
||||
appGroup->setAllowText(stmt.columnText(18));
|
||||
appGroup->setPeriodFrom(stmt.columnText(19));
|
||||
appGroup->setPeriodTo(stmt.columnText(20));
|
||||
appGroup->setEdited(false);
|
||||
|
||||
conf.addAppGroup(appGroup);
|
||||
@ -448,8 +449,8 @@ bool saveAppGroup(SqliteDb *db, AppGroup *appGroup, int orderIndex)
|
||||
<< appGroup->limitOutEnabled() << appGroup->speedLimitIn() << appGroup->speedLimitOut()
|
||||
<< appGroup->limitPacketLoss() << appGroup->limitLatency()
|
||||
<< appGroup->limitBufferSizeIn() << appGroup->limitBufferSizeOut() << appGroup->name()
|
||||
<< appGroup->blockText() << appGroup->allowText() << appGroup->periodFrom()
|
||||
<< appGroup->periodTo();
|
||||
<< appGroup->killText() << appGroup->blockText() << appGroup->allowText()
|
||||
<< appGroup->periodFrom() << appGroup->periodTo();
|
||||
|
||||
const char *sql = rowExists ? sqlUpdateAppGroup : sqlInsertAppGroup;
|
||||
|
||||
|
@ -112,6 +112,7 @@ CREATE TABLE app_group(
|
||||
limit_bufsize_in INTEGER NOT NULL DEFAULT 150000,
|
||||
limit_bufsize_out INTEGER NOT NULL DEFAULT 150000,
|
||||
name TEXT NOT NULL,
|
||||
kill_text TEXT,
|
||||
block_text TEXT NOT NULL,
|
||||
allow_text TEXT NOT NULL,
|
||||
period_from TEXT NOT NULL,
|
||||
|
@ -132,12 +132,12 @@ void ApplicationsPage::setAppGroupIndex(int v)
|
||||
|
||||
void ApplicationsPage::onSaveWindowState(IniUser *ini)
|
||||
{
|
||||
ini->setOptWindowAppsSplit(m_splitter->saveState());
|
||||
ini->setOptWindowAppsSplit(m_allowSplitter->saveState());
|
||||
}
|
||||
|
||||
void ApplicationsPage::onRestoreWindowState(IniUser *ini)
|
||||
{
|
||||
m_splitter->restoreState(ini->optWindowAppsSplit());
|
||||
m_allowSplitter->restoreState(ini->optWindowAppsSplit());
|
||||
}
|
||||
|
||||
void ApplicationsPage::onRetranslateUi()
|
||||
@ -165,10 +165,11 @@ void ApplicationsPage::onRetranslateUi()
|
||||
m_cbGroupEnabled->setText(tr("Enabled"));
|
||||
m_ctpGroupPeriod->checkBox()->setText(tr("time period:"));
|
||||
|
||||
m_killApps->labelTitle()->setText(tr("Kill Process"));
|
||||
m_blockApps->labelTitle()->setText(tr("Block"));
|
||||
m_allowApps->labelTitle()->setText(tr("Allow"));
|
||||
|
||||
auto splitterHandle = m_splitter->handle();
|
||||
auto splitterHandle = m_allowSplitter->handle();
|
||||
splitterHandle->btMoveAllFrom1To2()->setToolTip(tr("Move All Lines to 'Allow'"));
|
||||
splitterHandle->btMoveAllFrom2To1()->setToolTip(tr("Move All Lines to 'Block'"));
|
||||
splitterHandle->btInterchangeAll()->setToolTip(tr("Interchange All Lines"));
|
||||
@ -225,12 +226,13 @@ void ApplicationsPage::setupUi()
|
||||
layout->addLayout(groupHeader);
|
||||
|
||||
// App Columns
|
||||
setupKillApps();
|
||||
setupBlockApps();
|
||||
setupAllowApps();
|
||||
|
||||
// Splitter
|
||||
setupSplitter();
|
||||
layout->addWidget(m_splitter, 1);
|
||||
layout->addWidget(m_killSplitter, 1);
|
||||
|
||||
// Splitter Buttons
|
||||
setupSplitterButtons();
|
||||
@ -513,6 +515,18 @@ void ApplicationsPage::setupGroupLimitBufferSize()
|
||||
});
|
||||
}
|
||||
|
||||
void ApplicationsPage::setupKillApps()
|
||||
{
|
||||
m_killApps = new AppsColumn();
|
||||
m_killApps->icon()->setPixmap(IconCache::file(":/icons/scull.png"));
|
||||
|
||||
connect(m_killApps->editText(), &QPlainTextEdit::textChanged, this, [&] {
|
||||
const auto text = m_killApps->editText()->toPlainText();
|
||||
|
||||
pageAppGroupSetText(this, &AppGroup::setKillText, text);
|
||||
});
|
||||
}
|
||||
|
||||
void ApplicationsPage::setupBlockApps()
|
||||
{
|
||||
m_blockApps = new AppsColumn();
|
||||
@ -541,18 +555,23 @@ void ApplicationsPage::setupAllowApps()
|
||||
|
||||
void ApplicationsPage::setupSplitter()
|
||||
{
|
||||
m_splitter = new TextArea2Splitter();
|
||||
m_allowSplitter = new TextArea2Splitter();
|
||||
Q_ASSERT(!m_allowSplitter->handle());
|
||||
|
||||
Q_ASSERT(!m_splitter->handle());
|
||||
m_allowSplitter->addWidget(m_blockApps);
|
||||
m_allowSplitter->addWidget(m_allowApps);
|
||||
|
||||
m_splitter->addWidget(m_blockApps);
|
||||
m_splitter->addWidget(m_allowApps);
|
||||
|
||||
auto splitterHandle = m_splitter->handle();
|
||||
auto splitterHandle = m_allowSplitter->handle();
|
||||
Q_ASSERT(splitterHandle);
|
||||
|
||||
splitterHandle->setTextArea1(m_blockApps->editText());
|
||||
splitterHandle->setTextArea2(m_allowApps->editText());
|
||||
|
||||
m_killSplitter = new QSplitter();
|
||||
m_killSplitter->addWidget(m_killApps);
|
||||
m_killSplitter->addWidget(m_allowSplitter);
|
||||
|
||||
m_killSplitter->setSizes({ 0, 1 }); // "Kill Processes" area is always collapsed
|
||||
}
|
||||
|
||||
void ApplicationsPage::setupSplitterButtons()
|
||||
@ -562,12 +581,12 @@ void ApplicationsPage::setupSplitterButtons()
|
||||
m_btSelectFile->text(), tr("Programs (*.exe);;All files (*.*)"));
|
||||
|
||||
if (!filePaths.isEmpty()) {
|
||||
auto area = m_splitter->handle()->currentTextArea();
|
||||
auto area = m_allowSplitter->handle()->currentTextArea();
|
||||
TextAreaUtil::appendText(area, filePaths.join('\n'));
|
||||
}
|
||||
});
|
||||
|
||||
const auto layout = m_splitter->handle()->buttonsLayout();
|
||||
const auto layout = m_allowSplitter->handle()->buttonsLayout();
|
||||
layout->addWidget(m_btSelectFile, 0, Qt::AlignHCenter);
|
||||
}
|
||||
|
||||
@ -598,6 +617,7 @@ void ApplicationsPage::updateGroup()
|
||||
m_ctpGroupPeriod->timeEdit1()->setTime(CheckTimePeriod::toTime(appGroup->periodFrom()));
|
||||
m_ctpGroupPeriod->timeEdit2()->setTime(CheckTimePeriod::toTime(appGroup->periodTo()));
|
||||
|
||||
m_killApps->editText()->setText(appGroup->killText());
|
||||
m_blockApps->editText()->setText(appGroup->blockText());
|
||||
m_allowApps->editText()->setText(appGroup->allowText());
|
||||
}
|
||||
|
@ -55,6 +55,7 @@ private:
|
||||
void setupGroupLimitLatency();
|
||||
void setupGroupLimitPacketLoss();
|
||||
void setupGroupLimitBufferSize();
|
||||
void setupKillApps();
|
||||
void setupBlockApps();
|
||||
void setupAllowApps();
|
||||
void setupSplitter();
|
||||
@ -87,9 +88,11 @@ private:
|
||||
LabelSpin *m_limitBufferSizeOut = nullptr;
|
||||
QCheckBox *m_cbLogBlocked = nullptr;
|
||||
QCheckBox *m_cbLogConn = nullptr;
|
||||
AppsColumn *m_killApps = nullptr;
|
||||
AppsColumn *m_blockApps = nullptr;
|
||||
AppsColumn *m_allowApps = nullptr;
|
||||
TextArea2Splitter *m_splitter = nullptr;
|
||||
QSplitter *m_killSplitter = nullptr;
|
||||
TextArea2Splitter *m_allowSplitter = nullptr;
|
||||
QToolButton *m_btSelectFile = nullptr;
|
||||
};
|
||||
|
||||
|
@ -373,10 +373,18 @@ bool ConfUtil::parseAppGroups(EnvManager &envManager, const QList<AppGroup *> &a
|
||||
app.logConn = appGroup->logConn();
|
||||
app.groupIndex = i;
|
||||
|
||||
const auto killText = envManager.expandString(appGroup->killText());
|
||||
const auto blockText = envManager.expandString(appGroup->blockText());
|
||||
const auto allowText = envManager.expandString(appGroup->allowText());
|
||||
|
||||
app.blocked = true;
|
||||
app.killProcess = true;
|
||||
if (!parseAppsText(app, killText, wildAppsMap, prefixAppsMap, exeAppsMap, wildAppsSize,
|
||||
prefixAppsSize, exeAppsSize))
|
||||
return false;
|
||||
|
||||
app.blocked = true;
|
||||
app.killProcess = false;
|
||||
if (!parseAppsText(app, blockText, wildAppsMap, prefixAppsMap, exeAppsMap, wildAppsSize,
|
||||
prefixAppsSize, exeAppsSize))
|
||||
return false;
|
||||
|
Loading…
Reference in New Issue
Block a user