feat(auth manager & user group): add authentication manager and user group plugin

- 新增认证管理插件以及用户组管理插件
This commit is contained in:
liuxinhao 2023-04-05 14:32:59 +08:00
parent 6c3a1236d4
commit 5a945d86e2
6 changed files with 7 additions and 921 deletions

View File

@ -1,758 +0,0 @@
From d627f399c25625fa3a0483b2bdcb25f2bf25fe6a Mon Sep 17 00:00:00 2001
From: luoqing <luoqing@kylinsec.com.cn>
Date: Thu, 29 Dec 2022 11:33:18 +0800
Subject: [PATCH] fix(audio):Improve the disabling of volume plugin and tray
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 完善音量插件和托盘显示禁用的情况
---
plugins/audio/src/plugin/input-page.cpp | 33 ++--
plugins/audio/src/plugin/input-page.h | 4 +
plugins/audio/src/plugin/output-page.cpp | 153 ++++++++++++------
plugins/audio/src/plugin/output-page.h | 22 ++-
.../src/system-tray/audio-system-tray.cpp | 14 ++
.../audio/src/system-tray/audio-system-tray.h | 8 +-
.../src/system-tray/volume-setting-page.cpp | 139 ++++++++++++----
.../src/system-tray/volume-setting-page.h | 18 ++-
8 files changed, 292 insertions(+), 99 deletions(-)
diff --git a/plugins/audio/src/plugin/input-page.cpp b/plugins/audio/src/plugin/input-page.cpp
index 9dcd9bd..e9f5018 100644
--- a/plugins/audio/src/plugin/input-page.cpp
+++ b/plugins/audio/src/plugin/input-page.cpp
@@ -167,6 +167,16 @@ qint64 AudioInfo::writeData(const char *data, qint64 len)
InputPage::InputPage(QWidget *parent) : QWidget(parent), ui(new Ui::InputPage)
{
ui->setupUi(this);
+ init();
+}
+
+InputPage::~InputPage()
+{
+ delete ui;
+}
+
+void InputPage::init()
+{
m_audioInterface = AudioInterface::instance();
ui->inputVolume->setStyleSheet("color:#2eb3ff;");
initInputDevice();
@@ -176,16 +186,8 @@ InputPage::InputPage(QWidget *parent) : QWidget(parent), ui(new Ui::InputPage)
initConnet();
}
-InputPage::~InputPage()
-{
- delete ui;
-}
-
void InputPage::initInputDevice()
{
- QDBusPendingReply<QStringList> getSources = m_audioInterface->GetSources();
- QStringList sourcesList = getSources.value();
-
QDBusPendingReply<QString> defaultSourcePath = m_audioInterface->GetDefaultSource();
KLOG_DEBUG() << "defaultSourcePath" << defaultSourcePath;
@@ -236,11 +238,7 @@ void InputPage::initActivedPort()
else
{
KLOG_DEBUG() << "ports is null";
- m_isValidPort = false;
- ui->inputDevices->insertItem(0, tr("No input device detected"));
- ui->inputDevices->setEnabled(false);
- ui->volumeSetting->setValue(0);
- ui->volumeSetting->setEnabled(false);
+ disableSettings();
}
}
@@ -294,6 +292,15 @@ void InputPage::initConnet()
connect(m_audioInterface, &AudioInterface::DefaultSourceChange, this, &InputPage::handleDefaultSourceChanged, Qt::QueuedConnection);
}
+void InputPage::disableSettings()
+{
+ m_isValidPort = false;
+ ui->inputDevices->insertItem(0, tr("No input device detected"));
+ ui->inputDevices->setEnabled(false);
+ ui->volumeSetting->setValue(0);
+ ui->volumeSetting->setEnabled(false);
+}
+
void InputPage::handleActivePortChanged(const QString &value)
{
KLOG_DEBUG() << "handleActivePortChanged :" << value;
diff --git a/plugins/audio/src/plugin/input-page.h b/plugins/audio/src/plugin/input-page.h
index 95b8aa4..3b57daf 100644
--- a/plugins/audio/src/plugin/input-page.h
+++ b/plugins/audio/src/plugin/input-page.h
@@ -62,10 +62,14 @@ public:
explicit InputPage(QWidget *parent = nullptr);
~InputPage() override;
QSize sizeHint() const override;
+
+private:
+ void init();
void initInputDevice();
void initInputSettins();
void initActivedPort();
void initConnet();
+ void disableSettings();
void initVoulumeFeedBack();
void initAudioFormat();
diff --git a/plugins/audio/src/plugin/output-page.cpp b/plugins/audio/src/plugin/output-page.cpp
index cc19e07..b28ba53 100644
--- a/plugins/audio/src/plugin/output-page.cpp
+++ b/plugins/audio/src/plugin/output-page.cpp
@@ -21,32 +21,74 @@
#include <qt5-log-i.h>
#include <QComboBox>
-OutputPage::OutputPage(QWidget *parent) : QWidget(parent), ui(new Ui::OutputPage)
+OutputPage::OutputPage(QWidget *parent) : QWidget(parent),
+ ui(new Ui::OutputPage),
+ m_audioInterface(nullptr),
+ m_defaultSink(nullptr)
{
ui->setupUi(this);
- ui->outputVolume->setStyleSheet("color:#2eb3ff;");
- m_audioInterface = AudioInterface::instance();
- initOutputDevice();
- initOutputSettins();
- initConnect();
+ init();
+
+ m_dbusServiceWatcher = new QDBusServiceWatcher();
+ m_dbusServiceWatcher->setConnection(QDBusConnection::sessionBus());
+ m_dbusServiceWatcher->addWatchedService(AUDIO_DBUS_NAME);
+
+ m_dbusServiceWatcher->setWatchMode(QDBusServiceWatcher::WatchForUnregistration);
+ connect(m_dbusServiceWatcher, &QDBusServiceWatcher::serviceUnregistered,[this](const QString &service){
+ KLOG_DEBUG() << "serviceUnregistered:" << service;
+ disableSettings();
+ });
}
OutputPage::~OutputPage()
{
+ delete m_dbusServiceWatcher;
delete ui;
}
-void OutputPage::initOutputDevice()
+void OutputPage::init()
{
- QDBusPendingReply<QStringList> getSinks = m_audioInterface->GetSinks();
- QStringList sinksList = getSinks.value();
+ ui->outputVolume->setStyleSheet("color:#2eb3ff;");
+ ui->volumeSetting->setRange(0, 100);
+ ui->volumeSetting->setSingleStep(1);
+ ui->volumeSetting->setPageStep(1);
+
+ ui->volumeBalance->setRange(-100, 100);
+ ui->volumeBalance->setSingleStep(1);
+ ui->volumeBalance->setPageStep(1);
+
+ m_audioInterface = AudioInterface::instance();
+ initOutputDevice();
+ initConnect();
+}
+void OutputPage::initOutputDevice()
+{
QDBusPendingReply<QString> defaultSinkPath = m_audioInterface->GetDefaultSink();
KLOG_DEBUG() << "defaultSink" << defaultSinkPath;
-
- m_defaultSink = new AudioDeviceInterface(AUDIO_DBUS_NAME, defaultSinkPath, QDBusConnection::sessionBus(), this);
- m_defaultSinkIndex = m_defaultSink->index();
- initActivedPort();
+ KLOG_DEBUG() << "defaultSinkPath.isValid():" << defaultSinkPath.isValid();
+
+ if(defaultSinkPath.isValid())
+ {
+ QString defaultSinkPathString = defaultSinkPath.value();
+ if(!defaultSinkPathString.isEmpty())
+ {
+ m_defaultSink = new AudioDeviceInterface(AUDIO_DBUS_NAME, defaultSinkPath, QDBusConnection::sessionBus(), this);
+ initActivedPort();
+
+ connect(m_defaultSink, &AudioDeviceInterface::volumeChanged, this, &OutputPage::handleVolumeChanged);
+ connect(m_defaultSink, &AudioDeviceInterface::balanceChanged, this, &OutputPage::handleBalanceChanged);
+ connect(m_defaultSink, &AudioDeviceInterface::active_portChanged, this, &OutputPage::handleActivePortChanged);
+ }
+ else
+ {
+ disableSettings();
+ }
+ }
+ else
+ {
+ KLOG_DEBUG() << "defaultSinkPath error:" <<defaultSinkPath.error();
+ }
}
void OutputPage::initActivedPort()
@@ -79,53 +121,40 @@ void OutputPage::initActivedPort()
if (m_defaultSink->active_port() == name)
{
m_defaultDeviceIndex = i;
- KLOG_DEBUG() << "m_defaultDeviceIndex" << m_defaultDeviceIndex;
}
}
}
//默认选中已激活的端口
ui->outputDevices->setCurrentIndex(m_defaultDeviceIndex);
- ui->outputDevices->setEnabled(true);
- ui->volumeSetting->setEnabled(true);
- ui->volumeBalance->setEnabled(true);
+ initOutputSettins();
}
else
{
//无激活端口则禁用音量设置和平衡
KLOG_DEBUG() << "default sink ports is null";
- ui->outputDevices->insertItem(0, tr("No output device detected"));
- ui->outputDevices->setEnabled(false);
- ui->volumeSetting->setValue(0);
- ui->volumeSetting->setEnabled(false);
- ui->volumeBalance->setValue(0);
- ui->volumeBalance->setEnabled(false);
+ disableSettings();
}
}
void OutputPage::initOutputSettins()
{
- initVolumeSetting();
- initBalanceSetting();
+ ui->outputDevices->setEnabled(true);
+ ui->volumeSetting->setEnabled(true);
+ ui->volumeBalance->setEnabled(true);
+ initVolumeValue();
+ initBalanceValue();
}
-void OutputPage::initVolumeSetting()
+void OutputPage::initVolumeValue()
{
- ui->volumeSetting->setRange(0, 100);
- ui->volumeSetting->setSingleStep(1);
- ui->volumeSetting->setPageStep(1);
-
double currentVolumeDouble = m_defaultSink->volume() * 100;
int currentVolume = round(currentVolumeDouble);
ui->volumeSetting->setValue(currentVolume);
ui->outputVolume->setText(QString::number(currentVolume) + "%");
}
-void OutputPage::initBalanceSetting()
+void OutputPage::initBalanceValue()
{
- ui->volumeBalance->setRange(-100, 100);
- ui->volumeBalance->setSingleStep(1);
- ui->volumeBalance->setPageStep(1);
-
KLOG_DEBUG() << "current balance:" << m_defaultSink->balance();
double currentBalanceDouble = m_defaultSink->balance() * 100;
int currentBalance = round(currentBalanceDouble);
@@ -134,9 +163,6 @@ void OutputPage::initBalanceSetting()
void OutputPage::initConnect()
{
- connect(m_defaultSink, &AudioDeviceInterface::volumeChanged, this, &OutputPage::handleVolumeChanged);
- connect(m_defaultSink, &AudioDeviceInterface::balanceChanged, this, &OutputPage::handleBalanceChanged);
- connect(m_defaultSink, &AudioDeviceInterface::active_portChanged, this, &OutputPage::handleActivePortChanged);
connect(m_audioInterface, &AudioInterface::SinkAdded, this, &OutputPage::handleSinkAdded);
connect(m_audioInterface, &AudioInterface::SinkDelete, this, &OutputPage::handleSinkDelete);
connect(m_audioInterface, &AudioInterface::DefaultSinkChange, this, &OutputPage::handleDefaultSinkChanged, Qt::QueuedConnection);
@@ -204,31 +230,68 @@ void OutputPage::handleBalanceChanged(double value)
ui->volumeBalance->blockSignals(false);
}
-void OutputPage::handleSinkAdded(int index)
+void OutputPage::disableSettings()
{
- KLOG_DEBUG() << "SinkAdded";
+ ui->outputDevices->insertItem(0, tr("No output device detected"));
+ ui->outputDevices->setEnabled(false);
+
+ ui->volumeSetting->setValue(0);
+ ui->outputVolume->setText(QString::number(0) + "%");
+ ui->volumeSetting->setEnabled(false);
+
+ ui->volumeBalance->setValue(0);
+ ui->volumeBalance->setEnabled(false);
}
void OutputPage::handleDefaultSinkChanged(int index)
{
// delete and restart init defaultSource
- m_defaultSink->deleteLater();
- m_defaultSink = nullptr;
+ if(m_defaultSink != nullptr)
+ {
+ m_defaultSink->deleteLater();
+ m_defaultSink = nullptr;
+ }
ui->outputDevices->blockSignals(true);
ui->outputDevices->clear();
ui->outputDevices->blockSignals(false);
initOutputDevice();
initOutputSettins();
+}
+
- connect(m_defaultSink, &AudioDeviceInterface::volumeChanged, this, &OutputPage::handleVolumeChanged);
- connect(m_defaultSink, &AudioDeviceInterface::balanceChanged, this, &OutputPage::handleBalanceChanged);
- connect(m_defaultSink, &AudioDeviceInterface::active_portChanged, this, &OutputPage::handleActivePortChanged);
+void OutputPage::handleSinkAdded(int index)
+{
+ KLOG_DEBUG() << "SinkAdded";
+ //当已经存在defaultSink时暂时不处理其他sink的添加
+ if(m_defaultSink != nullptr)
+ {
+ //刷新界面
+ initOutputSettins();
+ }
+ else
+ {
+ //defaultSink不存在则重新初始化设备
+ initOutputDevice();
+ }
}
+//当pulseAudio被kill时会发出SinkDelete和SourceDelete信号
void OutputPage::handleSinkDelete(int index)
{
KLOG_DEBUG() << "SinkDelete";
+ QDBusPendingReply<QStringList> getSinks = m_audioInterface->GetSinks();
+ QStringList sinksList = getSinks.value();
+
+ //当前存在defaultSink
+ if(m_defaultSink != nullptr)
+ {
+ //删除的是defaultSink则进行处理删除其他sink暂时不处理
+ if(m_defaultSink->index() == index)
+ {
+ disableSettings();
+ }
+ }
}
QSize OutputPage::sizeHint() const
diff --git a/plugins/audio/src/plugin/output-page.h b/plugins/audio/src/plugin/output-page.h
index 76ac458..abaf9a1 100644
--- a/plugins/audio/src/plugin/output-page.h
+++ b/plugins/audio/src/plugin/output-page.h
@@ -16,6 +16,7 @@
#include <QMap>
#include <QWidget>
+#include <QDBusServiceWatcher>
QT_BEGIN_NAMESPACE
namespace Ui
@@ -35,12 +36,7 @@ public:
explicit OutputPage(QWidget *parent = nullptr);
~OutputPage() override;
QSize sizeHint() const override;
- void initOutputDevice();
- void initOutputSettins();
- void initConnect();
- void initActivedPort();
- void initVolumeSetting();
- void initBalanceSetting();
+
public slots:
void handleDefaultSinkChanged(int index);
void handleSinkAdded(int index);
@@ -49,13 +45,25 @@ public slots:
void handleVolumeChanged(double value);
void handleBalanceChanged(double value);
+private:
+ void init();
+ void initOutputDevice();
+ void initOutputSettins();
+ void initConnect();
+ void initActivedPort();
+ void initVolumeValue();
+ void initBalanceValue();
+
+ void disableSettings();
+
private:
Ui::OutputPage *ui;
AudioInterface *m_audioInterface;
QMap<int, AudioDeviceInterface *> m_outputDevicesMap;
AudioDeviceInterface *m_defaultSink;
- int m_defaultSinkIndex;
int m_defaultDeviceIndex;
+ QDBusServiceWatcher *m_dbusServiceWatcher;
};
+
#endif //KIRAN_CPANEL_AUDIO_OUTPUT_PAGE_H
diff --git a/plugins/audio/src/system-tray/audio-system-tray.cpp b/plugins/audio/src/system-tray/audio-system-tray.cpp
index 7fcb9c3..00e90f7 100644
--- a/plugins/audio/src/system-tray/audio-system-tray.cpp
+++ b/plugins/audio/src/system-tray/audio-system-tray.cpp
@@ -47,8 +47,10 @@ AudioSystemTray::AudioSystemTray(QWidget *parent) : QWidget(parent)
initTrayIcon();
initMenu();
+ initDbusServiceWatcher();
initConnect();
}
+
AudioSystemTray::~AudioSystemTray()
{
}
@@ -99,6 +101,18 @@ void AudioSystemTray::initMenu()
connect(m_mixedSetting, &QAction::triggered, this, &AudioSystemTray::handleMixedSettingClicked);
}
+void AudioSystemTray::initDbusServiceWatcher()
+{
+ m_dbusServiceWatcher = new QDBusServiceWatcher();
+ m_dbusServiceWatcher->setConnection(QDBusConnection::sessionBus());
+ m_dbusServiceWatcher->addWatchedService(AUDIO_DBUS_NAME);
+ m_dbusServiceWatcher->setWatchMode(QDBusServiceWatcher::WatchForUnregistration);
+ connect(m_dbusServiceWatcher, &QDBusServiceWatcher::serviceUnregistered, [this](const QString &service)
+ {
+ setTrayIcon(0);
+ });
+}
+
void AudioSystemTray::initConnect()
{
connect(m_systemTray, &QSystemTrayIcon::activated, this, &AudioSystemTray::handleAudioTrayClicked);
diff --git a/plugins/audio/src/system-tray/audio-system-tray.h b/plugins/audio/src/system-tray/audio-system-tray.h
index 623c602..16846e6 100644
--- a/plugins/audio/src/system-tray/audio-system-tray.h
+++ b/plugins/audio/src/system-tray/audio-system-tray.h
@@ -17,8 +17,7 @@
#include <QSystemTrayIcon>
#include <QWidget>
-// #include <QVBoxLayout>
-// #include <QScrollArea>
+#include <QDBusServiceWatcher>
class VolumeSettingPage;
class MixedSettingPage;
@@ -38,12 +37,13 @@ public:
void initTrayIcon();
void initMenu();
void initConnect();
+ void initDbusServiceWatcher();
void setVolumeSettingPos();
void setMixedSettingPos();
QPixmap trayIconColorSwitch(const QString& iconPath, const int iconSize = 16);
void getTrayGeometry();
-public slots:
+public slots:
void handleAudioTrayClicked(QSystemTrayIcon::ActivationReason reason);
void handleMixedSettingClicked();
void handleVolumeSettingClicked();
@@ -72,6 +72,8 @@ private:
QString m_colorTheme;
int xTray, yTray, heightTray, widthTray;
+
+ QDBusServiceWatcher *m_dbusServiceWatcher;
};
#endif // KIRAN_CPANEL_AUDIO_AUDIOSYSTEMTRAY_H
diff --git a/plugins/audio/src/system-tray/volume-setting-page.cpp b/plugins/audio/src/system-tray/volume-setting-page.cpp
index dc43283..fac69a6 100644
--- a/plugins/audio/src/system-tray/volume-setting-page.cpp
+++ b/plugins/audio/src/system-tray/volume-setting-page.cpp
@@ -26,26 +26,38 @@
#include <QStyleOption>
#include <QSvgRenderer>
-VolumeSettingPage::VolumeSettingPage(enum AudioNode audio, QString objectPath, QWidget *parent) : QWidget(parent), ui(new Ui::VolumeSettingPage)
+VolumeSettingPage::VolumeSettingPage(enum AudioNode audio, const QString objectPath, QWidget *parent) : QWidget(parent), ui(new Ui::VolumeSettingPage)
{
ui->setupUi(this);
ui->volume->setStyleSheet("color:#2eb3ff;");
QDBusConnection session = QDBusConnection::sessionBus();
m_audioInterface = AudioInterface::instance();
- audioNode = audio;
- if (audioNode == AUDIO_DEVICE)
+ m_audioNode = audio;
+
+ if (m_audioNode == AUDIO_DEVICE)
{
- KLOG_DEBUG() << "AUDIO_DEVICE";
- m_sink = new AudioDeviceInterface(AUDIO_DBUS_NAME, objectPath, session, this);
+ QDBusPendingReply<QString> defaultSinkPath = m_audioInterface->GetDefaultSink();
+ m_sink = new AudioDeviceInterface(AUDIO_DBUS_NAME, defaultSinkPath, QDBusConnection::sessionBus(), this);
initAudioDevice();
+
+ connect(m_sink, &AudioDeviceInterface::volumeChanged, this, &VolumeSettingPage::handleVolumeChanged);
+ connect(ui->volumeSetting, &QSlider::valueChanged, [this](int value)
+ {
+ double volumeValue = static_cast<double>(value) / static_cast<double>(100);
+ m_sink->SetVolume(volumeValue); });
+
+ connect(m_audioInterface, &AudioInterface::SinkAdded, this, &VolumeSettingPage::handleSinkAdded);
+ connect(m_audioInterface, &AudioInterface::SinkDelete, this, &VolumeSettingPage::handleSinkDelete);
+ connect(m_audioInterface, &AudioInterface::DefaultSinkChange, this, &VolumeSettingPage::handleDefaultSinkChanged, Qt::QueuedConnection);
}
- else if (audioNode == AUDIO_STREAM)
+ else if (m_audioNode == AUDIO_STREAM)
{
- KLOG_DEBUG() << "AUDIO_STREAM";
m_sinkInput = new AudioStreamInterface(AUDIO_DBUS_NAME, objectPath, session, this);
initAudioStream();
}
connect(ui->muteButton, &QPushButton::clicked, this, &VolumeSettingPage::handleMuteButtonClicked);
+
+ initDbusServiceWatcher();
}
VolumeSettingPage::~VolumeSettingPage()
@@ -53,22 +65,47 @@ VolumeSettingPage::~VolumeSettingPage()
delete ui;
}
+void VolumeSettingPage::initDbusServiceWatcher()
+{
+ m_dbusServiceWatcher = new QDBusServiceWatcher();
+ m_dbusServiceWatcher->setConnection(QDBusConnection::sessionBus());
+ m_dbusServiceWatcher->addWatchedService(AUDIO_DBUS_NAME);
+ m_dbusServiceWatcher->setWatchMode(QDBusServiceWatcher::WatchForUnregistration);
+ connect(m_dbusServiceWatcher, &QDBusServiceWatcher::serviceUnregistered, [this](const QString &service)
+ {
+ KLOG_DEBUG() << "serviceUnregistered:" << service;
+ disableSettings(); });
+}
+
void VolumeSettingPage::initAudioDevice()
{
- initSettings(m_sink);
+ KLOG_DEBUG() << "AUDIO_DEVICE";
+ QDBusPendingReply<QString> getPorts = m_sink->GetPorts();
+ // 解析默认sink的端口信息
+ QJsonParseError jsonParseError;
+ QJsonDocument doc = QJsonDocument::fromJson(getPorts.value().toLatin1(), &jsonParseError);
+ if (!doc.isNull() && jsonParseError.error == QJsonParseError::NoError)
+ {
+ initSettings(m_sink);
+ }
+ else
+ {
+ // 无激活端口则禁用音量设置
+ disableSettings();
+ }
ui->volumeName->setText(tr("Volume"));
- connect(m_sink, &AudioDeviceInterface::volumeChanged, this, &VolumeSettingPage::handleVolumeChanged);
- connect(m_sink, &AudioDeviceInterface::muteChanged, [=](bool value)
- { KLOG_DEBUG() << "m_sink muteChanged:" << value; });
}
void VolumeSettingPage::initAudioStream()
{
+ KLOG_DEBUG() << "AUDIO_STREAM";
initSettings(m_sinkInput);
ui->volumeName->setText(m_sinkInput->GetProperty("application.name"));
connect(m_sinkInput, &AudioStreamInterface::volumeChanged, this, &VolumeSettingPage::handleVolumeChanged);
- connect(m_sinkInput, &AudioStreamInterface::muteChanged, [=](bool value)
- { KLOG_DEBUG() << "m_sinkInput muteChanged:" << value; });
+ connect(ui->volumeSetting, &QSlider::valueChanged, [=](int value)
+ {
+ double volumeValue = static_cast<double>(value) / static_cast<double>(100);
+ m_sinkInput->SetVolume(volumeValue); });
}
template <class Audio>
@@ -77,6 +114,7 @@ void VolumeSettingPage::initSettings(Audio *audio)
ui->volumeSetting->setRange(0, 100);
ui->volumeSetting->setSingleStep(1);
ui->volumeSetting->setPageStep(1);
+ ui->volumeSetting->setEnabled(true);
KLOG_DEBUG() << "current volume:" << audio->volume();
double currentVolumeDouble = audio->volume() * 100;
@@ -84,17 +122,12 @@ void VolumeSettingPage::initSettings(Audio *audio)
setVolumeIcon(currentVolume);
ui->volumeSetting->setValue(currentVolume);
ui->volume->setText(QString::number(currentVolume) + "%");
-
- connect(ui->volumeSetting, &QSlider::valueChanged, [=](int value)
- {
- double volumeValue = static_cast<double>(value) / static_cast<double>(100);
- audio->SetVolume(volumeValue); });
}
void VolumeSettingPage::handleVolumeChanged(double value)
{
- ui->volumeSetting->blockSignals(true); //为了避免拖动的同时设置位置会出现问题
- int currentVolume = round(value * 100); //表示数值的时候向上取整
+ ui->volumeSetting->blockSignals(true); // 为了避免拖动的同时设置位置会出现问题
+ int currentVolume = round(value * 100); // 表示数值的时候向上取整
ui->volume->setText(QString::number(currentVolume) + "%");
setVolumeIcon(currentVolume);
ui->volumeSetting->setValue(currentVolume);
@@ -103,12 +136,56 @@ void VolumeSettingPage::handleVolumeChanged(double value)
void VolumeSettingPage::handleMuteButtonClicked()
{
- if (audioNode == AUDIO_DEVICE)
+ if (m_audioNode == AUDIO_DEVICE)
clickMuteButton(m_sink);
else
clickMuteButton(m_sinkInput);
}
+void VolumeSettingPage::handleDefaultSinkChanged(int index)
+{
+ // delete and restart init defaultSink
+ if (m_sink != nullptr)
+ {
+ m_sink->deleteLater();
+ m_sink = nullptr;
+ }
+
+ QDBusPendingReply<QString> defaultSinkPath = m_audioInterface->GetDefaultSink();
+ m_sink = new AudioDeviceInterface(AUDIO_DBUS_NAME, defaultSinkPath, QDBusConnection::sessionBus(), this);
+ initAudioDevice();
+ connect(m_sink, &AudioDeviceInterface::volumeChanged, this, &VolumeSettingPage::handleVolumeChanged);
+}
+
+void VolumeSettingPage::handleSinkAdded(int index)
+{
+ KLOG_DEBUG() << "SinkAdded";
+ // 当已经存在defaultSink时暂时不处理其他sink的添加
+ if (m_sink != nullptr)
+ {
+ // 刷新界面
+ initSettings(m_sink);
+ }
+ else
+ {
+ // defaultSink不存在则重新初始化设备
+ initAudioDevice();
+ }
+}
+
+void VolumeSettingPage::handleSinkDelete(int index)
+{
+ // 当前存在Sink
+ if (m_sink != nullptr)
+ {
+ // 删除的是defaultSink则进行处理删除其他sink暂时不处理
+ if (m_sink->index() == index)
+ {
+ disableSettings();
+ }
+ }
+}
+
template <class Audio>
void VolumeSettingPage::clickMuteButton(Audio *audio)
{
@@ -120,19 +197,17 @@ void VolumeSettingPage::clickMuteButton(Audio *audio)
KLOG_DEBUG() << "m_sink->mute() :" << audio->mute();
if (!audio->mute())
{
- volumeBeforeMute = currentVolume;
- KLOG_DEBUG() << "volumeBeforeMute:" << volumeBeforeMute;
+ m_volumeBeforeMute = currentVolume;
audio->SetMute(true);
}
}
else
{
- if (volumeBeforeMute != 0)
+ if (m_volumeBeforeMute != 0)
{
- KLOG_DEBUG() << "SetVolume volumeBeforeMute:" << volumeBeforeMute;
- audio->SetVolume(static_cast<double>(volumeBeforeMute) / static_cast<double>(100));
- volumeBeforeMute = 0;
- KLOG_DEBUG() << "volumeBeforeMute = 0";
+ KLOG_DEBUG() << "SetVolume m_volumeBeforeMute:" << m_volumeBeforeMute;
+ audio->SetVolume(static_cast<double>(m_volumeBeforeMute) / static_cast<double>(100));
+ m_volumeBeforeMute = 0;
}
}
}
@@ -172,6 +247,14 @@ QPixmap VolumeSettingPage::trayIconColorSwitch(const QString &iconPath)
return pixmap;
}
+void VolumeSettingPage::disableSettings()
+{
+ ui->volumeSetting->setValue(0);
+ ui->volume->setText(QString::number(0) + "%");
+ ui->volumeSetting->setEnabled(false);
+ setVolumeIcon(0);
+}
+
void VolumeSettingPage::hideLine()
{
ui->line->hide();
diff --git a/plugins/audio/src/system-tray/volume-setting-page.h b/plugins/audio/src/system-tray/volume-setting-page.h
index d78bd13..4719021 100644
--- a/plugins/audio/src/system-tray/volume-setting-page.h
+++ b/plugins/audio/src/system-tray/volume-setting-page.h
@@ -17,6 +17,7 @@
#include <QWidget>
#include "common/audio-node.h"
+#include <QDBusServiceWatcher>
QT_BEGIN_NAMESPACE
namespace Ui
@@ -36,17 +37,26 @@ public:
explicit VolumeSettingPage(enum AudioNode audio, const QString objectPath, QWidget *parent = nullptr);
~VolumeSettingPage() override;
+ QPixmap trayIconColorSwitch(const QString &iconPath);
+ void disableSettings();
+
+private:
+ void initDbusServiceWatcher();
void initAudioDevice();
void initAudioStream();
template <class Audio>
void initSettings(Audio *audio);
template <class Audio>
void clickMuteButton(Audio *audio);
- QPixmap trayIconColorSwitch(const QString &iconPath);
+
public slots:
void handleVolumeChanged(double value);
void handleMuteButtonClicked();
+ void handleDefaultSinkChanged(int index);
+ void handleSinkAdded(int index);
+ void handleSinkDelete(int index);
+
void setVolumeIcon(int value);
void hideLine();
@@ -56,8 +66,10 @@ private:
AudioDeviceInterface *m_sink;
AudioStreamInterface *m_sinkInput;
- int volumeBeforeMute;
- AudioNode audioNode;
+ int m_volumeBeforeMute;
+ AudioNode m_audioNode;
+
+ QDBusServiceWatcher *m_dbusServiceWatcher;
};
#endif // KIRAN_CPANEL_AUDIO_VOLUME_SETTING_PAGE_H
--
2.33.0

View File

@ -1,37 +0,0 @@
From 4d70ccd259e54a48507f722085101ff76a414962 Mon Sep 17 00:00:00 2001
From: luoqing <luoqing@kylinsec.com.cn>
Date: Thu, 29 Dec 2022 11:22:42 +0800
Subject: [PATCH] fix(network):Change the width of the secondary options
sidebar
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 修改二级选项侧边栏的宽度
---
plugins/network/src/plugin/cpanel-network-widget.ui | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/network/src/plugin/cpanel-network-widget.ui b/plugins/network/src/plugin/cpanel-network-widget.ui
index add60a4..de70410 100644
--- a/plugins/network/src/plugin/cpanel-network-widget.ui
+++ b/plugins/network/src/plugin/cpanel-network-widget.ui
@@ -63,13 +63,13 @@
</property>
<property name="minimumSize">
<size>
- <width>283</width>
+ <width>272</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
- <width>283</width>
+ <width>272</width>
<height>16777215</height>
</size>
</property>
--
2.33.0

View File

@ -1,52 +0,0 @@
From 0d0b3c2403abd618b6f664f9e21b0ed8672b852b Mon Sep 17 00:00:00 2001
From: luoqing <luoqing@kylinsec.com.cn>
Date: Thu, 5 Jan 2023 13:48:58 +0800
Subject: [PATCH] fix(network):Fix the problem that the network settings of the
control center, clone MAC address settings, can't be saved after being
modified and cleared
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 修复控制中心网络设置克隆MAC地址设置保存之后,再修改清空,保存无法保存的问题
---
.../plugin/setting-widget/ethernet-widget.cpp | 22 ++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/plugins/network/src/plugin/setting-widget/ethernet-widget.cpp b/plugins/network/src/plugin/setting-widget/ethernet-widget.cpp
index af438bf..9d5dfe7 100644
--- a/plugins/network/src/plugin/setting-widget/ethernet-widget.cpp
+++ b/plugins/network/src/plugin/setting-widget/ethernet-widget.cpp
@@ -89,8 +89,28 @@ void EthernetWidget::saveSettings()
QString cloneMac = ui->cloneDeviceMac->text();
KLOG_DEBUG() << "macAddress:" << macAddress;
KLOG_DEBUG() << "cloneMac:" << cloneMac;
+
m_wiredSetting->setMacAddress(QByteArray::fromHex(macAddress.toUtf8()));
- m_wiredSetting->setClonedMacAddress(QByteArray::fromHex(cloneMac.toUtf8()));
+
+ if(cloneMac.isEmpty())
+ {
+ /**
+ * assigned-mac-address:
+ * The new field for the cloned MAC address.
+ * It can be either a hardware address in ASCII representation,
+ * or one of the special values "preserve", "permanent", "random" or "stable".
+ * This field replaces the deprecated "cloned-mac-address" on D-Bus,
+ * which can only contain explicit hardware addresses.
+ * Note that this property only exists in D-Bus API.
+ * libnm and nmcli continue to call this property "cloned-mac-address".
+ */
+ m_wiredSetting->setAssignedMacAddress(QString());
+ m_wiredSetting->setClonedMacAddress(QByteArray());
+ }
+ else
+ {
+ m_wiredSetting->setClonedMacAddress(QByteArray::fromHex(cloneMac.toUtf8()));
+ }
m_wiredSetting->setMtu(ui->customMTU->value());
}
}
--
2.33.0

View File

@ -1,68 +0,0 @@
From 341ba1fb31bc94ce0c7a3821c88831a465f15bc1 Mon Sep 17 00:00:00 2001
From: liuxinhao <liuxinhao@kylinsec.com.cn>
Date: Tue, 13 Dec 2022 14:18:53 +0800
Subject: [PATCH] fix(translation): Translation activation state
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 翻译激活状态
---
.../translations/kiran-cpanel-system.zh_CN.ts | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/plugins/system/translations/kiran-cpanel-system.zh_CN.ts b/plugins/system/translations/kiran-cpanel-system.zh_CN.ts
index c40820f..143de36 100644
--- a/plugins/system/translations/kiran-cpanel-system.zh_CN.ts
+++ b/plugins/system/translations/kiran-cpanel-system.zh_CN.ts
@@ -587,7 +587,7 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="../src/pages/system-information/system-information.ui" line="459"/>
<source>Activation status:</source>
- <translation type="unfinished">激活状态:</translation>
+ <translation>激活状态:</translation>
</message>
<message>
<location filename="../src/pages/system-information/system-information.ui" line="544"/>
@@ -632,32 +632,32 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="../src/pages/system-information/system-information.cpp" line="234"/>
<source>UnActivated</source>
- <translation type="unfinished"></translation>
+ <translation>未激活</translation>
</message>
<message>
<location filename="../src/pages/system-information/system-information.cpp" line="242"/>
<source>Activation code has expired</source>
- <translation type="unfinished"></translation>
+ <translation>激活码已过期</translation>
</message>
<message>
<location filename="../src/pages/system-information/system-information.cpp" line="246"/>
<source>Permanently activated</source>
- <translation type="unfinished"></translation>
+ <translation>永久激活</translation>
</message>
<message>
<location filename="../src/pages/system-information/system-information.cpp" line="250"/>
<source>Activated</source>
- <translation type="unfinished">已激活</translation>
+ <translation>已激活</translation>
</message>
<message>
<location filename="../src/pages/system-information/system-information.cpp" line="290"/>
<source>Error</source>
- <translation type="unfinished"></translation>
+ <translation>错误</translation>
</message>
<message>
<location filename="../src/pages/system-information/system-information.cpp" line="290"/>
<source>Failed to open the license activator</source>
- <translation type="unfinished"></translation>
+ <translation>启动激活许可证弹窗失败</translation>
</message>
<message>
<source>Copyright ©</source>
--
2.33.0

View File

@ -1,15 +1,11 @@
Name: kiran-control-panel
Version: 2.4.1
Release: 3
Version: 2.5.0
Release: 1
Summary: Kiran Control Panel
Summary(zh_CN): Kiran桌面控制面板
License: MulanPSL-2.0
Source0: %{name}-%{version}.tar.gz
Patch01: 0001-fix-translation-Translation-activation-state.patch
Patch02: 0001-fix-network-Change-the-width-of-the-secondary-option.patch
Patch03: 0001-fix-audio-Improve-the-disabling-of-volume-plugin-and.patch
Patch04: 0001-fix-network-Fix-the-problem-that-the-network-setting.patch
BuildRequires: gcc-c++
BuildRequires: cmake >= 3.2
@ -32,6 +28,7 @@ BuildRequires: kiran-widgets-qt5-devel
BuildRequires: kiran-qt5-integration-devel
BuildRequires: kiran-qdbusxml2cpp
BuildRequires: kiran-cc-daemon-devel
BuildRequires: kiran-authentication-service-devel >= 2.5
Requires: qt5-qtbase
Requires: qt5-qtbase-gui
@ -45,6 +42,7 @@ Requires: kiran-widgets-qt5 >= 2.4
Requires: kiran-qt5-integration >= 2.4
Requires: kiran-system-daemon >= 2.4
Requires: kiran-session-daemon >= 2.4
Requires: kiran-authentication-service >= 2.5
Requires: glib2
Requires: upower
@ -145,6 +143,9 @@ make %{?_smp_mflags}
rm -rf %{buildroot}
%changelog
* Wed Apr 05 2023 liuxinhao <liuxinhao@kylinsec.com.cn> - 2.5.0-1
- KYOS-F: add authentication manager and user group plugin
* Thu Jan 05 2023 luoqing <luoqing@kylinsec.com.cn> - 2.4.1-3
- KYOS-F: Modify the width of the secondary options sidebar of the network plugin
- KYOS-F: Improve the disabling of volume plugin and tray