解决VPN崩溃的问题,删除多余代码,实现dbus接口

This commit is contained in:
chenxuechao 2022-11-01 11:15:15 +08:00
parent dfd834fafb
commit 122b1d934b
10 changed files with 71 additions and 36 deletions

View File

@ -212,14 +212,6 @@ wifi_get_secrets (SecretsRequest *req, GError **error)
g_return_val_if_fail (!info->dialog, FALSE);
#if GTK_CHECK_VERSION(3,90,0)
gtk_init ();
#else
int argc = 0;
char ***argv = NULL;
gtk_init (&argc, &argv);
#endif
NMClient *nm_client = nm_client_new (NULL, NULL);
if (!nm_client) {
g_set_error (error,
@ -409,6 +401,14 @@ void agent_init()
GError *error = NULL;
kylinAgent = applet_agent_new (&error);
#if GTK_CHECK_VERSION(3,90,0)
gtk_init ();
#else
int argc = 0;
char ***argv = NULL;
gtk_init (&argc, &argv);
#endif
g_signal_connect (kylinAgent, APPLET_AGENT_GET_SECRETS,
G_CALLBACK (applet_agent_get_secrets_cb), NULL);
g_signal_connect (kylinAgent, APPLET_AGENT_CANCEL_SECRETS,

View File

@ -42,11 +42,36 @@ static bool subLanListSort(const KyConnectItem* info1, const KyConnectItem* info
return result;
}
static bool subVpnListSort(const KyConnectItem* info1, const KyConnectItem* info2)
{
if (info1->m_connectState != info2->m_connectState) {
if (info1->m_connectState == 2) {
return true;
}
if (info2->m_connectState == 2) {
return false;
}
}
QString name1 = info1->m_connectName;
QString name2 = info2->m_connectName;
bool result = true;
if (QString::compare(name1, name2, Qt::CaseInsensitive) > 0) {
result = false;
}
return result;
}
static void lanListSort(QList<KyConnectItem *> &list)
{
qSort(list.begin(), list.end(), subLanListSort);
}
static void vpnListSort(QList<KyConnectItem *> &list)
{
qSort(list.begin(), list.end(), subVpnListSort);
}
KyConnectResourse::KyConnectResourse(QObject *parent) : QObject(parent)
{
m_networkResourceInstance = KyNetworkResourceManager::getInstance();
@ -249,6 +274,10 @@ void KyConnectResourse::getVpnAndVirtualConnections(QList<KyConnectItem *> &conn
connectPtr = nullptr;
}
if (connectItemList.size() > 1) {
vpnListSort(connectItemList);
}
}
void KyConnectResourse::getConnectionList(QString deviceName,

View File

@ -52,6 +52,8 @@ KyNetworkResourceManager::KyNetworkResourceManager(QObject *parent) : QObject(pa
qRegisterMetaType<NetworkManager::Device::Type>("NetworkManager::Device::Type");
qRegisterMetaType<NetworkManager::Device::State>("NetworkManager::Device::State");
qRegisterMetaType<NetworkManager::Device::StateChangeReason>("NetworkManager::Device::StateChangeReason");
qRegisterMetaType<NetworkManager::VpnConnection::State>("NetworkManager::VpnConnection::State");
qRegisterMetaType<NetworkManager::VpnConnection::StateChangeReason>("NetworkManager::VpnConnection::StateChangeReason");
QDBusConnection::systemBus().connect(QString("org.freedesktop.DBus"),
QString("/org/freedesktop/DBus"),

View File

@ -28,7 +28,6 @@ VpnDbusAdaptor::VpnDbusAdaptor(vpnMainWindow *parent)
qDBusRegisterMetaType<QMap<QString, bool> >();
qDBusRegisterMetaType<QMap<QString, int> >();
qDBusRegisterMetaType<QVector<QStringList> >();
qDBusRegisterMetaType<QMap<QString, QVector<QStringList> >>();
//setAutoRelaySignals(true)后会自动转发mainwindow发出的同名信号因此不必再额外写一个转发
setAutoRelaySignals(true);
}
@ -39,11 +38,11 @@ VpnDbusAdaptor::~VpnDbusAdaptor()
}
//虚拟连接列表
QMap<QString, QVector<QStringList>> VpnDbusAdaptor::getVirtualList()
QVector<QStringList> VpnDbusAdaptor::getVirtualList()
{
QMap<QString, QVector<QStringList>> map;
parent()->getVirtualList(map);
return map;
QVector<QStringList> vector;
parent()->getVirtualList(vector);
return vector;
}
//删除

View File

@ -48,7 +48,7 @@ public:
public: // PROPERTIES
public Q_SLOTS: // METHODS
//虚拟连接列表
QMap<QString, QVector<QStringList> > getVirtualList();
QVector<QStringList> getVirtualList();
//刪除 根据网络名称 参数1 0:lan 1:wlan 参数2 为ssid/uuid
Q_NOREPLY void deleteVpn(QString uuid);
//连接 根据网卡类型 参数1 0:lan 1:wlan 参数3 为ssid/uuid

View File

@ -49,7 +49,7 @@ VpnPage::VpnPage(QWidget *parent) : SinglePage(parent)
initUI();
initVpnArea();
connect(m_activeResourse, &KyActiveConnectResourse::stateChangeReason, this, &VpnPage::onConnectionStateChange);
connect(m_activeResourse, &KyActiveConnectResourse::vpnConnectChangeReason, this, &VpnPage::onConnectionStateChange);
connect(m_activeResourse, &KyActiveConnectResourse::activeConnectRemove, this, [=] (QString activeConnectUuid) {
sendVpnStateChangeSignal(activeConnectUuid,Deactivated);
} );
@ -356,12 +356,12 @@ void VpnPage::updateConnectionState(QMap<QString, QListWidgetItem *> &connectMap
}
void VpnPage::onConnectionStateChange(QString uuid,
NetworkManager::ActiveConnection::State state,
NetworkManager::ActiveConnection::Reason reason)
NetworkManager::VpnConnection::State state,
NetworkManager::VpnConnection::StateChangeReason reason)
{
//VpnPage函数内持续监听连接状态的变化并记录供其他函数调用获取状态
if (!m_connectResourse->isVirtualConncection(uuid)) {
qDebug() << "[VpnPage] connection state change signal but not wired";
qDebug() << "[VpnPage] connection state change signal but not vpn";
return;
}
@ -417,16 +417,17 @@ void VpnPage::onConnectionStateChange(QString uuid,
}
void VpnPage::getVirtualList(QMap<QString, QVector<QStringList> > &map)
void VpnPage::getVirtualList(QVector<QStringList> &vector)
{
QList<KyConnectItem *> netConnectList;
QVector<QStringList> vector;
vector.clear();
m_connectResourse->getVpnAndVirtualConnections(netConnectList); //未激活列表的显示
if (!netConnectList.isEmpty()) {
for (int i = 0; i < netConnectList.size(); i++) {
vector.clear();
vector.append(QStringList()<<netConnectList.at(i)->m_connectName<<netConnectList.at(i)->m_connectUuid << netConnectList.at(i)->m_connectPath);
map.insert(netConnectList.at(i)->m_connectUuid, vector);
vector.append(QStringList() << netConnectList.at(i)->m_connectName
<< netConnectList.at(i)->m_connectUuid
<< netConnectList.at(i)->m_connectPath
<< QString::number(netConnectList.at(i)->m_connectState));
}
}
return;
@ -444,7 +445,10 @@ void VpnPage::sendVpnUpdateSignal(KyConnectItem *p_connectItem)
void VpnPage::sendVpnAddSignal(KyConnectItem *p_connectItem)
{
QStringList info;
info << p_connectItem->m_connectName << p_connectItem->m_connectUuid << p_connectItem->m_connectPath;
info << p_connectItem->m_connectName
<< p_connectItem->m_connectUuid
<< p_connectItem->m_connectPath
<< QString::number(p_connectItem->m_connectState);
qDebug() << "[VpnPage] emit vpnAdd because addConnection ";
Q_EMIT vpnAdd(info);

View File

@ -45,7 +45,7 @@ public:
~VpnPage();
//for dbus
void getVirtualList(QMap<QString, QVector<QStringList> > &map);
void getVirtualList(QVector<QStringList> &vector);
void deleteVpn(const QString &connUuid);
void activateVpn(const QString& connUuid);
void deactivateVpn(const QString& connUuid);
@ -94,8 +94,9 @@ Q_SIGNALS:
void vpnConnectChanged(int state);
private Q_SLOTS:
void onConnectionStateChange(QString uuid, NetworkManager::ActiveConnection::State state,
NetworkManager::ActiveConnection::Reason reason);
void onConnectionStateChange(QString uuid,
NetworkManager::VpnConnection::State state,
NetworkManager::VpnConnection::StateChangeReason reason);
void onAddConnection(QString uuid);
void onRemoveConnection(QString path);

View File

@ -928,6 +928,11 @@ void WlanPage::onConnectionStateChanged(QString uuid,
NetworkManager::ActiveConnection::State state,
NetworkManager::ActiveConnection::Reason reason)
{
if (!m_connectResource->isWirelessConnection(uuid)) {
qDebug()<< LOG_FLAG << "it is not wireless connection" << uuid;
return;
}
QString devName, ssid;
m_wirelessNetResource->getSsidByUuid(uuid, ssid);
m_wirelessNetResource->getDeviceByUuid(uuid, devName);
@ -942,11 +947,6 @@ void WlanPage::onConnectionStateChanged(QString uuid,
return;
}
if (!m_connectResource->isWirelessConnection(uuid)) {
qDebug()<< LOG_FLAG << "it is not wireless connection" << uuid;
return;
}
Q_EMIT this->wlanConnectChanged(state);
bool isApConnection = m_connectResource->isApConnection(uuid);

View File

@ -466,11 +466,11 @@ bool vpnMainWindow::eventFilter(QObject *watched, QEvent *event)
return QMainWindow::eventFilter(watched,event);
}
void vpnMainWindow::getVirtualList(QMap<QString, QVector<QStringList>> &map)
void vpnMainWindow::getVirtualList(QVector<QStringList> &vector)
{
map.clear();
vector.clear();
if (nullptr != m_vpnPage) {
m_vpnPage->getVirtualList(map);
m_vpnPage->getVirtualList(vector);
}
}

View File

@ -45,7 +45,7 @@ public:
void showMainwindow();
void hideMainwindow();
void getVirtualList(QMap<QString, QVector<QStringList>> &map);
void getVirtualList(QVector<QStringList> &vector);
//Vpn连接删除