2026-04-30 14:53:03 +08:00
|
|
|
#include "ipSplitTunnelingUiController.h"
|
|
|
|
|
|
2026-05-15 09:57:44 +03:00
|
|
|
#include <QDebug>
|
|
|
|
|
|
2026-04-30 14:53:03 +08:00
|
|
|
#include "systemController.h"
|
|
|
|
|
#include "core/utils/errorCodes.h"
|
|
|
|
|
#include "core/utils/routeModes.h"
|
|
|
|
|
#include "core/utils/commonStructs.h"
|
|
|
|
|
|
|
|
|
|
IpSplitTunnelingUiController::IpSplitTunnelingUiController(IpSplitTunnelingController* ipSplitTunnelingController,
|
|
|
|
|
IpSplitTunnelingModel* ipSplitTunnelingModel, QObject *parent)
|
|
|
|
|
: QObject(parent),
|
|
|
|
|
m_ipSplitTunnelingController(ipSplitTunnelingController),
|
|
|
|
|
m_ipSplitTunnelingModel(ipSplitTunnelingModel)
|
|
|
|
|
{
|
|
|
|
|
m_ipSplitTunnelingModel->updateModel(m_ipSplitTunnelingController->getCurrentSites());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void IpSplitTunnelingUiController::addSite(QString hostname)
|
|
|
|
|
{
|
|
|
|
|
if (m_ipSplitTunnelingController->addSite(hostname)) {
|
|
|
|
|
emit finished(tr("New site added: %1").arg(hostname));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void IpSplitTunnelingUiController::removeSite(int index)
|
|
|
|
|
{
|
|
|
|
|
auto modelIndex = m_ipSplitTunnelingModel->index(index);
|
|
|
|
|
auto hostname = m_ipSplitTunnelingModel->data(modelIndex, IpSplitTunnelingModel::Roles::UrlRole).toString();
|
|
|
|
|
if (m_ipSplitTunnelingController->removeSite(hostname)) {
|
|
|
|
|
emit finished(tr("Site removed: %1").arg(hostname));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void IpSplitTunnelingUiController::removeSites()
|
|
|
|
|
{
|
|
|
|
|
m_ipSplitTunnelingController->removeSites();
|
|
|
|
|
emit finished(tr("Site list cleared!"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void IpSplitTunnelingUiController::importSites(const QString &fileName, bool replaceExisting)
|
|
|
|
|
{
|
|
|
|
|
QByteArray jsonData;
|
|
|
|
|
if (!SystemController::readFile(fileName, jsonData)) {
|
|
|
|
|
emit errorOccurred(tr("Can't open file: %1").arg(fileName));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString errorMessage;
|
|
|
|
|
if (m_ipSplitTunnelingController->importSitesFromJson(jsonData, replaceExisting, errorMessage)) {
|
|
|
|
|
emit finished(tr("Import completed"));
|
|
|
|
|
} else {
|
|
|
|
|
emit errorOccurred(errorMessage);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void IpSplitTunnelingUiController::exportSites(const QString &fileName)
|
|
|
|
|
{
|
|
|
|
|
QByteArray jsonData = m_ipSplitTunnelingController->exportSitesToJson();
|
2026-05-15 09:57:44 +03:00
|
|
|
if (!SystemController::saveFile(fileName, jsonData)) {
|
|
|
|
|
qInfo() << "IpSplitTunnelingUiController::exportSites: save or share was cancelled or failed";
|
|
|
|
|
return;
|
|
|
|
|
}
|
2026-04-30 14:53:03 +08:00
|
|
|
emit finished(tr("Export completed"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void IpSplitTunnelingUiController::toggleSplitTunneling(bool enabled)
|
|
|
|
|
{
|
|
|
|
|
m_ipSplitTunnelingController->toggleSplitTunneling(enabled);
|
|
|
|
|
emit isSplitTunnelingEnabledChanged();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void IpSplitTunnelingUiController::setRouteMode(int routeMode)
|
|
|
|
|
{
|
|
|
|
|
m_ipSplitTunnelingController->setRouteMode(static_cast<amnezia::RouteMode>(routeMode));
|
|
|
|
|
emit routeModeChanged();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int IpSplitTunnelingUiController::getRouteMode() const
|
|
|
|
|
{
|
|
|
|
|
return static_cast<int>(m_ipSplitTunnelingController->getRouteMode());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool IpSplitTunnelingUiController::isSplitTunnelingEnabled() const
|
|
|
|
|
{
|
|
|
|
|
return m_ipSplitTunnelingController->isSplitTunnelingEnabled();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void IpSplitTunnelingUiController::updateModel()
|
|
|
|
|
{
|
|
|
|
|
m_ipSplitTunnelingModel->updateModel(m_ipSplitTunnelingController->getCurrentSites());
|
|
|
|
|
}
|