12283 lines
808 KiB
Diff
12283 lines
808 KiB
Diff
From: yangmin100 <yangmin@kylinos.cn>
|
||
Date: Wed, 13 Nov 2024 19:58:45 +0800
|
||
Subject: update changelog
|
||
|
||
---
|
||
bioauth-bin/src/main.cpp | 16 +-
|
||
bioauth/include/bioauth.h | 2 +-
|
||
bioauth/include/loginoptionswidget.h | 16 +-
|
||
bioauth/src/bioauth.cpp | 6 +-
|
||
bioauth/src/biodevices.cpp | 281 ++--
|
||
bioauth/src/loginoptionswidget.cpp | 814 ++++++----
|
||
...desktop.plicykit.pkexec.bioctl-helper.policy.in | 8 +-
|
||
...freedesktop.plicykit.pkexec.biodrvctl.policy.in | 8 +-
|
||
...reedesktop.plicykit.pkexec.biorestart.policy.in | 8 +-
|
||
polkit-agent/CMakeLists.txt | 22 +-
|
||
polkit-agent/assets.qrc | 47 +
|
||
polkit-agent/assets/biowaiting/fingerprint0.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingerprint1.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingerprint10.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingerprint11.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingerprint12.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingerprint13.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingerprint14.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingerprint2.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingerprint3.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingerprint4.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingerprint5.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingerprint6.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingerprint7.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingerprint8.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingerprint9.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingervein0.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingervein1.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingervein10.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingervein11.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingervein2.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingervein3.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingervein4.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingervein5.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingervein6.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingervein7.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingervein8.svg | 1 +
|
||
polkit-agent/assets/biowaiting/fingervein9.svg | 1 +
|
||
polkit-agent/assets/biowaiting/iris0.svg | 1 +
|
||
polkit-agent/assets/biowaiting/iris1.svg | 1 +
|
||
polkit-agent/assets/biowaiting/iris10.svg | 1 +
|
||
polkit-agent/assets/biowaiting/iris11.svg | 1 +
|
||
polkit-agent/assets/biowaiting/iris2.svg | 1 +
|
||
polkit-agent/assets/biowaiting/iris3.svg | 1 +
|
||
polkit-agent/assets/biowaiting/iris4.svg | 1 +
|
||
polkit-agent/assets/biowaiting/iris5.svg | 1 +
|
||
polkit-agent/assets/biowaiting/iris6.svg | 1 +
|
||
polkit-agent/assets/biowaiting/iris7.svg | 1 +
|
||
polkit-agent/assets/biowaiting/iris8.svg | 1 +
|
||
polkit-agent/assets/biowaiting/iris9.svg | 1 +
|
||
polkit-agent/assets/biowaiting/voiceprint0.svg | 1 +
|
||
polkit-agent/assets/biowaiting/voiceprint1.svg | 1 +
|
||
polkit-agent/assets/biowaiting/voiceprint2.svg | 1 +
|
||
polkit-agent/assets/biowaiting/voiceprint3.svg | 1 +
|
||
polkit-agent/assets/biowaiting/voiceprint4.svg | 1 +
|
||
polkit-agent/assets/biowaiting/voiceprint5.svg | 1 +
|
||
polkit-agent/assets/biowaiting/voiceprint6.svg | 1 +
|
||
polkit-agent/assets/biowaiting/voiceprint7.svg | 1 +
|
||
polkit-agent/i18n_ts/bo.ts | 192 +--
|
||
polkit-agent/i18n_ts/bo_CN.ts | 180 ++-
|
||
polkit-agent/i18n_ts/de.ts | 180 ++-
|
||
polkit-agent/i18n_ts/es.ts | 180 ++-
|
||
polkit-agent/i18n_ts/fr.ts | 180 ++-
|
||
polkit-agent/i18n_ts/kk.ts | 180 ++-
|
||
polkit-agent/i18n_ts/ky.ts | 180 ++-
|
||
polkit-agent/i18n_ts/mn.ts | 180 ++-
|
||
polkit-agent/i18n_ts/pt.ts | 53 +-
|
||
polkit-agent/i18n_ts/ru.ts | 53 +-
|
||
polkit-agent/i18n_ts/tr.ts | 178 ++-
|
||
polkit-agent/i18n_ts/ug.ts | 180 ++-
|
||
polkit-agent/i18n_ts/zh_CN.ts | 180 ++-
|
||
polkit-agent/i18n_ts/zh_HK.ts | 182 ++-
|
||
polkit-agent/src/PolkitListener.cpp | 354 ++---
|
||
polkit-agent/src/PolkitListener.h | 48 +-
|
||
polkit-agent/src/fullscreenbackground.cpp | 513 ++++++
|
||
polkit-agent/src/fullscreenbackground.h | 173 ++
|
||
polkit-agent/src/kalabel.cpp | 16 +-
|
||
polkit-agent/src/kalabel.h | 3 +-
|
||
polkit-agent/src/mainwindow.cpp | 1654 ++++++++++----------
|
||
polkit-agent/src/mainwindow.h | 90 +-
|
||
polkit-agent/src/mainwindow.ui | 165 +-
|
||
polkit-agent/src/modeButton.h | 2 +-
|
||
polkit-agent/src/pam-tally.c | 16 +-
|
||
polkit-agent/src/pam-tally.h | 42 +-
|
||
polkit-agent/src/sessionmanager.cpp | 35 +-
|
||
polkit-agent/src/types.h | 36 +-
|
||
polkit-agent/src/usdblockshortcut.cpp | 61 +
|
||
polkit-agent/src/usdblockshortcut.h | 49 +
|
||
polkit-agent/src/users.cpp | 94 +-
|
||
polkit-agent/src/users.h | 13 +-
|
||
90 files changed, 4209 insertions(+), 2708 deletions(-)
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingerprint0.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingerprint1.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingerprint10.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingerprint11.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingerprint12.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingerprint13.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingerprint14.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingerprint2.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingerprint3.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingerprint4.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingerprint5.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingerprint6.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingerprint7.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingerprint8.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingerprint9.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingervein0.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingervein1.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingervein10.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingervein11.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingervein2.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingervein3.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingervein4.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingervein5.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingervein6.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingervein7.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingervein8.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/fingervein9.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/iris0.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/iris1.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/iris10.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/iris11.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/iris2.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/iris3.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/iris4.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/iris5.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/iris6.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/iris7.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/iris8.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/iris9.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/voiceprint0.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/voiceprint1.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/voiceprint2.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/voiceprint3.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/voiceprint4.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/voiceprint5.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/voiceprint6.svg
|
||
create mode 100644 polkit-agent/assets/biowaiting/voiceprint7.svg
|
||
create mode 100644 polkit-agent/src/fullscreenbackground.cpp
|
||
create mode 100644 polkit-agent/src/fullscreenbackground.h
|
||
create mode 100644 polkit-agent/src/usdblockshortcut.cpp
|
||
create mode 100644 polkit-agent/src/usdblockshortcut.h
|
||
|
||
diff --git a/bioauth-bin/src/main.cpp b/bioauth-bin/src/main.cpp
|
||
index 81ffdb4..a88dfe8 100644
|
||
--- a/bioauth-bin/src/main.cpp
|
||
+++ b/bioauth-bin/src/main.cpp
|
||
@@ -21,6 +21,7 @@
|
||
#include <QCommandLineOption>
|
||
#include <QCommandLineParser>
|
||
#include <termios.h>
|
||
+#include <signal.h>
|
||
|
||
#include <pwd.h>
|
||
|
||
@@ -38,7 +39,7 @@
|
||
|
||
bool enableDebug;
|
||
QString logPrefix;
|
||
-
|
||
+BioAuth bioAuth;
|
||
enum MsgType
|
||
{
|
||
START,
|
||
@@ -241,6 +242,13 @@ DeviceInfo showDevices(const QMap<int, QList<DeviceInfo>> &devicesMap)
|
||
return DeviceInfo();
|
||
}
|
||
|
||
+static void signal_handler(int signo)
|
||
+{
|
||
+ if (signo == SIGHUP) {
|
||
+ bioAuth.stopAuth();
|
||
+ }
|
||
+}
|
||
+
|
||
int main(int argc, char *argv[])
|
||
{
|
||
QCoreApplication::setSetuidAllowed(true);
|
||
@@ -310,7 +318,8 @@ int main(int argc, char *argv[])
|
||
showMessage(QObject::tr("Press Q or Esc to cancel"), PROMPT);
|
||
}
|
||
|
||
- BioAuth bioAuth(uid, deviceInfo);
|
||
+ bioAuth.setUid(uid);
|
||
+ bioAuth.setDevice(deviceInfo);
|
||
KeyWatcher watcher;
|
||
QMap<int,int> m_failedTimes;
|
||
|
||
@@ -403,7 +412,7 @@ int main(int argc, char *argv[])
|
||
|
||
bioAuth.startAuth();
|
||
|
||
- if(!isHiddenSwitchButton){
|
||
+ if (!isHiddenSwitchButton) {
|
||
QObject::connect(&watcher, &KeyWatcher::exit, &a, [&]{
|
||
showMessage(QObject::tr("AUTHENTICATION CANCELED"), START);
|
||
bioAuth.stopAuth();
|
||
@@ -411,6 +420,7 @@ int main(int argc, char *argv[])
|
||
});
|
||
}
|
||
watcher.start();
|
||
+ signal(SIGHUP, signal_handler);
|
||
|
||
return a.exec();
|
||
}
|
||
diff --git a/bioauth/include/bioauth.h b/bioauth/include/bioauth.h
|
||
index 477d3b3..bc7d325 100644
|
||
--- a/bioauth/include/bioauth.h
|
||
+++ b/bioauth/include/bioauth.h
|
||
@@ -36,6 +36,7 @@ public:
|
||
explicit BioAuth(QObject *parent = nullptr);
|
||
~BioAuth();
|
||
void setDevice(const DeviceInfoPtr deviceInfo);
|
||
+ void setUid(qint32 uid);
|
||
DeviceInfoPtr getDevice();
|
||
void startAuth();
|
||
void startUkeyAuth();
|
||
@@ -59,7 +60,6 @@ public:
|
||
*/
|
||
bool GetHasUkeyFeature(int uid, int indexStart = 0, int indexEnd = -1);
|
||
|
||
-
|
||
signals:
|
||
void authComplete(int uid, bool result, int retErrNo);
|
||
void authFinished();
|
||
diff --git a/bioauth/include/loginoptionswidget.h b/bioauth/include/loginoptionswidget.h
|
||
index dbbe1af..0eca34d 100644
|
||
--- a/bioauth/include/loginoptionswidget.h
|
||
+++ b/bioauth/include/loginoptionswidget.h
|
||
@@ -54,7 +54,7 @@ public:
|
||
unsigned getLoginOptCount();
|
||
DeviceInfoPtr getFirstDevInfo();
|
||
int convertDeviceType(int nDevType);
|
||
- void updateUIStatus(bool update);
|
||
+ void updateUIStatus(bool update, int nPreOptType = -1);
|
||
void updateUkeyUIStatus(int type);
|
||
void setUser(int uid);
|
||
void setCurrentDevice(int drvid);
|
||
@@ -97,6 +97,13 @@ public:
|
||
void SetExtraInfo(QString extra_info,QString info_type);
|
||
bool getHasUkeyOptions();
|
||
void setSelectedPassword();
|
||
+
|
||
+ // 设置所有生物识别的禁用状态
|
||
+ void setAllDeviceDisable(bool bDisable = true);
|
||
+
|
||
+ void startBioWaiting(unsigned uCurLoginOptType);
|
||
+ void stopBioWaiting(bool isDisable = false);
|
||
+
|
||
public slots:
|
||
void readDevicesInfo();
|
||
void onIdentifyComplete(int uid, bool ret, int retErrNo);
|
||
@@ -129,6 +136,7 @@ private:
|
||
QPixmap scaledPixmap(int width, int height, QString url);
|
||
QPixmap drawSymbolicColoredPixmap(QPixmap &source, QString cgColor);
|
||
void updatePixmap();
|
||
+ QPixmap scaledSmoothPixmap(const QPixmap &src, int nWidth, int nHeight);
|
||
|
||
private:
|
||
BioAuth *m_biomericProxy = nullptr;
|
||
@@ -164,6 +172,12 @@ private:
|
||
QTimer *w_timer;
|
||
|
||
bool isShowUkey = false;
|
||
+
|
||
+ // 指纹、指静脉、虹膜、声纹识别动图
|
||
+ QLabel *m_labelBioWaiting = nullptr; // 指纹、指静脉、虹膜、声纹识别动图提示
|
||
+ QTimer *m_timerBioWaiting = nullptr; // 指纹、指静脉、虹膜、声纹识别动图切换定时器
|
||
+ int m_nBioWaitingFrame = 0; // 当前显示的动图帧
|
||
+ int m_nCurBioWaitingType = -1; // 当前显示的动图类型
|
||
};
|
||
|
||
#endif // LOGINOPTIONSWIDGET_H
|
||
diff --git a/bioauth/src/bioauth.cpp b/bioauth/src/bioauth.cpp
|
||
index 98143e6..076f282 100644
|
||
--- a/bioauth/src/bioauth.cpp
|
||
+++ b/bioauth/src/bioauth.cpp
|
||
@@ -61,6 +61,11 @@ void BioAuth::setDevice(const DeviceInfoPtr deviceInfo)
|
||
this->deviceInfo = deviceInfo;
|
||
}
|
||
|
||
+void BioAuth::setUid(qint32 uid)
|
||
+{
|
||
+ this->uid = uid;
|
||
+}
|
||
+
|
||
void BioAuth::startUkeyAuth()
|
||
{
|
||
// stopAuth();
|
||
@@ -209,7 +214,6 @@ void BioAuth::onIdentityComplete(QDBusPendingCallWatcher *watcher)
|
||
|
||
/* 识别生物特征成功,发送认证结果 */
|
||
if(isInAuthentication){
|
||
-
|
||
isInAuthentication = false;
|
||
|
||
if(result == DBUS_RESULT_SUCCESS && retUid == uid){
|
||
diff --git a/bioauth/src/biodevices.cpp b/bioauth/src/biodevices.cpp
|
||
index e1287b0..29c2d09 100644
|
||
--- a/bioauth/src/biodevices.cpp
|
||
+++ b/bioauth/src/biodevices.cpp
|
||
@@ -13,8 +13,8 @@
|
||
*
|
||
* You should have received a copy of the GNU General Public License
|
||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||
- *
|
||
-**/
|
||
+ *
|
||
+ **/
|
||
#include "biodevices.h"
|
||
#include <QDBusInterface>
|
||
#include <QSettings>
|
||
@@ -26,13 +26,12 @@
|
||
|
||
#include "generic.h"
|
||
|
||
-
|
||
BioDevices::BioDevices(bool isIgnoreQrCode, QObject *parent)
|
||
- : QObject(parent),
|
||
- m_uniAuthService(new UniAuthService(this)),
|
||
- isShowHotPlug(false),
|
||
- useFirstDevice(false),
|
||
- m_isIgnoreQrCode(isIgnoreQrCode)
|
||
+ : QObject(parent)
|
||
+ , m_uniAuthService(new UniAuthService(this))
|
||
+ , isShowHotPlug(false)
|
||
+ , useFirstDevice(false)
|
||
+ , m_isIgnoreQrCode(isIgnoreQrCode)
|
||
{
|
||
connectToService();
|
||
|
||
@@ -57,54 +56,45 @@ void BioDevices::connectToService()
|
||
qRegisterMetaType<DeviceInfo>();
|
||
qDBusRegisterMetaType<DeviceInfo>();
|
||
|
||
- serviceInterface = new QDBusInterface(BIO_DBUS_SERVICE,
|
||
- BIO_DBUS_PATH,
|
||
- BIO_DBUS_INTERFACE,
|
||
- QDBusConnection::systemBus());
|
||
+ serviceInterface
|
||
+ = new QDBusInterface(BIO_DBUS_SERVICE, BIO_DBUS_PATH, BIO_DBUS_INTERFACE, QDBusConnection::systemBus());
|
||
|
||
- connect(serviceInterface, SIGNAL(USBDeviceHotPlug(int, int, int)),
|
||
- this, SLOT(onUSBDeviceHotPlug(int,int,int)));
|
||
+ connect(serviceInterface, SIGNAL(USBDeviceHotPlug(int, int, int)), this, SLOT(onUSBDeviceHotPlug(int, int, int)));
|
||
serviceInterface->setTimeout(2147483647);
|
||
}
|
||
|
||
void BioDevices::onUSBDeviceHotPlug(int deviceId, int action, int devNumNow)
|
||
{
|
||
qDebug() << deviceId << action << devNumNow;
|
||
- QString text = "";
|
||
+ QString text = "";
|
||
|
||
- if(action == -1){
|
||
+ if (action == -1) {
|
||
DeviceInfoPtr device = findDevice(deviceId);
|
||
- if(device)
|
||
- text = tr("Unplugging of %1 device detected").arg(bioTypeToString_tr(device->biotype));
|
||
+ if (device)
|
||
+ text = tr("Unplugging of %1 device detected").arg(bioTypeToString_tr(device->biotype));
|
||
}
|
||
|
||
getDevicesList();
|
||
|
||
emit deviceCountChanged(deviceInfos.size());
|
||
|
||
- if(action == 1){
|
||
+ if (action == 1) {
|
||
DeviceInfoPtr device = findDevice(deviceId);
|
||
- if(device)
|
||
- text = tr("%1 device insertion detected").arg(bioTypeToString_tr(device->biotype));
|
||
+ if (device)
|
||
+ text = tr("%1 device insertion detected").arg(bioTypeToString_tr(device->biotype));
|
||
}
|
||
|
||
- if(isShowHotPlug && text != ""){
|
||
- QDBusInterface iface("org.freedesktop.Notifications",
|
||
- "/org/freedesktop/Notifications",
|
||
- "org.freedesktop.Notifications",
|
||
- QDBusConnection::sessionBus());
|
||
+ if (isShowHotPlug && text != "") {
|
||
+ QDBusInterface iface(
|
||
+ "org.freedesktop.Notifications",
|
||
+ "/org/freedesktop/Notifications",
|
||
+ "org.freedesktop.Notifications",
|
||
+ QDBusConnection::sessionBus());
|
||
QList<QVariant> args;
|
||
- args<<(tr("Biometric Manager"))
|
||
- <<((unsigned int) 0)
|
||
- <<"biometric-manager"
|
||
- <<tr("biometric")
|
||
- <<text
|
||
- <<QStringList()
|
||
- <<QVariantMap()
|
||
- <<(int)-1;
|
||
- iface.callWithArgumentList(QDBus::AutoDetect,"Notify",args);
|
||
+ args << (tr("Biometric Manager")) << ((unsigned int)0) << "biometric-manager" << tr("biometric") << text
|
||
+ << QStringList() << QVariantMap() << (int)-1;
|
||
+ iface.callWithArgumentList(QDBus::AutoDetect, "Notify", args);
|
||
}
|
||
-
|
||
}
|
||
|
||
bool BioDevices::GetBioAuthEnable(uid_t uid)
|
||
@@ -121,11 +111,11 @@ bool BioDevices::GetBioAuthEnable(uid_t uid)
|
||
QSettings settings(configPath, QSettings::IniFormat);
|
||
qDebug() << "configure path: " << settings.fileName();
|
||
|
||
- if(settings.allKeys().contains("EnableAuth")){
|
||
+ if (settings.allKeys().contains("EnableAuth")) {
|
||
return settings.value("EnableAuth").toBool();
|
||
- }else{
|
||
+ } else {
|
||
QSettings sysSettings(GET_STR(CONFIG_FILE), QSettings::IniFormat);
|
||
- if(sysSettings.contains("EnableAuth"))
|
||
+ if (sysSettings.contains("EnableAuth"))
|
||
return sysSettings.value("EnableAuth").toBool();
|
||
else
|
||
return true;
|
||
@@ -140,7 +130,7 @@ void BioDevices::getDevicesList()
|
||
{
|
||
/* 返回值为 i -- int 和 av -- array of variant */
|
||
QDBusMessage msg = serviceInterface->call("GetDevList");
|
||
- if(msg.type() == QDBusMessage::ErrorMessage){
|
||
+ if (msg.type() == QDBusMessage::ErrorMessage) {
|
||
LOG() << msg.errorMessage();
|
||
return;
|
||
}
|
||
@@ -155,21 +145,20 @@ void BioDevices::getDevicesList()
|
||
|
||
deviceInfos.clear();
|
||
|
||
- for(int i = 0; i < deviceNum; i++) {
|
||
+ for (int i = 0; i < deviceNum; i++) {
|
||
DeviceInfoPtr pDeviceInfo = std::make_shared<DeviceInfo>();
|
||
infos.at(i).value<QDBusArgument>() >> *pDeviceInfo;
|
||
|
||
- if(pDeviceInfo->device_available > 0) { //设备可用
|
||
+ if (pDeviceInfo->device_available > 0) { // 设备可用
|
||
if (pDeviceInfo->biotype == REMOTE_QRCODE_TYPE && m_isIgnoreQrCode)
|
||
continue;
|
||
if (!bEnableBioAuth && pDeviceInfo->biotype <= BIOTYPE_VOICEPRINT)
|
||
continue;
|
||
deviceInfos.push_back(pDeviceInfo);
|
||
- }
|
||
+ }
|
||
}
|
||
}
|
||
|
||
-
|
||
int BioDevices::count()
|
||
{
|
||
return deviceInfos.size();
|
||
@@ -179,7 +168,7 @@ int BioDevices::GetUserDevCount(int uid)
|
||
{
|
||
int count = 0;
|
||
QDBusMessage msg = serviceInterface->call("GetDevList");
|
||
- if(msg.type() == QDBusMessage::ErrorMessage){
|
||
+ if (msg.type() == QDBusMessage::ErrorMessage) {
|
||
LOG() << msg.errorMessage();
|
||
return 0;
|
||
}
|
||
@@ -190,14 +179,13 @@ int BioDevices::GetUserDevCount(int uid)
|
||
QList<QVariant> infos;
|
||
argument >> infos;
|
||
|
||
- for(int i = 0; i < deviceNum; i++) {
|
||
+ for (int i = 0; i < deviceNum; i++) {
|
||
DeviceInfoPtr pDeviceInfo = std::make_shared<DeviceInfo>();
|
||
infos.at(i).value<QDBusArgument>() >> *pDeviceInfo;
|
||
- if(pDeviceInfo->device_available > 0 && GetUserDevFeatureCount(uid,pDeviceInfo->device_id)>0) //设备可用
|
||
+ if (pDeviceInfo->device_available > 0 && GetUserDevFeatureCount(uid, pDeviceInfo->device_id) > 0) // 设备可用
|
||
count++;
|
||
}
|
||
return count;
|
||
-
|
||
}
|
||
|
||
FeatureMap BioDevices::GetUserFeatures(int uid)
|
||
@@ -206,8 +194,7 @@ FeatureMap BioDevices::GetUserFeatures(int uid)
|
||
QList<QDBusVariant> qlist;
|
||
int listsize;
|
||
QDBusMessage result = serviceInterface->call(QStringLiteral("GetAllFeatureList"), uid, 0, -1);
|
||
- if(result.type() == QDBusMessage::ErrorMessage)
|
||
- {
|
||
+ if (result.type() == QDBusMessage::ErrorMessage) {
|
||
qWarning() << "GetDevList error:" << result.errorMessage();
|
||
return featureMap;
|
||
}
|
||
@@ -224,13 +211,12 @@ FeatureMap BioDevices::GetUserFeatures(int uid)
|
||
return featureMap;
|
||
}
|
||
|
||
-int BioDevices::GetUserDevFeatureCount(int uid,int drvid)
|
||
+int BioDevices::GetUserDevFeatureCount(int uid, int drvid)
|
||
{
|
||
- QDBusMessage FeatureResult = serviceInterface->call(QStringLiteral("GetFeatureList"),drvid,uid,0,-1);
|
||
- if(FeatureResult.type() == QDBusMessage::ErrorMessage)
|
||
- {
|
||
- qWarning() << "GetFeatureList error:" << FeatureResult.errorMessage();
|
||
- return 0;
|
||
+ QDBusMessage FeatureResult = serviceInterface->call(QStringLiteral("GetFeatureList"), drvid, uid, 0, -1);
|
||
+ if (FeatureResult.type() == QDBusMessage::ErrorMessage) {
|
||
+ qWarning() << "GetFeatureList error:" << FeatureResult.errorMessage();
|
||
+ return 0;
|
||
}
|
||
return FeatureResult.arguments().takeFirst().toInt();
|
||
}
|
||
@@ -238,13 +224,13 @@ int BioDevices::GetUserDevFeatureCount(int uid,int drvid)
|
||
int BioDevices::getFeatureCount(int uid, int indexStart, int indexEnd)
|
||
{
|
||
int res = 0;
|
||
- for(int i = 0; i < deviceInfos.count(); i++) {
|
||
+ for (int i = 0; i < deviceInfos.count(); i++) {
|
||
DeviceInfoPtr deviceInfo = deviceInfos.at(i);
|
||
- QDBusMessage featurecount = serviceInterface->call("GetFeatureList",deviceInfo->device_id,uid,indexStart,indexEnd);
|
||
- if(featurecount.type() == QDBusMessage::ErrorMessage)
|
||
- {
|
||
- qWarning() << "GetFeatureList error:" << featurecount.errorMessage();
|
||
- }else{
|
||
+ QDBusMessage featurecount
|
||
+ = serviceInterface->call("GetFeatureList", deviceInfo->device_id, uid, indexStart, indexEnd);
|
||
+ if (featurecount.type() == QDBusMessage::ErrorMessage) {
|
||
+ qWarning() << "GetFeatureList error:" << featurecount.errorMessage();
|
||
+ } else {
|
||
res += featurecount.arguments().takeFirst().toInt();
|
||
}
|
||
}
|
||
@@ -255,11 +241,11 @@ QMap<int, QList<DeviceInfo>> BioDevices::getAllDevices()
|
||
{
|
||
QMap<int, QList<DeviceInfo>> devices;
|
||
|
||
- for(auto deviceInfo : deviceInfos) {
|
||
- if (deviceInfo->biotype == REMOTE_QRCODE_TYPE) // 终端不使用扫码
|
||
+ for (auto deviceInfo : deviceInfos) {
|
||
+ if (deviceInfo->biotype == REMOTE_QRCODE_TYPE) // 终端不使用扫码
|
||
continue;
|
||
|
||
- if(!GetDirveIsIdle(deviceInfo->device_id))
|
||
+ if (!GetDirveIsIdle(deviceInfo->device_id))
|
||
continue;
|
||
|
||
devices[deviceInfo->biotype].push_back(*deviceInfo);
|
||
@@ -272,9 +258,9 @@ QMap<int, QList<DeviceInfo>> BioDevices::getUserDevices(int uid)
|
||
{
|
||
QMap<int, QList<DeviceInfo>> devices;
|
||
bool isQRCodeEnable = GetQRCodeEnable();
|
||
- for(auto deviceInfo : deviceInfos) {
|
||
- if(GetUserDevFeatureCount(uid,deviceInfo->device_id) > 0) {
|
||
- if (!isQRCodeEnable && deviceInfo->biotype == REMOTE_QRCODE_TYPE) // 关闭了二维码功能
|
||
+ for (auto deviceInfo : deviceInfos) {
|
||
+ if (GetUserDevFeatureCount(uid, deviceInfo->device_id) > 0) {
|
||
+ if (!isQRCodeEnable && deviceInfo->biotype == REMOTE_QRCODE_TYPE) // 关闭了二维码功能
|
||
continue;
|
||
devices[deviceInfo->biotype].push_back(*deviceInfo);
|
||
}
|
||
@@ -287,7 +273,7 @@ QList<DeviceInfo> BioDevices::getDevices(int type)
|
||
{
|
||
QList<DeviceInfo> devices;
|
||
|
||
- for(auto deviceInfo : deviceInfos) {
|
||
+ for (auto deviceInfo : deviceInfos) {
|
||
if (deviceInfo->biotype == type)
|
||
devices.push_back(*deviceInfo);
|
||
}
|
||
@@ -316,7 +302,7 @@ bool BioDevices::GetHiddenSwitchButton()
|
||
return m_uniAuthService->getHiddenSwitchButton();
|
||
} else {
|
||
QSettings sysSettings("/etc/biometric-auth/ukui-biometric.conf", QSettings::IniFormat);
|
||
- if(sysSettings.contains("HiddenSwitchButton"))
|
||
+ if (sysSettings.contains("HiddenSwitchButton"))
|
||
return sysSettings.value("HiddenSwitchButton").toBool();
|
||
else
|
||
return false;
|
||
@@ -329,7 +315,7 @@ int BioDevices::getFailedTimes()
|
||
return m_uniAuthService->getMaxFailedTimes();
|
||
} else {
|
||
QSettings sysSettings("/etc/biometric-auth/ukui-biometric.conf", QSettings::IniFormat);
|
||
- if(sysSettings.contains("MaxFailedTimes"))
|
||
+ if (sysSettings.contains("MaxFailedTimes"))
|
||
return sysSettings.value("MaxFailedTimes").toInt();
|
||
else
|
||
return 3;
|
||
@@ -369,22 +355,22 @@ bool BioDevices::GetBioAuthEnable()
|
||
isEnable = m_uniAuthService->getBioAuthStatus(pwd->pw_name, ENABLETYPE_BIO);
|
||
}
|
||
if (isEnable && !isShowHotPlug) {
|
||
- if(qAppName() == "polkit-ukui-authentication-agent-1") //获取polkit开关是否打开
|
||
+ if (qAppName() == "polkit-ukui-authentication-agent-1") // 获取polkit开关是否打开
|
||
isEnable = m_uniAuthService->getBioAuthStatus(pwd->pw_name, ENABLETYPE_POLKIT);
|
||
- if(qAppName() == "bioauth"){ //获取父进程名称为sudo,su,或者login
|
||
- int ppid = getppid(); //获取父进程pid
|
||
+ if (qAppName() == "bioauth") { // 获取父进程名称为sudo,su,或者login
|
||
+ int ppid = getppid(); // 获取父进程pid
|
||
QString filename = "/proc/" + QString::number(ppid) + "/cmdline";
|
||
QFile file(filename);
|
||
- if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||
- qDebug()<<"Can't open the file!"<<endl;
|
||
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||
+ qDebug() << "Can't open the file!" << endl;
|
||
}
|
||
QByteArray text = file.readAll();
|
||
file.close();
|
||
- if(text.contains("sudo")){
|
||
+ if (text.contains("sudo")) {
|
||
isEnable = m_uniAuthService->getBioAuthStatus(pwd->pw_name, ENABLETYPE_SUDO);
|
||
- }else if(text.contains("su")){
|
||
+ } else if (text.contains("su")) {
|
||
isEnable = m_uniAuthService->getBioAuthStatus(pwd->pw_name, ENABLETYPE_SU);
|
||
- }else if(text.contains("login")){
|
||
+ } else if (text.contains("login")) {
|
||
isEnable = m_uniAuthService->getBioAuthStatus(pwd->pw_name, ENABLETYPE_LOGIN);
|
||
}
|
||
}
|
||
@@ -401,23 +387,23 @@ bool BioDevices::GetBioAuthEnable()
|
||
|
||
if (isEnable && sysSettings.allKeys().contains("EnableAuthApp")) {
|
||
isEnableApp = sysSettings.value("EnableAuthApp").toInt();
|
||
- if(qAppName() == "polkit-ukui-authentication-agent-1") //获取polkit开关是否打开
|
||
- isEnable = isEnableApp & (1<<2);
|
||
- if(qAppName() == "bioauth"){ //获取父进程名称为sudo,su,或者login
|
||
- int ppid = getppid(); //获取父进程pid
|
||
+ if (qAppName() == "polkit-ukui-authentication-agent-1") // 获取polkit开关是否打开
|
||
+ isEnable = isEnableApp & (1 << 2);
|
||
+ if (qAppName() == "bioauth") { // 获取父进程名称为sudo,su,或者login
|
||
+ int ppid = getppid(); // 获取父进程pid
|
||
QString filename = "/proc/" + QString::number(ppid) + "/cmdline";
|
||
QFile file(filename);
|
||
- if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||
- qDebug()<<"Can't open the file!"<<endl;
|
||
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||
+ qDebug() << "Can't open the file!" << endl;
|
||
}
|
||
QByteArray text = file.readAll();
|
||
file.close();
|
||
- if(text.contains("sudo")){
|
||
- isEnable = isEnableApp & (1<<3);
|
||
- }else if(text.contains("su")){
|
||
- isEnable = isEnableApp & (1<<4);
|
||
- }else if(text.contains("login")){
|
||
- isEnable = isEnableApp & (1<<5);
|
||
+ if (text.contains("sudo")) {
|
||
+ isEnable = isEnableApp & (1 << 3);
|
||
+ } else if (text.contains("su")) {
|
||
+ isEnable = isEnableApp & (1 << 4);
|
||
+ } else if (text.contains("login")) {
|
||
+ isEnable = isEnableApp & (1 << 5);
|
||
}
|
||
}
|
||
}
|
||
@@ -426,9 +412,9 @@ bool BioDevices::GetBioAuthEnable()
|
||
}
|
||
}
|
||
|
||
-DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid,int bioType)
|
||
+DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid, int bioType)
|
||
{
|
||
- if(deviceInfos.size() <= 0)
|
||
+ if (deviceInfos.size() <= 0)
|
||
return nullptr;
|
||
|
||
FeatureMap mapFeatures = GetUserFeatures(uid);
|
||
@@ -438,18 +424,18 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid,int bioType)
|
||
DeviceInfoPtr ptrDevInfo = nullptr;
|
||
if (pwdInfo) {
|
||
QString strDeviceName = m_uniAuthService->getDefaultDevice(pwdInfo->pw_name, bioType);
|
||
- qDebug()<<strDeviceName;
|
||
- if(!strDeviceName.isEmpty()) {
|
||
+ qDebug() << strDeviceName;
|
||
+ if (!strDeviceName.isEmpty()) {
|
||
ptrDevInfo = findDevice(strDeviceName);
|
||
if (ptrDevInfo) {
|
||
int isIdle = GetDirveIsIdle(ptrDevInfo->device_id);
|
||
- if(isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)){
|
||
+ if (isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)) {
|
||
defaultDeviceName = strDeviceName;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
- if(defaultDeviceName.isEmpty()){
|
||
+ if (defaultDeviceName.isEmpty()) {
|
||
return nullptr;
|
||
}
|
||
return ptrDevInfo;
|
||
@@ -463,29 +449,28 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid,int bioType)
|
||
defaultDeviceName = userConfig.value(DEFAULT_DEVICE).toString();
|
||
qDebug() << defaultDeviceName;
|
||
|
||
- if(defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
|
||
+ if (defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
|
||
QSettings sysConfig(GET_STR(CONFIG_FILE), QSettings::IniFormat);
|
||
defaultDeviceName = sysConfig.value(DEFAULT_DEVICE).toString();
|
||
}
|
||
|
||
- if(defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)){
|
||
+ if (defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
|
||
QString userConfigFile = QString(pwd->pw_dir) + "/.biometric_auth/ukui_biometric.conf";
|
||
QSettings userConfig(userConfigFile, QSettings::IniFormat);
|
||
defaultDeviceName = userConfig.value(DEFAULT_DEVICE).toString();
|
||
}
|
||
qDebug() << "default device: " << defaultDeviceName;
|
||
// 终端不默认使用第一个设备
|
||
- if(defaultDeviceName.isEmpty()){
|
||
+ if (defaultDeviceName.isEmpty()) {
|
||
return nullptr;
|
||
}
|
||
bool defValid = false;
|
||
DeviceInfoPtr ptrDevInfo = findDevice(defaultDeviceName);
|
||
if (ptrDevInfo) {
|
||
int isIdle = GetDirveIsIdle(ptrDevInfo->device_id);
|
||
- if(isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)){
|
||
+ if (isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)) {
|
||
defValid = true;
|
||
}
|
||
-
|
||
}
|
||
|
||
if (!defValid) {
|
||
@@ -498,18 +483,18 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid,int bioType)
|
||
|
||
void BioDevices::recordAuthDrive(QString appName, int drvid, bool insert)
|
||
{
|
||
- if(m_uniAuthService && m_uniAuthService->isActivatable()){
|
||
- m_uniAuthService->recordAuthDrive(appName,drvid,insert);
|
||
+ if (m_uniAuthService && m_uniAuthService->isActivatable()) {
|
||
+ m_uniAuthService->recordAuthDrive(appName, drvid, insert);
|
||
}
|
||
}
|
||
|
||
bool BioDevices::GetDirveIsIdle(int drvid)
|
||
{
|
||
- if(m_uniAuthService && m_uniAuthService->isActivatable()){
|
||
+ if (m_uniAuthService && m_uniAuthService->isActivatable()) {
|
||
QStringList appList = m_uniAuthService->getAuthingApp();
|
||
- for(QString appName : appList){
|
||
+ for (QString appName : appList) {
|
||
int id = m_uniAuthService->getAuthingAppDrivd(appName);
|
||
- if(id == drvid){
|
||
+ if (id == drvid) {
|
||
return false;
|
||
}
|
||
}
|
||
@@ -520,7 +505,7 @@ bool BioDevices::GetDirveIsIdle(int drvid)
|
||
|
||
DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid)
|
||
{
|
||
- if(deviceInfos.size() <= 0)
|
||
+ if (deviceInfos.size() <= 0)
|
||
return nullptr;
|
||
|
||
FeatureMap mapFeatures = GetUserFeatures(uid);
|
||
@@ -530,13 +515,16 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid)
|
||
DeviceInfoPtr ptrDevInfo = nullptr;
|
||
if (pwdInfo) {
|
||
for (auto bioType : m_listPriority) {
|
||
+ if (bioType == REMOTE_QRCODE_TYPE) {
|
||
+ continue;
|
||
+ }
|
||
QString strDeviceName = m_uniAuthService->getDefaultDevice(pwdInfo->pw_name, bioType);
|
||
- qDebug()<<strDeviceName;
|
||
- if(!strDeviceName.isEmpty()) {
|
||
+ qDebug() << strDeviceName;
|
||
+ if (!strDeviceName.isEmpty()) {
|
||
ptrDevInfo = findDevice(strDeviceName);
|
||
if (ptrDevInfo) {
|
||
int isIdle = GetDirveIsIdle(ptrDevInfo->device_id);
|
||
- if(isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)){
|
||
+ if (isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)) {
|
||
defaultDeviceName = strDeviceName;
|
||
break;
|
||
}
|
||
@@ -544,7 +532,7 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid)
|
||
}
|
||
}
|
||
}
|
||
- if(defaultDeviceName.isEmpty()){
|
||
+ if (defaultDeviceName.isEmpty()) {
|
||
return nullptr;
|
||
}
|
||
return ptrDevInfo;
|
||
@@ -558,21 +546,19 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid)
|
||
defaultDeviceName = userConfig.value(DEFAULT_DEVICE).toString();
|
||
qDebug() << defaultDeviceName;
|
||
|
||
- if(defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
|
||
+ if (defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
|
||
QSettings sysConfig(GET_STR(CONFIG_FILE), QSettings::IniFormat);
|
||
defaultDeviceName = sysConfig.value(DEFAULT_DEVICE).toString();
|
||
}
|
||
|
||
- if(defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)){
|
||
+ if (defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
|
||
QString userConfigFile = QString(pwd->pw_dir) + "/.biometric_auth/ukui_biometric.conf";
|
||
QSettings userConfig(userConfigFile, QSettings::IniFormat);
|
||
defaultDeviceName = userConfig.value(DEFAULT_DEVICE).toString();
|
||
-
|
||
-
|
||
}
|
||
qDebug() << "default device: " << defaultDeviceName;
|
||
// 终端不默认使用第一个设备
|
||
- if(defaultDeviceName.isEmpty()){
|
||
+ if (defaultDeviceName.isEmpty()) {
|
||
return nullptr;
|
||
}
|
||
bool defValid = false;
|
||
@@ -609,18 +595,18 @@ QStringList BioDevices::getAllDefDevices()
|
||
defaultDeviceName = userConfig.value(DEFAULT_DEVICE).toString();
|
||
qDebug() << defaultDeviceName;
|
||
|
||
- if(defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
|
||
+ if (defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
|
||
QSettings sysConfig(GET_STR(CONFIG_FILE), QSettings::IniFormat);
|
||
defaultDeviceName = sysConfig.value(DEFAULT_DEVICE).toString();
|
||
}
|
||
|
||
- if(defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)){
|
||
+ if (defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
|
||
QString userConfigFile = QString(pwd->pw_dir) + "/.biometric_auth/ukui_biometric.conf";
|
||
QSettings userConfig(userConfigFile, QSettings::IniFormat);
|
||
defaultDeviceName = userConfig.value(DEFAULT_DEVICE).toString();
|
||
}
|
||
qDebug() << "default device: " << defaultDeviceName;
|
||
- if(!defaultDeviceName.isEmpty()){
|
||
+ if (!defaultDeviceName.isEmpty()) {
|
||
listDefDevices.push_back(defaultDeviceName);
|
||
}
|
||
}
|
||
@@ -664,18 +650,18 @@ void BioDevices::SetLastDevice(const QString &userName, int drvid)
|
||
|
||
DeviceInfoPtr BioDevices::findDevice(const int id)
|
||
{
|
||
- for(auto deviceInfo : deviceInfos) {
|
||
- if(deviceInfo->device_id == id)
|
||
+ for (auto deviceInfo : deviceInfos) {
|
||
+ if (deviceInfo->device_id == id)
|
||
return deviceInfo;
|
||
}
|
||
- //qDebug() << deviceName << "doesn't exists";
|
||
+ // qDebug() << deviceName << "doesn't exists";
|
||
return nullptr;
|
||
}
|
||
|
||
DeviceInfoPtr BioDevices::findDevice(const QString &deviceName)
|
||
{
|
||
- for(auto deviceInfo : deviceInfos) {
|
||
- if(deviceInfo->device_shortname == deviceName)
|
||
+ for (auto deviceInfo : deviceInfos) {
|
||
+ if (deviceInfo->device_shortname == deviceName)
|
||
return deviceInfo;
|
||
}
|
||
qDebug() << deviceName << "doesn't exists";
|
||
@@ -695,21 +681,21 @@ DeviceInfoPtr BioDevices::getFirstDevice(int uid)
|
||
|
||
QString BioDevices::bioTypeToString_tr(int type)
|
||
{
|
||
- switch(type) {
|
||
- case BIOTYPE_FINGERPRINT:
|
||
- return tr("FingerPrint");
|
||
- case BIOTYPE_FINGERVEIN:
|
||
- return tr("FingerVein");
|
||
- case BIOTYPE_IRIS:
|
||
- return tr("Iris");
|
||
- case BIOTYPE_FACE:
|
||
- return tr("Face");
|
||
- case BIOTYPE_VOICEPRINT:
|
||
- return tr("VoicePrint");
|
||
- case LOGINOPT_TYPE_GENERAL_UKEY:
|
||
- return tr("Ukey");
|
||
- case REMOTE_QRCODE_TYPE:
|
||
- return tr("QRCode");
|
||
+ switch (type) {
|
||
+ case BIOTYPE_FINGERPRINT:
|
||
+ return tr("FingerPrint");
|
||
+ case BIOTYPE_FINGERVEIN:
|
||
+ return tr("FingerVein");
|
||
+ case BIOTYPE_IRIS:
|
||
+ return tr("Iris");
|
||
+ case BIOTYPE_FACE:
|
||
+ return tr("Face");
|
||
+ case BIOTYPE_VOICEPRINT:
|
||
+ return tr("VoicePrint");
|
||
+ case LOGINOPT_TYPE_GENERAL_UKEY:
|
||
+ return tr("Ukey");
|
||
+ case REMOTE_QRCODE_TYPE:
|
||
+ return tr("QRCode");
|
||
}
|
||
return QString();
|
||
}
|
||
@@ -723,19 +709,18 @@ StatusReslut BioDevices::UpdateStatus(int drvid)
|
||
{
|
||
StatusReslut status;
|
||
QDBusMessage result = serviceInterface->call(QStringLiteral("UpdateStatus"), drvid);
|
||
- if(result.type() == QDBusMessage::ErrorMessage)
|
||
- {
|
||
+ if (result.type() == QDBusMessage::ErrorMessage) {
|
||
qWarning() << "UpdateStatus error:" << result.errorMessage();
|
||
status.result = -1;
|
||
return status;
|
||
}
|
||
|
||
- status.result = result.arguments().at(0).toInt();
|
||
- status.enable = result.arguments().at(1).toInt();
|
||
- status.devNum = result.arguments().at(2).toInt();
|
||
- status.devStatus = result.arguments().at(3).toInt();
|
||
- status.opsStatus = result.arguments().at(4).toInt();
|
||
- status.notifyMessageId = result.arguments().at(5).toInt();
|
||
+ status.result = result.arguments().at(0).toInt();
|
||
+ status.enable = result.arguments().at(1).toInt();
|
||
+ status.devNum = result.arguments().at(2).toInt();
|
||
+ status.devStatus = result.arguments().at(3).toInt();
|
||
+ status.opsStatus = result.arguments().at(4).toInt();
|
||
+ status.notifyMessageId = result.arguments().at(5).toInt();
|
||
|
||
return status;
|
||
}
|
||
diff --git a/bioauth/src/loginoptionswidget.cpp b/bioauth/src/loginoptionswidget.cpp
|
||
index bc54363..f75be62 100644
|
||
--- a/bioauth/src/loginoptionswidget.cpp
|
||
+++ b/bioauth/src/loginoptionswidget.cpp
|
||
@@ -40,90 +40,69 @@
|
||
#include <QApplication>
|
||
#include <QFont>
|
||
#include <QDebug>
|
||
-
|
||
+#include <QPixmapCache>
|
||
|
||
LoginOptionsWidget::LoginOptionsWidget(QWidget *parent)
|
||
- : QWidget(parent)
|
||
- , m_biomericProxy(new BioAuth(this))
|
||
- , m_bioDevices(new BioDevices())
|
||
- , w_timer(nullptr)
|
||
+ : QWidget(parent), m_biomericProxy(new BioAuth(this)), m_bioDevices(new BioDevices()), w_timer(nullptr)
|
||
{
|
||
- m_bioDevices->recordAuthDrive("polkit",0,false);
|
||
+ m_bioDevices->recordAuthDrive("polkit", 0, false);
|
||
initUI();
|
||
initConnections();
|
||
m_mapDisableDev.clear();
|
||
}
|
||
|
||
-LoginOptionsWidget::~LoginOptionsWidget()
|
||
-{
|
||
-
|
||
-}
|
||
+LoginOptionsWidget::~LoginOptionsWidget() {}
|
||
|
||
void LoginOptionsWidget::initUI()
|
||
{
|
||
// 初始化UI
|
||
m_layoutMain = new QVBoxLayout();
|
||
- m_layoutMain->setContentsMargins(0,0,0,30);
|
||
+ m_layoutMain->setContentsMargins(0, 0, 0, 30);
|
||
m_layoutMain->setSpacing(12);
|
||
m_layoutMain->setAlignment(Qt::AlignTop);
|
||
- m_layoutOptBtns = new QHBoxLayout();
|
||
- m_layoutOptBtns->setContentsMargins(0,0,0,0);
|
||
- m_layoutOptBtns->setSpacing(16);
|
||
+
|
||
+ m_widgetImage = new QWidget();
|
||
+ m_widgetImage->setFixedSize(154, 154);
|
||
m_layoutImage = new QHBoxLayout();
|
||
- m_layoutImage->setContentsMargins(0,0,0,0);
|
||
+ m_layoutImage->setContentsMargins(0, 8, 0, 16);
|
||
m_layoutImage->setSpacing(0);
|
||
m_layoutImage->setAlignment(Qt::AlignCenter);
|
||
-
|
||
- m_labelOptTitle = new QLabel();
|
||
- m_labelOptTitle->setAlignment(Qt::AlignLeft);
|
||
- m_labelOptTitle->setText(tr("Login Options"));
|
||
- m_layoutMain->addWidget(m_labelOptTitle);
|
||
-
|
||
- m_btnGroup = new QButtonGroup(this);
|
||
- m_btnGroup->setExclusive(true);
|
||
-
|
||
- m_layoutOptBtns->setAlignment(Qt::AlignLeft);
|
||
- m_layoutMain->addLayout(m_layoutOptBtns);
|
||
-
|
||
- m_widgetImage = new QWidget();
|
||
- m_widgetImage->setFixedSize(154,154);
|
||
m_layoutImage->addSpacerItem(new QSpacerItem(109, 0, QSizePolicy::Expanding));
|
||
m_layoutImage->addWidget(m_widgetImage);
|
||
m_layoutImage->addSpacerItem(new QSpacerItem(109, 0, QSizePolicy::Expanding));
|
||
m_widgetImage->hide();
|
||
+
|
||
// 人脸识别
|
||
m_labelFace = new QLabel(m_widgetImage);
|
||
m_labelFace->setObjectName("faceLabel");
|
||
m_labelFace->setAlignment(Qt::AlignCenter);
|
||
- m_labelFace->setFixedSize(154,154);
|
||
+ m_labelFace->setFixedSize(154, 154);
|
||
QHBoxLayout *layoutFace = new QHBoxLayout();
|
||
- layoutFace->setContentsMargins(0,0,0,0);
|
||
+ layoutFace->setContentsMargins(0, 0, 0, 0);
|
||
layoutFace->setAlignment(Qt::AlignCenter);
|
||
m_labelFace->setLayout(layoutFace);
|
||
+ m_labelFace->hide();
|
||
m_labelFaceLoad = new QLabel();
|
||
m_labelFaceLoad->setAlignment(Qt::AlignCenter);
|
||
m_labelFaceLoad->setFixedSize(142, 142);
|
||
- m_labelFaceLoad->setStyleSheet(QString("QLabel{background-color: rgba(230,230,230,0.39); border-radius: %1px; border: 8px solid white;}").arg(71));
|
||
+ m_labelFaceLoad->setStyleSheet(
|
||
+ QString("QLabel{background-color: rgba(230,230,230,0.39); border-radius: %1px; border: 8px solid white;}")
|
||
+ .arg(71));
|
||
layoutFace->addWidget(m_labelFaceLoad, 0, Qt::AlignVCenter);
|
||
|
||
-
|
||
-// QImage img;
|
||
-// setFaceImg(img);
|
||
- m_labelFace->hide();
|
||
// 二维码窗口
|
||
m_labelQRCode = new QLabel(m_widgetImage);
|
||
m_labelQRCode->setObjectName("qrCodeLabel");
|
||
m_labelQRCode->setAlignment(Qt::AlignCenter);
|
||
- m_labelQRCode->setFixedSize(154,154);
|
||
+ m_labelQRCode->setFixedSize(154, 154);
|
||
m_labelQRCode->hide();
|
||
- m_layoutMain->addLayout(m_layoutImage);
|
||
QVBoxLayout *layoutQRCode = new QVBoxLayout();
|
||
layoutQRCode->setAlignment(Qt::AlignCenter);
|
||
layoutQRCode->setSpacing(5);
|
||
m_labelQRCode->setLayout(layoutQRCode);
|
||
m_labelQRCodeTip = new QLabel();
|
||
- m_labelQRCodeTip->setFixedSize(22,22);
|
||
- m_labelQRCodeTip->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(QSize(22,22)));
|
||
+ m_labelQRCodeTip->setFixedSize(22, 22);
|
||
+ m_labelQRCodeTip->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(QSize(22, 22)));
|
||
layoutQRCode->addWidget(m_labelQRCodeTip, 0, Qt::AlignHCenter);
|
||
m_labelQRCodeMsg = new QLabel();
|
||
m_labelQRCodeMsg->setFixedHeight(24);
|
||
@@ -133,9 +112,33 @@ void LoginOptionsWidget::initUI()
|
||
m_labelQRCodeMsg->setFont(font);
|
||
layoutQRCode->addWidget(m_labelQRCodeMsg, 0, Qt::AlignHCenter);
|
||
|
||
+ // 生物特征等待验证动画
|
||
+ m_labelBioWaiting = new QLabel(m_widgetImage);
|
||
+ m_labelBioWaiting->setAlignment(Qt::AlignCenter);
|
||
+ m_labelBioWaiting->setFixedSize(154, 154);
|
||
+ m_labelBioWaiting->hide();
|
||
+
|
||
+ m_layoutMain->addLayout(m_layoutImage);
|
||
+
|
||
+ m_layoutOptBtns = new QHBoxLayout();
|
||
+ m_layoutOptBtns->setContentsMargins(0, 0, 0, 0);
|
||
+ m_layoutOptBtns->setSpacing(16);
|
||
+
|
||
+ m_labelOptTitle = new QLabel();
|
||
+ m_labelOptTitle->setFixedHeight(30);
|
||
+ m_labelOptTitle->setAlignment(Qt::AlignLeft);
|
||
+ m_labelOptTitle->setText(tr("Login Options"));
|
||
+ m_layoutMain->addWidget(m_labelOptTitle);
|
||
+
|
||
+ m_btnGroup = new QButtonGroup(this);
|
||
+ m_btnGroup->setExclusive(true);
|
||
+
|
||
+ m_layoutOptBtns->setAlignment(Qt::AlignLeft);
|
||
+ m_layoutMain->addLayout(m_layoutOptBtns);
|
||
+
|
||
this->setLayout(m_layoutMain);
|
||
|
||
- //设置水平扩展
|
||
+ // 设置水平扩展
|
||
QSizePolicy sizePolicy = this->sizePolicy();
|
||
sizePolicy.setHorizontalPolicy(QSizePolicy::Expanding);
|
||
this->setSizePolicy(sizePolicy);
|
||
@@ -143,38 +146,32 @@ void LoginOptionsWidget::initUI()
|
||
|
||
void LoginOptionsWidget::SetExtraInfo(QString extra_info, QString info_type)
|
||
{
|
||
- if(!m_biomericProxy)
|
||
- {
|
||
+ if (!m_biomericProxy) {
|
||
qWarning() << "BiometricProxy doesn't exist.";
|
||
return;
|
||
}
|
||
- m_biomericProxy->SetExtraInfo(info_type,extra_info);
|
||
+ m_biomericProxy->SetExtraInfo(info_type, extra_info);
|
||
}
|
||
|
||
void LoginOptionsWidget::initConnections()
|
||
{
|
||
- if(m_biomericProxy) {
|
||
- connect(m_biomericProxy, &BioAuth::notifyDetail,
|
||
- this, &LoginOptionsWidget::onStatusChanged);
|
||
+ if (m_biomericProxy) {
|
||
+ connect(m_biomericProxy, &BioAuth::notifyDetail, this, &LoginOptionsWidget::onStatusChanged);
|
||
|
||
- connect(m_biomericProxy, &BioAuth::frameWritten,
|
||
- this, &LoginOptionsWidget::onFrameWritten);
|
||
+ connect(m_biomericProxy, &BioAuth::frameWritten, this, &LoginOptionsWidget::onFrameWritten);
|
||
|
||
- connect(m_biomericProxy, &BioAuth::authComplete,
|
||
- this, &LoginOptionsWidget::onIdentifyComplete);
|
||
+ connect(m_biomericProxy, &BioAuth::authComplete, this, &LoginOptionsWidget::onIdentifyComplete);
|
||
|
||
- connect(m_biomericProxy, &BioAuth::authFinished,
|
||
- this, &LoginOptionsWidget::onAuthFinished);
|
||
+ connect(m_biomericProxy, &BioAuth::authFinished, this, &LoginOptionsWidget::onAuthFinished);
|
||
}
|
||
if (m_bioDevices) {
|
||
- connect(m_bioDevices, &BioDevices::deviceCountChanged,
|
||
- this, &LoginOptionsWidget::onUSBDeviceCountChange);
|
||
- //readDevicesInfo();
|
||
+ connect(m_bioDevices, &BioDevices::deviceCountChanged, this, &LoginOptionsWidget::onUSBDeviceCountChange);
|
||
+ // readDevicesInfo();
|
||
}
|
||
connect(m_btnGroup, SIGNAL(buttonClicked(int)), this, SLOT(onOptionSelected(int)));
|
||
}
|
||
|
||
-bool LoginOptionsWidget::getCurLoginOpt(int& nLoginOptType, int& nDrvId)
|
||
+bool LoginOptionsWidget::getCurLoginOpt(int &nLoginOptType, int &nDrvId)
|
||
{
|
||
if (m_curDevInfo) {
|
||
nLoginOptType = convertDeviceType(m_curDevInfo->biotype);
|
||
@@ -192,18 +189,18 @@ unsigned LoginOptionsWidget::getLoginOptCount()
|
||
DeviceInfoPtr LoginOptionsWidget::getFirstDevInfo()
|
||
{
|
||
DeviceInfoPtr devInfo = nullptr;
|
||
- struct passwd* pwdInfo = getpwuid(m_uid);
|
||
+ struct passwd *pwdInfo = getpwuid(m_uid);
|
||
if (!pwdInfo)
|
||
return devInfo;
|
||
int nDrvId = m_bioDevices->GetLastDevice(pwdInfo->pw_name);
|
||
if (nDrvId >= 0) {
|
||
- qDebug()<<"GetLastDevice:"<<nDrvId;
|
||
+ qDebug() << "GetLastDevice:" << nDrvId;
|
||
DeviceMap::iterator itDevInfo = m_mapDevices.begin();
|
||
for (; itDevInfo != m_mapDevices.end(); itDevInfo++) {
|
||
for (auto devinfo : itDevInfo.value()) {
|
||
if (devinfo && devinfo->device_id == nDrvId) {
|
||
if (!isDeviceDisable(devinfo->device_id)) {
|
||
- devInfo = devinfo;
|
||
+ devInfo = devinfo;
|
||
break;
|
||
}
|
||
}
|
||
@@ -218,7 +215,7 @@ DeviceInfoPtr LoginOptionsWidget::getFirstDevInfo()
|
||
for (; itDevInfo != m_mapDevices.end(); itDevInfo++) {
|
||
for (auto devinfo : itDevInfo.value()) {
|
||
if (devinfo && !isDeviceDisable(devinfo->device_id)) {
|
||
- devInfo = devinfo;
|
||
+ devInfo = devinfo;
|
||
break;
|
||
}
|
||
}
|
||
@@ -238,53 +235,45 @@ bool LoginOptionsWidget::getHasUkeyOptions()
|
||
void LoginOptionsWidget::addOptionButton(unsigned uLoginOptType, int nDrvId, QString strDrvName)
|
||
{
|
||
if (m_mapOptBtns.contains(nDrvId)) {
|
||
- return ;
|
||
+ return;
|
||
}
|
||
|
||
QToolButton *newButton = new QToolButton();
|
||
-// newButton->setStyleSheet(QString("QToolButton{text-align:center;border: none;border-radius: 6px;outline: none;background-color: rgba(230, 230, 230, 100%);} \
|
||
-// QToolButton::hover{background-color: rgba(55, 144, 250, 40%);} \
|
||
-// QToolButton::pressed {background-color: rgba(55, 144, 250, 100%);} \
|
||
-// QToolButton::checked {background-color: rgba(55, 144, 250, 100%);} \
|
||
-// "));
|
||
newButton->setCheckable(true);
|
||
newButton->setChecked(false);
|
||
newButton->setFocusPolicy(Qt::NoFocus);
|
||
- newButton->setContentsMargins(16,16,16,16);
|
||
-// if (nDrvId == -1) {
|
||
-// newButton->setEnabled(false);
|
||
-// newButton->setChecked(true);
|
||
-// } else {
|
||
- int nLength = m_btnGroup->buttons().length();
|
||
- m_btnGroup->addButton(newButton, nLength);
|
||
- m_listDriveId.append(nDrvId);
|
||
-// }
|
||
+ newButton->setContentsMargins(16, 16, 16, 16);
|
||
+
|
||
+ int nLength = m_btnGroup->buttons().length();
|
||
+ m_btnGroup->addButton(newButton, nLength);
|
||
+ m_listDriveId.append(nDrvId);
|
||
+
|
||
QIcon icon;
|
||
switch (uLoginOptType) {
|
||
- case LOGINOPT_TYPE_PASSWORD:
|
||
- icon = QIcon(QString("%1/images/ukui-loginopt-password.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
- break;
|
||
- case LOGINOPT_TYPE_GENERAL_UKEY:
|
||
- icon = QIcon(QString("%1/images/ukui-loginopt-ukey.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
- break;
|
||
- case LOGINOPT_TYPE_FACE:
|
||
- icon = QIcon(QString("%1/images/ukui-loginopt-face.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
- break;
|
||
- case LOGINOPT_TYPE_FINGERPRINT:
|
||
- icon = QIcon(QString("%1/images/ukui-loginopt-finger.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
- break;
|
||
- case LOGINOPT_TYPE_IRIS:
|
||
- icon = QIcon(QString("%1/images/ukui-loginopt-iris.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
- break;
|
||
- case LOGINOPT_TYPE_VOICEPRINT:
|
||
- icon = QIcon(QString("%1/images/ukui-loginopt-voice.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
- break;
|
||
- case LOGINOPT_TYPE_FINGERVEIN:
|
||
- icon = QIcon(QString("%1/images/ukui-loginopt-fingervein.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
- break;
|
||
- case LOGINOPT_TYPE_QRCODE:
|
||
- icon = QIcon(QString("%1/images/ukui-loginopt-qrcode.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
- break;
|
||
+ case LOGINOPT_TYPE_PASSWORD:
|
||
+ icon = QIcon(QString("%1/images/ukui-loginopt-password.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
+ break;
|
||
+ case LOGINOPT_TYPE_GENERAL_UKEY:
|
||
+ icon = QIcon(QString("%1/images/ukui-loginopt-ukey.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
+ break;
|
||
+ case LOGINOPT_TYPE_FACE:
|
||
+ icon = QIcon(QString("%1/images/ukui-loginopt-face.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
+ break;
|
||
+ case LOGINOPT_TYPE_FINGERPRINT:
|
||
+ icon = QIcon(QString("%1/images/ukui-loginopt-finger.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
+ break;
|
||
+ case LOGINOPT_TYPE_IRIS:
|
||
+ icon = QIcon(QString("%1/images/ukui-loginopt-iris.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
+ break;
|
||
+ case LOGINOPT_TYPE_VOICEPRINT:
|
||
+ icon = QIcon(QString("%1/images/ukui-loginopt-voice.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
+ break;
|
||
+ case LOGINOPT_TYPE_FINGERVEIN:
|
||
+ icon = QIcon(QString("%1/images/ukui-loginopt-fingervein.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
+ break;
|
||
+ case LOGINOPT_TYPE_QRCODE:
|
||
+ icon = QIcon(QString("%1/images/ukui-loginopt-qrcode.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
+ break;
|
||
}
|
||
newButton->setIcon(icon);
|
||
newButton->setToolTip(strDrvName);
|
||
@@ -301,8 +290,8 @@ void LoginOptionsWidget::addOptionButton(unsigned uLoginOptType, int nDrvId, QSt
|
||
|
||
void LoginOptionsWidget::clearOptionButtons()
|
||
{
|
||
- QMap<int, QToolButton*>::iterator itMapBtn = m_mapOptBtns.begin();
|
||
- for ( ; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
|
||
+ QMap<int, QToolButton *>::iterator itMapBtn = m_mapOptBtns.begin();
|
||
+ for (; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
|
||
if (itMapBtn.value()) {
|
||
m_btnGroup->removeButton(itMapBtn.value());
|
||
m_layoutOptBtns->removeWidget(itMapBtn.value());
|
||
@@ -319,66 +308,44 @@ void LoginOptionsWidget::updateOptionButtons()
|
||
clearOptionButtons();
|
||
addOptionButton(LOGINOPT_TYPE_PASSWORD, -1, tr("Password"));
|
||
DeviceMap::iterator itMapDev = m_mapDevices.begin();
|
||
- for ( ; itMapDev != m_mapDevices.end(); itMapDev++) {
|
||
+ for (; itMapDev != m_mapDevices.end(); itMapDev++) {
|
||
for (DeviceInfoPtr devPtr : itMapDev.value()) {
|
||
if (devPtr) {
|
||
- if(devPtr->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
|
||
- //ukey 设备类型排在二维码前,但实际上应该显示在二维码之后,因此暂时不添加
|
||
+ if (devPtr->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
|
||
+ // ukey 设备类型排在二维码前,但实际上应该显示在二维码之后,因此暂时不添加
|
||
isShowUkey = true;
|
||
continue;
|
||
}
|
||
- addOptionButton(itMapDev.key(), devPtr->device_id, BioDevices::bioTypeToString_tr(devPtr->biotype));
|
||
- }
|
||
+ addOptionButton(itMapDev.key(), devPtr->device_id, BioDevices::bioTypeToString_tr(devPtr->biotype));
|
||
+ }
|
||
}
|
||
}
|
||
|
||
itMapDev = m_mapDevices.begin();
|
||
- if(isShowUkey){
|
||
- for ( ; itMapDev != m_mapDevices.end(); itMapDev++) {
|
||
+ if (isShowUkey) {
|
||
+ for (; itMapDev != m_mapDevices.end(); itMapDev++) {
|
||
for (DeviceInfoPtr devPtr : itMapDev.value()) {
|
||
- if(devPtr && devPtr->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
|
||
- //此处才添加ukey
|
||
+ if (devPtr && devPtr->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
|
||
+ // 此处才添加ukey
|
||
addOptionButton(itMapDev.key(), devPtr->device_id, BioDevices::bioTypeToString_tr(devPtr->biotype));
|
||
- }
|
||
+ }
|
||
}
|
||
}
|
||
}
|
||
|
||
- //存在特征但没有插入ukey
|
||
- if( !isShowUkey && m_biomericProxy->GetHasUkeyFeature(m_uid)){
|
||
- addOptionButton(LOGINOPT_TYPE_GENERAL_UKEY,-2,BioDevices::bioTypeToString_tr(LOGINOPT_TYPE_GENERAL_UKEY));
|
||
+ // 存在特征但没有插入ukey
|
||
+ if (!isShowUkey && m_biomericProxy->GetHasUkeyFeature(m_uid)) {
|
||
+ addOptionButton(LOGINOPT_TYPE_GENERAL_UKEY, -2, BioDevices::bioTypeToString_tr(LOGINOPT_TYPE_GENERAL_UKEY));
|
||
isShowUkey = true;
|
||
}
|
||
|
||
- if (m_mapOptBtns.size() <= 2 && !isShowUkey) {
|
||
- //因为默认添加一个密码选项,因此当ukey没有显示出来时,按钮数小于等于2时就隐藏选项界面
|
||
- m_labelOptTitle->hide();
|
||
- QMap<int, QToolButton*>::iterator itMapBtn = m_mapOptBtns.begin();
|
||
- for ( ; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
|
||
- if (itMapBtn.value()) {
|
||
- itMapBtn.value()->hide();
|
||
- }
|
||
- }
|
||
- if (m_mapOptBtns.size() == 0) {
|
||
- m_labelFace->hide();
|
||
- m_labelQRCode->hide();
|
||
- }
|
||
- } else {
|
||
- m_labelOptTitle->show();
|
||
- QMap<int, QToolButton*>::iterator itMapBtn = m_mapOptBtns.begin();
|
||
- for ( ; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
|
||
- if (itMapBtn.value()) {
|
||
- itMapBtn.value()->show();
|
||
- }
|
||
+ m_labelOptTitle->show();
|
||
+ QMap<int, QToolButton *>::iterator itMapBtn = m_mapOptBtns.begin();
|
||
+ for (; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
|
||
+ if (itMapBtn.value()) {
|
||
+ itMapBtn.value()->show();
|
||
}
|
||
}
|
||
-
|
||
- m_mapOptBtns[-1]->hide();
|
||
- if(m_mapOptBtns.size() == 2 && isShowUkey) {
|
||
- m_mapOptBtns[-1]->show();
|
||
- }
|
||
-
|
||
- adjustSize();
|
||
}
|
||
|
||
void LoginOptionsWidget::setUser(int uid)
|
||
@@ -404,53 +371,49 @@ void LoginOptionsWidget::readDevicesInfo()
|
||
DeviceList deviceList = m_bioDevices->GetDevList();
|
||
QStringList listDefDevices = m_bioDevices->getAllDefDevices();
|
||
FeatureMap mapFeatures = m_bioDevices->GetUserFeatures(m_uid);
|
||
- qDebug() << m_uid <<",count:"<<mapFeatures.size();
|
||
+ qDebug() << m_uid << ",count:" << mapFeatures.size();
|
||
|
||
- for(auto pDeviceInfo : deviceList)
|
||
- {
|
||
+ for (auto pDeviceInfo : deviceList) {
|
||
int nDevFeatureCount = 0;
|
||
if (m_isInAuth && m_curDevInfo && m_curDevInfo->device_id == pDeviceInfo->device_id) {
|
||
nDevFeatureCount = 1;
|
||
} else {
|
||
if (m_uid == -1) {
|
||
nDevFeatureCount = 0;
|
||
- } else if(mapFeatures.contains(pDeviceInfo->device_shortname)){
|
||
+ } else if (mapFeatures.contains(pDeviceInfo->device_shortname)) {
|
||
nDevFeatureCount = mapFeatures[pDeviceInfo->device_shortname].size();
|
||
}
|
||
}
|
||
- qDebug() << *pDeviceInfo << ",FeatureCount:"<<nDevFeatureCount;
|
||
- if(nDevFeatureCount > 0) {
|
||
+ qDebug() << *pDeviceInfo << ",FeatureCount:" << nDevFeatureCount;
|
||
+ if (nDevFeatureCount > 0) {
|
||
if (!isAuthEnable && pDeviceInfo->biotype <= BIOTYPE_VOICEPRINT)
|
||
continue;
|
||
if (!isQRCodeEnable && pDeviceInfo->biotype == REMOTE_QRCODE_TYPE)
|
||
continue;
|
||
int nDevType = LOGINOPT_TYPE_OTHERS;
|
||
nDevType = convertDeviceType(pDeviceInfo->biotype);
|
||
- if (listDefDevices.contains(pDeviceInfo->device_shortname) &&
|
||
- !m_mapDevices.contains(nDevType)) {
|
||
+ if (listDefDevices.contains(pDeviceInfo->device_shortname) && !m_mapDevices.contains(nDevType)) {
|
||
m_mapDevices[nDevType].push_back(pDeviceInfo);
|
||
}
|
||
}
|
||
}
|
||
updateOptionButtons();
|
||
updateUIStatus(false);
|
||
- //Q_EMIT notifyOptionsChange(m_mapDevices.size());
|
||
+ // Q_EMIT notifyOptionsChange(m_mapDevices.size());
|
||
}
|
||
|
||
void LoginOptionsWidget::startAuth(DeviceInfoPtr device, int uid)
|
||
{
|
||
- if(!device || !m_biomericProxy || is_Lock)
|
||
- {
|
||
+ if (!device || !m_biomericProxy || is_Lock) {
|
||
qWarning() << "BiometricProxy doesn't exist.";
|
||
return;
|
||
}
|
||
|
||
- if(m_isInAuth)
|
||
- {
|
||
+ if (m_isInAuth) {
|
||
qDebug() << "Identification is currently under way, stop it";
|
||
stopAuth();
|
||
}
|
||
- qDebug()<<"deviceInfo:"<<device->device_id;
|
||
+ qDebug() << "deviceInfo:" << device->device_id;
|
||
this->m_curDevInfo = device;
|
||
this->m_uid = uid;
|
||
struct passwd *pwdInfo = getpwuid(uid);
|
||
@@ -469,7 +432,7 @@ void LoginOptionsWidget::startAuth(DeviceInfoPtr device, int uid)
|
||
void LoginOptionsWidget::setSelectedPassword()
|
||
{
|
||
if (m_mapOptBtns.contains(-1)) {
|
||
- QToolButton* btn = m_mapOptBtns[-1];
|
||
+ QToolButton *btn = m_mapOptBtns[-1];
|
||
if (btn && btn->isVisible()) {
|
||
btn->setChecked(true);
|
||
}
|
||
@@ -480,42 +443,41 @@ void LoginOptionsWidget::setSelectedPassword()
|
||
void LoginOptionsWidget::startAuth_()
|
||
{
|
||
if (!m_curDevInfo)
|
||
- return ;
|
||
+ return;
|
||
qDebug().noquote() << QString("Identify:[drvid: %1, uid: %2]").arg(m_curDevInfo->device_id).arg(m_uid);
|
||
|
||
m_isInAuth = true;
|
||
m_dupFD = -1;
|
||
- if(!w_timer)
|
||
- {
|
||
+ if (!w_timer) {
|
||
w_timer = new QTimer(this);
|
||
w_timer->setInterval(150);
|
||
connect(w_timer, &QTimer::timeout, this, &LoginOptionsWidget::updatePixmap);
|
||
}
|
||
m_waitingPixmap = QIcon::fromTheme("ukui-loading-0-symbolic").pixmap(24, 24);
|
||
- if(m_curLoginOptType == LOGINOPT_TYPE_QRCODE) {
|
||
+ if (m_curLoginOptType == LOGINOPT_TYPE_QRCODE) {
|
||
m_labelQRCodeTip->setPixmap(m_waitingPixmap);
|
||
m_labelQRCodeTip->show();
|
||
m_labelQRCodeMsg->hide();
|
||
- } else if(m_curLoginOptType == LOGINOPT_TYPE_FACE) {
|
||
- m_labelFace->setStyleSheet(QString("border-radius: %1px; border:0px solid white;background-color: rgba(230,230,230,0.39);").arg(77));
|
||
+ } else if (m_curLoginOptType == LOGINOPT_TYPE_FACE) {
|
||
+ m_labelFace->setStyleSheet(
|
||
+ QString("border-radius: %1px; border:0px solid white;background-color: rgba(230,230,230,0.39);").arg(77));
|
||
m_labelFace->setPixmap(QPixmap(""));
|
||
m_labelFaceLoad->setPixmap(m_waitingPixmap);
|
||
m_labelFaceLoad->show();
|
||
}
|
||
w_timer->start();
|
||
- m_bioDevices->recordAuthDrive("polkit",m_curDevInfo->device_id,true);
|
||
+ m_bioDevices->recordAuthDrive("polkit", m_curDevInfo->device_id, true);
|
||
m_biomericProxy->startAuth(m_uid, m_curDevInfo);
|
||
}
|
||
|
||
void LoginOptionsWidget::stopAuth()
|
||
{
|
||
m_isStopped = true;
|
||
- if(!m_isInAuth || !m_curDevInfo)
|
||
- {
|
||
+ if (!m_isInAuth || !m_curDevInfo) {
|
||
return;
|
||
}
|
||
m_biomericProxy->stopAuth();
|
||
- if(m_retrytimer&&m_retrytimer->isActive()){
|
||
+ if (m_retrytimer && m_retrytimer->isActive()) {
|
||
m_retrytimer->stop();
|
||
delete m_retrytimer;
|
||
m_retrytimer = nullptr;
|
||
@@ -531,27 +493,26 @@ void LoginOptionsWidget::updatePixmap()
|
||
QMatrix matrix;
|
||
matrix.rotate(90.0);
|
||
m_waitingPixmap = m_waitingPixmap.transformed(matrix, Qt::FastTransformation);
|
||
- if(m_curLoginOptType == LOGINOPT_TYPE_QRCODE)
|
||
+ if (m_curLoginOptType == LOGINOPT_TYPE_QRCODE)
|
||
m_labelQRCodeTip->setPixmap(m_waitingPixmap);
|
||
- else if(m_curLoginOptType == LOGINOPT_TYPE_FACE) {
|
||
+ else if (m_curLoginOptType == LOGINOPT_TYPE_FACE) {
|
||
m_labelFaceLoad->setPixmap(m_waitingPixmap);
|
||
}
|
||
}
|
||
|
||
void LoginOptionsWidget::onAuthFinished()
|
||
{
|
||
- if(m_bioDevices){
|
||
- m_bioDevices->recordAuthDrive("polkit",0,false);
|
||
+ if (m_bioDevices) {
|
||
+ m_bioDevices->recordAuthDrive("polkit", 0, false);
|
||
}
|
||
}
|
||
|
||
void LoginOptionsWidget::onIdentifyComplete(int uid, bool ret, int retErrNo)
|
||
{
|
||
- if(m_isStopped == true)
|
||
- return ;
|
||
+ if (m_isStopped == true)
|
||
+ return;
|
||
|
||
- if(uid < 0)
|
||
- {
|
||
+ if (uid < 0) {
|
||
readDevicesInfo();
|
||
Q_EMIT authComplete(uid, false, -1);
|
||
return;
|
||
@@ -559,23 +520,28 @@ void LoginOptionsWidget::onIdentifyComplete(int uid, bool ret, int retErrNo)
|
||
qDebug() << retErrNo << uid << m_uid;
|
||
|
||
// 特征识别成功,而且用户id匹配
|
||
- if(retErrNo == DBUS_RESULT_SUCCESS && uid == m_uid) {
|
||
+ if (retErrNo == DBUS_RESULT_SUCCESS && uid == m_uid) {
|
||
qDebug() << "Identify success";
|
||
Q_EMIT authComplete(uid, true, 0);
|
||
- } else if(retErrNo == -1) { // 特征识别不匹配
|
||
+ } else if (retErrNo == -1) { // 特征识别不匹配
|
||
qDebug() << "Identify failed";
|
||
Q_EMIT authComplete(uid, false, 2);
|
||
- } else if(retErrNo == -2) { //识别发生错误
|
||
+ } else if (retErrNo == -2) { // 识别发生错误
|
||
StatusReslut ret = m_bioDevices->UpdateStatus(m_curDevInfo->device_id);
|
||
- qDebug()<<"StatusReslut:"<<ret.result<<","<<ret.enable<<","<<ret.devNum<<","
|
||
- <<ret.devStatus<<","<<ret.opsStatus<<","<<ret.notifyMessageId;
|
||
- //识别操作超时
|
||
- if(ret.result == 0 && (ret.opsStatus == 404 || ret.opsStatus == 304
|
||
- || ret.opsStatus == 8)) { // 304认证超时, 8网络异常
|
||
+ qDebug() << "StatusReslut:" << ret.result << "," << ret.enable << "," << ret.devNum << "," << ret.devStatus
|
||
+ << "," << ret.opsStatus << "," << ret.notifyMessageId;
|
||
+ // 识别操作超时
|
||
+ if (ret.result == 0 && ret.opsStatus == 10) { // 10 当前时间错误导致网络错误
|
||
+ Q_EMIT authComplete(uid, false, -4);
|
||
+ } else if (
|
||
+ ret.result == 0
|
||
+ && (ret.opsStatus == 404 || ret.opsStatus == 304 || ret.opsStatus == 8)) { // 304认证超时, 8网络异常
|
||
Q_EMIT authComplete(uid, false, 1);
|
||
} else if (ret.opsStatus == OPS_IDENTIFY_STOP_BY_USER || ret.opsStatus == OPS_VERIFY_STOP_BY_USER) {
|
||
Q_EMIT authComplete(uid, false, -2); // 主动停止,直接重试
|
||
- } else if (ret.opsStatus == OPS_OPEN_FAIL || ret.opsStatus == OPS_OPEN_ERROR) { // 无法打开设备(设备是坏的/被占用),直接禁用
|
||
+ } else if (
|
||
+ ret.opsStatus == OPS_OPEN_FAIL
|
||
+ || ret.opsStatus == OPS_OPEN_ERROR) { // 无法打开设备(设备是坏的/被占用),直接禁用
|
||
Q_EMIT authComplete(uid, false, 5);
|
||
} else {
|
||
Q_EMIT authComplete(uid, false, 2);
|
||
@@ -592,14 +558,14 @@ QPixmap LoginOptionsWidget::PixmapToRound(const QPixmap &src, int radius)
|
||
}
|
||
|
||
QPixmap pixmapa(src);
|
||
- QPixmap pixmap(radius*2,radius*2);
|
||
+ QPixmap pixmap(radius * 2, radius * 2);
|
||
pixmap.fill(Qt::transparent);
|
||
QPainter painter(&pixmap);
|
||
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
|
||
QPainterPath path;
|
||
- path.addEllipse(0, 0, radius*2, radius*2);
|
||
+ path.addEllipse(0, 0, radius * 2, radius * 2);
|
||
painter.setClipPath(path);
|
||
- painter.drawPixmap(0, 0, radius*2, radius*2, pixmapa);
|
||
+ painter.drawPixmap(0, 0, radius * 2, radius * 2, pixmapa);
|
||
return pixmap;
|
||
}
|
||
|
||
@@ -614,13 +580,13 @@ QPixmap LoginOptionsWidget::PixmapToRound(const QPixmap &src, int radius)
|
||
QPixmap LoginOptionsWidget::scaledPixmap(int width, int height, QString url)
|
||
{
|
||
QFile imgFile(url);
|
||
- if(!imgFile.exists()){
|
||
- qDebug()<< "not find the pixmap file";
|
||
+ if (!imgFile.exists()) {
|
||
+ qDebug() << "not find the pixmap file";
|
||
return QPixmap();
|
||
}
|
||
QImage image(url);
|
||
QPixmap pixmap = QPixmap::fromImage(image);
|
||
- if(pixmap.isNull()) {
|
||
+ if (pixmap.isNull()) {
|
||
qDebug() << "pixmap is null";
|
||
QProcess exec;
|
||
QString program("file " + url);
|
||
@@ -628,7 +594,7 @@ QPixmap LoginOptionsWidget::scaledPixmap(int width, int height, QString url)
|
||
exec.waitForFinished(1000);
|
||
QString output = exec.readAllStandardOutput();
|
||
qDebug() << output;
|
||
- if(output.contains("SVG")){
|
||
+ if (output.contains("SVG")) {
|
||
qDebug() << "image format is SVG";
|
||
QSvgRenderer render(url);
|
||
QImage image(width, height, QImage::Format_ARGB32);
|
||
@@ -636,9 +602,8 @@ QPixmap LoginOptionsWidget::scaledPixmap(int width, int height, QString url)
|
||
QPainter painter(&image);
|
||
render.render(&painter, image.rect());
|
||
pixmap.convertFromImage(image);
|
||
- } else if(output.contains("TIFF")) {
|
||
+ } else if (output.contains("TIFF")) {
|
||
qDebug() << "image format is TIFF";
|
||
-
|
||
}
|
||
}
|
||
|
||
@@ -647,42 +612,46 @@ QPixmap LoginOptionsWidget::scaledPixmap(int width, int height, QString url)
|
||
|
||
void LoginOptionsWidget::onFrameWritten(int drvid)
|
||
{
|
||
- if(!m_curDevInfo)
|
||
+ if (!m_curDevInfo)
|
||
return;
|
||
|
||
- if (m_curDevInfo && m_curDevInfo->device_id != drvid || !m_isInAuth) {
|
||
- return ;
|
||
+ if (m_curDevInfo && m_curDevInfo->device_id != drvid || !m_isInAuth) {
|
||
+ return;
|
||
}
|
||
|
||
- if(m_dupFD == -1){
|
||
+ if (m_dupFD == -1) {
|
||
m_dupFD = get_server_gvariant_stdout(drvid);
|
||
}
|
||
|
||
- if(m_dupFD <= 0)
|
||
- return ;
|
||
+ if (m_dupFD <= 0)
|
||
+ return;
|
||
|
||
cv::Mat img;
|
||
lseek(m_dupFD, 0, SEEK_SET);
|
||
- char base64_bufferData[1024*1024];
|
||
- int rc = read(m_dupFD, base64_bufferData, 1024*1024);
|
||
+ char base64_bufferData[1024 * 1024];
|
||
+ int rc = read(m_dupFD, base64_bufferData, 1024 * 1024);
|
||
Q_UNUSED(rc);
|
||
// printf("rc = %d\n", rc);
|
||
|
||
cv::Mat mat2(1, sizeof(base64_bufferData), CV_8U, base64_bufferData);
|
||
img = cv::imdecode(mat2, cv::IMREAD_COLOR);
|
||
if (!img.data)
|
||
- return ;
|
||
- cv::cvtColor(img,img,cv::COLOR_BGR2RGB);
|
||
+ return;
|
||
+ cv::cvtColor(img, img, cv::COLOR_BGR2RGB);
|
||
|
||
- QImage srcQImage = QImage((uchar*)(img.data), img.cols, img.rows, QImage::Format_RGB888);
|
||
+ QImage srcQImage = QImage((uchar *)(img.data), img.cols, img.rows, QImage::Format_RGB888);
|
||
if (isAuthenticating()) {
|
||
if (m_curLoginOptType == LOGINOPT_TYPE_FACE) {
|
||
- m_labelFace->setStyleSheet(QString("border-radius: %1px; border:0px solid white;background-color: rgba(255,255,255,10%);").arg(77));
|
||
+ m_labelFace->setStyleSheet(
|
||
+ QString("border-radius: %1px; border:0px solid white;background-color: rgba(255,255,255,10%);")
|
||
+ .arg(77));
|
||
setFaceImg(srcQImage);
|
||
m_labelFace->show();
|
||
m_labelQRCode->hide();
|
||
} else if (m_curLoginOptType == LOGINOPT_TYPE_QRCODE) {
|
||
- m_labelQRCode->setStyleSheet(QString("border-radius: %1px; border:0px solid white;background-color: rgba(255,255,255,100%);").arg(6));
|
||
+ m_labelQRCode->setStyleSheet(
|
||
+ QString("border-radius: %1px; border:0px solid white;background-color: rgba(255,255,255,100%);")
|
||
+ .arg(6));
|
||
setQRCode(srcQImage);
|
||
m_labelQRCode->show();
|
||
m_labelQRCodeTip->hide();
|
||
@@ -695,14 +664,13 @@ void LoginOptionsWidget::onFrameWritten(int drvid)
|
||
m_labelFace->hide();
|
||
m_labelQRCode->hide();
|
||
}
|
||
- if(w_timer && w_timer->isActive())
|
||
- {
|
||
+ if (w_timer && w_timer->isActive()) {
|
||
w_timer->stop();
|
||
}
|
||
Q_EMIT updateImage(srcQImage);
|
||
}
|
||
|
||
-void LoginOptionsWidget::setQRCode(QImage& imgQRCode)
|
||
+void LoginOptionsWidget::setQRCode(QImage &imgQRCode)
|
||
{
|
||
if (imgQRCode.isNull()) {
|
||
imgQRCode.load(QString("%1/images/ukui-qrcode-null.svg").arg(GET_STR(UKUI_BIOMETRIC)));
|
||
@@ -716,41 +684,49 @@ void LoginOptionsWidget::setQRCodeMsg(QString strMsg)
|
||
{
|
||
if (strMsg.isEmpty()) {
|
||
m_labelQRCodeMsg->hide();
|
||
- //m_labelQRCodeTip->hide();
|
||
+ // m_labelQRCodeTip->hide();
|
||
} else {
|
||
- //一开始认证时就没有网,直接停止加载状态
|
||
- if(w_timer && w_timer->isActive())
|
||
- {
|
||
+ // 一开始认证时就没有网,直接停止加载状态
|
||
+ if (w_timer && w_timer->isActive()) {
|
||
w_timer->stop();
|
||
}
|
||
m_labelQRCodeMsg->setText(strMsg);
|
||
m_labelQRCodeMsg->show();
|
||
m_labelQRCodeTip->show();
|
||
- m_labelQRCodeTip->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(QSize(22,22)));
|
||
+ m_labelQRCodeTip->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(QSize(22, 22)));
|
||
}
|
||
}
|
||
|
||
-void LoginOptionsWidget::setFaceImg(QImage& imgFace, int nStatus)
|
||
+void LoginOptionsWidget::setFaceImg(QImage &imgFace, int nStatus)
|
||
{
|
||
QPixmap faceImage;
|
||
- m_labelFace->setFixedSize(154,154);
|
||
- //如果头像文件不存在,则使用默认头像
|
||
- if(!imgFace.isNull()) {
|
||
- faceImage = PixmapToRound(QPixmap::fromImage(imgFace),77);
|
||
+ m_labelFace->setFixedSize(154, 154);
|
||
+ // 如果头像文件不存在,则使用默认头像
|
||
+ if (!imgFace.isNull()) {
|
||
+ faceImage = PixmapToRound(QPixmap::fromImage(imgFace), 77);
|
||
} else {
|
||
- switch(nStatus) {
|
||
- case 1:
|
||
- faceImage = loadSvg(QString("%1/images/ukui-loginopt-lose.svg").arg(GET_STR(UKUI_BIOMETRIC)),"black",48);
|
||
- m_labelFace->setStyleSheet(QString("border-radius: %1px; border:0px solid white;background-color: rgba(230,230,230,40%);").arg(77));
|
||
- break;
|
||
- case 2:
|
||
- faceImage = loadSvg(QString("%1/images/ukui-loginopt-smile.svg").arg(GET_STR(UKUI_BIOMETRIC)),"gray",48);
|
||
- m_labelFace->setStyleSheet(QString("border-radius: %1px; border:0px solid white;background-color: rgba(230,230,230,100%);").arg(77));
|
||
- break;
|
||
- default:
|
||
- faceImage = loadSvg(QString("%1/images/ukui-loginopt-smile.svg").arg(GET_STR(UKUI_BIOMETRIC)),"black",48);
|
||
- m_labelFace->setStyleSheet(QString("border-radius: %1px; border:0px solid white;background-color: rgba(230,230,230,40%);").arg(77));
|
||
- break;
|
||
+ switch (nStatus) {
|
||
+ case 1:
|
||
+ faceImage
|
||
+ = loadSvg(QString("%1/images/ukui-loginopt-lose.svg").arg(GET_STR(UKUI_BIOMETRIC)), "black", 48);
|
||
+ m_labelFace->setStyleSheet(
|
||
+ QString("border-radius: %1px; border:0px solid white;background-color: rgba(230,230,230,40%);")
|
||
+ .arg(77));
|
||
+ break;
|
||
+ case 2:
|
||
+ faceImage
|
||
+ = loadSvg(QString("%1/images/ukui-loginopt-smile.svg").arg(GET_STR(UKUI_BIOMETRIC)), "gray", 48);
|
||
+ m_labelFace->setStyleSheet(
|
||
+ QString("border-radius: %1px; border:0px solid white;background-color: rgba(230,230,230,100%);")
|
||
+ .arg(77));
|
||
+ break;
|
||
+ default:
|
||
+ faceImage
|
||
+ = loadSvg(QString("%1/images/ukui-loginopt-smile.svg").arg(GET_STR(UKUI_BIOMETRIC)), "black", 48);
|
||
+ m_labelFace->setStyleSheet(
|
||
+ QString("border-radius: %1px; border:0px solid white;background-color: rgba(230,230,230,40%);")
|
||
+ .arg(77));
|
||
+ break;
|
||
}
|
||
}
|
||
|
||
@@ -761,22 +737,19 @@ void LoginOptionsWidget::setFaceImg(QImage& imgFace, int nStatus)
|
||
|
||
void LoginOptionsWidget::onStatusChanged(int drvid, const QString &message)
|
||
{
|
||
- if(!m_isInAuth || !m_curDevInfo)
|
||
- {
|
||
+ if (!m_isInAuth || !m_curDevInfo) {
|
||
return;
|
||
}
|
||
- if(drvid != m_curDevInfo->device_id)
|
||
- {
|
||
+ if (drvid != m_curDevInfo->device_id) {
|
||
return;
|
||
}
|
||
- //Q_EMIT updateAuthMsg(message);
|
||
+ // Q_EMIT updateAuthMsg(message);
|
||
}
|
||
|
||
void LoginOptionsWidget::setCurrentDevice(int drvid)
|
||
{
|
||
DeviceInfoPtr pDeviceInfo = findDeviceById(drvid);
|
||
- if(pDeviceInfo)
|
||
- {
|
||
+ if (pDeviceInfo) {
|
||
setCurrentDevice(pDeviceInfo);
|
||
}
|
||
}
|
||
@@ -784,8 +757,7 @@ void LoginOptionsWidget::setCurrentDevice(int drvid)
|
||
void LoginOptionsWidget::setCurrentDevice(const QString &deviceName)
|
||
{
|
||
DeviceInfoPtr pDeviceInfo = findDeviceByName(deviceName);
|
||
- if(pDeviceInfo)
|
||
- {
|
||
+ if (pDeviceInfo) {
|
||
setCurrentDevice(pDeviceInfo);
|
||
}
|
||
}
|
||
@@ -797,15 +769,11 @@ void LoginOptionsWidget::setCurrentDevice(const DeviceInfoPtr &pDeviceInfo)
|
||
|
||
DeviceInfoPtr LoginOptionsWidget::findDeviceById(int drvid)
|
||
{
|
||
- for(int type : m_mapDevices.keys())
|
||
- {
|
||
+ for (int type : m_mapDevices.keys()) {
|
||
DeviceList &deviceList = m_mapDevices[type];
|
||
- auto iter = std::find_if(deviceList.begin(), deviceList.end(),
|
||
- [&](DeviceInfoPtr ptr){
|
||
- return ptr->device_id == drvid;
|
||
- });
|
||
- if(iter != deviceList.end())
|
||
- {
|
||
+ auto iter = std::find_if(
|
||
+ deviceList.begin(), deviceList.end(), [&](DeviceInfoPtr ptr) { return ptr->device_id == drvid; });
|
||
+ if (iter != deviceList.end()) {
|
||
return *iter;
|
||
}
|
||
}
|
||
@@ -814,25 +782,21 @@ DeviceInfoPtr LoginOptionsWidget::findDeviceById(int drvid)
|
||
|
||
DeviceInfoPtr LoginOptionsWidget::findDeviceByName(const QString &name)
|
||
{
|
||
- for(int type : m_mapDevices.keys())
|
||
- {
|
||
+ for (int type : m_mapDevices.keys()) {
|
||
DeviceList &deviceList = m_mapDevices[type];
|
||
- auto iter = std::find_if(deviceList.begin(), deviceList.end(),
|
||
- [&](DeviceInfoPtr ptr){
|
||
- return ptr->device_shortname == name;
|
||
- });
|
||
- if(iter != deviceList.end())
|
||
- {
|
||
+ auto iter = std::find_if(
|
||
+ deviceList.begin(), deviceList.end(), [&](DeviceInfoPtr ptr) { return ptr->device_shortname == name; });
|
||
+ if (iter != deviceList.end()) {
|
||
return *iter;
|
||
}
|
||
}
|
||
return DeviceInfoPtr();
|
||
}
|
||
|
||
-QString LoginOptionsWidget::GetDefaultDevice(uid_t uid,int bioType)
|
||
+QString LoginOptionsWidget::GetDefaultDevice(uid_t uid, int bioType)
|
||
{
|
||
QString defaultDeviceName = "";
|
||
- DeviceInfoPtr pDeviceInfo = m_bioDevices->getDefaultDevice(uid,bioType);
|
||
+ DeviceInfoPtr pDeviceInfo = m_bioDevices->getDefaultDevice(uid, bioType);
|
||
if (pDeviceInfo) {
|
||
defaultDeviceName = pDeviceInfo->device_shortname;
|
||
}
|
||
@@ -855,19 +819,19 @@ QString LoginOptionsWidget::GetDefaultDevice(uid_t uid)
|
||
|
||
void LoginOptionsWidget::onUSBDeviceCountChange(int newNum)
|
||
{
|
||
- qDebug()<<"deviceNewNum:"<<newNum;
|
||
+ qDebug() << "deviceNewNum:" << newNum;
|
||
int savedCount = 0;
|
||
- for(int type : m_mapDevices.keys())
|
||
+ for (int type : m_mapDevices.keys())
|
||
savedCount += m_mapDevices.value(type).count();
|
||
|
||
readDevicesInfo();
|
||
|
||
int count = 0;
|
||
- for(int type : m_mapDevices.keys())
|
||
+ for (int type : m_mapDevices.keys())
|
||
count += m_mapDevices.value(type).count();
|
||
-
|
||
- //设备数量发生了变化
|
||
- if(count != savedCount) {
|
||
+
|
||
+ // 设备数量发生了变化
|
||
+ if (count != savedCount) {
|
||
updateOptionButtons();
|
||
Q_EMIT notifyOptionsChange(count);
|
||
}
|
||
@@ -876,40 +840,25 @@ void LoginOptionsWidget::onUSBDeviceCountChange(int newNum)
|
||
|
||
void LoginOptionsWidget::updateUkeyUIStatus(int type)
|
||
{
|
||
- if (type == LOGINOPT_TYPE_FACE) {
|
||
- m_labelFace->setStyleSheet(QString("border-radius: %1px; border:0px solid white;background-color: rgba(255,255,255,10%);").arg(77));
|
||
- m_labelFace->show();
|
||
- m_labelQRCode->hide();
|
||
- m_widgetImage->show();
|
||
- } else if (type == LOGINOPT_TYPE_QRCODE) {
|
||
- m_labelQRCode->setStyleSheet(QString("border-radius: %1px; border:0px solid white;background-color: rgba(255,255,255,100%);").arg(6));
|
||
- QImage img;
|
||
- setQRCode(img);
|
||
- m_labelQRCode->show();
|
||
- m_labelFace->hide();
|
||
- m_widgetImage->show();
|
||
- } else {
|
||
- m_labelFace->hide();
|
||
- m_labelQRCode->hide();
|
||
- m_widgetImage->hide();
|
||
- }
|
||
+ m_labelFace->hide();
|
||
+ m_labelQRCode->hide();
|
||
+ m_widgetImage->hide();
|
||
+ setFixedHeight(m_labelOptTitle->height() + 12 + 36);
|
||
|
||
- QTimer::singleShot(0,this,[&,this](){
|
||
- Q_EMIT this->updateWndSize(this->m_curLoginOptType, this->m_mapOptBtns.size());
|
||
- });
|
||
+ Q_EMIT this->updateWndSize(this->m_curLoginOptType, this->m_mapOptBtns.size());
|
||
}
|
||
|
||
-void LoginOptionsWidget::updateUIStatus(bool update)
|
||
+void LoginOptionsWidget::updateUIStatus(bool update, int nPreOptType /* = -1*/)
|
||
{
|
||
if (m_mapOptBtns.contains(-1)) {
|
||
- QToolButton* btn = m_mapOptBtns[-1];
|
||
+ QToolButton *btn = m_mapOptBtns[-1];
|
||
if (btn && btn->isVisible()) {
|
||
btn->setChecked(true);
|
||
}
|
||
}
|
||
if (m_curDevInfo) {
|
||
if (m_mapOptBtns.contains(m_curDevInfo->device_id)) {
|
||
- QToolButton* btn = m_mapOptBtns[m_curDevInfo->device_id];
|
||
+ QToolButton *btn = m_mapOptBtns[m_curDevInfo->device_id];
|
||
if (btn) {
|
||
btn->setChecked(true);
|
||
}
|
||
@@ -917,27 +866,41 @@ void LoginOptionsWidget::updateUIStatus(bool update)
|
||
}
|
||
|
||
if (update) {
|
||
+ if (nPreOptType != -1) {
|
||
+ m_curLoginOptType = nPreOptType;
|
||
+ }
|
||
if (m_curLoginOptType == LOGINOPT_TYPE_FACE) {
|
||
- m_labelFace->setStyleSheet(QString("border-radius: %1px; border:0px solid white;background-color: rgba(255,255,255,10%);").arg(77));
|
||
+ m_labelFace->setStyleSheet(
|
||
+ QString("border-radius: %1px; border:0px solid white;background-color: rgba(255,255,255,10%);")
|
||
+ .arg(77));
|
||
m_labelFace->show();
|
||
m_labelQRCode->hide();
|
||
m_widgetImage->show();
|
||
+ setFixedHeight(m_labelOptTitle->height() + 12 + 36 + 12 + 154 + 48);
|
||
} else if (m_curLoginOptType == LOGINOPT_TYPE_QRCODE) {
|
||
- m_labelQRCode->setStyleSheet(QString("border-radius: %1px; border:0px solid white;background-color: rgba(255,255,255,100%);").arg(6));
|
||
+ m_labelQRCode->setStyleSheet(
|
||
+ QString("border-radius: %1px; border:0px solid white;background-color: rgba(255,255,255,100%);")
|
||
+ .arg(6));
|
||
QImage img;
|
||
setQRCode(img);
|
||
m_labelQRCode->show();
|
||
m_labelFace->hide();
|
||
m_widgetImage->show();
|
||
+ setFixedHeight(m_labelOptTitle->height() + 12 + 36 + 12 + 154 + 48);
|
||
} else {
|
||
m_labelFace->hide();
|
||
m_labelQRCode->hide();
|
||
- m_widgetImage->hide();
|
||
+ if (m_curLoginOptType == LOGINOPT_TYPE_FINGERPRINT || m_curLoginOptType == LOGINOPT_TYPE_FINGERVEIN
|
||
+ || m_curLoginOptType == LOGINOPT_TYPE_IRIS || m_curLoginOptType == LOGINOPT_TYPE_VOICEPRINT) {
|
||
+ m_widgetImage->show();
|
||
+ setFixedHeight(m_labelOptTitle->height() + 12 + 36 + 12 + 154 + 48);
|
||
+ } else {
|
||
+ m_widgetImage->hide();
|
||
+ setFixedHeight(m_labelOptTitle->height() + 12 + 36 + 24);
|
||
+ }
|
||
}
|
||
- }
|
||
- QTimer::singleShot(0,this,[&,this](){
|
||
Q_EMIT this->updateWndSize(this->m_curLoginOptType, this->m_mapOptBtns.size());
|
||
- });
|
||
+ }
|
||
}
|
||
|
||
void LoginOptionsWidget::onOptionSelected(int nIndex)
|
||
@@ -949,17 +912,17 @@ void LoginOptionsWidget::onOptionSelected(int nIndex)
|
||
if (info && !isDeviceDisable(info->device_id)) {
|
||
Q_EMIT optionSelected(convertDeviceType(info->biotype), info);
|
||
this->m_curLoginOptType = convertDeviceType(info->biotype);
|
||
- }else if(nIndex == 0 && m_listDriveId[nIndex] == -1){
|
||
+ } else if (nIndex == 0 && m_listDriveId[nIndex] == -1) {
|
||
stopAuth();
|
||
m_curDevInfo = nullptr;
|
||
- Q_EMIT optionSelected(LOGINOPT_TYPE_PASSWORD,nullptr);
|
||
+ Q_EMIT optionSelected(LOGINOPT_TYPE_PASSWORD, nullptr);
|
||
this->m_curLoginOptType = LOGINOPT_TYPE_PASSWORD;
|
||
|
||
- }else if(m_listDriveId[nIndex] == -2){
|
||
- //存在ukey特征,但未插入ukey
|
||
+ } else if (m_listDriveId[nIndex] == -2) {
|
||
+ // 存在ukey特征,但未插入ukey
|
||
stopAuth();
|
||
m_curDevInfo = nullptr;
|
||
- Q_EMIT optionSelected(LOGINOPT_TYPE_GENERAL_UKEY,nullptr);
|
||
+ Q_EMIT optionSelected(LOGINOPT_TYPE_GENERAL_UKEY, nullptr);
|
||
this->m_curLoginOptType = LOGINOPT_TYPE_GENERAL_UKEY;
|
||
}
|
||
}
|
||
@@ -969,33 +932,33 @@ int LoginOptionsWidget::convertDeviceType(int nDevType)
|
||
{
|
||
int nLoginOptType = LOGINOPT_TYPE_OTHERS;
|
||
switch (nDevType) {
|
||
- case BIOTYPE_FINGERPRINT:
|
||
- nLoginOptType = LOGINOPT_TYPE_FINGERPRINT;
|
||
- break;
|
||
- case BIOTYPE_FINGERVEIN:
|
||
- nLoginOptType = LOGINOPT_TYPE_FINGERVEIN;
|
||
- break;
|
||
- case BIOTYPE_IRIS:
|
||
- nLoginOptType = LOGINOPT_TYPE_IRIS;
|
||
- break;
|
||
- case BIOTYPE_FACE:
|
||
- nLoginOptType = LOGINOPT_TYPE_FACE;
|
||
- break;
|
||
- case BIOTYPE_VOICEPRINT:
|
||
- nLoginOptType = LOGINOPT_TYPE_VOICEPRINT;
|
||
- break;
|
||
- case UniT_General_Ukey:
|
||
- nLoginOptType = LOGINOPT_TYPE_GENERAL_UKEY;
|
||
- break;
|
||
- case UniT_Advanced_Ukey:
|
||
- nLoginOptType = LOGINOPT_TYPE_ADVANCED_UKEY;
|
||
- break;
|
||
- case REMOTE_QRCODE_TYPE:
|
||
- nLoginOptType = LOGINOPT_TYPE_QRCODE;
|
||
- break;
|
||
- default:
|
||
- nLoginOptType = LOGINOPT_TYPE_OTHERS;
|
||
- break;
|
||
+ case BIOTYPE_FINGERPRINT:
|
||
+ nLoginOptType = LOGINOPT_TYPE_FINGERPRINT;
|
||
+ break;
|
||
+ case BIOTYPE_FINGERVEIN:
|
||
+ nLoginOptType = LOGINOPT_TYPE_FINGERVEIN;
|
||
+ break;
|
||
+ case BIOTYPE_IRIS:
|
||
+ nLoginOptType = LOGINOPT_TYPE_IRIS;
|
||
+ break;
|
||
+ case BIOTYPE_FACE:
|
||
+ nLoginOptType = LOGINOPT_TYPE_FACE;
|
||
+ break;
|
||
+ case BIOTYPE_VOICEPRINT:
|
||
+ nLoginOptType = LOGINOPT_TYPE_VOICEPRINT;
|
||
+ break;
|
||
+ case UniT_General_Ukey:
|
||
+ nLoginOptType = LOGINOPT_TYPE_GENERAL_UKEY;
|
||
+ break;
|
||
+ case UniT_Advanced_Ukey:
|
||
+ nLoginOptType = LOGINOPT_TYPE_ADVANCED_UKEY;
|
||
+ break;
|
||
+ case REMOTE_QRCODE_TYPE:
|
||
+ nLoginOptType = LOGINOPT_TYPE_QRCODE;
|
||
+ break;
|
||
+ default:
|
||
+ nLoginOptType = LOGINOPT_TYPE_OTHERS;
|
||
+ break;
|
||
}
|
||
return nLoginOptType;
|
||
}
|
||
@@ -1004,8 +967,8 @@ void LoginOptionsWidget::setDeviceDisable(int nDevId, bool bDisable)
|
||
{
|
||
if (bDisable) {
|
||
m_mapDisableDev[m_uid][nDevId] = true;
|
||
- QMap<int, QToolButton*>::iterator itMapBtn = m_mapOptBtns.begin();
|
||
- for ( ; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
|
||
+ QMap<int, QToolButton *>::iterator itMapBtn = m_mapOptBtns.begin();
|
||
+ for (; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
|
||
if (itMapBtn.key() == nDevId && itMapBtn.value()) {
|
||
itMapBtn.value()->setDisabled(true);
|
||
break;
|
||
@@ -1013,8 +976,8 @@ void LoginOptionsWidget::setDeviceDisable(int nDevId, bool bDisable)
|
||
}
|
||
} else {
|
||
m_mapDisableDev[m_uid][nDevId] = false;
|
||
- QMap<int, QToolButton*>::iterator itMapBtn = m_mapOptBtns.begin();
|
||
- for ( ; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
|
||
+ QMap<int, QToolButton *>::iterator itMapBtn = m_mapOptBtns.begin();
|
||
+ for (; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
|
||
if (itMapBtn.key() == nDevId && itMapBtn.value()) {
|
||
itMapBtn.value()->setDisabled(false);
|
||
break;
|
||
@@ -1023,6 +986,28 @@ void LoginOptionsWidget::setDeviceDisable(int nDevId, bool bDisable)
|
||
}
|
||
}
|
||
|
||
+void LoginOptionsWidget::setAllDeviceDisable(bool bDisable)
|
||
+{
|
||
+ if (bDisable) {
|
||
+ QMap<int, QToolButton *>::iterator itMapBtn = m_mapOptBtns.begin();
|
||
+ for (; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
|
||
+
|
||
+ m_mapDisableDev[m_uid][itMapBtn.key()] = true;
|
||
+ if (itMapBtn.value()) {
|
||
+ itMapBtn.value()->setDisabled(true);
|
||
+ }
|
||
+ }
|
||
+ } else {
|
||
+ QMap<int, QToolButton *>::iterator itMapBtn = m_mapOptBtns.begin();
|
||
+ for (; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
|
||
+ m_mapDisableDev[m_uid][itMapBtn.key()] = false;
|
||
+ if (itMapBtn.value()) {
|
||
+ itMapBtn.value()->setDisabled(false);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
bool LoginOptionsWidget::isDeviceDisable(int nDevId)
|
||
{
|
||
if (m_mapDisableDev[m_uid].contains(nDevId)) {
|
||
@@ -1033,7 +1018,7 @@ bool LoginOptionsWidget::isDeviceDisable(int nDevId)
|
||
|
||
void LoginOptionsWidget::lockStatusChanged(bool locked)
|
||
{
|
||
- if(locked){
|
||
+ if (locked) {
|
||
is_Lock = true;
|
||
stopAuth();
|
||
} else {
|
||
@@ -1046,7 +1031,7 @@ QPixmap LoginOptionsWidget::loadSvg(QString path, QString color, int size)
|
||
{
|
||
int origSize = size;
|
||
const auto ratio = qApp->devicePixelRatio();
|
||
- if ( 2 == ratio) {
|
||
+ if (2 == ratio) {
|
||
size += origSize;
|
||
} else if (3 == ratio) {
|
||
size += origSize;
|
||
@@ -1071,22 +1056,22 @@ QPixmap LoginOptionsWidget::drawSymbolicColoredPixmap(QPixmap &source, QString c
|
||
for (int y = 0; y < img.height(); y++) {
|
||
auto color = img.pixelColor(x, y);
|
||
if (color.alpha() > 0) {
|
||
- if ( "white" == cgColor) {
|
||
+ if ("white" == cgColor) {
|
||
color.setRed(255);
|
||
color.setGreen(255);
|
||
color.setBlue(255);
|
||
img.setPixelColor(x, y, color);
|
||
- } else if( "black" == cgColor) {
|
||
+ } else if ("black" == cgColor) {
|
||
color.setRed(0);
|
||
color.setGreen(0);
|
||
color.setBlue(0);
|
||
img.setPixelColor(x, y, color);
|
||
- } else if ("gray"== cgColor) {
|
||
+ } else if ("gray" == cgColor) {
|
||
color.setRed(152);
|
||
color.setGreen(163);
|
||
color.setBlue(164);
|
||
img.setPixelColor(x, y, color);
|
||
- } else if ("blue" == cgColor){
|
||
+ } else if ("blue" == cgColor) {
|
||
color.setRed(61);
|
||
color.setGreen(107);
|
||
color.setBlue(229);
|
||
@@ -1099,3 +1084,160 @@ QPixmap LoginOptionsWidget::drawSymbolicColoredPixmap(QPixmap &source, QString c
|
||
}
|
||
return QPixmap::fromImage(img);
|
||
}
|
||
+
|
||
+QPixmap LoginOptionsWidget::scaledSmoothPixmap(const QPixmap &src, int nWidth, int nHeight)
|
||
+{
|
||
+ if (src.isNull()) {
|
||
+ return QPixmap();
|
||
+ }
|
||
+
|
||
+ QPixmap pixmapa(src);
|
||
+ QPixmap pixmap(nWidth, nHeight);
|
||
+ pixmap.fill(Qt::transparent);
|
||
+ QPainter painter(&pixmap);
|
||
+ painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
|
||
+ painter.drawPixmap(0, 0, nWidth, nHeight, pixmapa);
|
||
+ return pixmap;
|
||
+}
|
||
+
|
||
+void LoginOptionsWidget::startBioWaiting(unsigned uCurLoginOptType)
|
||
+{
|
||
+ if (uCurLoginOptType == m_nCurBioWaitingType
|
||
+ || (uCurLoginOptType != LOGINOPT_TYPE_FINGERPRINT && uCurLoginOptType != LOGINOPT_TYPE_FINGERVEIN
|
||
+ && uCurLoginOptType != LOGINOPT_TYPE_IRIS && uCurLoginOptType != LOGINOPT_TYPE_VOICEPRINT)) {
|
||
+ return;
|
||
+ }
|
||
+ m_nCurBioWaitingType = uCurLoginOptType;
|
||
+ if (!m_timerBioWaiting) {
|
||
+ m_timerBioWaiting = new QTimer(this);
|
||
+ m_timerBioWaiting->setInterval(100);
|
||
+ }
|
||
+ if (m_timerBioWaiting) {
|
||
+ if (m_timerBioWaiting->isActive()) {
|
||
+ m_timerBioWaiting->stop();
|
||
+ }
|
||
+ // 重新连接信号槽
|
||
+ disconnect(m_timerBioWaiting, nullptr, this, nullptr);
|
||
+ connect(m_timerBioWaiting, &QTimer::timeout, this, [&, this, uCurLoginOptType]() {
|
||
+ m_nBioWaitingFrame += 1;
|
||
+ QString strPicName = "";
|
||
+ switch (uCurLoginOptType) {
|
||
+ case LOGINOPT_TYPE_FINGERPRINT: {
|
||
+ if (m_nBioWaitingFrame >= 15) {
|
||
+ m_nBioWaitingFrame = 0;
|
||
+ }
|
||
+ strPicName = QString(":/image/assets/biowaiting/fingerprint%1.svg").arg(m_nBioWaitingFrame);
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_FINGERVEIN: {
|
||
+ if (m_nBioWaitingFrame >= 12) {
|
||
+ m_nBioWaitingFrame = 0;
|
||
+ }
|
||
+ strPicName = QString(":/image/assets/biowaiting/fingervein%1.svg").arg(m_nBioWaitingFrame);
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_IRIS: {
|
||
+ if (m_nBioWaitingFrame >= 12) {
|
||
+ m_nBioWaitingFrame = 0;
|
||
+ }
|
||
+ strPicName = QString(":/image/assets/biowaiting/iris%1.svg").arg(m_nBioWaitingFrame);
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_VOICEPRINT: {
|
||
+ if (m_nBioWaitingFrame >= 8) {
|
||
+ m_nBioWaitingFrame = 0;
|
||
+ }
|
||
+ strPicName = QString(":/image/assets/biowaiting/voiceprint%1.svg").arg(m_nBioWaitingFrame);
|
||
+ } break;
|
||
+ default:
|
||
+ break;
|
||
+ }
|
||
+ if (!strPicName.isEmpty()) {
|
||
+ QPixmap pixmap;
|
||
+ if (QPixmapCache::find(strPicName, &pixmap)) {
|
||
+ m_labelBioWaiting->setPixmap(pixmap);
|
||
+ } else {
|
||
+ pixmap = scaledSmoothPixmap(QPixmap(strPicName), 154, 154);
|
||
+ if (!pixmap.isNull()) {
|
||
+ QPixmapCache::insert(strPicName, pixmap);
|
||
+ m_labelBioWaiting->setPixmap(pixmap);
|
||
+ }
|
||
+ }
|
||
+ m_labelBioWaiting->show();
|
||
+ }
|
||
+ });
|
||
+ m_timerBioWaiting->start();
|
||
+ m_nBioWaitingFrame = 0;
|
||
+ QString strPicName = "";
|
||
+ switch (uCurLoginOptType) {
|
||
+ case LOGINOPT_TYPE_FINGERPRINT: {
|
||
+ strPicName = QString(":/image/assets/biowaiting/fingerprint%1.svg").arg(m_nBioWaitingFrame);
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_FINGERVEIN: {
|
||
+ strPicName = QString(":/image/assets/biowaiting/fingervein%1.svg").arg(m_nBioWaitingFrame);
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_IRIS: {
|
||
+ strPicName = QString(":/image/assets/biowaiting/iris%1.svg").arg(m_nBioWaitingFrame);
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_VOICEPRINT: {
|
||
+ strPicName = QString(":/image/assets/biowaiting/voiceprint%1.svg").arg(m_nBioWaitingFrame);
|
||
+ } break;
|
||
+ default:
|
||
+ break;
|
||
+ }
|
||
+ if (!strPicName.isEmpty()) {
|
||
+ QPixmap pixmap;
|
||
+ if (QPixmapCache::find(strPicName, &pixmap)) {
|
||
+ m_labelBioWaiting->setPixmap(pixmap);
|
||
+ } else {
|
||
+ pixmap = scaledSmoothPixmap(QPixmap(strPicName), 154, 154);
|
||
+ if (!pixmap.isNull()) {
|
||
+ QPixmapCache::insert(strPicName, pixmap);
|
||
+ m_labelBioWaiting->setPixmap(pixmap);
|
||
+ }
|
||
+ }
|
||
+ m_labelBioWaiting->show();
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+void LoginOptionsWidget::stopBioWaiting(bool isDisable /* = false*/)
|
||
+{
|
||
+ if (m_timerBioWaiting) {
|
||
+ if (m_timerBioWaiting->isActive()) {
|
||
+ m_timerBioWaiting->stop();
|
||
+ }
|
||
+ }
|
||
+ m_nBioWaitingFrame = 0;
|
||
+ if (isDisable) {
|
||
+ QString strPicName = "";
|
||
+ switch (m_nCurBioWaitingType) {
|
||
+ case LOGINOPT_TYPE_FINGERPRINT: {
|
||
+ strPicName = QString(":/image/assets/biowaiting/fingerprint%1.svg").arg(m_nBioWaitingFrame);
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_FINGERVEIN: {
|
||
+ strPicName = QString(":/image/assets/biowaiting/fingervein%1.svg").arg(m_nBioWaitingFrame);
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_IRIS: {
|
||
+ strPicName = QString(":/image/assets/biowaiting/iris%1.svg").arg(m_nBioWaitingFrame);
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_VOICEPRINT: {
|
||
+ strPicName = QString(":/image/assets/biowaiting/voiceprint%1.svg").arg(m_nBioWaitingFrame);
|
||
+ } break;
|
||
+ default:
|
||
+ break;
|
||
+ }
|
||
+ if (!strPicName.isEmpty()) {
|
||
+ QPixmap pixmap;
|
||
+ if (QPixmapCache::find(strPicName, &pixmap)) {
|
||
+ m_labelBioWaiting->setPixmap(pixmap);
|
||
+ } else {
|
||
+ pixmap = scaledSmoothPixmap(QPixmap(strPicName), 154, 154);
|
||
+ if (!pixmap.isNull()) {
|
||
+ QPixmapCache::insert(strPicName, pixmap);
|
||
+ m_labelBioWaiting->setPixmap(pixmap);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ } else {
|
||
+ m_labelBioWaiting->hide();
|
||
+ }
|
||
+ m_nCurBioWaitingType = -1;
|
||
+}
|
||
diff --git a/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in b/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in
|
||
index e5601cc..415e7cc 100644
|
||
--- a/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in
|
||
+++ b/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in
|
||
@@ -10,13 +10,17 @@
|
||
<description xml:lang="bo">འཁོར་སྐྱོད་སྐྱེ་དངོས་ཀྱི་ངོས་འཛིན་ཁས་ལེན་ཚོད་འཛིན་ཡོ་བྱད།།</description>
|
||
<description xml:lang="mn">ᠠᠵᠢᠯᠯᠠᠭᠠᠨ ᠤ ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠵᠤ ᠭᠡᠷᠡᠴᠢᠯᠡᠬᠦ ᠡᠵᠡᠮᠳᠡᠯ ᠦᠨ ᠪᠠᠭᠠᠵᠢ ᠶᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠬᠡᠷᠡᠭᠲᠡᠶ ᠃</description>
|
||
<description xml:lang="zh_HK">運行生物識別認證控制工具</description>
|
||
- <description xml:lang="uy">بىئولوگىيەلىك پەرقلەندۈرۈش ئىسپاتلاش كونترول قىلىش قورالى</description>
|
||
+ <description xml:lang="ug">بىئولوگىيەلىك پەرقلەندۈرۈش ئىسپاتلاش كونترول قىلىش قورالى</description>
|
||
+ <description xml:lang="kk">بىئولوگىيەلىك پارىقتاندىرۋ سپاتتاۋ مەڭگەرۋ ەتۋ قۇرالى</description>
|
||
+ <description xml:lang="ky">بىئولوگىيەلىك ايىرمالاندىرىش ىسپاتتوو تىزگىندۅۅ جاسوو ،اتقارۇۇ قۇرالى</description>
|
||
<message>Authentication is required to enable or disable biometric authentication</message>
|
||
<message xml:lang="zh_CN">开启或关闭生物识别认证需要进行身份验证</message>
|
||
<message xml:lang="bo">སྒོ་རྒྱག་པའམ་ཡང་ན་སྒོ་རྒྱག་པའི་སྐྱེ་དངོས་ངོས་འཛིན་བདེན་དཔངར་སྤྲོད་བྱེད་པར་ཐོབ་ཐང་གི་ཚོད་ལྟསར་སྤྲོད་བྱ་དགོས།</message>
|
||
<message xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠭᠡᠷᠡᠴᠢᠯᠡᠭᠡ ᠶᠢ ᠨᠡᠭᠡᠭᠡᠬᠦ ᠪᠤᠶᠤ ᠬᠠᠭᠠᠬᠤ ᠳᠤ ᠪᠡᠶᠡ ᠶᠢᠨ ᠭᠠᠷᠤᠯ ᠤᠨ ᠭᠡᠷᠡᠴᠢᠯᠡᠯ ᠬᠢᠬᠦ ᠴᠢᠬᠤᠯᠠ ᠲᠠᠶ ᠪᠠᠶᠢᠨᠠ᠃</message>
|
||
<message xml:lang="zh_HK">開啟或關閉生物識別認證需要進行身份驗證</message>
|
||
- <message xml:lang="uy">بىئولوگىيەلىك پەرقلەندۈرۈش ئىسپاتىنى ئېچىش ياكى تاقاش ئۈچۈن دەلىللەش كېرەك</message>
|
||
+ <message xml:lang="ug">بىئولوگىيەلىك پەرقلەندۈرۈش ئىسپاتىنى ئېچىش ياكى تاقاش ئۈچۈن دەلىللەش كېرەك</message>
|
||
+ <message xml:lang="kk">بىئولوگىيەلىك پارىقتاندىرۋ سىپاتىن ٸشٸۋ ياكي تاقاۋ ٷشٸن دالەلدەۋ كەرەك</message>
|
||
+ <message xml:lang="ky">بىئولوگىيەلىك ايىرمالاندىرىش دالىلىن اچۇۇ كۅرۉنۉشتۅرۉ بەكىتىش ۉچۉن دالىلدۅ كەرەك</message>
|
||
<icon_name>stock_person</icon_name>
|
||
<defaults>
|
||
<allow_any>no</allow_any>
|
||
diff --git a/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in b/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in
|
||
index 3efa12e..476cb88 100644
|
||
--- a/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in
|
||
+++ b/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in
|
||
@@ -10,13 +10,17 @@
|
||
<description xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་སྒྲག་ཆས་ཀྱི་ཁ་ལོ་བའི་ཚོད་འཛིན་ཡོ་བྱད་</description>
|
||
<description xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠪᠡᠷ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠪᠣᠯᠭᠠᠬᠤ ᠡᠵᠡᠮᠳᠡᠯ ᠦᠨ ᠪᠠᠭᠠᠵᠢ ᠶᠢ ᠠᠵᠢᠯᠯᠠᠭᠤᠯᠤᠨᠠ ᠃</description>
|
||
<description xml:lang="zh_HK">運行生物識別設備驅動控制工具</description>
|
||
- <description xml:lang="uy">بىئولوگىيەلىك پەرقلەندۈرۈش ئۈسكۈنىسىنى قوزغىتىش كونترول قىلىش ئەسۋابىنى يۈرگۈزۈش</description>
|
||
+ <description xml:lang="ug">بىئولوگىيەلىك پەرقلەندۈرۈش ئۈسكۈنىسىنى قوزغىتىش كونترول قىلىش ئەسۋابىنى يۈرگۈزۈش</description>
|
||
+ <description xml:lang="kk">شايمانىن جۉرگۅزۉ</description>
|
||
+ <description xml:lang="ky">شايمانىن جۉرگۅزۉ</description>
|
||
<message>Authentication is required to change the status of biometric device's driver</message>
|
||
<message xml:lang="zh_CN">改变生物识别设备驱动状态需要进行身份验证</message>
|
||
<message xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་སྒྲག་ཆས་ཀྱི་ཁ་ལོ་བའི་གནས་ཚུལ་ལ་འགྱུར་ལྡོག་གཏོང་བར་བདེན་དཔང་ར་སྤྲད་བྱ་དགོས།</message>
|
||
<message xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠶᠢᠨ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠪᠣᠯᠭᠠᠬᠤ ᠪᠠᠶᠢᠳᠠᠯ ᠢ ᠬᠤᠪᠢᠷᠠᠭᠤᠯᠬᠤ ᠳᠤ ᠪᠡᠶᠡ ᠶᠢᠨ ᠭᠠᠷᠤᠯ ᠤᠨ ᠭᠡᠷᠡᠴᠢᠯᠡᠯ ᠬᠢᠬᠦ ᠴᠢᠬᠤᠯᠠ ᠲᠠᠶ ᠪᠠᠶᠢᠬᠤ ᠬᠡᠷᠡᠭᠲᠡᠶ᠃</message>
|
||
<message xml:lang="zh_HK">改變生物識別設備驅動狀態需要進行身份驗證</message>
|
||
- <message xml:lang="uy">بىئولوگىيەلىك پەرقلەندۈرۈش ئۈسكۈنىسىنىڭ قوزغىتىش ھالىتىنى ئۆزگەرتىشتە دەلىللەش كېرەك</message>
|
||
+ <message xml:lang="ug">بىئولوگىيەلىك پەرقلەندۈرۈش ئۈسكۈنىسىنىڭ قوزغىتىش ھالىتىنى ئۆزگەرتىشتە دەلىللەش كېرەك</message>
|
||
+ <message xml:lang="kk">بىئولوگىيەلىك پارىقتاندىرۋ اسپابىنىڭ قوزعالتۋ كۇيىن وزگەتۋگە دالەلدەۋ كەرەك</message>
|
||
+ <message xml:lang="ky">بىئولوگىيەلىك ايىرمالاندىرىش شايمانىنىن قوزعوتۇۇ ابالىن ۅزگۅرتۉۉدۅ دالىلدۅ كەرەك</message>
|
||
<icon_name>stock_person</icon_name>
|
||
<defaults>
|
||
<allow_any>auth_admin</allow_any>
|
||
diff --git a/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in b/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in
|
||
index f77a55f..a5f82f3 100644
|
||
--- a/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in
|
||
+++ b/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in
|
||
@@ -11,12 +11,16 @@
|
||
<description xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠤᠨ ᠣᠨᠴᠠᠯᠢᠭ ᠤᠨ ᠦᠢᠯᠡᠴᠢᠯᠡᠭᠡ ᠶᠢ ᠳᠠᠬᠢᠨ ᠡᠭᠢᠯᠡᠭᠦᠯᠪᠡ᠃</description>
|
||
<message>Authentication is required to restart biometric service</message>
|
||
<description xml:lang="zh_HK">重啟生物特徵服務</description>
|
||
- <description xml:lang="uy">بىئولوگىيەلىك ئالاھىدىلىك مۇلازىمىتىنى قايتىدىن قوزغىتىش</description>
|
||
+ <description xml:lang="ug">بىئولوگىيەلىك ئالاھىدىلىك مۇلازىمىتىنى قايتىدىن قوزغىتىش</description>
|
||
+ <description xml:lang="kk">بىئولوگىيەلىك ەرەكشەلىك قىزىمەتتى قايتادان قوزعالتۋ</description>
|
||
+ <description xml:lang="ky">بىئولوگىيەلىك ۅزگۅچۅلۉك مۇلازىمەتىردى قايتادان قوزعوتۇۇ</description>
|
||
<message xml:lang="zh_CN">重启生物特征服务需要身份验证</message>
|
||
<message xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་ཞབས་ཞུ་སླར་གསོ་བྱེད་པར་བདེན་དཔང་ར་སྤྲད་བྱ་དགོས།</message>
|
||
<message xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠤᠨ ᠣᠨᠴᠠᠯᠢᠭ ᠰᠢᠨᠵᠢ ᠲᠡᠮᠳᠡᠭ ᠦᠨ ᠦᠢᠯᠡᠴᠢᠯᠡᠭᠡ ᠶᠢ ᠳᠠᠬᠢᠨ ᠰᠡᠩᠬᠡᠷᠡᠭᠦᠯᠬᠦ ᠳᠦ ᠪᠡᠶᠡ ᠶᠢᠨ ᠭᠠᠷᠤᠯ ᠢ ᠰᠢᠯᠭᠠᠨ ᠭᠡᠷᠡᠴᠢᠯᠡᠬᠦ ᠴᠢᠬᠤᠯᠠ ᠲᠠᠶ ᠪᠠᠶᠢᠨᠠ ᠃</message>
|
||
- <message xml:lang="uy">بىئولوگىيەلىك ئالاھىدىلىك مۇلازىمىتىنى قايتىدىن قوزغىتىش ئۈچۈن دەلىللەش كېرەك </message>
|
||
+ <message xml:lang="ug">بىئولوگىيەلىك ئالاھىدىلىك مۇلازىمىتىنى قايتىدىن قوزغىتىش ئۈچۈن دەلىللەش كېرەك </message>
|
||
<message xml:lang="zh_HK">重啟生物特徵服務需要身份驗證</message>
|
||
+ <message xml:lang="kk">بىئولوگىيەلىك ەرەكشەلىك قىزىمەتتى قايتادان قوزعالتۋ ٷشٸن دالەلدەۋ كەرەك بىئولوگىيەلىك پارىقتاندىرۋ اسبابٸن قوزعالتۋ مەڭگەرۋ ەتۋ اسپاپتى جۇرگىزۋ</message>
|
||
+ <message xml:lang="ky">بىئولوگىيەلىك ۅزگۅچۅلۉك مۇلازىمەتىردى قايتادان قوزعوتۇۇ ۉچۉن دالىلدۅ كەرەك بىئولوگىيەلىك ايىرمالاندىرىش جابدۇۇسۇن قوزعوتۇۇ تىزگىندۅۅ جاسوو ،اتقارۇۇ</message>
|
||
<icon_name>stock_person</icon_name>
|
||
<defaults>
|
||
<allow_any>auth_admin</allow_any>
|
||
diff --git a/polkit-agent/CMakeLists.txt b/polkit-agent/CMakeLists.txt
|
||
index cb8e3e9..2f97cad 100644
|
||
--- a/polkit-agent/CMakeLists.txt
|
||
+++ b/polkit-agent/CMakeLists.txt
|
||
@@ -3,7 +3,8 @@ project(ukui-polkit-agent)
|
||
|
||
pkg_check_modules(QGS REQUIRED gsettings-qt)
|
||
pkg_check_modules(KDKINFO REQUIRED kysdk-sysinfo)
|
||
-pkg_check_modules(KYSDKWAYLANDHELPER_PKG REQUIRED kysdk-waylandhelper)
|
||
+pkg_check_modules(KDKWIDGETS REQUIRED kysdk-qtwidgets)
|
||
+pkg_check_modules(KYSDKWAYLANDHELPER REQUIRED kysdk-waylandhelper)
|
||
|
||
find_package(PolkitQt5-1 REQUIRED 0.103.0)
|
||
find_package(Qt5 COMPONENTS Core Widgets DBus X11Extras Xml Network Svg)
|
||
@@ -23,16 +24,22 @@ configure_file(
|
||
include_directories(
|
||
${QGS_INCLUDE_DIRS}
|
||
${KDKINFO_INCLUDE_DIRS}
|
||
+ ${KDKWIDGETS_INCLUDE_DIRS}
|
||
+ ${KYSDKWAYLANDHELPER_INCLUDE_DIRS}
|
||
)
|
||
|
||
link_directories(
|
||
${KDKINFO_LIBRARY_DIRS}
|
||
+ ${KDKWIDGETS_LIBRARY_DIRS}
|
||
+ ${KYSDKWAYLANDHELPER_LIBRARY_DIRS}
|
||
)
|
||
|
||
set(EXTRA_LIBS
|
||
${EXTRA_LIBS}
|
||
${QGS_LIBRARIES}
|
||
${KDKINFO_LIBRARIES}
|
||
+ ${KDKWIDGETS_LIBRARIES}
|
||
+ ${KYSDKWAYLANDHELPER_LIBRARIES}
|
||
)
|
||
|
||
include_directories(
|
||
@@ -58,17 +65,20 @@ set(polkit_SRCS
|
||
src/modeButton.cpp
|
||
src/kalabel.cpp
|
||
../common/generic.cpp
|
||
+ src/fullscreenbackground.h
|
||
+ src/fullscreenbackground.cpp
|
||
+ src/usdblockshortcut.h
|
||
+ src/usdblockshortcut.cpp
|
||
)
|
||
|
||
add_executable(polkit-ukui-authentication-agent-1 ${polkit_SRCS})
|
||
-target_include_directories(polkit-ukui-authentication-agent-1 PRIVATE ${KYSDKWAYLANDHELPER_PKG_INCLUDE_DIRS})
|
||
-target_link_directories(polkit-ukui-authentication-agent-1 PRIVATE ${KYSDKWAYLANDHELPER_PKG_LIBRARY_DIRS})
|
||
+target_include_directories(polkit-ukui-authentication-agent-1 PRIVATE ${KYSDKQTWIDGETS_PKG_INCLUDE_DIRS})
|
||
+target_link_directories(polkit-ukui-authentication-agent-1 PRIVATE ${KYSDKQTWIDGETS_PKG_LIBRARY_DIRS})
|
||
target_link_libraries(polkit-ukui-authentication-agent-1
|
||
- Qt5::Core Qt5::Widgets Qt5::DBus ${EXTRA_LIBS}
|
||
+ Qt5::Core Qt5::Widgets Qt5::DBus ${EXTRA_LIBS} KF5::WindowSystem
|
||
${POLKITQT-1_LIBRARIES}
|
||
- ${KYSDKWAYLANDHELPER_PKG_LIBRARIES}
|
||
+ ${KYSDKQTWIDGETS_PKG_LIBRARIES}
|
||
BioAuthWidgets
|
||
- KF5::WindowSystem
|
||
-lrt
|
||
-lukui-log4qt
|
||
)
|
||
diff --git a/polkit-agent/assets.qrc b/polkit-agent/assets.qrc
|
||
index 6fc96aa..2581d94 100644
|
||
--- a/polkit-agent/assets.qrc
|
||
+++ b/polkit-agent/assets.qrc
|
||
@@ -4,6 +4,53 @@
|
||
<file>assets/arrow_right.svg</file>
|
||
<file>assets/hide-password.png</file>
|
||
<file>assets/show-password.png</file>
|
||
+ <file>assets/biowaiting/fingerprint0.svg</file>
|
||
+ <file>assets/biowaiting/fingerprint1.svg</file>
|
||
+ <file>assets/biowaiting/fingerprint2.svg</file>
|
||
+ <file>assets/biowaiting/fingerprint3.svg</file>
|
||
+ <file>assets/biowaiting/fingerprint4.svg</file>
|
||
+ <file>assets/biowaiting/fingerprint5.svg</file>
|
||
+ <file>assets/biowaiting/fingerprint6.svg</file>
|
||
+ <file>assets/biowaiting/fingerprint7.svg</file>
|
||
+ <file>assets/biowaiting/fingerprint8.svg</file>
|
||
+ <file>assets/biowaiting/fingerprint9.svg</file>
|
||
+ <file>assets/biowaiting/fingerprint10.svg</file>
|
||
+ <file>assets/biowaiting/fingerprint11.svg</file>
|
||
+ <file>assets/biowaiting/fingerprint12.svg</file>
|
||
+ <file>assets/biowaiting/fingerprint13.svg</file>
|
||
+ <file>assets/biowaiting/fingerprint14.svg</file>
|
||
+ <file>assets/biowaiting/fingervein0.svg</file>
|
||
+ <file>assets/biowaiting/fingervein1.svg</file>
|
||
+ <file>assets/biowaiting/fingervein2.svg</file>
|
||
+ <file>assets/biowaiting/fingervein3.svg</file>
|
||
+ <file>assets/biowaiting/fingervein4.svg</file>
|
||
+ <file>assets/biowaiting/fingervein5.svg</file>
|
||
+ <file>assets/biowaiting/fingervein6.svg</file>
|
||
+ <file>assets/biowaiting/fingervein7.svg</file>
|
||
+ <file>assets/biowaiting/fingervein8.svg</file>
|
||
+ <file>assets/biowaiting/fingervein9.svg</file>
|
||
+ <file>assets/biowaiting/fingervein10.svg</file>
|
||
+ <file>assets/biowaiting/fingervein11.svg</file>
|
||
+ <file>assets/biowaiting/iris0.svg</file>
|
||
+ <file>assets/biowaiting/iris1.svg</file>
|
||
+ <file>assets/biowaiting/iris2.svg</file>
|
||
+ <file>assets/biowaiting/iris3.svg</file>
|
||
+ <file>assets/biowaiting/iris4.svg</file>
|
||
+ <file>assets/biowaiting/iris5.svg</file>
|
||
+ <file>assets/biowaiting/iris6.svg</file>
|
||
+ <file>assets/biowaiting/iris7.svg</file>
|
||
+ <file>assets/biowaiting/iris8.svg</file>
|
||
+ <file>assets/biowaiting/iris9.svg</file>
|
||
+ <file>assets/biowaiting/iris10.svg</file>
|
||
+ <file>assets/biowaiting/iris11.svg</file>
|
||
+ <file>assets/biowaiting/voiceprint0.svg</file>
|
||
+ <file>assets/biowaiting/voiceprint1.svg</file>
|
||
+ <file>assets/biowaiting/voiceprint2.svg</file>
|
||
+ <file>assets/biowaiting/voiceprint3.svg</file>
|
||
+ <file>assets/biowaiting/voiceprint4.svg</file>
|
||
+ <file>assets/biowaiting/voiceprint5.svg</file>
|
||
+ <file>assets/biowaiting/voiceprint6.svg</file>
|
||
+ <file>assets/biowaiting/voiceprint7.svg</file>
|
||
</qresource>
|
||
<qresource prefix="/qss">
|
||
<file>src/main.qss</file>
|
||
diff --git a/polkit-agent/assets/biowaiting/fingerprint0.svg b/polkit-agent/assets/biowaiting/fingerprint0.svg
|
||
new file mode 100644
|
||
index 0000000..a5e84bd
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingerprint0.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingerprint1.svg b/polkit-agent/assets/biowaiting/fingerprint1.svg
|
||
new file mode 100644
|
||
index 0000000..0856372
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingerprint1.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g><path class="cls-2" d="M91.80237,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49579A2.876,2.876,0,0,0,91.02063,9.176c.62408.15564,1.25043.15564,1.72058.31176A76.03029,76.03029,0,0,1,102.56085,12h15.351a96.77876,96.77876,0,0,0-15.782-6.724A45.00584,45.00584,0,0,0,91.80237,3.09192Z"/><path class="cls-2" d="M41.63989,12H57.42126A75.41744,75.41744,0,0,1,78.663,8.39581c2.34717,0,3.75525-1.24823,3.75525-3.276C82.416,3.09192,81.00787,2,78.50458,2a77.85348,77.85348,0,0,0-36.29651,9.67188C42.01575,11.77832,41.83093,11.89227,41.63989,12Z"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingerprint10.svg b/polkit-agent/assets/biowaiting/fingerprint10.svg
|
||
new file mode 100644
|
||
index 0000000..315aaf0
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingerprint10.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00927,3.00927,0,0,0-4.06695,1.87157l-4.2231,10.29593a2.95177,2.95177,0,0,0,2.34692,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35322-4.96514,4.2252-10.13749a3.22338,3.22338,0,0,0-1.72268-4.21179Zm71.02957-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28729-1.24829,3.28729-3.58851,0-3.43141.4679-7.01916.31174-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99057,121.93748a3.19812,3.19812,0,0,0-3.91136,2.18407c-.31251.7804-.4679,1.71618-.7825,2.49562a101.9769,101.9769,0,0,1-5.00714,12.01c-1.09424,2.34022.1554,4.67969,2.66078,4.67969,1.40827.15616,2.34636-.77963,2.9727-2.02772a81.29627,81.29627,0,0,0,6.09985-15.4437,3.02989,3.02989,0,0,0-2.03233-3.898Zm51.78526-7.17321a3.1326,3.1326,0,0,0-3.44347,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25192,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.62684,5.62684,0,0,0,1.25041-2.33946,128.60675,128.60675,0,0,0,4.85174-14.97123,161.5315,161.5315,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07465,60.17791a3.312,3.312,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91135,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.131-4.68045a70.50518,70.50518,0,0,1-.62634-41.79842ZM85.701,104.15584a75.86247,75.86247,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09173,3.09173,0,0,0-3.59961-2.49581,3.03667,3.03667,0,0,0-2.34618,3.90025,116.66849,116.66849,0,0,1,2.34618,18.24725,106.72223,106.72223,0,0,1-2.97253,31.50478c-.46789,2.02773.31175,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.17988,109.17988,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44042,19.02707,4.067,28.85281a155.422,155.422,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.0352,4.2118a3.1298,3.1298,0,0,0,4.06695-2.65178,158.74245,158.74245,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61236,48.32272A67.88326,67.88326,0,0,1,27.18743,31.633C41.11154,16.81945,58.16451,9.0199,78.663,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00788,2,78.50459,2A77.9438,77.9438,0,0,0,10.13446,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72437,2.72437,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79085,85.753c-1.25058-7.48553-.31174-14.19161,4.85155-20.11959a2.80489,2.80489,0,0,0,.62425-1.40368c.15616-1.55983-.15634-2.80812-1.72059-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63138,6.55146-7.66581,14.19542-6.41389,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.8888,84.8888,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07666,4.07666,0,0,0-.78269,2.652,2.99416,2.99416,0,0,0,2.34693,2.652c1.72078.31173,2.815-.31251,3.75521-1.87234a90.1349,90.1349,0,0,0,9.6989-29.79089A108.40061,108.40061,0,0,0,58.79314,85.753ZM22.338,94.48834c-1.09424-7.01916-2.03234-13.88368-1.09424-21.05461A59.14015,59.14015,0,0,1,46.11943,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97347-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37821,38.49678a64.52309,64.52309,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72288,15.12892,2.19078,22.61463.3125,4.99219.4679,9.98419-1.09425,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87694,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81712-17.6232,1.56443-26.66951ZM157.04249,67.03786Q147.65476,20.2483,102.1299,5.276A45.00768,45.00768,0,0,0,91.80236,3.09194c-1.87827-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.25041.15558,1.72059.31175a70.72962,70.72962,0,0,1,40.36348,22.45694A69.18273,69.18273,0,0,1,147.0288,54.56015a74.061,74.061,0,0,1,4.69406,23.23944c.15538,2.33946,1.87825,3.7439,4.06675,3.11986,1.56443-.4679,2.34712-1.71618,2.19076-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09794,46.09794,0,0,0-10.16909-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25194,4.368a3.91739,3.91739,0,0,0,1.09424.62422c10.48369,6.3936,17.83547,15.283,21.27894,27.13666,3.12886,11.38806,3.91079,23.08329,4.22309,34.7806a167.16817,167.16817,0,0,1-2.34693,33.06462c-.31174,2.34023.62405,3.7439,2.50252,4.0564,2.0352.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.742,217.742,0,0,0-2.65868-34.62312c-2.03462-12.79173-7.51042-23.55117-17.053-32.2865ZM89.76793,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66076.78037-3.44345,3.58546-1.72059,5.30163C70.368,60.02,71.62072,59.86389,73.0288,59.396a21.72731,21.72731,0,0,1,28.47247,16.8428,163.579,163.579,0,0,1,2.34692,17.31375A137.99692,137.99692,0,0,1,103.692,118.974a149.65137,149.65137,0,0,1-7.04023,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.44271-2.34022,143.91473,143.91473,0,0,0,8.13446-46.946,167.06542,167.06542,0,0,0-2.65866-29.6353c-2.03463-11.07347-7.97832-18.87149-18.30567-22.77079ZM46.431,72.65334C50.03,55.02805,68.6482,42.7065,86.48291,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55045-1.2481-26.59781,3.90025-35.82653,15.283A38.57474,38.57474,0,0,0,39.861,85.4407c.7804,5.30373,1.72078,10.45208,1.72078,15.75372,0,3.74391,0,7.488-.31175,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31083,39.31083,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03234-13.10195-7.19563-24.64312-16.1126-34.31273C115.89556,21.96341,99.46893,14.78945,79.91135,14.63329a64.57055,64.57055,0,0,0-25.3436,5.14835,3.23306,3.23306,0,0,0-2.03462,4.20951,3.15933,3.15933,0,0,0,4.38155,1.56A60.10931,60.10931,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04478,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15053,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63952,150.63952,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12886,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.9358-12.16521-.47019-4.05565-1.09654-8.11206-1.72288-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13447.93654-14.7068,9.04763-13.45392,17.002.624,4.83584,1.40808,9.6696,1.876,14.50563a100.76542,100.76542,0,0,1-4.6931,39.77,111.03563,111.03563,0,0,1-5.9437,14.03754,3.0595,3.0595,0,0,0,.15616,3.43236,2.8478,2.8478,0,0,0,2.97252,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15053,82.94717ZM34.38591,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82536,45.82536,0,0,1,49.87464,44.26631a45.38952,45.38952,0,0,1,28.16-10.76171,44.31362,44.31362,0,0,1,12.82986,1.24828,3.86111,3.86111,0,0,0,1.87675.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.95556,45.95556,0,0,0-13.14161-1.55984,34.70559,34.70559,0,0,0-9.69889.93577C54.25524,31.16513,42.20807,39.74505,33.91516,53.62436a50.635,50.635,0,0,0-6.56928,32.59653c.4679,4.36814,1.40808,8.57995,1.71983,12.94809.62405,10.75944-.78175,21.20867-5.6312,30.87827a3.03318,3.03318,0,0,0-.47018,2.02771,2.8529,2.8529,0,0,0,2.65867,2.652,3.38107,3.38107,0,0,0,3.44271-2.02772c6.57-12.9458,7.51022-26.98125,5.3202-41.17439Zm0,0"/></g><path class="cls-2" d="M33.93249,119a74.46006,74.46006,0,0,0,.45343-27.4751c-.78253-5.304-1.565-10.76391-1.09638-16.06543A45.82521,45.82521,0,0,1,49.87463,44.26636a45.3888,45.3888,0,0,1,28.16-10.76172,44.30565,44.30565,0,0,1,12.82983,1.24829,3.86367,3.86367,0,0,0,1.87677.156,2.85936,2.85936,0,0,0,2.50251-2.80811A3.0391,3.0391,0,0,0,92.89678,28.825a45.94687,45.94687,0,0,0-13.1416-1.55981,34.707,34.707,0,0,0-9.69891.93554C54.25524,31.165,42.20806,39.74512,33.91515,53.62427A50.63525,50.63525,0,0,0,27.34588,86.221c.46789,4.36792,1.40808,8.57983,1.71985,12.948A66.87594,66.87594,0,0,1,27.47662,119Z"/><path class="cls-2" d="M46.431,72.65332C50.03,55.02808,68.64819,42.70654,86.4829,46.294a35.29073,35.29073,0,0,1,20.18244,11.85376,8.89448,8.89448,0,0,0,1.72,1.71606,3.1923,3.1923,0,0,0,3.75506-.93555c1.09424-1.40454.93885-2.80835-.31158-4.52441-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519-14.55048-1.248-26.59784,3.90039-35.82654,15.283A38.57484,38.57484,0,0,0,39.861,85.44067c.7804,5.30371,1.72077,10.45215,1.72077,15.75367,0,3.74389,0,7.488-.31171,11.07348a3.006,3.006,0,0,0,2.814,3.27613,3.03829,3.03829,0,0,0,3.44348-2.6521,100.85037,100.85037,0,0,0-.15613-20.58741c-.47021-4.21167-1.87829-8.26733-1.56445-12.16772A39.31056,39.31056,0,0,1,46.431,72.65332Z"/><path class="cls-2" d="M58.79314,85.75293h-.00232c-1.25054-7.48535-.3117-14.19141,4.85157-20.11963a2.80362,2.80362,0,0,0,.62426-1.40356c.15613-1.55982-.15637-2.80811-1.72058-3.43213a2.98078,2.98078,0,0,0-3.91137.93628c-5.63141,6.55151-7.66584,14.19531-6.41388,22.77319a143.776,143.776,0,0,1,1.87677,19.65112A94.35,94.35,0,0,1,53.06023,119h6.25434c.03076-.218.07361-.43164.10266-.65039A108.40174,108.40174,0,0,0,58.79314,85.75293Z"/><path class="cls-2" d="M78.50457,2A77.94379,77.94379,0,0,0,10.13445,45.04443a5.77193,5.77193,0,0,0-.624,2.18409,2.72441,2.72441,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71558v.00244A67.88222,67.88222,0,0,1,27.18743,31.63306C41.11156,16.81934,58.16448,9.02,78.663,8.39575c2.34717,0,3.75525-1.24829,3.75525-3.27588C82.416,3.0918,81.00787,2,78.50457,2Z"/><path class="cls-2" d="M71.15051,82.94727v-.00245a11.40165,11.40165,0,0,1,0-5.61377,9.11078,9.11078,0,0,1,9.70123-6.55151c4.2229.15552,7.66638,3.27612,8.60217,7.95581A150.64126,150.64126,0,0,1,92.11486,105.25a3.12524,3.12524,0,0,0,3.12885,3.43237c1.879,0,2.97253-1.40356,3.12872-3.27612v-2.80811h.15631c-.3125-4.05542-.4679-8.11181-.93579-12.16528-.47022-4.05566-1.09656-8.11206-1.7229-12.16528A15.95811,15.95811,0,0,0,78.19079,64.5415c-8.13452.93653-14.70685,9.04761-13.454,17.002.62408,4.83593,1.40814,9.66967,1.876,14.50561A109.31694,109.31694,0,0,1,65.899,119h6.11938A120.607,120.607,0,0,0,71.15051,82.94727Z"/><path class="cls-2" d="M4.97253,58.30615A79.56579,79.56579,0,0,0,2,80.45166a66.6041,66.6041,0,0,0,.31177,7.64307A76.27289,76.27289,0,0,0,5.91137,104.626a2.67956,2.67956,0,0,0,2.65869,2.02856c2.66095.15552,3.91284-1.87231,3.13092-4.68042a70.50594,70.50594,0,0,1-.62634-41.79858V60.178A3.312,3.312,0,0,0,8.8839,55.81055C7.16326,55.3418,5.59887,56.43384,4.97253,58.30615Z"/><path class="cls-2" d="M54.56774,19.78174a3.233,3.233,0,0,0-2.03461,4.20947,3.15955,3.15955,0,0,0,4.38154,1.56006,60.109,60.109,0,0,1,28.63018-4.36816A57.799,57.799,0,0,1,120.58959,37.093c10.32434,9.82519,16.268,21.8352,18.30567,36.02807q1.16922,8.42505,1.876,16.84375c.4679,1.87159,1.72058,3.11988,3.44123,3.11988a3.18857,3.18857,0,0,0,2.97265-3.43238V88.56055c-.6242-5.92725-1.25055-11.853-2.19073-17.77881-2.03235-13.102-7.19562-24.64307-16.11261-34.31275C115.89556,21.96338,99.46893,14.78955,79.91137,14.6333A64.56588,64.56588,0,0,0,54.56774,19.78174Z"/><path class="cls-2" d="M14.82623,119h6.68389c2.45581-7.93066,1.976-16.22021.82789-24.51172-1.09424-7.019-2.03235-13.88354-1.09424-21.05469A59.14042,59.14042,0,0,1,46.11944,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78271-2.18408-2.97351-2.65186-5.16424-1.24731A60.84242,60.84242,0,0,0,29.37823,38.49683,64.52224,64.52224,0,0,0,14.67144,78.26758c-.31177,7.64331,1.72284,15.1289,2.19073,22.6145.3125,4.99219.4679,9.98413-1.09423,14.97437C15.45483,116.90015,15.14068,118.00366,14.82623,119Z"/><path class="cls-2" d="M84.93749,119a109.15166,109.15166,0,0,0,.76349-14.84424,75.85951,75.85951,0,0,0-.46789-9.98364,114.49913,114.49913,0,0,0-2.1908-14.65942,3.09175,3.09175,0,0,0-3.59961-2.49585A3.03673,3.03673,0,0,0,77.09649,80.917a116.673,116.673,0,0,1,2.34619,18.24732A115.89424,115.89424,0,0,1,78.6997,119Z"/><path class="cls-2" d="M147.49975,118.03955c0-3.4314.46789-7.01929.3117-10.29517a31.74131,31.74131,0,0,0,0-5.4602v.00244a3.08448,3.08448,0,0,0-3.44116-2.9646,3.01965,3.01965,0,0,0-2.81653,3.27612c.15558,5.14844-.15618,10.1377-.31231,15.28589A5.85688,5.85688,0,0,0,141.352,119h6.049A4.8957,4.8957,0,0,0,147.49975,118.03955Z"/><path class="cls-2" d="M157.04247,67.03784q-9.38772-46.78967-54.91259-61.762A45.02188,45.02188,0,0,0,91.80236,3.0918c-1.8783-.156-3.12866.78051-3.28424,2.49585A2.8761,2.8761,0,0,0,91.02062,9.176c.62409.15551,1.25043.15551,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457A69.1805,69.1805,0,0,1,147.0288,54.56006a74.06052,74.06052,0,0,1,4.694,23.2395c.1554,2.3396,1.8783,3.7439,4.06677,3.11987,1.56446-.46777,2.34711-1.71631,2.1908-4.21191A41.34673,41.34673,0,0,0,157.04247,67.03784Z"/><path class="cls-2" d="M135.09362,119c.28638-3.91992.42383-7.71533.35822-11.25562a217.74443,217.74443,0,0,0-2.6587-34.62329c-2.0346-12.7915-7.51043-23.551-17.053-32.28637A46.09888,46.09888,0,0,0,105.571,33.66089a3.002,3.002,0,0,0-4.22516,1.092c-.93884,1.55981-.46869,3.27588,1.25189,4.36792a3.92179,3.92179,0,0,0,1.09424.62427c10.4837,6.39355,17.83551,15.283,21.279,27.13672,3.12885,11.38794,3.91077,23.083,4.22308,34.78051A167.89466,167.89466,0,0,1,128.7799,119Z"/><path class="cls-2" d="M97.59063,118.1958a3.26475,3.26475,0,0,0-2.81482-3.43164,3.13267,3.13267,0,0,0-3.44342,2.80737c-.067.4773-.1413.9524-.21179,1.42847H97.481C97.51641,118.73145,97.55682,118.46533,97.59063,118.1958Z"/><path class="cls-2" d="M122.5595,119c.38214-4.52686.58307-9.10278.53247-13.75a159.06937,159.06937,0,0,0-2.03235-26.98242A60.29143,60.29143,0,0,0,118.555,67.19336a3.10573,3.10573,0,0,0-3.91138-2.02783,2.97009,2.97009,0,0,0-2.03229,3.8999c2.5025,9.35986,3.44037,19.02734,4.067,28.853A153.35944,153.35944,0,0,1,116.25793,119Z"/><path class="cls-2" d="M103.689,119h6.40527q.62714-6.47863.638-12.96948A167.06829,167.06829,0,0,0,108.0736,76.395c-2.03461-11.07324-7.97833-18.87134-18.30566-22.77075v.00219a28.15763,28.15763,0,0,0-18.92914-.15625c-2.66077.78052-3.44348,3.58545-1.72058,5.30176,1.24981,1.248,2.5025,1.0918,3.91058.624a21.72717,21.72717,0,0,1,28.47247,16.84277,163.58646,163.58646,0,0,1,2.34693,17.31372,137.99558,137.99558,0,0,1-.15619,25.42139Z"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingerprint11.svg b/polkit-agent/assets/biowaiting/fingerprint11.svg
|
||
new file mode 100644
|
||
index 0000000..73ab76d
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingerprint11.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00927,3.00927,0,0,0-4.06695,1.87157l-4.2231,10.29593a2.95177,2.95177,0,0,0,2.34692,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35322-4.96514,4.2252-10.13749a3.22338,3.22338,0,0,0-1.72268-4.21179Zm71.02957-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28729-1.24829,3.28729-3.58851,0-3.43141.4679-7.01916.31174-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99057,121.93748a3.19812,3.19812,0,0,0-3.91136,2.18407c-.31251.7804-.4679,1.71618-.7825,2.49562a101.9769,101.9769,0,0,1-5.00714,12.01c-1.09424,2.34022.1554,4.67969,2.66078,4.67969,1.40827.15616,2.34636-.77963,2.9727-2.02772a81.29627,81.29627,0,0,0,6.09985-15.4437,3.02989,3.02989,0,0,0-2.03233-3.898Zm51.78526-7.17321a3.1326,3.1326,0,0,0-3.44347,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25192,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.62684,5.62684,0,0,0,1.25041-2.33946,128.60675,128.60675,0,0,0,4.85174-14.97123,161.5315,161.5315,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07465,60.17791a3.312,3.312,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91135,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.131-4.68045a70.50518,70.50518,0,0,1-.62634-41.79842ZM85.701,104.15584a75.86247,75.86247,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09173,3.09173,0,0,0-3.59961-2.49581,3.03667,3.03667,0,0,0-2.34618,3.90025,116.66849,116.66849,0,0,1,2.34618,18.24725,106.72223,106.72223,0,0,1-2.97253,31.50478c-.46789,2.02773.31175,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.17988,109.17988,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44042,19.02707,4.067,28.85281a155.422,155.422,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.0352,4.2118a3.1298,3.1298,0,0,0,4.06695-2.65178,158.74245,158.74245,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61236,48.32272A67.88326,67.88326,0,0,1,27.18743,31.633C41.11154,16.81945,58.16451,9.0199,78.663,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00788,2,78.50459,2A77.9438,77.9438,0,0,0,10.13446,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72437,2.72437,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79085,85.753c-1.25058-7.48553-.31174-14.19161,4.85155-20.11959a2.80489,2.80489,0,0,0,.62425-1.40368c.15616-1.55983-.15634-2.80812-1.72059-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63138,6.55146-7.66581,14.19542-6.41389,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.8888,84.8888,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07666,4.07666,0,0,0-.78269,2.652,2.99416,2.99416,0,0,0,2.34693,2.652c1.72078.31173,2.815-.31251,3.75521-1.87234a90.1349,90.1349,0,0,0,9.6989-29.79089A108.40061,108.40061,0,0,0,58.79314,85.753ZM22.338,94.48834c-1.09424-7.01916-2.03234-13.88368-1.09424-21.05461A59.14015,59.14015,0,0,1,46.11943,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97347-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37821,38.49678a64.52309,64.52309,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72288,15.12892,2.19078,22.61463.3125,4.99219.4679,9.98419-1.09425,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87694,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81712-17.6232,1.56443-26.66951ZM157.04249,67.03786Q147.65476,20.2483,102.1299,5.276A45.00768,45.00768,0,0,0,91.80236,3.09194c-1.87827-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.25041.15558,1.72059.31175a70.72962,70.72962,0,0,1,40.36348,22.45694A69.18273,69.18273,0,0,1,147.0288,54.56015a74.061,74.061,0,0,1,4.69406,23.23944c.15538,2.33946,1.87825,3.7439,4.06675,3.11986,1.56443-.4679,2.34712-1.71618,2.19076-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09794,46.09794,0,0,0-10.16909-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25194,4.368a3.91739,3.91739,0,0,0,1.09424.62422c10.48369,6.3936,17.83547,15.283,21.27894,27.13666,3.12886,11.38806,3.91079,23.08329,4.22309,34.7806a167.16817,167.16817,0,0,1-2.34693,33.06462c-.31174,2.34023.62405,3.7439,2.50252,4.0564,2.0352.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.742,217.742,0,0,0-2.65868-34.62312c-2.03462-12.79173-7.51042-23.55117-17.053-32.2865ZM89.76793,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66076.78037-3.44345,3.58546-1.72059,5.30163C70.368,60.02,71.62072,59.86389,73.0288,59.396a21.72731,21.72731,0,0,1,28.47247,16.8428,163.579,163.579,0,0,1,2.34692,17.31375A137.99692,137.99692,0,0,1,103.692,118.974a149.65137,149.65137,0,0,1-7.04023,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.44271-2.34022,143.91473,143.91473,0,0,0,8.13446-46.946,167.06542,167.06542,0,0,0-2.65866-29.6353c-2.03463-11.07347-7.97832-18.87149-18.30567-22.77079ZM46.431,72.65334C50.03,55.02805,68.6482,42.7065,86.48291,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55045-1.2481-26.59781,3.90025-35.82653,15.283A38.57474,38.57474,0,0,0,39.861,85.4407c.7804,5.30373,1.72078,10.45208,1.72078,15.75372,0,3.74391,0,7.488-.31175,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31083,39.31083,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03234-13.10195-7.19563-24.64312-16.1126-34.31273C115.89556,21.96341,99.46893,14.78945,79.91135,14.63329a64.57055,64.57055,0,0,0-25.3436,5.14835,3.23306,3.23306,0,0,0-2.03462,4.20951,3.15933,3.15933,0,0,0,4.38155,1.56A60.10931,60.10931,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04478,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15053,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63952,150.63952,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12886,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.9358-12.16521-.47019-4.05565-1.09654-8.11206-1.72288-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13447.93654-14.7068,9.04763-13.45392,17.002.624,4.83584,1.40808,9.6696,1.876,14.50563a100.76542,100.76542,0,0,1-4.6931,39.77,111.03563,111.03563,0,0,1-5.9437,14.03754,3.0595,3.0595,0,0,0,.15616,3.43236,2.8478,2.8478,0,0,0,2.97252,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15053,82.94717ZM34.38591,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82536,45.82536,0,0,1,49.87464,44.26631a45.38952,45.38952,0,0,1,28.16-10.76171,44.31362,44.31362,0,0,1,12.82986,1.24828,3.86111,3.86111,0,0,0,1.87675.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.95556,45.95556,0,0,0-13.14161-1.55984,34.70559,34.70559,0,0,0-9.69889.93577C54.25524,31.16513,42.20807,39.74505,33.91516,53.62436a50.635,50.635,0,0,0-6.56928,32.59653c.4679,4.36814,1.40808,8.57995,1.71983,12.94809.62405,10.75944-.78175,21.20867-5.6312,30.87827a3.03318,3.03318,0,0,0-.47018,2.02771,2.8529,2.8529,0,0,0,2.65867,2.652,3.38107,3.38107,0,0,0,3.44271-2.02772c6.57-12.9458,7.51022-26.98125,5.3202-41.17439Zm0,0"/></g><path class="cls-2" d="M4.97253,58.30615A79.56579,79.56579,0,0,0,2,80.45166a66.6041,66.6041,0,0,0,.31177,7.64307A76.27289,76.27289,0,0,0,5.91137,104.626a2.67956,2.67956,0,0,0,2.65869,2.02856c2.66095.15552,3.91284-1.87231,3.13092-4.68042a70.50594,70.50594,0,0,1-.62634-41.79858V60.178A3.312,3.312,0,0,0,8.8839,55.81055C7.16326,55.3418,5.59887,56.43384,4.97253,58.30615Z"/><path class="cls-2" d="M30.34148,130c5.40314-12.1875,6.08313-25.26245,4.04444-38.4751-.78253-5.304-1.565-10.76391-1.09638-16.06543A45.82521,45.82521,0,0,1,49.87463,44.26636a45.3888,45.3888,0,0,1,28.16-10.76172,44.30565,44.30565,0,0,1,12.82983,1.24829,3.86367,3.86367,0,0,0,1.87677.156,2.85936,2.85936,0,0,0,2.50251-2.80811A3.0391,3.0391,0,0,0,92.89678,28.825a45.94687,45.94687,0,0,0-13.1416-1.55981,34.707,34.707,0,0,0-9.69891.93554C54.25524,31.165,42.20806,39.74512,33.91515,53.62427A50.63525,50.63525,0,0,0,27.34588,86.221c.46789,4.36792,1.40808,8.57983,1.71985,12.948.623,10.74194-.77826,21.1748-5.60871,30.83105Z"/><path class="cls-2" d="M45.02288,125.83545a3.02982,3.02982,0,0,0-2.03229-3.89795,3.19793,3.19793,0,0,0-3.91137,2.18408c-.3125.78028-.4679,1.71607-.78254,2.49561-.38446,1.1499-.79632,2.27343-1.22418,3.38281h6.6789C44.223,128.62256,44.65173,127.23486,45.02288,125.83545Z"/><path class="cls-2" d="M46.431,72.65332C50.03,55.02808,68.64819,42.70654,86.4829,46.294a35.29073,35.29073,0,0,1,20.18244,11.85376,8.89448,8.89448,0,0,0,1.72,1.71606,3.1923,3.1923,0,0,0,3.75506-.93555c1.09424-1.40454.93885-2.80835-.31158-4.52441-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519-14.55048-1.248-26.59784,3.90039-35.82654,15.283A38.57484,38.57484,0,0,0,39.861,85.44067c.7804,5.30371,1.72077,10.45215,1.72077,15.75367,0,3.74389,0,7.488-.31171,11.07348a3.006,3.006,0,0,0,2.814,3.27613,3.03829,3.03829,0,0,0,3.44348-2.6521,100.85037,100.85037,0,0,0-.15613-20.58741c-.47021-4.21167-1.87829-8.26733-1.56445-12.16772A39.31056,39.31056,0,0,1,46.431,72.65332Z"/><path class="cls-2" d="M29.84612,48.63428A58.71554,58.71554,0,0,1,46.11944,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78271-2.18408-2.97351-2.65186-5.16424-1.24731A60.84242,60.84242,0,0,0,29.37823,38.49683,64.52224,64.52224,0,0,0,14.67144,78.26758c-.31177,7.64331,1.72284,15.1289,2.19073,22.6145.3125,4.99219.4679,9.98413-1.09423,14.97437-.4679,1.55981-.93811,3.27514-1.40827,4.52319a3.12376,3.12376,0,0,0,3.12885,3.43017c1.87695,0,2.65869-1.092,3.285-2.6521,3.285-8.57763,2.81714-17.623,1.56446-26.66943-1.09424-7.019-2.03235-13.88354-1.09424-21.05469A58.80522,58.80522,0,0,1,29.84612,48.63428Z"/><path class="cls-2" d="M147.81145,102.28418v.00244a3.08448,3.08448,0,0,0-3.44116-2.9646,3.01965,3.01965,0,0,0-2.81653,3.27612c.15558,5.14844-.15618,10.1377-.31231,15.28589,0,2.3396,1.09424,3.58789,2.971,3.7439,1.87841,0,3.28729-1.24829,3.28729-3.58838,0-3.4314.46789-7.01929.3117-10.29517A31.74131,31.74131,0,0,0,147.81145,102.28418Z"/><path class="cls-2" d="M78.50457,2A77.94379,77.94379,0,0,0,10.13445,45.04443a5.77193,5.77193,0,0,0-.624,2.18409,2.72441,2.72441,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71558v.00244A67.88222,67.88222,0,0,1,27.18743,31.63306C41.11156,16.81934,58.16448,9.02,78.663,8.39575c2.34717,0,3.75525-1.24829,3.75525-3.27588C82.416,3.0918,81.00787,2,78.50457,2Z"/><path class="cls-2" d="M128.88177,36.469C115.89556,21.96338,99.46893,14.78955,79.91137,14.6333a64.56588,64.56588,0,0,0-25.34363,5.14844,3.233,3.233,0,0,0-2.03461,4.20947,3.15955,3.15955,0,0,0,4.38154,1.56006,60.109,60.109,0,0,1,28.63018-4.36816A57.799,57.799,0,0,1,120.58959,37.093c10.32434,9.82519,16.268,21.8352,18.30567,36.02807q1.16922,8.42505,1.876,16.84375c.4679,1.87159,1.72058,3.11988,3.44123,3.11988a3.18857,3.18857,0,0,0,2.97265-3.43238V88.56055c-.6242-5.92725-1.25055-11.853-2.19073-17.77881C142.962,57.67969,137.79876,46.13867,128.88177,36.469Z"/><path class="cls-2" d="M50.46655,130h6.53192a82.66267,82.66267,0,0,0,2.41876-11.65039,108.40174,108.40174,0,0,0-.62409-32.59668h-.00232c-1.25054-7.48535-.3117-14.19141,4.85157-20.11963a2.80362,2.80362,0,0,0,.62426-1.40356c.15613-1.55982-.15637-2.80811-1.72058-3.43213a2.98078,2.98078,0,0,0-3.91137.93628c-5.63141,6.55151-7.66584,14.19531-6.41388,22.77319a143.776,143.776,0,0,1,1.87677,19.65112,84.89,84.89,0,0,1-1.87677,19.1836C51.74847,125.60254,51.14989,127.81641,50.46655,130Z"/><path class="cls-2" d="M133.93694,130a150.35686,150.35686,0,0,0,1.5149-22.25562,217.74443,217.74443,0,0,0-2.6587-34.62329c-2.0346-12.7915-7.51043-23.551-17.053-32.28637A46.09888,46.09888,0,0,0,105.571,33.66089a3.002,3.002,0,0,0-4.22516,1.092c-.93884,1.55981-.46869,3.27588,1.25189,4.36792a3.92179,3.92179,0,0,0,1.09424.62427c10.4837,6.39355,17.83551,15.283,21.279,27.13672,3.12885,11.38794,3.91077,23.083,4.22308,34.78051A167.37135,167.37135,0,0,1,127.584,130Z"/><path class="cls-2" d="M157.04247,67.03784q-9.38772-46.78967-54.91259-61.762A45.02188,45.02188,0,0,0,91.80236,3.0918c-1.8783-.156-3.12866.78051-3.28424,2.49585A2.8761,2.8761,0,0,0,91.02062,9.176c.62409.15551,1.25043.15551,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457A69.1805,69.1805,0,0,1,147.0288,54.56006a74.06052,74.06052,0,0,1,4.694,23.2395c.1554,2.3396,1.8783,3.7439,4.06677,3.11987,1.56446-.46777,2.34711-1.71631,2.1908-4.21191A41.34673,41.34673,0,0,0,157.04247,67.03784Z"/><path class="cls-2" d="M121.23455,130a148.83457,148.83457,0,0,0,1.85742-24.75,159.06937,159.06937,0,0,0-2.03235-26.98242A60.29143,60.29143,0,0,0,118.555,67.19336a3.10573,3.10573,0,0,0-3.91138-2.02783,2.97009,2.97009,0,0,0-2.03229,3.8999c2.5025,9.35986,3.44037,19.02734,4.067,28.853A153.35038,153.35038,0,0,1,114.87652,130Z"/><path class="cls-2" d="M97.59063,118.1958a3.26475,3.26475,0,0,0-2.81482-3.43164,3.13267,3.13267,0,0,0-3.44342,2.80737Q90.451,123.85461,89.13329,130h6.44983C96.39861,126.1377,97.08685,122.2124,97.59063,118.1958Z"/><path class="cls-2" d="M85.701,104.15576a75.85951,75.85951,0,0,0-.46789-9.98364,114.49913,114.49913,0,0,0-2.1908-14.65942,3.09175,3.09175,0,0,0-3.59961-2.49585A3.03673,3.03673,0,0,0,77.09649,80.917a116.673,116.673,0,0,1,2.34619,18.24732A107.19115,107.19115,0,0,1,76.62749,130h6.4181A109.166,109.166,0,0,0,85.701,104.15576Z"/><path class="cls-2" d="M102.09509,130h6.49407a137.10134,137.10134,0,0,0,2.14307-23.96948A167.06829,167.06829,0,0,0,108.0736,76.395c-2.03461-11.07324-7.97833-18.87134-18.30566-22.77075v.00219a28.15763,28.15763,0,0,0-18.92914-.15625c-2.66077.78052-3.44348,3.58545-1.72058,5.30176,1.24981,1.248,2.5025,1.0918,3.91058.624a21.72717,21.72717,0,0,1,28.47247,16.84277,163.58646,163.58646,0,0,1,2.34693,17.31372,137.99558,137.99558,0,0,1-.15619,25.42139C103.32018,122.68433,102.7738,126.356,102.09509,130Z"/><path class="cls-2" d="M71.15051,82.94727v-.00245a11.40165,11.40165,0,0,1,0-5.61377,9.11078,9.11078,0,0,1,9.70123-6.55151c4.2229.15552,7.66638,3.27612,8.60217,7.95581A150.64126,150.64126,0,0,1,92.11486,105.25a3.12524,3.12524,0,0,0,3.12885,3.43237c1.879,0,2.97253-1.40356,3.12872-3.27612v-2.80811h.15631c-.3125-4.05542-.4679-8.11181-.93579-12.16528-.47022-4.05566-1.09656-8.11206-1.7229-12.16528A15.95811,15.95811,0,0,0,78.19079,64.5415c-8.13452.93653-14.70685,9.04761-13.454,17.002.62408,4.83593,1.40814,9.66967,1.876,14.50561A103.2327,103.2327,0,0,1,63.66741,130h6.28925C73.633,114.80322,73.87145,99.12134,71.15051,82.94727Z"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingerprint12.svg b/polkit-agent/assets/biowaiting/fingerprint12.svg
|
||
new file mode 100644
|
||
index 0000000..2b0c41e
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingerprint12.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00927,3.00927,0,0,0-4.06695,1.87157l-4.2231,10.29593a2.95177,2.95177,0,0,0,2.34692,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35322-4.96514,4.2252-10.13749a3.22338,3.22338,0,0,0-1.72268-4.21179Zm71.02957-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28729-1.24829,3.28729-3.58851,0-3.43141.4679-7.01916.31174-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99057,121.93748a3.19812,3.19812,0,0,0-3.91136,2.18407c-.31251.7804-.4679,1.71618-.7825,2.49562a101.9769,101.9769,0,0,1-5.00714,12.01c-1.09424,2.34022.1554,4.67969,2.66078,4.67969,1.40827.15616,2.34636-.77963,2.9727-2.02772a81.29627,81.29627,0,0,0,6.09985-15.4437,3.02989,3.02989,0,0,0-2.03233-3.898Zm51.78526-7.17321a3.1326,3.1326,0,0,0-3.44347,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25192,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.62684,5.62684,0,0,0,1.25041-2.33946,128.60675,128.60675,0,0,0,4.85174-14.97123,161.5315,161.5315,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07465,60.17791a3.312,3.312,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91135,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.131-4.68045a70.50518,70.50518,0,0,1-.62634-41.79842ZM85.701,104.15584a75.86247,75.86247,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09173,3.09173,0,0,0-3.59961-2.49581,3.03667,3.03667,0,0,0-2.34618,3.90025,116.66849,116.66849,0,0,1,2.34618,18.24725,106.72223,106.72223,0,0,1-2.97253,31.50478c-.46789,2.02773.31175,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.17988,109.17988,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44042,19.02707,4.067,28.85281a155.422,155.422,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.0352,4.2118a3.1298,3.1298,0,0,0,4.06695-2.65178,158.74245,158.74245,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61236,48.32272A67.88326,67.88326,0,0,1,27.18743,31.633C41.11154,16.81945,58.16451,9.0199,78.663,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00788,2,78.50459,2A77.9438,77.9438,0,0,0,10.13446,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72437,2.72437,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79085,85.753c-1.25058-7.48553-.31174-14.19161,4.85155-20.11959a2.80489,2.80489,0,0,0,.62425-1.40368c.15616-1.55983-.15634-2.80812-1.72059-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63138,6.55146-7.66581,14.19542-6.41389,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.8888,84.8888,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07666,4.07666,0,0,0-.78269,2.652,2.99416,2.99416,0,0,0,2.34693,2.652c1.72078.31173,2.815-.31251,3.75521-1.87234a90.1349,90.1349,0,0,0,9.6989-29.79089A108.40061,108.40061,0,0,0,58.79314,85.753ZM22.338,94.48834c-1.09424-7.01916-2.03234-13.88368-1.09424-21.05461A59.14015,59.14015,0,0,1,46.11943,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97347-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37821,38.49678a64.52309,64.52309,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72288,15.12892,2.19078,22.61463.3125,4.99219.4679,9.98419-1.09425,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87694,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81712-17.6232,1.56443-26.66951ZM157.04249,67.03786Q147.65476,20.2483,102.1299,5.276A45.00768,45.00768,0,0,0,91.80236,3.09194c-1.87827-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.25041.15558,1.72059.31175a70.72962,70.72962,0,0,1,40.36348,22.45694A69.18273,69.18273,0,0,1,147.0288,54.56015a74.061,74.061,0,0,1,4.69406,23.23944c.15538,2.33946,1.87825,3.7439,4.06675,3.11986,1.56443-.4679,2.34712-1.71618,2.19076-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09794,46.09794,0,0,0-10.16909-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25194,4.368a3.91739,3.91739,0,0,0,1.09424.62422c10.48369,6.3936,17.83547,15.283,21.27894,27.13666,3.12886,11.38806,3.91079,23.08329,4.22309,34.7806a167.16817,167.16817,0,0,1-2.34693,33.06462c-.31174,2.34023.62405,3.7439,2.50252,4.0564,2.0352.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.742,217.742,0,0,0-2.65868-34.62312c-2.03462-12.79173-7.51042-23.55117-17.053-32.2865ZM89.76793,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66076.78037-3.44345,3.58546-1.72059,5.30163C70.368,60.02,71.62072,59.86389,73.0288,59.396a21.72731,21.72731,0,0,1,28.47247,16.8428,163.579,163.579,0,0,1,2.34692,17.31375A137.99692,137.99692,0,0,1,103.692,118.974a149.65137,149.65137,0,0,1-7.04023,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.44271-2.34022,143.91473,143.91473,0,0,0,8.13446-46.946,167.06542,167.06542,0,0,0-2.65866-29.6353c-2.03463-11.07347-7.97832-18.87149-18.30567-22.77079ZM46.431,72.65334C50.03,55.02805,68.6482,42.7065,86.48291,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55045-1.2481-26.59781,3.90025-35.82653,15.283A38.57474,38.57474,0,0,0,39.861,85.4407c.7804,5.30373,1.72078,10.45208,1.72078,15.75372,0,3.74391,0,7.488-.31175,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31083,39.31083,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03234-13.10195-7.19563-24.64312-16.1126-34.31273C115.89556,21.96341,99.46893,14.78945,79.91135,14.63329a64.57055,64.57055,0,0,0-25.3436,5.14835,3.23306,3.23306,0,0,0-2.03462,4.20951,3.15933,3.15933,0,0,0,4.38155,1.56A60.10931,60.10931,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04478,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15053,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63952,150.63952,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12886,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.9358-12.16521-.47019-4.05565-1.09654-8.11206-1.72288-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13447.93654-14.7068,9.04763-13.45392,17.002.624,4.83584,1.40808,9.6696,1.876,14.50563a100.76542,100.76542,0,0,1-4.6931,39.77,111.03563,111.03563,0,0,1-5.9437,14.03754,3.0595,3.0595,0,0,0,.15616,3.43236,2.8478,2.8478,0,0,0,2.97252,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15053,82.94717ZM34.38591,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82536,45.82536,0,0,1,49.87464,44.26631a45.38952,45.38952,0,0,1,28.16-10.76171,44.31362,44.31362,0,0,1,12.82986,1.24828,3.86111,3.86111,0,0,0,1.87675.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.95556,45.95556,0,0,0-13.14161-1.55984,34.70559,34.70559,0,0,0-9.69889.93577C54.25524,31.16513,42.20807,39.74505,33.91516,53.62436a50.635,50.635,0,0,0-6.56928,32.59653c.4679,4.36814,1.40808,8.57995,1.71983,12.94809.62405,10.75944-.78175,21.20867-5.6312,30.87827a3.03318,3.03318,0,0,0-.47018,2.02771,2.8529,2.8529,0,0,0,2.65867,2.652,3.38107,3.38107,0,0,0,3.44271-2.02772c6.57-12.9458,7.51022-26.98125,5.3202-41.17439Zm0,0"/></g><path class="cls-2" d="M14.35967,120.37964a3.12376,3.12376,0,0,0,3.12885,3.43017c1.87695,0,2.65869-1.092,3.285-2.6521,3.285-8.57763,2.81714-17.623,1.56446-26.66943-1.09424-7.019-2.03235-13.88354-1.09424-21.05469A59.14042,59.14042,0,0,1,46.11944,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78271-2.18408-2.97351-2.65186-5.16424-1.24731A60.84242,60.84242,0,0,0,29.37823,38.49683,64.52224,64.52224,0,0,0,14.67144,78.26758c-.31177,7.64331,1.72284,15.1289,2.19073,22.6145.3125,4.99219.4679,9.98413-1.09423,14.97437C15.3,117.41626,14.82983,119.13159,14.35967,120.37964Z"/><path class="cls-2" d="M49.87463,44.26636a45.3888,45.3888,0,0,1,28.16-10.76172,44.30565,44.30565,0,0,1,12.82983,1.24829,3.86367,3.86367,0,0,0,1.87677.156,2.85936,2.85936,0,0,0,2.50251-2.80811A3.0391,3.0391,0,0,0,92.89678,28.825a45.94687,45.94687,0,0,0-13.1416-1.55981,34.707,34.707,0,0,0-9.69891.93554C54.25524,31.165,42.20806,39.74512,33.91515,53.62427A50.63525,50.63525,0,0,0,27.34588,86.221c.46789,4.36792,1.40808,8.57983,1.71985,12.948.624,10.75952-.78174,21.20874-5.63123,30.87841a3.0328,3.0328,0,0,0-.47015,2.02759,2.85307,2.85307,0,0,0,2.65863,2.6521,3.38147,3.38147,0,0,0,3.44275-2.02783c6.57-12.9458,7.51019-26.9812,5.32019-41.17432-.78253-5.304-1.565-10.76391-1.09638-16.06543A45.82521,45.82521,0,0,1,49.87463,44.26636Z"/><path class="cls-2" d="M78.50457,2A77.94379,77.94379,0,0,0,10.13445,45.04443a5.77193,5.77193,0,0,0-.624,2.18409,2.72441,2.72441,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71558v.00244A67.88222,67.88222,0,0,1,27.18743,31.63306C41.11156,16.81934,58.16448,9.02,78.663,8.39575c2.34717,0,3.75525-1.24829,3.75525-3.27588C82.416,3.0918,81.00787,2,78.50457,2Z"/><path class="cls-2" d="M147.81145,102.28418v.00244a3.08448,3.08448,0,0,0-3.44116-2.9646,3.01965,3.01965,0,0,0-2.81653,3.27612c.15558,5.14844-.15618,10.1377-.31231,15.28589,0,2.3396,1.09424,3.58789,2.971,3.7439,1.87841,0,3.28729-1.24829,3.28729-3.58838,0-3.4314.46789-7.01929.3117-10.29517A31.74131,31.74131,0,0,0,147.81145,102.28418Z"/><path class="cls-2" d="M4.97253,58.30615A79.56579,79.56579,0,0,0,2,80.45166a66.6041,66.6041,0,0,0,.31177,7.64307A76.27289,76.27289,0,0,0,5.91137,104.626a2.67956,2.67956,0,0,0,2.65869,2.02856c2.66095.15552,3.91284-1.87231,3.13092-4.68042a70.50594,70.50594,0,0,1-.62634-41.79858V60.178A3.312,3.312,0,0,0,8.8839,55.81055C7.16326,55.3418,5.59887,56.43384,4.97253,58.30615Z"/><path class="cls-2" d="M129.34966,138.7832c2.03522.31177,3.44348-.78027,3.755-3.11963a162.6075,162.6075,0,0,0,2.34717-27.91919,217.74443,217.74443,0,0,0-2.6587-34.62329c-2.0346-12.7915-7.51043-23.551-17.053-32.28637A46.09888,46.09888,0,0,0,105.571,33.66089a3.002,3.002,0,0,0-4.22516,1.092c-.93884,1.55981-.46869,3.27588,1.25189,4.36792a3.92179,3.92179,0,0,0,1.09424.62427c10.4837,6.39355,17.83551,15.283,21.279,27.13672,3.12885,11.38794,3.91077,23.083,4.22308,34.78051a167.16955,167.16955,0,0,1-2.34692,33.0647C126.53539,137.06714,127.47118,138.4707,129.34966,138.7832Z"/><path class="cls-2" d="M128.88177,36.469C115.89556,21.96338,99.46893,14.78955,79.91137,14.6333a64.56588,64.56588,0,0,0-25.34363,5.14844,3.233,3.233,0,0,0-2.03461,4.20947,3.15955,3.15955,0,0,0,4.38154,1.56006,60.109,60.109,0,0,1,28.63018-4.36816A57.799,57.799,0,0,1,120.58959,37.093c10.32434,9.82519,16.268,21.8352,18.30567,36.02807q1.16922,8.42505,1.876,16.84375c.4679,1.87159,1.72058,3.11988,3.44123,3.11988a3.18857,3.18857,0,0,0,2.97265-3.43238V88.56055c-.6242-5.92725-1.25055-11.853-2.19073-17.77881C142.962,57.67969,137.79876,46.13867,128.88177,36.469Z"/><path class="cls-2" d="M46.431,72.65332C50.03,55.02808,68.64819,42.70654,86.4829,46.294a35.29073,35.29073,0,0,1,20.18244,11.85376,8.89448,8.89448,0,0,0,1.72,1.71606,3.1923,3.1923,0,0,0,3.75506-.93555c1.09424-1.40454.93885-2.80835-.31158-4.52441-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519-14.55048-1.248-26.59784,3.90039-35.82654,15.283A38.57484,38.57484,0,0,0,39.861,85.44067c.7804,5.30371,1.72077,10.45215,1.72077,15.75367,0,3.74389,0,7.488-.31171,11.07348a3.006,3.006,0,0,0,2.814,3.27613,3.03829,3.03829,0,0,0,3.44348-2.6521,100.85037,100.85037,0,0,0-.15613-20.58741c-.47021-4.21167-1.87829-8.26733-1.56445-12.16772A39.31056,39.31056,0,0,1,46.431,72.65332Z"/><path class="cls-2" d="M119.35662,140a154.2285,154.2285,0,0,0,3.73535-34.75,159.06937,159.06937,0,0,0-2.03235-26.98242A60.29143,60.29143,0,0,0,118.555,67.19336a3.10573,3.10573,0,0,0-3.91138-2.02783,2.97009,2.97009,0,0,0-2.03229,3.8999c2.5025,9.35986,3.44037,19.02734,4.067,28.853A154.445,154.445,0,0,1,112.9295,140Z"/><path class="cls-2" d="M99.86944,140h6.57776a139.82764,139.82764,0,0,0,4.285-33.96948A167.06829,167.06829,0,0,0,108.0736,76.395c-2.03461-11.07324-7.97833-18.87134-18.30566-22.77075v.00219a28.15763,28.15763,0,0,0-18.92914-.15625c-2.66077.78052-3.44348,3.58545-1.72058,5.30176,1.24981,1.248,2.5025,1.0918,3.91058.624a21.72717,21.72717,0,0,1,28.47247,16.84277,163.58646,163.58646,0,0,1,2.34693,17.31372,137.99558,137.99558,0,0,1-.15619,25.42139A139.47424,139.47424,0,0,1,99.86944,140Z"/><path class="cls-2" d="M157.04247,67.03784q-9.38772-46.78967-54.91259-61.762A45.02188,45.02188,0,0,0,91.80236,3.0918c-1.8783-.156-3.12866.78051-3.28424,2.49585A2.8761,2.8761,0,0,0,91.02062,9.176c.62409.15551,1.25043.15551,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457A69.1805,69.1805,0,0,1,147.0288,54.56006a74.06052,74.06052,0,0,1,4.694,23.2395c.1554,2.3396,1.8783,3.7439,4.06677,3.11987,1.56446-.46777,2.34711-1.71631,2.1908-4.21191A41.34673,41.34673,0,0,0,157.04247,67.03784Z"/><path class="cls-2" d="M45.02288,125.83545a3.02982,3.02982,0,0,0-2.03229-3.89795,3.19793,3.19793,0,0,0-3.91137,2.18408c-.3125.78028-.4679,1.71607-.78254,2.49561a101.972,101.972,0,0,1-5.00714,12.01A4.05833,4.05833,0,0,0,32.93041,140h6.62073A78.5383,78.5383,0,0,0,45.02288,125.83545Z"/><path class="cls-2" d="M93.21142,139.87744a161.52283,161.52283,0,0,0,4.37921-21.68164,3.26475,3.26475,0,0,0-2.81482-3.43164,3.13267,3.13267,0,0,0-3.44342,2.80737A161.54006,161.54006,0,0,1,86.62359,140h6.55493C93.18865,139.95874,93.20135,139.919,93.21142,139.87744Z"/><path class="cls-2" d="M59.41723,118.34961a108.40174,108.40174,0,0,0-.62409-32.59668h-.00232c-1.25054-7.48535-.3117-14.19141,4.85157-20.11963a2.80362,2.80362,0,0,0,.62426-1.40356c.15613-1.55982-.15637-2.80811-1.72058-3.43213a2.98078,2.98078,0,0,0-3.91137.93628c-5.63141,6.55151-7.66584,14.19531-6.41388,22.77319a143.776,143.776,0,0,1,1.87677,19.65112,84.89,84.89,0,0,1-1.87677,19.1836A80.92519,80.92519,0,0,1,46.636,140h6.86078A85.938,85.938,0,0,0,59.41723,118.34961Z"/><path class="cls-2" d="M71.15051,82.94727v-.00245a11.40165,11.40165,0,0,1,0-5.61377,9.11078,9.11078,0,0,1,9.70123-6.55151c4.2229.15552,7.66638,3.27612,8.60217,7.95581A150.64126,150.64126,0,0,1,92.11486,105.25a3.12524,3.12524,0,0,0,3.12885,3.43237c1.879,0,2.97253-1.40356,3.12872-3.27612v-2.80811h.15631c-.3125-4.05542-.4679-8.11181-.93579-12.16528-.47022-4.05566-1.09656-8.11206-1.7229-12.16528A15.95811,15.95811,0,0,0,78.19079,64.5415c-8.13452.93653-14.70685,9.04761-13.454,17.002.62408,4.83593,1.40814,9.66967,1.876,14.50561a100.7663,100.7663,0,0,1-4.69312,39.77Q61.168,137.93139,60.36217,140H67.022C73.40533,121.70972,74.47247,102.69385,71.15051,82.94727Z"/><path class="cls-2" d="M85.23309,94.17212a114.49913,114.49913,0,0,0-2.1908-14.65942,3.09175,3.09175,0,0,0-3.59961-2.49585A3.03673,3.03673,0,0,0,77.09649,80.917a116.673,116.673,0,0,1,2.34619,18.24732,106.72018,106.72018,0,0,1-2.97253,31.50488c-.4679,2.02759.31176,3.7439,2.03442,4.21167,1.87695.468,3.44141-.624,4.06775-2.80811a109.18045,109.18045,0,0,0,3.12866-27.917A75.85951,75.85951,0,0,0,85.23309,94.17212Z"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingerprint13.svg b/polkit-agent/assets/biowaiting/fingerprint13.svg
|
||
new file mode 100644
|
||
index 0000000..9f37f06
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingerprint13.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00927,3.00927,0,0,0-4.06695,1.87157l-4.2231,10.29593a2.95177,2.95177,0,0,0,2.34692,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35322-4.96514,4.2252-10.13749a3.22338,3.22338,0,0,0-1.72268-4.21179Zm71.02957-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28729-1.24829,3.28729-3.58851,0-3.43141.4679-7.01916.31174-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99057,121.93748a3.19812,3.19812,0,0,0-3.91136,2.18407c-.31251.7804-.4679,1.71618-.7825,2.49562a101.9769,101.9769,0,0,1-5.00714,12.01c-1.09424,2.34022.1554,4.67969,2.66078,4.67969,1.40827.15616,2.34636-.77963,2.9727-2.02772a81.29627,81.29627,0,0,0,6.09985-15.4437,3.02989,3.02989,0,0,0-2.03233-3.898Zm51.78526-7.17321a3.1326,3.1326,0,0,0-3.44347,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25192,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.62684,5.62684,0,0,0,1.25041-2.33946,128.60675,128.60675,0,0,0,4.85174-14.97123,161.5315,161.5315,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07465,60.17791a3.312,3.312,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91135,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.131-4.68045a70.50518,70.50518,0,0,1-.62634-41.79842ZM85.701,104.15584a75.86247,75.86247,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09173,3.09173,0,0,0-3.59961-2.49581,3.03667,3.03667,0,0,0-2.34618,3.90025,116.66849,116.66849,0,0,1,2.34618,18.24725,106.72223,106.72223,0,0,1-2.97253,31.50478c-.46789,2.02773.31175,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.17988,109.17988,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44042,19.02707,4.067,28.85281a155.422,155.422,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.0352,4.2118a3.1298,3.1298,0,0,0,4.06695-2.65178,158.74245,158.74245,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61236,48.32272A67.88326,67.88326,0,0,1,27.18743,31.633C41.11154,16.81945,58.16451,9.0199,78.663,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00788,2,78.50459,2A77.9438,77.9438,0,0,0,10.13446,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72437,2.72437,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79085,85.753c-1.25058-7.48553-.31174-14.19161,4.85155-20.11959a2.80489,2.80489,0,0,0,.62425-1.40368c.15616-1.55983-.15634-2.80812-1.72059-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63138,6.55146-7.66581,14.19542-6.41389,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.8888,84.8888,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07666,4.07666,0,0,0-.78269,2.652,2.99416,2.99416,0,0,0,2.34693,2.652c1.72078.31173,2.815-.31251,3.75521-1.87234a90.1349,90.1349,0,0,0,9.6989-29.79089A108.40061,108.40061,0,0,0,58.79314,85.753ZM22.338,94.48834c-1.09424-7.01916-2.03234-13.88368-1.09424-21.05461A59.14015,59.14015,0,0,1,46.11943,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97347-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37821,38.49678a64.52309,64.52309,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72288,15.12892,2.19078,22.61463.3125,4.99219.4679,9.98419-1.09425,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87694,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81712-17.6232,1.56443-26.66951ZM157.04249,67.03786Q147.65476,20.2483,102.1299,5.276A45.00768,45.00768,0,0,0,91.80236,3.09194c-1.87827-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.25041.15558,1.72059.31175a70.72962,70.72962,0,0,1,40.36348,22.45694A69.18273,69.18273,0,0,1,147.0288,54.56015a74.061,74.061,0,0,1,4.69406,23.23944c.15538,2.33946,1.87825,3.7439,4.06675,3.11986,1.56443-.4679,2.34712-1.71618,2.19076-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09794,46.09794,0,0,0-10.16909-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25194,4.368a3.91739,3.91739,0,0,0,1.09424.62422c10.48369,6.3936,17.83547,15.283,21.27894,27.13666,3.12886,11.38806,3.91079,23.08329,4.22309,34.7806a167.16817,167.16817,0,0,1-2.34693,33.06462c-.31174,2.34023.62405,3.7439,2.50252,4.0564,2.0352.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.742,217.742,0,0,0-2.65868-34.62312c-2.03462-12.79173-7.51042-23.55117-17.053-32.2865ZM89.76793,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66076.78037-3.44345,3.58546-1.72059,5.30163C70.368,60.02,71.62072,59.86389,73.0288,59.396a21.72731,21.72731,0,0,1,28.47247,16.8428,163.579,163.579,0,0,1,2.34692,17.31375A137.99692,137.99692,0,0,1,103.692,118.974a149.65137,149.65137,0,0,1-7.04023,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.44271-2.34022,143.91473,143.91473,0,0,0,8.13446-46.946,167.06542,167.06542,0,0,0-2.65866-29.6353c-2.03463-11.07347-7.97832-18.87149-18.30567-22.77079ZM46.431,72.65334C50.03,55.02805,68.6482,42.7065,86.48291,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55045-1.2481-26.59781,3.90025-35.82653,15.283A38.57474,38.57474,0,0,0,39.861,85.4407c.7804,5.30373,1.72078,10.45208,1.72078,15.75372,0,3.74391,0,7.488-.31175,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31083,39.31083,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03234-13.10195-7.19563-24.64312-16.1126-34.31273C115.89556,21.96341,99.46893,14.78945,79.91135,14.63329a64.57055,64.57055,0,0,0-25.3436,5.14835,3.23306,3.23306,0,0,0-2.03462,4.20951,3.15933,3.15933,0,0,0,4.38155,1.56A60.10931,60.10931,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04478,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15053,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63952,150.63952,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12886,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.9358-12.16521-.47019-4.05565-1.09654-8.11206-1.72288-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13447.93654-14.7068,9.04763-13.45392,17.002.624,4.83584,1.40808,9.6696,1.876,14.50563a100.76542,100.76542,0,0,1-4.6931,39.77,111.03563,111.03563,0,0,1-5.9437,14.03754,3.0595,3.0595,0,0,0,.15616,3.43236,2.8478,2.8478,0,0,0,2.97252,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15053,82.94717ZM34.38591,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82536,45.82536,0,0,1,49.87464,44.26631a45.38952,45.38952,0,0,1,28.16-10.76171,44.31362,44.31362,0,0,1,12.82986,1.24828,3.86111,3.86111,0,0,0,1.87675.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.95556,45.95556,0,0,0-13.14161-1.55984,34.70559,34.70559,0,0,0-9.69889.93577C54.25524,31.16513,42.20807,39.74505,33.91516,53.62436a50.635,50.635,0,0,0-6.56928,32.59653c.4679,4.36814,1.40808,8.57995,1.71983,12.94809.62405,10.75944-.78175,21.20867-5.6312,30.87827a3.03318,3.03318,0,0,0-.47018,2.02771,2.8529,2.8529,0,0,0,2.65867,2.652,3.38107,3.38107,0,0,0,3.44271-2.02772c6.57-12.9458,7.51022-26.98125,5.3202-41.17439Zm0,0"/></g><path class="cls-2" d="M25.623,134.72705a3.38147,3.38147,0,0,0,3.44275-2.02783c6.57-12.9458,7.51019-26.9812,5.32019-41.17432-.78253-5.304-1.565-10.76391-1.09638-16.06543A45.82521,45.82521,0,0,1,49.87463,44.26636a45.3888,45.3888,0,0,1,28.16-10.76172,44.30565,44.30565,0,0,1,12.82983,1.24829,3.86367,3.86367,0,0,0,1.87677.156,2.85936,2.85936,0,0,0,2.50251-2.80811A3.0391,3.0391,0,0,0,92.89678,28.825a45.94687,45.94687,0,0,0-13.1416-1.55981,34.707,34.707,0,0,0-9.69891.93554C54.25524,31.165,42.20806,39.74512,33.91515,53.62427A50.63525,50.63525,0,0,0,27.34588,86.221c.46789,4.36792,1.40808,8.57983,1.71985,12.948.624,10.75952-.78174,21.20874-5.63123,30.87841a3.0328,3.0328,0,0,0-.47015,2.02759A2.85307,2.85307,0,0,0,25.623,134.72705Z"/><path class="cls-2" d="M113.70556,149.38867a3.12978,3.12978,0,0,0,4.06695-2.65185A158.74374,158.74374,0,0,0,123.092,105.25a159.06937,159.06937,0,0,0-2.03235-26.98242A60.29143,60.29143,0,0,0,118.555,67.19336a3.10573,3.10573,0,0,0-3.91138-2.02783,2.97009,2.97009,0,0,0-2.03229,3.8999c2.5025,9.35986,3.44037,19.02734,4.067,28.853a155.41963,155.41963,0,0,1-5.00794,47.2583C111.20245,147.20483,111.98266,149.07715,113.70556,149.38867Z"/><path class="cls-2" d="M35.95037,143.30688c1.40826.156,2.34631-.77954,2.97266-2.02783a81.2963,81.2963,0,0,0,6.09985-15.4436,3.02982,3.02982,0,0,0-2.03229-3.89795,3.19793,3.19793,0,0,0-3.91137,2.18408c-.3125.78028-.4679,1.71607-.78254,2.49561a101.972,101.972,0,0,1-5.00714,12.01C32.1953,140.96729,33.445,143.30688,35.95037,143.30688Z"/><path class="cls-2" d="M46.431,72.65332C50.03,55.02808,68.64819,42.70654,86.4829,46.294a35.29073,35.29073,0,0,1,20.18244,11.85376,8.89448,8.89448,0,0,0,1.72,1.71606,3.1923,3.1923,0,0,0,3.75506-.93555c1.09424-1.40454.93885-2.80835-.31158-4.52441-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519-14.55048-1.248-26.59784,3.90039-35.82654,15.283A38.57484,38.57484,0,0,0,39.861,85.44067c.7804,5.30371,1.72077,10.45215,1.72077,15.75367,0,3.74389,0,7.488-.31171,11.07348a3.006,3.006,0,0,0,2.814,3.27613,3.03829,3.03829,0,0,0,3.44348-2.6521,100.85037,100.85037,0,0,0-.15613-20.58741c-.47021-4.21167-1.87829-8.26733-1.56445-12.16772A39.31056,39.31056,0,0,1,46.431,72.65332Z"/><path class="cls-2" d="M14.35967,120.37964a3.12376,3.12376,0,0,0,3.12885,3.43017c1.87695,0,2.65869-1.092,3.285-2.6521,3.285-8.57763,2.81714-17.623,1.56446-26.66943-1.09424-7.019-2.03235-13.88354-1.09424-21.05469A59.14042,59.14042,0,0,1,46.11944,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78271-2.18408-2.97351-2.65186-5.16424-1.24731A60.84242,60.84242,0,0,0,29.37823,38.49683,64.52224,64.52224,0,0,0,14.67144,78.26758c-.31177,7.64331,1.72284,15.1289,2.19073,22.6145.3125,4.99219.4679,9.98413-1.09423,14.97437C15.3,117.41626,14.82983,119.13159,14.35967,120.37964Z"/><path class="cls-2" d="M147.81145,102.28418v.00244a3.08448,3.08448,0,0,0-3.44116-2.9646,3.01965,3.01965,0,0,0-2.81653,3.27612c.15558,5.14844-.15618,10.1377-.31231,15.28589,0,2.3396,1.09424,3.58789,2.971,3.7439,1.87841,0,3.28729-1.24829,3.28729-3.58838,0-3.4314.46789-7.01929.3117-10.29517A31.74131,31.74131,0,0,0,147.81145,102.28418Z"/><path class="cls-2" d="M129.34966,138.7832c2.03522.31177,3.44348-.78027,3.755-3.11963a162.6075,162.6075,0,0,0,2.34717-27.91919,217.74443,217.74443,0,0,0-2.6587-34.62329c-2.0346-12.7915-7.51043-23.551-17.053-32.28637A46.09888,46.09888,0,0,0,105.571,33.66089a3.002,3.002,0,0,0-4.22516,1.092c-.93884,1.55981-.46869,3.27588,1.25189,4.36792a3.92179,3.92179,0,0,0,1.09424.62427c10.4837,6.39355,17.83551,15.283,21.279,27.13672,3.12885,11.38794,3.91077,23.083,4.22308,34.78051a167.16955,167.16955,0,0,1-2.34692,33.0647C126.53539,137.06714,127.47118,138.4707,129.34966,138.7832Z"/><path class="cls-2" d="M128.88177,36.469C115.89556,21.96338,99.46893,14.78955,79.91137,14.6333a64.56588,64.56588,0,0,0-25.34363,5.14844,3.233,3.233,0,0,0-2.03461,4.20947,3.15955,3.15955,0,0,0,4.38154,1.56006,60.109,60.109,0,0,1,28.63018-4.36816A57.799,57.799,0,0,1,120.58959,37.093c10.32434,9.82519,16.268,21.8352,18.30567,36.02807q1.16922,8.42505,1.876,16.84375c.4679,1.87159,1.72058,3.11988,3.44123,3.11988a3.18857,3.18857,0,0,0,2.97265-3.43238V88.56055c-.6242-5.92725-1.25055-11.853-2.19073-17.77881C142.962,57.67969,137.79876,46.13867,128.88177,36.469Z"/><path class="cls-2" d="M157.04247,67.03784q-9.38772-46.78967-54.91259-61.762A45.02188,45.02188,0,0,0,91.80236,3.0918c-1.8783-.156-3.12866.78051-3.28424,2.49585A2.8761,2.8761,0,0,0,91.02062,9.176c.62409.15551,1.25043.15551,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457A69.1805,69.1805,0,0,1,147.0288,54.56006a74.06052,74.06052,0,0,1,4.694,23.2395c.1554,2.3396,1.8783,3.7439,4.06677,3.11987,1.56446-.46777,2.34711-1.71631,2.1908-4.21191A41.34673,41.34673,0,0,0,157.04247,67.03784Z"/><path class="cls-2" d="M78.50457,145.02075a3.22325,3.22325,0,0,0-1.72266-4.21167,3.00909,3.00909,0,0,0-4.06695,1.87158L69.7127,150h6.85645Q77.59344,147.53321,78.50457,145.02075Z"/><path class="cls-2" d="M93.21142,139.87744a161.52283,161.52283,0,0,0,4.37921-21.68164,3.26475,3.26475,0,0,0-2.81482-3.43164,3.13267,3.13267,0,0,0-3.44342,2.80737,161.03368,161.03368,0,0,1-4.84949,22.928C85.57519,143.666,84.5014,146.833,83.38421,150h6.7409A104.796,104.796,0,0,0,93.21142,139.87744Z"/><path class="cls-2" d="M110.73223,106.03052A167.06829,167.06829,0,0,0,108.0736,76.395c-2.03461-11.07324-7.97833-18.87134-18.30566-22.77075v.00219a28.15763,28.15763,0,0,0-18.92914-.15625c-2.66077.78052-3.44348,3.58545-1.72058,5.30176,1.24981,1.248,2.5025,1.0918,3.91058.624a21.72717,21.72717,0,0,1,28.47247,16.84277,163.58646,163.58646,0,0,1,2.34693,17.31372,137.99558,137.99558,0,0,1-.15619,25.42139A148.68041,148.68041,0,0,1,96.95287,150H103.59A142.91971,142.91971,0,0,0,110.73223,106.03052Z"/><path class="cls-2" d="M85.23309,94.17212a114.49913,114.49913,0,0,0-2.1908-14.65942,3.09175,3.09175,0,0,0-3.59961-2.49585A3.03673,3.03673,0,0,0,77.09649,80.917a116.673,116.673,0,0,1,2.34619,18.24732,106.72018,106.72018,0,0,1-2.97253,31.50488c-.4679,2.02759.31176,3.7439,2.03442,4.21167,1.87695.468,3.44141-.624,4.06775-2.80811a109.18045,109.18045,0,0,0,3.12866-27.917A75.85951,75.85951,0,0,0,85.23309,94.17212Z"/><path class="cls-2" d="M78.50457,2A77.94379,77.94379,0,0,0,10.13445,45.04443a5.77193,5.77193,0,0,0-.624,2.18409,2.72441,2.72441,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71558v.00244A67.88222,67.88222,0,0,1,27.18743,31.63306C41.11156,16.81934,58.16448,9.02,78.663,8.39575c2.34717,0,3.75525-1.24829,3.75525-3.27588C82.416,3.0918,81.00787,2,78.50457,2Z"/><path class="cls-2" d="M4.97253,58.30615A79.56579,79.56579,0,0,0,2,80.45166a66.6041,66.6041,0,0,0,.31177,7.64307A76.27289,76.27289,0,0,0,5.91137,104.626a2.67956,2.67956,0,0,0,2.65869,2.02856c2.66095.15552,3.91284-1.87231,3.13092-4.68042a70.50594,70.50594,0,0,1-.62634-41.79858V60.178A3.312,3.312,0,0,0,8.8839,55.81055C7.16326,55.3418,5.59887,56.43384,4.97253,58.30615Z"/><path class="cls-2" d="M49.71832,148.14062a90.13545,90.13545,0,0,0,9.69891-29.791,108.40174,108.40174,0,0,0-.62409-32.59668h-.00232c-1.25054-7.48535-.3117-14.19141,4.85157-20.11963a2.80362,2.80362,0,0,0,.62426-1.40356c.15613-1.55982-.15637-2.80811-1.72058-3.43213a2.98078,2.98078,0,0,0-3.91137.93628c-5.63141,6.55151-7.66584,14.19531-6.41388,22.77319a143.776,143.776,0,0,1,1.87677,19.65112,84.89,84.89,0,0,1-1.87677,19.1836,87.66422,87.66422,0,0,1-7.822,21.36718,4.07726,4.07726,0,0,0-.78272,2.65186A2.99783,2.99783,0,0,0,45.91943,150h1.58313A3.59038,3.59038,0,0,0,49.71832,148.14062Z"/><path class="cls-2" d="M71.15051,82.94727v-.00245a11.40165,11.40165,0,0,1,0-5.61377,9.11078,9.11078,0,0,1,9.70123-6.55151c4.2229.15552,7.66638,3.27612,8.60217,7.95581A150.64126,150.64126,0,0,1,92.11486,105.25a3.12524,3.12524,0,0,0,3.12885,3.43237c1.879,0,2.97253-1.40356,3.12872-3.27612v-2.80811h.15631c-.3125-4.05542-.4679-8.11181-.93579-12.16528-.47022-4.05566-1.09656-8.11206-1.7229-12.16528A15.95811,15.95811,0,0,0,78.19079,64.5415c-8.13452.93653-14.70685,9.04761-13.454,17.002.62408,4.83593,1.40814,9.66967,1.876,14.50561a100.7663,100.7663,0,0,1-4.69312,39.77A111.03121,111.03121,0,0,1,55.976,149.85645c-.027.04711-.046.09594-.07068.14355h7.03808C72.84978,128.6665,75.08245,106.31982,71.15051,82.94727Z"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingerprint14.svg b/polkit-agent/assets/biowaiting/fingerprint14.svg
|
||
new file mode 100644
|
||
index 0000000..c3c6675
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingerprint14.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}</style></defs><g id="文字标注"><path class="cls-1" d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingerprint2.svg b/polkit-agent/assets/biowaiting/fingerprint2.svg
|
||
new file mode 100644
|
||
index 0000000..ce0a21b
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingerprint2.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g><path class="cls-2" d="M54.56775,19.78162A4.3956,4.3956,0,0,0,54.14148,20H106.447a67.23276,67.23276,0,0,0-26.53558-5.3667A64.57,64.57,0,0,0,54.56775,19.78162Z"/><path class="cls-2" d="M78.50458,2a77.85348,77.85348,0,0,0-36.29651,9.67188A78.8284,78.8284,0,0,0,29.98193,20H40.88556C51.89252,12.71936,64.44763,8.82861,78.663,8.39581c2.34717,0,3.75525-1.24823,3.75525-3.276C82.416,3.09192,81.00787,2,78.50458,2Z"/><path class="cls-2" d="M91.80237,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49579A2.876,2.876,0,0,0,91.02063,9.176c.62408.15564,1.25043.15564,1.72058.31176A71.20917,71.20917,0,0,1,119.1936,20h10.78968a87.41029,87.41029,0,0,0-27.8534-14.724A45.00584,45.00584,0,0,0,91.80237,3.09192Z"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingerprint3.svg b/polkit-agent/assets/biowaiting/fingerprint3.svg
|
||
new file mode 100644
|
||
index 0000000..3ff19ba
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingerprint3.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g><path class="cls-2" d="M42.51965,26.32928C40.848,27.471,39.24213,28.70074,37.69611,30h9.79473a2.9788,2.9788,0,0,0,.19306-2.4234C46.90118,25.3927,44.71039,24.92487,42.51965,26.32928Z"/><path class="cls-2" d="M92.89679,28.82489a45.9554,45.9554,0,0,0-13.1416-1.55981,34.70686,34.70686,0,0,0-9.69892.93573A58.17287,58.17287,0,0,0,62.98737,30H94.66962A3.4225,3.4225,0,0,0,92.89679,28.82489Z"/><path class="cls-2" d="M78.50458,2a77.85348,77.85348,0,0,0-36.29651,9.67188A76.9855,76.9855,0,0,0,20.00146,30h8.79C42.41681,16.25873,58.94067,8.99628,78.663,8.39581c2.34717,0,3.75525-1.24823,3.75525-3.276C82.416,3.09192,81.00787,2,78.50458,2Z"/><path class="cls-2" d="M79.91138,14.6333a64.57,64.57,0,0,0-25.34363,5.14832,3.23308,3.23308,0,0,0-2.03461,4.20953,3.15929,3.15929,0,0,0,4.38153,1.56A60.10983,60.10983,0,0,1,85.54486,21.183,57.00643,57.00643,0,0,1,111.48492,30h10.78821C110.467,19.8385,96.29218,14.7641,79.91138,14.6333Z"/><path class="cls-2" d="M102.12988,5.276A45.00584,45.00584,0,0,0,91.80237,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49579A2.876,2.876,0,0,0,91.02063,9.176c.62408.15564,1.25043.15564,1.72058.31176A70.54954,70.54954,0,0,1,131.26257,30H140.16Q126.19251,13.19439,102.12988,5.276Z"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingerprint4.svg b/polkit-agent/assets/biowaiting/fingerprint4.svg
|
||
new file mode 100644
|
||
index 0000000..c3c80d4
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingerprint4.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g><path class="cls-2" d="M105.571,33.661a3.00191,3.00191,0,0,0-4.22515,1.09192c-.93885,1.55981-.46869,3.276,1.25189,4.368a3.91989,3.91989,0,0,0,1.09424.62421c.136.08294.26544.17114.40039.25494h10.69751A44.31528,44.31528,0,0,0,105.571,33.661Z"/><path class="cls-2" d="M46.11945,31.47687A3.29681,3.29681,0,0,0,47.6839,27.5766c-.78272-2.1839-2.97351-2.65173-5.16425-1.24732A60.84768,60.84768,0,0,0,29.37823,38.49677c-.4038.49646-.78784,1.00042-1.17486,1.50323H36.4093A62.09994,62.09994,0,0,1,46.11945,31.47687Z"/><path class="cls-2" d="M78.663,8.39581c2.34717,0,3.75525-1.24823,3.75525-3.276C82.416,3.09192,81.00787,2,78.50458,2A77.81365,77.81365,0,0,0,12.93646,40h7.531a67.905,67.905,0,0,1,6.72-8.367C41.11157,16.81946,58.16449,9.0199,78.663,8.39581Z"/><path class="cls-2" d="M102.12988,5.276A45.00584,45.00584,0,0,0,91.80237,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49579A2.876,2.876,0,0,0,91.02063,9.176c.62408.15564,1.25043.15564,1.72058.31176a70.72949,70.72949,0,0,1,40.36347,22.457A73.76489,73.76489,0,0,1,139.47937,40h7.6394Q132.85458,15.39228,102.12988,5.276Z"/><path class="cls-2" d="M72.69672,40H87.29114c-1.08441-.17377-2.18378-.319-3.31073-.41132A44.76672,44.76672,0,0,0,72.69672,40Z"/><path class="cls-2" d="M128.88177,36.46906C115.89557,21.96338,99.46893,14.78943,79.91138,14.6333a64.57,64.57,0,0,0-25.34363,5.14832,3.23308,3.23308,0,0,0-2.03461,4.20953,3.15929,3.15929,0,0,0,4.38153,1.56A60.10983,60.10983,0,0,1,85.54486,21.183a57.79889,57.79889,0,0,1,35.04474,15.91c.99469.94659,1.9361,1.9198,2.84985,2.90692h8.46192Q130.46828,38.19624,128.88177,36.46906Z"/><path class="cls-2" d="M92.89679,28.82489a45.9554,45.9554,0,0,0-13.1416-1.55981,34.70686,34.70686,0,0,0-9.69892.93573A51.56847,51.56847,0,0,0,45.14117,40H55.8147a46.03094,46.03094,0,0,1,22.21991-6.49542,44.314,44.314,0,0,1,12.82983,1.24829,3.86144,3.86144,0,0,0,1.87677.15613,2.8594,2.8594,0,0,0,2.5025-2.80811A3.0393,3.0393,0,0,0,92.89679,28.82489Z"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingerprint5.svg b/polkit-agent/assets/biowaiting/fingerprint5.svg
|
||
new file mode 100644
|
||
index 0000000..fdec768
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingerprint5.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g><path class="cls-2" d="M52.70563,50H63.65228a33.76275,33.76275,0,0,1,22.83063-3.706A37.323,37.323,0,0,1,96.63849,50H107.6944a38.44086,38.44086,0,0,0-23.714-10.41138C71.70941,38.53613,61.22681,42.05127,52.70563,50Z"/><path class="cls-2" d="M15.61237,48.32043v.00232A67.882,67.882,0,0,1,27.18744,31.63306C41.11157,16.81946,58.16449,9.0199,78.663,8.39575c2.34717,0,3.75525-1.24817,3.75525-3.27588C82.416,3.09192,81.00787,2,78.50458,2A77.94379,77.94379,0,0,0,10.13446,45.04443a5.77132,5.77132,0,0,0-.624,2.18409A2.7058,2.7058,0,0,0,11.01868,50h3.1997A3.89256,3.89256,0,0,0,15.61237,48.32043Z"/><path class="cls-2" d="M29.84613,48.63428A58.71554,58.71554,0,0,1,46.11945,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78272-2.184-2.97351-2.65186-5.16425-1.24731A60.84289,60.84289,0,0,0,29.37823,38.49683,66.78172,66.78172,0,0,0,21.813,50H29.0545C29.31915,49.54492,29.56952,49.085,29.84613,48.63428Z"/><path class="cls-2" d="M92.89679,28.825a45.94691,45.94691,0,0,0-13.1416-1.55981,34.70234,34.70234,0,0,0-9.69892.93567A51.16784,51.16784,0,0,0,36.27124,50h7.79443a49.27766,49.27766,0,0,1,5.809-5.73364,45.38883,45.38883,0,0,1,28.16-10.76172,44.30568,44.30568,0,0,1,12.82983,1.24829,3.86211,3.86211,0,0,0,1.87677.156,2.85935,2.85935,0,0,0,2.5025-2.80811A3.03909,3.03909,0,0,0,92.89679,28.825Z"/><path class="cls-2" d="M102.12988,5.276A45.009,45.009,0,0,0,91.80237,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49573A2.876,2.876,0,0,0,91.02063,9.176c.62408.15564,1.25043.15564,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457A70.09713,70.09713,0,0,1,145.11847,50h6.87982Q138.76745,17.33435,102.12988,5.276Z"/><path class="cls-2" d="M115.74017,40.83472A46.09864,46.09864,0,0,0,105.571,33.66089a3.0019,3.0019,0,0,0-4.22515,1.092c-.93885,1.55981-.46869,3.27588,1.25189,4.36792a3.92165,3.92165,0,0,0,1.09424.62427A50.65843,50.65843,0,0,1,115.91486,50h7.85681A54.40942,54.40942,0,0,0,115.74017,40.83472Z"/><path class="cls-2" d="M128.88177,36.469C115.89557,21.96338,99.46893,14.78943,79.91138,14.6333a64.57,64.57,0,0,0-25.34363,5.14832,3.2331,3.2331,0,0,0-2.03461,4.20959,3.1594,3.1594,0,0,0,4.38153,1.55994,60.1104,60.1104,0,0,1,28.63019-4.368A57.799,57.799,0,0,1,120.5896,37.093,60.2336,60.2336,0,0,1,130.93127,50h7.43866A61.47308,61.47308,0,0,0,128.88177,36.469Z"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingerprint6.svg b/polkit-agent/assets/biowaiting/fingerprint6.svg
|
||
new file mode 100644
|
||
index 0000000..e682cb6
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingerprint6.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g><path class="cls-2" d="M27.18744,31.63306C41.11157,16.81946,58.16449,9.0199,78.663,8.39575c2.34717,0,3.75525-1.24817,3.75525-3.27588C82.416,3.09192,81.00787,2,78.50458,2A77.94379,77.94379,0,0,0,10.13446,45.04443a5.77132,5.77132,0,0,0-.624,2.18409,2.7244,2.7244,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71546v.00232A67.882,67.882,0,0,1,27.18744,31.63306Z"/><path class="cls-2" d="M79.91138,14.6333a64.57,64.57,0,0,0-25.34363,5.14832,3.2331,3.2331,0,0,0-2.03461,4.20959,3.1594,3.1594,0,0,0,4.38153,1.55994,60.1104,60.1104,0,0,1,28.63019-4.368A57.799,57.799,0,0,1,120.5896,37.093,58.88274,58.88274,0,0,1,135.65485,60h6.82385a61.76983,61.76983,0,0,0-13.59693-23.531C115.89557,21.96338,99.46893,14.78943,79.91138,14.6333Z"/><path class="cls-2" d="M89.76794,53.62427v.00219a28.1576,28.1576,0,0,0-18.92913-.15625c-2.66077.78052-3.44349,3.58558-1.72058,5.30176,1.24981,1.248,2.5025,1.09192,3.91058.624A22.13267,22.13267,0,0,1,88.68811,60H99.93243A28.63882,28.63882,0,0,0,89.76794,53.62427Z"/><path class="cls-2" d="M8.88391,55.81055c-1.72064-.46875-3.285.62329-3.91138,2.4956C4.81232,58.87061,4.67078,59.4353,4.52411,60H11.1134A3.28977,3.28977,0,0,0,8.88391,55.81055Z"/><path class="cls-2" d="M29.84613,48.63428A58.71554,58.71554,0,0,1,46.11945,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78272-2.184-2.97351-2.65186-5.16425-1.24731A60.84289,60.84289,0,0,0,29.37823,38.49683,64.50631,64.50631,0,0,0,17.69727,60h6.65606A62.03815,62.03815,0,0,1,29.84613,48.63428Z"/><path class="cls-2" d="M102.12988,5.276A45.009,45.009,0,0,0,91.80237,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49573A2.876,2.876,0,0,0,91.02063,9.176c.62408.15564,1.25043.15564,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457,69.1805,69.1805,0,0,1,13.92413,22.61524Q148.0401,57.24658,148.83527,60h6.53057Q144.12574,19.09863,102.12988,5.276Z"/><path class="cls-2" d="M115.74017,40.83472A46.09864,46.09864,0,0,0,105.571,33.66089a3.0019,3.0019,0,0,0-4.22515,1.092c-.93885,1.55981-.46869,3.27588,1.25189,4.36792a3.92165,3.92165,0,0,0,1.09424.62427A46.95911,46.95911,0,0,1,122.37378,60h6.80768A52.617,52.617,0,0,0,115.74017,40.83472Z"/><path class="cls-2" d="M112.14038,58.9281c1.09424-1.40442.93884-2.80823-.31158-4.52429-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519C69.42993,38.34058,57.38257,43.489,48.15387,54.8717A41.09643,41.09643,0,0,0,44.60156,60h7.54022c7.67536-10.36462,21.2165-16.34607,34.34113-13.706a35.2907,35.2907,0,0,1,20.18243,11.85376,8.899,8.899,0,0,0,1.72,1.71618A2.60451,2.60451,0,0,0,108.74268,60h1.75146A3.53427,3.53427,0,0,0,112.14038,58.9281Z"/><path class="cls-2" d="M49.87463,44.26636a45.38883,45.38883,0,0,1,28.16-10.76172,44.30568,44.30568,0,0,1,12.82983,1.24829,3.86211,3.86211,0,0,0,1.87677.156,2.85935,2.85935,0,0,0,2.5025-2.80811A3.03909,3.03909,0,0,0,92.89679,28.825a45.94691,45.94691,0,0,0-13.1416-1.55981,34.70234,34.70234,0,0,0-9.69892.93567c-15.801,2.96423-27.8482,11.54431-36.14111,25.42346A52.36716,52.36716,0,0,0,30.74011,60h6.81983A45.95626,45.95626,0,0,1,49.87463,44.26636Z"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingerprint7.svg b/polkit-agent/assets/biowaiting/fingerprint7.svg
|
||
new file mode 100644
|
||
index 0000000..b63d893
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingerprint7.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g><path class="cls-2" d="M27.18744,31.63306C41.11157,16.81946,58.16449,9.0199,78.663,8.39575c2.34717,0,3.75525-1.24817,3.75525-3.27588C82.416,3.09192,81.00787,2,78.50458,2A77.94379,77.94379,0,0,0,10.13446,45.04443a5.77132,5.77132,0,0,0-.624,2.18409,2.7244,2.7244,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71546v.00232A67.882,67.882,0,0,1,27.18744,31.63306Z"/><path class="cls-2" d="M21.24377,73.43372A59.1404,59.1404,0,0,1,46.11945,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78272-2.184-2.97351-2.65186-5.16425-1.24731A60.84289,60.84289,0,0,0,29.37823,38.49683,64.52222,64.52222,0,0,0,14.67145,78.26746c-.02362.579-.01044,1.15539-.00885,1.73254h6.21386A47.4584,47.4584,0,0,1,21.24377,73.43372Z"/><path class="cls-2" d="M11.07465,60.178a3.312,3.312,0,0,0-2.19074-4.36743c-1.72064-.46875-3.285.62329-3.91138,2.4956A79.36971,79.36971,0,0,0,2.0069,80H8.22131a70.73238,70.73238,0,0,1,2.85334-19.82446Z"/><path class="cls-2" d="M62.54608,60.79761a2.98066,2.98066,0,0,0-3.91138.93628A26.8757,26.8757,0,0,0,51.871,80h6.43A21.1615,21.1615,0,0,1,63.6424,65.63342a2.80487,2.80487,0,0,0,.62426-1.40368C64.42279,62.66992,64.11029,61.42163,62.54608,60.79761Z"/><path class="cls-2" d="M157.04248,67.03784Q147.65476,20.24817,102.12988,5.276A45.009,45.009,0,0,0,91.80237,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49573A2.876,2.876,0,0,0,91.02063,9.176c.62408.15564,1.25043.15564,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457,69.1805,69.1805,0,0,1,13.92413,22.61524,74.06108,74.06108,0,0,1,4.694,23.2395A3.86858,3.86858,0,0,0,152.52161,80h4.71673a4.58878,4.58878,0,0,0,.74207-3.29248A41.3474,41.3474,0,0,0,157.04248,67.03784Z"/><path class="cls-2" d="M128.88177,36.469C115.89557,21.96338,99.46893,14.78943,79.91138,14.6333a64.57,64.57,0,0,0-25.34363,5.14832,3.2331,3.2331,0,0,0-2.03461,4.20959,3.1594,3.1594,0,0,0,4.38153,1.55994,60.1104,60.1104,0,0,1,28.63019-4.368A57.799,57.799,0,0,1,120.5896,37.093c10.32434,9.82519,16.268,21.83508,18.30566,36.0282.3183,2.29333.60431,4.58618.87134,6.87878h6.47894c-.36224-3.07288-.76367-6.14563-1.25116-9.21826C142.962,57.67981,137.79877,46.13867,128.88177,36.469Z"/><path class="cls-2" d="M78.1908,64.5415c-7.60834.876-13.847,8.02832-13.59766,15.4585h6.20538a7.61429,7.61429,0,0,1,.352-2.66907,9.1107,9.1107,0,0,1,9.70124-6.55139c4.2229.15552,7.66638,3.27612,8.60217,7.95581.08295.42066.1535.84326.23212,1.26465h6.45031q-.13311-.86626-.26629-1.73254A15.95811,15.95811,0,0,0,78.1908,64.5415Z"/><path class="cls-2" d="M121.05963,78.26746A60.2951,60.2951,0,0,0,118.555,67.19324a3.10565,3.10565,0,0,0-3.91137-2.02771,2.97016,2.97016,0,0,0-2.03229,3.9A103.82461,103.82461,0,0,1,114.87317,80h6.44037C121.22894,79.42236,121.14935,78.844,121.05963,78.26746Z"/><path class="cls-2" d="M86.48291,46.294a35.2907,35.2907,0,0,1,20.18243,11.85376,8.899,8.899,0,0,0,1.72,1.71618,3.1924,3.1924,0,0,0,3.75507-.93579c1.09424-1.40442.93884-2.80823-.31158-4.52429-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519C69.42993,38.34058,57.38257,43.489,48.15387,54.8717A38.07922,38.07922,0,0,0,39.44556,80H45.8092a39.08563,39.08563,0,0,1,.62177-7.34668C50.03,55.02808,68.64819,42.70654,86.48291,46.294Z"/><path class="cls-2" d="M132.79315,73.12122c-2.03461-12.79175-7.51044-23.55115-17.053-32.2865A46.09864,46.09864,0,0,0,105.571,33.66089a3.0019,3.0019,0,0,0-4.22515,1.092c-.93885,1.55981-.46869,3.27588,1.25189,4.36792a3.92165,3.92165,0,0,0,1.09424.62427c10.4837,6.39355,17.83551,15.283,21.279,27.13659A103.2,103.2,0,0,1,127.62378,80H133.759C133.46936,77.69324,133.15253,75.40161,132.79315,73.12122Z"/><path class="cls-2" d="M108.07361,76.39514c-2.03461-11.07348-7.97833-18.87146-18.30567-22.77087v.00219a28.1576,28.1576,0,0,0-18.92913-.15625c-2.66077.78052-3.44349,3.58558-1.72058,5.30176,1.24981,1.248,2.5025,1.09192,3.91058.624a21.72724,21.72724,0,0,1,28.47247,16.84277c.23816,1.25378.45477,2.50757.66333,3.76123H108.678Q108.39414,78.19642,108.07361,76.39514Z"/><path class="cls-2" d="M92.89679,28.825a45.94691,45.94691,0,0,0-13.1416-1.55981,34.70234,34.70234,0,0,0-9.69892.93567c-15.801,2.96423-27.8482,11.54431-36.14111,25.42346A49.96274,49.96274,0,0,0,26.92523,80h6.24695a39.78137,39.78137,0,0,1,.11737-4.54065,45.82518,45.82518,0,0,1,16.58508-31.193,45.38883,45.38883,0,0,1,28.16-10.76172,44.30568,44.30568,0,0,1,12.82983,1.24829,3.86211,3.86211,0,0,0,1.87677.156,2.85935,2.85935,0,0,0,2.5025-2.80811A3.03909,3.03909,0,0,0,92.89679,28.825Z"/><path class="cls-2" d="M83.0423,79.5127a3.09175,3.09175,0,0,0-3.59961-2.49585A2.99226,2.99226,0,0,0,76.99078,80h6.15058C83.10565,79.83765,83.079,79.67505,83.0423,79.5127Z"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingerprint8.svg b/polkit-agent/assets/biowaiting/fingerprint8.svg
|
||
new file mode 100644
|
||
index 0000000..a9023c0
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingerprint8.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00927,3.00927,0,0,0-4.06695,1.87157l-4.2231,10.29593a2.95177,2.95177,0,0,0,2.34692,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35322-4.96514,4.2252-10.13749a3.22338,3.22338,0,0,0-1.72268-4.21179Zm71.02957-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28729-1.24829,3.28729-3.58851,0-3.43141.4679-7.01916.31174-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99057,121.93748a3.19812,3.19812,0,0,0-3.91136,2.18407c-.31251.7804-.4679,1.71618-.7825,2.49562a101.9769,101.9769,0,0,1-5.00714,12.01c-1.09424,2.34022.1554,4.67969,2.66078,4.67969,1.40827.15616,2.34636-.77963,2.9727-2.02772a81.29627,81.29627,0,0,0,6.09985-15.4437,3.02989,3.02989,0,0,0-2.03233-3.898Zm51.78526-7.17321a3.1326,3.1326,0,0,0-3.44347,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25192,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.62684,5.62684,0,0,0,1.25041-2.33946,128.60675,128.60675,0,0,0,4.85174-14.97123,161.5315,161.5315,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07465,60.17791a3.312,3.312,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91135,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.131-4.68045a70.50518,70.50518,0,0,1-.62634-41.79842ZM85.701,104.15584a75.86247,75.86247,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09173,3.09173,0,0,0-3.59961-2.49581,3.03667,3.03667,0,0,0-2.34618,3.90025,116.66849,116.66849,0,0,1,2.34618,18.24725,106.72223,106.72223,0,0,1-2.97253,31.50478c-.46789,2.02773.31175,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.17988,109.17988,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44042,19.02707,4.067,28.85281a155.422,155.422,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.0352,4.2118a3.1298,3.1298,0,0,0,4.06695-2.65178,158.74245,158.74245,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61236,48.32272A67.88326,67.88326,0,0,1,27.18743,31.633C41.11154,16.81945,58.16451,9.0199,78.663,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00788,2,78.50459,2A77.9438,77.9438,0,0,0,10.13446,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72437,2.72437,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79085,85.753c-1.25058-7.48553-.31174-14.19161,4.85155-20.11959a2.80489,2.80489,0,0,0,.62425-1.40368c.15616-1.55983-.15634-2.80812-1.72059-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63138,6.55146-7.66581,14.19542-6.41389,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.8888,84.8888,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07666,4.07666,0,0,0-.78269,2.652,2.99416,2.99416,0,0,0,2.34693,2.652c1.72078.31173,2.815-.31251,3.75521-1.87234a90.1349,90.1349,0,0,0,9.6989-29.79089A108.40061,108.40061,0,0,0,58.79314,85.753ZM22.338,94.48834c-1.09424-7.01916-2.03234-13.88368-1.09424-21.05461A59.14015,59.14015,0,0,1,46.11943,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97347-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37821,38.49678a64.52309,64.52309,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72288,15.12892,2.19078,22.61463.3125,4.99219.4679,9.98419-1.09425,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87694,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81712-17.6232,1.56443-26.66951ZM157.04249,67.03786Q147.65476,20.2483,102.1299,5.276A45.00768,45.00768,0,0,0,91.80236,3.09194c-1.87827-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.25041.15558,1.72059.31175a70.72962,70.72962,0,0,1,40.36348,22.45694A69.18273,69.18273,0,0,1,147.0288,54.56015a74.061,74.061,0,0,1,4.69406,23.23944c.15538,2.33946,1.87825,3.7439,4.06675,3.11986,1.56443-.4679,2.34712-1.71618,2.19076-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09794,46.09794,0,0,0-10.16909-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25194,4.368a3.91739,3.91739,0,0,0,1.09424.62422c10.48369,6.3936,17.83547,15.283,21.27894,27.13666,3.12886,11.38806,3.91079,23.08329,4.22309,34.7806a167.16817,167.16817,0,0,1-2.34693,33.06462c-.31174,2.34023.62405,3.7439,2.50252,4.0564,2.0352.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.742,217.742,0,0,0-2.65868-34.62312c-2.03462-12.79173-7.51042-23.55117-17.053-32.2865ZM89.76793,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66076.78037-3.44345,3.58546-1.72059,5.30163C70.368,60.02,71.62072,59.86389,73.0288,59.396a21.72731,21.72731,0,0,1,28.47247,16.8428,163.579,163.579,0,0,1,2.34692,17.31375A137.99692,137.99692,0,0,1,103.692,118.974a149.65137,149.65137,0,0,1-7.04023,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.44271-2.34022,143.91473,143.91473,0,0,0,8.13446-46.946,167.06542,167.06542,0,0,0-2.65866-29.6353c-2.03463-11.07347-7.97832-18.87149-18.30567-22.77079ZM46.431,72.65334C50.03,55.02805,68.6482,42.7065,86.48291,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55045-1.2481-26.59781,3.90025-35.82653,15.283A38.57474,38.57474,0,0,0,39.861,85.4407c.7804,5.30373,1.72078,10.45208,1.72078,15.75372,0,3.74391,0,7.488-.31175,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31083,39.31083,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03234-13.10195-7.19563-24.64312-16.1126-34.31273C115.89556,21.96341,99.46893,14.78945,79.91135,14.63329a64.57055,64.57055,0,0,0-25.3436,5.14835,3.23306,3.23306,0,0,0-2.03462,4.20951,3.15933,3.15933,0,0,0,4.38155,1.56A60.10931,60.10931,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04478,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15053,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63952,150.63952,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12886,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.9358-12.16521-.47019-4.05565-1.09654-8.11206-1.72288-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13447.93654-14.7068,9.04763-13.45392,17.002.624,4.83584,1.40808,9.6696,1.876,14.50563a100.76542,100.76542,0,0,1-4.6931,39.77,111.03563,111.03563,0,0,1-5.9437,14.03754,3.0595,3.0595,0,0,0,.15616,3.43236,2.8478,2.8478,0,0,0,2.97252,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15053,82.94717ZM34.38591,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82536,45.82536,0,0,1,49.87464,44.26631a45.38952,45.38952,0,0,1,28.16-10.76171,44.31362,44.31362,0,0,1,12.82986,1.24828,3.86111,3.86111,0,0,0,1.87675.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.95556,45.95556,0,0,0-13.14161-1.55984,34.70559,34.70559,0,0,0-9.69889.93577C54.25524,31.16513,42.20807,39.74505,33.91516,53.62436a50.635,50.635,0,0,0-6.56928,32.59653c.4679,4.36814,1.40808,8.57995,1.71983,12.94809.62405,10.75944-.78175,21.20867-5.6312,30.87827a3.03318,3.03318,0,0,0-.47018,2.02771,2.8529,2.8529,0,0,0,2.65867,2.652,3.38107,3.38107,0,0,0,3.44271-2.02772c6.57-12.9458,7.51022-26.98125,5.3202-41.17439Zm0,0"/></g><path class="cls-2" d="M78.50457,2A77.94379,77.94379,0,0,0,10.13445,45.04443a5.77132,5.77132,0,0,0-.624,2.18409,2.72441,2.72441,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71546v.00232A67.88222,67.88222,0,0,1,27.18743,31.63306C41.11156,16.81946,58.16448,9.0199,78.663,8.39575c2.34717,0,3.75525-1.24817,3.75525-3.27588C82.416,3.09192,81.00787,2,78.50457,2Z"/><path class="cls-2" d="M138.89526,73.12122q1.16922,8.42468,1.876,16.84375c.4679,1.87158,1.72058,3.11975,3.44123,3.11975a3.1886,3.1886,0,0,0,2.97265-3.43225V88.56055c-.6242-5.92725-1.25055-11.853-2.19073-17.77881C142.962,57.67981,137.79876,46.13867,128.88177,36.469,115.89556,21.96338,99.46893,14.78943,79.91137,14.6333a64.57,64.57,0,0,0-25.34363,5.14832,3.2331,3.2331,0,0,0-2.03461,4.20959,3.15941,3.15941,0,0,0,4.38154,1.55994,60.11034,60.11034,0,0,1,28.63018-4.368A57.799,57.799,0,0,1,120.58959,37.093C130.91393,46.91821,136.8576,58.9281,138.89526,73.12122Z"/><path class="cls-2" d="M92.89678,28.825a45.94687,45.94687,0,0,0-13.1416-1.55981,34.70227,34.70227,0,0,0-9.69891.93567C54.25524,31.165,42.20806,39.74512,33.91515,53.62427A50.63525,50.63525,0,0,0,27.34588,86.221c.46789,4.368,1.40808,8.57983,1.71985,12.948.01611.27758.025.554.03833.83105h6.19269q-.25169-4.22094-.91083-8.47522c-.78253-5.30383-1.565-10.76379-1.09638-16.06543a45.82519,45.82519,0,0,1,16.58509-31.193,45.3888,45.3888,0,0,1,28.16-10.76172,44.30565,44.30565,0,0,1,12.82983,1.24829,3.86211,3.86211,0,0,0,1.87677.156,2.85936,2.85936,0,0,0,2.50251-2.80811A3.0391,3.0391,0,0,0,92.89678,28.825Z"/><path class="cls-2" d="M86.4829,46.294a35.29073,35.29073,0,0,1,20.18244,11.85376,8.89847,8.89847,0,0,0,1.72,1.71618,3.19239,3.19239,0,0,0,3.75506-.93579c1.09424-1.40442.93885-2.80823-.31158-4.52429-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519C69.42992,38.34058,57.38256,43.489,48.15386,54.8717a38.57458,38.57458,0,0,0-8.29291,30.569A121.534,121.534,0,0,1,41.55645,100h6.37079q-.12268-3.84779-.55585-7.69556c-.47021-4.21179-1.87829-8.26745-1.56445-12.16772a39.31138,39.31138,0,0,1,.624-7.4834C50.03,55.02808,68.64819,42.70654,86.4829,46.294Z"/><path class="cls-2" d="M11.07464,60.17554V60.178A3.312,3.312,0,0,0,8.8839,55.81055c-1.72064-.46875-3.285.62329-3.91137,2.4956A79.56615,79.56615,0,0,0,2,80.45154a66.60613,66.60613,0,0,0,.31177,7.64319A80.489,80.489,0,0,0,4.508,100h6.60614A70.25859,70.25859,0,0,1,11.07464,60.17554Z"/><path class="cls-2" d="M58.79314,85.75293h-.00232c-1.25054-7.48547-.3117-14.19153,4.85157-20.11951a2.80487,2.80487,0,0,0,.62426-1.40368c.15613-1.55982-.15637-2.80811-1.72058-3.43213a2.98064,2.98064,0,0,0-3.91137.93628c-5.63141,6.55151-7.66584,14.19543-6.41388,22.77319A146.55217,146.55217,0,0,1,53.92071,100h6.34271A105.137,105.137,0,0,0,58.79314,85.75293Z"/><path class="cls-2" d="M95.87005,78.26746a15.95811,15.95811,0,0,0-17.67926-13.726c-8.13452.93653-14.70685,9.04761-13.454,17.002.62408,4.83593,1.40814,9.66967,1.876,14.50561.09155,1.32031.15576,2.6366.20489,3.95093h6.08338a130.92316,130.92316,0,0,0-1.75061-17.05286v-.00232a11.40213,11.40213,0,0,1,0-5.61389,9.11068,9.11068,0,0,1,9.70123-6.55139c4.2229.15552,7.66638,3.27612,8.60217,7.95581A144.72222,144.72222,0,0,1,91.93957,100H98.3474c-.20983-3.1897-.38647-6.37939-.75445-9.56714C97.12273,86.3772,96.49639,82.3208,95.87005,78.26746Z"/><path class="cls-2" d="M121.05962,78.26746A60.29592,60.29592,0,0,0,118.555,67.19324a3.10566,3.10566,0,0,0-3.91138-2.02771,2.97017,2.97017,0,0,0-2.03229,3.9c2.5025,9.35962,3.44037,19.0271,4.067,28.85291.03375.69507.05664,1.38818.08105,2.08154h6.30756A167.10732,167.10732,0,0,0,121.05962,78.26746Z"/><path class="cls-2" d="M144.37029,99.322a3.09491,3.09491,0,0,0-1.71808.678h4.02131A3.14786,3.14786,0,0,0,144.37029,99.322Z"/><path class="cls-2" d="M157.04247,67.03784Q147.65475,20.24817,102.12988,5.276A45.0092,45.0092,0,0,0,91.80236,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49573A2.876,2.876,0,0,0,91.02062,9.176c.62409.15564,1.25043.15564,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457A69.1805,69.1805,0,0,1,147.0288,54.56006a74.06052,74.06052,0,0,1,4.694,23.2395c.1554,2.33948,1.8783,3.7439,4.06677,3.11987,1.56446-.46789,2.34711-1.71618,2.1908-4.21191A41.3474,41.3474,0,0,0,157.04247,67.03784Z"/><path class="cls-2" d="M132.79314,73.12122c-2.0346-12.79175-7.51043-23.55115-17.053-32.2865A46.09888,46.09888,0,0,0,105.571,33.66089a3.00191,3.00191,0,0,0-4.22516,1.092c-.93884,1.55981-.46869,3.27588,1.25189,4.36792a3.92179,3.92179,0,0,0,1.09424.62427c10.4837,6.39355,17.83551,15.283,21.279,27.13659C127.95159,77.73022,128.796,88.85767,129.14,100h6.18017A214.67391,214.67391,0,0,0,132.79314,73.12122Z"/><path class="cls-2" d="M22.338,94.48828c-1.09424-7.019-2.03235-13.88354-1.09424-21.05456A59.14035,59.14035,0,0,1,46.11944,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78271-2.184-2.97351-2.65186-5.16424-1.24731A60.84242,60.84242,0,0,0,29.37823,38.49683,64.52217,64.52217,0,0,0,14.67144,78.26746c-.2995,7.34326,1.553,14.54065,2.11493,21.73254h6.19012C22.81164,98.16528,22.59258,96.3269,22.338,94.48828Z"/><path class="cls-2" d="M85.23309,94.17212a114.49913,114.49913,0,0,0-2.1908-14.65942,3.09175,3.09175,0,0,0-3.59961-2.49585,3.03675,3.03675,0,0,0-2.34619,3.90026,116.66963,116.66963,0,0,1,2.34619,18.2472c.01233.27868.01379.55713.02435.83569h6.19886C85.57342,98.13928,85.40807,96.18628,85.23309,94.17212Z"/><path class="cls-2" d="M108.0736,76.39514c-2.03461-11.07348-7.97833-18.87146-18.30566-22.77087v.00219a28.15763,28.15763,0,0,0-18.92914-.15625c-2.66077.78052-3.44348,3.58558-1.72058,5.30176,1.24981,1.248,2.5025,1.09192,3.91058.624a21.72724,21.72724,0,0,1,28.47247,16.84277,163.59068,163.59068,0,0,1,2.34693,17.31372q.29818,3.2113.41839,6.44751h6.34656A168.52224,168.52224,0,0,0,108.0736,76.39514Z"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingerprint9.svg b/polkit-agent/assets/biowaiting/fingerprint9.svg
|
||
new file mode 100644
|
||
index 0000000..4c0be88
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingerprint9.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00927,3.00927,0,0,0-4.06695,1.87157l-4.2231,10.29593a2.95177,2.95177,0,0,0,2.34692,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35322-4.96514,4.2252-10.13749a3.22338,3.22338,0,0,0-1.72268-4.21179Zm71.02957-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28729-1.24829,3.28729-3.58851,0-3.43141.4679-7.01916.31174-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99057,121.93748a3.19812,3.19812,0,0,0-3.91136,2.18407c-.31251.7804-.4679,1.71618-.7825,2.49562a101.9769,101.9769,0,0,1-5.00714,12.01c-1.09424,2.34022.1554,4.67969,2.66078,4.67969,1.40827.15616,2.34636-.77963,2.9727-2.02772a81.29627,81.29627,0,0,0,6.09985-15.4437,3.02989,3.02989,0,0,0-2.03233-3.898Zm51.78526-7.17321a3.1326,3.1326,0,0,0-3.44347,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25192,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.62684,5.62684,0,0,0,1.25041-2.33946,128.60675,128.60675,0,0,0,4.85174-14.97123,161.5315,161.5315,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07465,60.17791a3.312,3.312,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91135,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.131-4.68045a70.50518,70.50518,0,0,1-.62634-41.79842ZM85.701,104.15584a75.86247,75.86247,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09173,3.09173,0,0,0-3.59961-2.49581,3.03667,3.03667,0,0,0-2.34618,3.90025,116.66849,116.66849,0,0,1,2.34618,18.24725,106.72223,106.72223,0,0,1-2.97253,31.50478c-.46789,2.02773.31175,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.17988,109.17988,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44042,19.02707,4.067,28.85281a155.422,155.422,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.0352,4.2118a3.1298,3.1298,0,0,0,4.06695-2.65178,158.74245,158.74245,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61236,48.32272A67.88326,67.88326,0,0,1,27.18743,31.633C41.11154,16.81945,58.16451,9.0199,78.663,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00788,2,78.50459,2A77.9438,77.9438,0,0,0,10.13446,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72437,2.72437,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79085,85.753c-1.25058-7.48553-.31174-14.19161,4.85155-20.11959a2.80489,2.80489,0,0,0,.62425-1.40368c.15616-1.55983-.15634-2.80812-1.72059-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63138,6.55146-7.66581,14.19542-6.41389,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.8888,84.8888,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07666,4.07666,0,0,0-.78269,2.652,2.99416,2.99416,0,0,0,2.34693,2.652c1.72078.31173,2.815-.31251,3.75521-1.87234a90.1349,90.1349,0,0,0,9.6989-29.79089A108.40061,108.40061,0,0,0,58.79314,85.753ZM22.338,94.48834c-1.09424-7.01916-2.03234-13.88368-1.09424-21.05461A59.14015,59.14015,0,0,1,46.11943,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97347-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37821,38.49678a64.52309,64.52309,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72288,15.12892,2.19078,22.61463.3125,4.99219.4679,9.98419-1.09425,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87694,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81712-17.6232,1.56443-26.66951ZM157.04249,67.03786Q147.65476,20.2483,102.1299,5.276A45.00768,45.00768,0,0,0,91.80236,3.09194c-1.87827-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.25041.15558,1.72059.31175a70.72962,70.72962,0,0,1,40.36348,22.45694A69.18273,69.18273,0,0,1,147.0288,54.56015a74.061,74.061,0,0,1,4.69406,23.23944c.15538,2.33946,1.87825,3.7439,4.06675,3.11986,1.56443-.4679,2.34712-1.71618,2.19076-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09794,46.09794,0,0,0-10.16909-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25194,4.368a3.91739,3.91739,0,0,0,1.09424.62422c10.48369,6.3936,17.83547,15.283,21.27894,27.13666,3.12886,11.38806,3.91079,23.08329,4.22309,34.7806a167.16817,167.16817,0,0,1-2.34693,33.06462c-.31174,2.34023.62405,3.7439,2.50252,4.0564,2.0352.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.742,217.742,0,0,0-2.65868-34.62312c-2.03462-12.79173-7.51042-23.55117-17.053-32.2865ZM89.76793,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66076.78037-3.44345,3.58546-1.72059,5.30163C70.368,60.02,71.62072,59.86389,73.0288,59.396a21.72731,21.72731,0,0,1,28.47247,16.8428,163.579,163.579,0,0,1,2.34692,17.31375A137.99692,137.99692,0,0,1,103.692,118.974a149.65137,149.65137,0,0,1-7.04023,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.44271-2.34022,143.91473,143.91473,0,0,0,8.13446-46.946,167.06542,167.06542,0,0,0-2.65866-29.6353c-2.03463-11.07347-7.97832-18.87149-18.30567-22.77079ZM46.431,72.65334C50.03,55.02805,68.6482,42.7065,86.48291,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55045-1.2481-26.59781,3.90025-35.82653,15.283A38.57474,38.57474,0,0,0,39.861,85.4407c.7804,5.30373,1.72078,10.45208,1.72078,15.75372,0,3.74391,0,7.488-.31175,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31083,39.31083,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03234-13.10195-7.19563-24.64312-16.1126-34.31273C115.89556,21.96341,99.46893,14.78945,79.91135,14.63329a64.57055,64.57055,0,0,0-25.3436,5.14835,3.23306,3.23306,0,0,0-2.03462,4.20951,3.15933,3.15933,0,0,0,4.38155,1.56A60.10931,60.10931,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04478,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15053,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63952,150.63952,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12886,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.9358-12.16521-.47019-4.05565-1.09654-8.11206-1.72288-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13447.93654-14.7068,9.04763-13.45392,17.002.624,4.83584,1.40808,9.6696,1.876,14.50563a100.76542,100.76542,0,0,1-4.6931,39.77,111.03563,111.03563,0,0,1-5.9437,14.03754,3.0595,3.0595,0,0,0,.15616,3.43236,2.8478,2.8478,0,0,0,2.97252,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15053,82.94717ZM34.38591,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82536,45.82536,0,0,1,49.87464,44.26631a45.38952,45.38952,0,0,1,28.16-10.76171,44.31362,44.31362,0,0,1,12.82986,1.24828,3.86111,3.86111,0,0,0,1.87675.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.95556,45.95556,0,0,0-13.14161-1.55984,34.70559,34.70559,0,0,0-9.69889.93577C54.25524,31.16513,42.20807,39.74505,33.91516,53.62436a50.635,50.635,0,0,0-6.56928,32.59653c.4679,4.36814,1.40808,8.57995,1.71983,12.94809.62405,10.75944-.78175,21.20867-5.6312,30.87827a3.03318,3.03318,0,0,0-.47018,2.02771,2.8529,2.8529,0,0,0,2.65867,2.652,3.38107,3.38107,0,0,0,3.44271-2.02772c6.57-12.9458,7.51022-26.98125,5.3202-41.17439Zm0,0"/></g><path class="cls-2" d="M62.54607,60.79761a2.98064,2.98064,0,0,0-3.91137.93628c-5.63141,6.55151-7.66584,14.19543-6.41388,22.77319a143.776,143.776,0,0,1,1.87677,19.65112q0,2.96339-.14044,5.8418h6.22674a106.70743,106.70743,0,0,0-1.39075-24.24707h-.00232c-1.25054-7.48547-.3117-14.19153,4.85157-20.11951a2.80487,2.80487,0,0,0,.62426-1.40368C64.42278,62.66992,64.11028,61.42163,62.54607,60.79761Z"/><path class="cls-2" d="M86.4829,46.294a35.29073,35.29073,0,0,1,20.18244,11.85376,8.89847,8.89847,0,0,0,1.72,1.71618,3.19239,3.19239,0,0,0,3.75506-.93579c1.09424-1.40442.93885-2.80823-.31158-4.52429-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519C69.42992,38.34058,57.38256,43.489,48.15386,54.8717a38.57458,38.57458,0,0,0-8.29291,30.569c.7804,5.30371,1.72077,10.45215,1.72077,15.75367,0,2.96252-.00678,5.92163-.16126,8.80566h6.32941a99.29774,99.29774,0,0,0-.37848-17.69556c-.47021-4.21179-1.87829-8.26745-1.56445-12.16772a39.31138,39.31138,0,0,1,.624-7.4834C50.03,55.02808,68.64819,42.70654,86.4829,46.294Z"/><path class="cls-2" d="M35.25219,110a81.58384,81.58384,0,0,0-.86627-18.47522c-.78253-5.30383-1.565-10.76379-1.09638-16.06543a45.82519,45.82519,0,0,1,16.58509-31.193,45.3888,45.3888,0,0,1,28.16-10.76172,44.30565,44.30565,0,0,1,12.82983,1.24829,3.86211,3.86211,0,0,0,1.87677.156,2.85936,2.85936,0,0,0,2.50251-2.80811A3.0391,3.0391,0,0,0,92.89678,28.825a45.94687,45.94687,0,0,0-13.1416-1.55981,34.70227,34.70227,0,0,0-9.69891.93567C54.25524,31.165,42.20806,39.74512,33.91515,53.62427A50.63525,50.63525,0,0,0,27.34588,86.221c.46789,4.368,1.40808,8.57983,1.71985,12.948A74.7003,74.7003,0,0,1,28.93688,110Z"/><path class="cls-2" d="M78.50457,2A77.94379,77.94379,0,0,0,10.13445,45.04443a5.77132,5.77132,0,0,0-.624,2.18409,2.72441,2.72441,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71546v.00232A67.88222,67.88222,0,0,1,27.18743,31.63306C41.11156,16.81946,58.16448,9.0199,78.663,8.39575c2.34717,0,3.75525-1.24817,3.75525-3.27588C82.416,3.09192,81.00787,2,78.50457,2Z"/><path class="cls-2" d="M54.56774,19.78162a3.2331,3.2331,0,0,0-2.03461,4.20959,3.15941,3.15941,0,0,0,4.38154,1.55994,60.11034,60.11034,0,0,1,28.63018-4.368A57.799,57.799,0,0,1,120.58959,37.093c10.32434,9.82519,16.268,21.83508,18.30567,36.0282q1.16922,8.42468,1.876,16.84375c.4679,1.87158,1.72058,3.11975,3.44123,3.11975a3.1886,3.1886,0,0,0,2.97265-3.43225V88.56055c-.6242-5.92725-1.25055-11.853-2.19073-17.77881C142.962,57.67981,137.79876,46.13867,128.88177,36.469,115.89556,21.96338,99.46893,14.78943,79.91137,14.6333A64.57,64.57,0,0,0,54.56774,19.78162Z"/><path class="cls-2" d="M4.97253,58.30615A79.56615,79.56615,0,0,0,2,80.45154a66.60613,66.60613,0,0,0,.31177,7.64319A76.27443,76.27443,0,0,0,5.91137,104.626a2.67956,2.67956,0,0,0,2.65869,2.02856c2.66095.15552,3.91284-1.87231,3.13092-4.68042a70.50594,70.50594,0,0,1-.62634-41.79858V60.178A3.312,3.312,0,0,0,8.8839,55.81055C7.16326,55.3418,5.59887,56.43384,4.97253,58.30615Z"/><path class="cls-2" d="M23.15173,110A74.91063,74.91063,0,0,0,22.338,94.48828c-1.09424-7.019-2.03235-13.88354-1.09424-21.05456A59.14035,59.14035,0,0,1,46.11944,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78271-2.184-2.97351-2.65186-5.16424-1.24731A60.84242,60.84242,0,0,0,29.37823,38.49683,64.52217,64.52217,0,0,0,14.67144,78.26746c-.31177,7.64343,1.72284,15.1289,2.19073,22.61462A59.2241,59.2241,0,0,1,16.90051,110Z"/><path class="cls-2" d="M147.83147,110c.01563-.76367.01514-1.51831-.02-2.25562a31.74131,31.74131,0,0,0,0-5.4602v.00244a3.08455,3.08455,0,0,0-3.44116-2.9646,3.01957,3.01957,0,0,0-2.81653,3.27612c.07532,2.49268.03876,4.94776-.0343,7.40186Z"/><path class="cls-2" d="M135.45751,110c.00281-.75769.008-1.51831-.00567-2.25562a217.74154,217.74154,0,0,0-2.6587-34.62316c-2.0346-12.79175-7.51043-23.55115-17.053-32.2865A46.09888,46.09888,0,0,0,105.571,33.66089a3.00191,3.00191,0,0,0-4.22516,1.092c-.93884,1.55981-.46869,3.27588,1.25189,4.36792a3.92179,3.92179,0,0,0,1.09424.62427c10.4837,6.39355,17.83551,15.283,21.279,27.13659,3.12885,11.38807,3.91077,23.08326,4.22308,34.78064q.11738,4.17.0279,8.33765Z"/><path class="cls-2" d="M71.15051,82.94714v-.00232a11.40213,11.40213,0,0,1,0-5.61389,9.11068,9.11068,0,0,1,9.70123-6.55139c4.2229.15552,7.66638,3.27612,8.60217,7.95581A150.64126,150.64126,0,0,1,92.11486,105.25a3.12524,3.12524,0,0,0,3.12885,3.43237c1.879,0,2.97253-1.40356,3.12872-3.276v-2.80823h.15631c-.3125-4.05542-.4679-8.11193-.93579-12.16528-.47022-4.05566-1.09656-8.11206-1.7229-12.1654a15.95811,15.95811,0,0,0-17.67926-13.726c-8.13452.93653-14.70685,9.04761-13.454,17.002.62408,4.83593,1.40814,9.66967,1.876,14.50561A115.64049,115.64049,0,0,1,66.75665,110h6.08563A125.08914,125.08914,0,0,0,71.15051,82.94714Z"/><path class="cls-2" d="M157.04247,67.03784Q147.65475,20.24817,102.12988,5.276A45.0092,45.0092,0,0,0,91.80236,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49573A2.876,2.876,0,0,0,91.02062,9.176c.62409.15564,1.25043.15564,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457A69.1805,69.1805,0,0,1,147.0288,54.56006a74.06052,74.06052,0,0,1,4.694,23.2395c.1554,2.33948,1.8783,3.7439,4.06677,3.11987,1.56446-.46789,2.34711-1.71618,2.1908-4.21191A41.3474,41.3474,0,0,0,157.04247,67.03784Z"/><path class="cls-2" d="M85.63354,110c.07037-1.946.10138-3.89441.06744-5.84424a75.85951,75.85951,0,0,0-.46789-9.98364,114.49913,114.49913,0,0,0-2.1908-14.65942,3.09175,3.09175,0,0,0-3.59961-2.49585,3.03675,3.03675,0,0,0-2.34619,3.90026,116.66963,116.66963,0,0,1,2.34619,18.2472q.23969,5.425.00525,10.83569Z"/><path class="cls-2" d="M123.05425,110c.03546-1.5769.05506-3.1582.03772-4.75a159.07167,159.07167,0,0,0-2.03235-26.98254A60.29592,60.29592,0,0,0,118.555,67.19324a3.10566,3.10566,0,0,0-3.91138-2.02771,2.97017,2.97017,0,0,0-2.03229,3.9c2.5025,9.35962,3.44037,19.0271,4.067,28.85291q.29535,6.08184.11456,12.08154Z"/><path class="cls-2" d="M108.0736,76.39514c-2.03461-11.07348-7.97833-18.87146-18.30566-22.77087v.00219a28.15763,28.15763,0,0,0-18.92914-.15625c-2.66077.78052-3.44348,3.58558-1.72058,5.30176,1.24981,1.248,2.5025,1.09192,3.91058.624a21.72724,21.72724,0,0,1,28.47247,16.84277,163.59068,163.59068,0,0,1,2.34693,17.31372,128.85744,128.85744,0,0,1,.42,16.44751h6.39728c.03955-1.323.06677-2.64624.06677-3.96948A167.06591,167.06591,0,0,0,108.0736,76.39514Z"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingervein0.svg b/polkit-agent/assets/biowaiting/fingervein0.svg
|
||
new file mode 100644
|
||
index 0000000..746aba7
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingervein0.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingervein1.svg b/polkit-agent/assets/biowaiting/fingervein1.svg
|
||
new file mode 100644
|
||
index 0000000..cda8446
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingervein1.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="27" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="16"/><rect class="cls-2" x="22" y="24" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingervein10.svg b/polkit-agent/assets/biowaiting/fingervein10.svg
|
||
new file mode 100644
|
||
index 0000000..ecc78f5
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingervein10.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="126" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="115"/><rect class="cls-2" x="22" y="123" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingervein11.svg b/polkit-agent/assets/biowaiting/fingervein11.svg
|
||
new file mode 100644
|
||
index 0000000..478d000
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingervein11.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="137" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="126"/><rect class="cls-2" x="22" y="134" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingervein2.svg b/polkit-agent/assets/biowaiting/fingervein2.svg
|
||
new file mode 100644
|
||
index 0000000..b04c496
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingervein2.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="38" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="27"/><rect class="cls-2" x="22" y="35" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingervein3.svg b/polkit-agent/assets/biowaiting/fingervein3.svg
|
||
new file mode 100644
|
||
index 0000000..7217db0
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingervein3.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="49" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="38"/><rect class="cls-2" x="22" y="46" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingervein4.svg b/polkit-agent/assets/biowaiting/fingervein4.svg
|
||
new file mode 100644
|
||
index 0000000..92d47ea
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingervein4.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="60" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="49"/><rect class="cls-2" x="22" y="57" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingervein5.svg b/polkit-agent/assets/biowaiting/fingervein5.svg
|
||
new file mode 100644
|
||
index 0000000..7f53c6c
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingervein5.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="71" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="60"/><rect class="cls-2" x="22" y="68" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingervein6.svg b/polkit-agent/assets/biowaiting/fingervein6.svg
|
||
new file mode 100644
|
||
index 0000000..4a6776e
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingervein6.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="82" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="71"/><rect class="cls-2" x="22" y="79" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingervein7.svg b/polkit-agent/assets/biowaiting/fingervein7.svg
|
||
new file mode 100644
|
||
index 0000000..f7adf46
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingervein7.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="93" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="82"/><rect class="cls-2" x="22" y="90" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingervein8.svg b/polkit-agent/assets/biowaiting/fingervein8.svg
|
||
new file mode 100644
|
||
index 0000000..1ea6843
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingervein8.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="104" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="93"/><rect class="cls-2" x="22" y="101" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/fingervein9.svg b/polkit-agent/assets/biowaiting/fingervein9.svg
|
||
new file mode 100644
|
||
index 0000000..6e00868
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/fingervein9.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="116" x2="80" y2="12" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="12" width="116" height="104"/><rect class="cls-2" x="22" y="112" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/iris0.svg b/polkit-agent/assets/biowaiting/iris0.svg
|
||
new file mode 100644
|
||
index 0000000..6fb8a60
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/iris0.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}</style></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/iris1.svg b/polkit-agent/assets/biowaiting/iris1.svg
|
||
new file mode 100644
|
||
index 0000000..052eefb
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/iris1.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="27" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="16"/><rect class="cls-1" x="22" y="24" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/iris10.svg b/polkit-agent/assets/biowaiting/iris10.svg
|
||
new file mode 100644
|
||
index 0000000..0df7826
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/iris10.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="126" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="115"/><rect class="cls-1" x="22" y="123" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/iris11.svg b/polkit-agent/assets/biowaiting/iris11.svg
|
||
new file mode 100644
|
||
index 0000000..8ab52bd
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/iris11.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="137" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="126"/><rect class="cls-1" x="22" y="134" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/iris2.svg b/polkit-agent/assets/biowaiting/iris2.svg
|
||
new file mode 100644
|
||
index 0000000..68c4479
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/iris2.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="38" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="27"/><rect class="cls-1" x="22" y="35" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/iris3.svg b/polkit-agent/assets/biowaiting/iris3.svg
|
||
new file mode 100644
|
||
index 0000000..b750b2e
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/iris3.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="49" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="38"/><rect class="cls-1" x="22" y="46" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/iris4.svg b/polkit-agent/assets/biowaiting/iris4.svg
|
||
new file mode 100644
|
||
index 0000000..141450c
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/iris4.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="60" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="49"/><rect class="cls-1" x="22" y="57" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/iris5.svg b/polkit-agent/assets/biowaiting/iris5.svg
|
||
new file mode 100644
|
||
index 0000000..e879021
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/iris5.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="71" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="60"/><rect class="cls-1" x="22" y="68" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/iris6.svg b/polkit-agent/assets/biowaiting/iris6.svg
|
||
new file mode 100644
|
||
index 0000000..f4e971d
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/iris6.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="82" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="71"/><rect class="cls-1" x="22" y="79" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/iris7.svg b/polkit-agent/assets/biowaiting/iris7.svg
|
||
new file mode 100644
|
||
index 0000000..9cf5557
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/iris7.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="93" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="82"/><rect class="cls-1" x="22" y="90" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/iris8.svg b/polkit-agent/assets/biowaiting/iris8.svg
|
||
new file mode 100644
|
||
index 0000000..551dddd
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/iris8.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="104" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="93"/><rect class="cls-1" x="22" y="101" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/iris9.svg b/polkit-agent/assets/biowaiting/iris9.svg
|
||
new file mode 100644
|
||
index 0000000..4304442
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/iris9.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="115" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="104"/><rect class="cls-1" x="22" y="112" width="116" height="4"/></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/voiceprint0.svg b/polkit-agent/assets/biowaiting/voiceprint0.svg
|
||
new file mode 100644
|
||
index 0000000..73e5a92
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/voiceprint0.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7562"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7562)"><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><g><rect x="63" y="70" width="8" height="20" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="70" width="8" height="20" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="60" width="8" height="40" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="60" width="8" height="40" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="50" width="8" height="60" rx="4" fill="#3790FA" fill-opacity="1"/></g></g></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/voiceprint1.svg b/polkit-agent/assets/biowaiting/voiceprint1.svg
|
||
new file mode 100644
|
||
index 0000000..083798e
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/voiceprint1.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7581"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7581)"><g><g><rect x="63" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="56" width="8" height="48" rx="4" fill="#3790FA" fill-opacity="1"/></g></g><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/voiceprint2.svg b/polkit-agent/assets/biowaiting/voiceprint2.svg
|
||
new file mode 100644
|
||
index 0000000..16883e1
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/voiceprint2.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7619"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7619)"><g><g><rect x="63" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="62" width="8" height="36" rx="4" fill="#3790FA" fill-opacity="1"/></g></g><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/voiceprint3.svg b/polkit-agent/assets/biowaiting/voiceprint3.svg
|
||
new file mode 100644
|
||
index 0000000..509ceae
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/voiceprint3.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7657"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7657)"><g><g><rect x="63" y="60" width="8" height="40" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="60" width="8" height="40" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="72" width="8" height="16" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="72" width="8" height="16" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="66" width="8" height="28" rx="4" fill="#3790FA" fill-opacity="1"/></g></g><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/voiceprint4.svg b/polkit-agent/assets/biowaiting/voiceprint4.svg
|
||
new file mode 100644
|
||
index 0000000..5208d79
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/voiceprint4.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7695"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7695)"><g><g><rect x="63" y="64" width="8" height="32" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="64" width="8" height="32" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="72" width="8" height="16" rx="4" fill="#3790FA" fill-opacity="1"/></g></g><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/voiceprint5.svg b/polkit-agent/assets/biowaiting/voiceprint5.svg
|
||
new file mode 100644
|
||
index 0000000..19be4b0
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/voiceprint5.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7676"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7676)"><g><g><rect x="63" y="60" width="8" height="40" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="60" width="8" height="40" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="72" width="8" height="16" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="72" width="8" height="16" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="66" width="8" height="28" rx="4" fill="#3790FA" fill-opacity="1"/></g></g><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/voiceprint6.svg b/polkit-agent/assets/biowaiting/voiceprint6.svg
|
||
new file mode 100644
|
||
index 0000000..9304c58
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/voiceprint6.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7638"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7638)"><g><g><rect x="63" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="62" width="8" height="36" rx="4" fill="#3790FA" fill-opacity="1"/></g></g><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/assets/biowaiting/voiceprint7.svg b/polkit-agent/assets/biowaiting/voiceprint7.svg
|
||
new file mode 100644
|
||
index 0000000..dc96601
|
||
--- /dev/null
|
||
+++ b/polkit-agent/assets/biowaiting/voiceprint7.svg
|
||
@@ -0,0 +1 @@
|
||
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7600"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7600)"><g><g><rect x="63" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="56" width="8" height="48" rx="4" fill="#3790FA" fill-opacity="1"/></g></g><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g></g></svg>
|
||
\ No newline at end of file
|
||
diff --git a/polkit-agent/i18n_ts/bo.ts b/polkit-agent/i18n_ts/bo.ts
|
||
index 50e8ba8..bc85390 100644
|
||
--- a/polkit-agent/i18n_ts/bo.ts
|
||
+++ b/polkit-agent/i18n_ts/bo.ts
|
||
@@ -1,6 +1,15 @@
|
||
<?xml version="1.0" encoding="utf-8"?>
|
||
<!DOCTYPE TS>
|
||
<TS version="2.1">
|
||
+<context>
|
||
+ <name>FullScreenBackground</name>
|
||
+ <message>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="75"/>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="104"/>
|
||
+ <source>Authentication</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+</context>
|
||
<context>
|
||
<name>MainWindow</name>
|
||
<message>
|
||
@@ -9,205 +18,210 @@
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="409"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1075"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1143"/>
|
||
+ <location filename="../src/mainwindow.ui" line="398"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="874"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="943"/>
|
||
<source>Biometric</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="480"/>
|
||
+ <location filename="../src/mainwindow.ui" line="493"/>
|
||
<source>use password</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="441"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1077"/>
|
||
+ <location filename="../src/mainwindow.ui" line="436"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="875"/>
|
||
<source>Cancel</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="460"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1073"/>
|
||
+ <location filename="../src/mainwindow.ui" line="461"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="873"/>
|
||
<source>Authenticate</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="66"/>
|
||
- <source>Authentication</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="85"/>
|
||
+ <source>Insert the ukey into the USB port</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="105"/>
|
||
- <source>Insert the ukey into the USB port</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="87"/>
|
||
+ <source>Enter the ukey password</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="107"/>
|
||
- <source>Enter the ukey password</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="93"/>
|
||
+ <source>Close</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="226"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1415"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1417"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1243"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1539"/>
|
||
<source>Failed to verify %1, please enter password to unlock</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="231"/>
|
||
- <location filename="../src/mainwindow.cpp" line="233"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1419"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1249"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1545"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1548"/>
|
||
<source>Unable to verify %1, please enter password to unlock</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="242"/>
|
||
- <location filename="../src/mainwindow.cpp" line="246"/>
|
||
- <source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1261"/>
|
||
+ <source>Facial recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="335"/>
|
||
- <source>Please enter your password or enroll your fingerprint </source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1264"/>
|
||
+ <source>Fingerprint recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="665"/>
|
||
- <source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1267"/>
|
||
+ <source>Voiceprint recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="671"/>
|
||
- <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1270"/>
|
||
+ <source>Finger veins recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="731"/>
|
||
- <source>Password: </source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1273"/>
|
||
+ <source>Iris recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="733"/>
|
||
- <source>_Password: </source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1276"/>
|
||
+ <source>Use the bound wechat scanning code to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="735"/>
|
||
- <source>_Password:</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1558"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1562"/>
|
||
+ <source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
- <source>Account locked,</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1579"/>
|
||
+ <source>Acquisition failure</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
- <source>days left</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="165"/>
|
||
+ <source>Please enter your password or enroll your fingerprint </source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
- <source>hours left</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="517"/>
|
||
+ <source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
- <source>minutes left</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="522"/>
|
||
+ <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
- <source>seconds left</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="582"/>
|
||
+ <source>Password: </source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="834"/>
|
||
- <location filename="../src/mainwindow.cpp" line="835"/>
|
||
- <source>Password cannot be empty</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="584"/>
|
||
+ <source>_Password: </source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="880"/>
|
||
- <location filename="../src/mainwindow.cpp" line="888"/>
|
||
- <source>Input your password to authentication</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="586"/>
|
||
+ <source>_Password:</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1079"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1183"/>
|
||
- <source>Use password</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
+ <source>Account locked,</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1219"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1292"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1293"/>
|
||
- <source>Please try again in %1 minutes.</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
+ <source>days left</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1230"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1302"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1303"/>
|
||
- <source>Please try again in %1 seconds.</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
+ <source>hours left</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1240"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1241"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1311"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1312"/>
|
||
- <source>Account locked permanently.</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
+ <source>minutes left</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
+ <source>seconds left</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1434"/>
|
||
- <source>Verify face recognition or enter password to unlock</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="688"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="689"/>
|
||
+ <source>Password cannot be empty</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1439"/>
|
||
- <source>Press fingerprint or enter password to unlock</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="734"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="742"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1258"/>
|
||
+ <source>Input your password to authentication</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1444"/>
|
||
- <source>Verify voiceprint or enter password to unlock</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="876"/>
|
||
+ <source>Use password</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1449"/>
|
||
- <source>Verify finger vein or enter password to unlock</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1003"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1081"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1082"/>
|
||
+ <source>Please try again in %1 minutes.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1454"/>
|
||
- <source>Verify iris or enter password to unlock</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1015"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1093"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1094"/>
|
||
+ <source>Please try again in %1 seconds.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1459"/>
|
||
- <source>Use the bound wechat scanning code or enter the password to unlock</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1026"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1027"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1104"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1105"/>
|
||
+ <source>Account locked permanently.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="108"/>
|
||
- <location filename="../src/mainwindow.cpp" line="729"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="88"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="580"/>
|
||
<source>Input Password</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="259"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1575"/>
|
||
<source>Abnormal network</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="850"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="704"/>
|
||
<source>Authentication failed, please try again.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
@@ -215,17 +229,17 @@
|
||
<context>
|
||
<name>PolkitListener</name>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="88"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="86"/>
|
||
<source>Another client is already authenticating, please try again later.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="265"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="253"/>
|
||
<source>Authentication failure, please try again.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="272"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="259"/>
|
||
<source>Password input error!</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
diff --git a/polkit-agent/i18n_ts/bo_CN.ts b/polkit-agent/i18n_ts/bo_CN.ts
|
||
index e0a54e7..deb149d 100644
|
||
--- a/polkit-agent/i18n_ts/bo_CN.ts
|
||
+++ b/polkit-agent/i18n_ts/bo_CN.ts
|
||
@@ -51,6 +51,15 @@
|
||
<translation type="vanished">二维码</translation>
|
||
</message>
|
||
</context>
|
||
+<context>
|
||
+ <name>FullScreenBackground</name>
|
||
+ <message>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="75"/>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="104"/>
|
||
+ <source>Authentication</source>
|
||
+ <translation type="unfinished">དབང་བསྐུར།</translation>
|
||
+ </message>
|
||
+</context>
|
||
<context>
|
||
<name>LoginOptionsWidget</name>
|
||
<message>
|
||
@@ -65,9 +74,8 @@
|
||
<context>
|
||
<name>MainWindow</name>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="66"/>
|
||
<source>Authentication</source>
|
||
- <translation>དབང་བསྐུར།</translation>
|
||
+ <translation type="vanished">དབང་བསྐུར།</translation>
|
||
</message>
|
||
<message>
|
||
<source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
|
||
@@ -91,14 +99,14 @@
|
||
<translation type="vanished">密码</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="409"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1075"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1143"/>
|
||
+ <location filename="../src/mainwindow.ui" line="398"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="874"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="943"/>
|
||
<source>Biometric</source>
|
||
<translation>སྐྱེ་དངོས་དབྱེ་འབྱེད་བཀོལ་བ།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="480"/>
|
||
+ <location filename="../src/mainwindow.ui" line="493"/>
|
||
<source>use password</source>
|
||
<translation>གསང་གྲངས་བེད་སྤྱོད་བྱ་དགོས།</translation>
|
||
</message>
|
||
@@ -147,20 +155,19 @@
|
||
<translation type="vanished">Polkit.caller-pid:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="441"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1077"/>
|
||
+ <location filename="../src/mainwindow.ui" line="436"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="875"/>
|
||
<source>Cancel</source>
|
||
<translation>ཕྱིར་འཐེན།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="460"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1073"/>
|
||
+ <location filename="../src/mainwindow.ui" line="461"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="873"/>
|
||
<source>Authenticate</source>
|
||
<translation>དབང་བསྐུར་བ།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1079"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1183"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="876"/>
|
||
<source>Use password</source>
|
||
<translation>གསང་གྲངས་བེད་སྤྱོད་བྱ་དགོས།</translation>
|
||
</message>
|
||
@@ -185,30 +192,30 @@
|
||
<translation type="vanished">认证中,请稍等...</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1219"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1292"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1293"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1003"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1081"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1082"/>
|
||
<source>Please try again in %1 minutes.</source>
|
||
<translation>%1ཡང་བསྐྱར་ཚོད་ལྟ་ཞིག་བྱེད་རོགས།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1230"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1302"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1303"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1015"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1093"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1094"/>
|
||
<source>Please try again in %1 seconds.</source>
|
||
<translation>ཁྱོད་ཀྱིས་དུས་ཚོད་སྐར་ཆ་གཅིག་གི་ནང་དུ་ཡང་བསྐྱར་ཚོད་ལྟ་ཞིག་བྱེད་རོགས།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1240"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1241"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1311"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1312"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1026"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1027"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1104"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1105"/>
|
||
<source>Account locked permanently.</source>
|
||
<translation>དུས་གཏན་དུ་ཟྭ་བརྒྱབ་པའི་རྩིས་ཐོ།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="834"/>
|
||
- <location filename="../src/mainwindow.cpp" line="835"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="688"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="689"/>
|
||
<source>Password cannot be empty</source>
|
||
<translation>གསང་གྲངས་སྟོང་པ་ཡིན་མི་སྲིད།</translation>
|
||
</message>
|
||
@@ -221,8 +228,8 @@
|
||
<translation type="vanished">无法验证%1,请输入密码.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="242"/>
|
||
- <location filename="../src/mainwindow.cpp" line="246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1558"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1562"/>
|
||
<source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
<translation>%1ལ་ཞིབ་བཤེར་བྱེད་མ་ཐུབ་ན། ཁྱེད་ཚོར་ད་དུང་%2ལ་ཞིབ་བཤེར་བྱེད་པའི་གོ་སྐབས་ཡོད།</translation>
|
||
</message>
|
||
@@ -231,42 +238,42 @@
|
||
<translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="731"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="582"/>
|
||
<source>Password: </source>
|
||
<translation>གསང་གྲངས་ནི། </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="335"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="165"/>
|
||
<source>Please enter your password or enroll your fingerprint </source>
|
||
<translation>ཁྱེད་ཀྱི་གསང་གྲངས་ནང་འཇུག་བྱེད་པའམ་ཡང་ན་ཁྱེད་ཀྱི་མཛུབ་རིས་ནང་འཇུག་བྱེད་པ། </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="259"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1575"/>
|
||
<source>Abnormal network</source>
|
||
<translation>རྒྱུན་ལྡན་མིན་པའི་དྲ་བ།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="665"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="517"/>
|
||
<source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
<translation>ཐེངས་འདིའི་བཀོལ་སྤྱོད་ལ་དོ་དམ་པའི་དབང་ཆ་ཐོབ་ན་ད་གཟོད་མུ་མཐུད་དུ་ལག་བསྟར་བྱེད་ཐུབ།གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཐེངས་འདིའི་བཀོལ་སྤྱོད་བྱེད་ཆོག</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="733"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="584"/>
|
||
<source>_Password: </source>
|
||
<translation>གསང་གྲངས། </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="735"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="586"/>
|
||
<source>_Password:</source>
|
||
<translation>གསང་གྲངས།:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="850"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="704"/>
|
||
<source>Authentication failed, please try again.</source>
|
||
<translation>བདེན་དཔང་ར་སྤྲོད་ལ་ཕམ་ཁ་བྱུང་བས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱོས།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
<source>days left</source>
|
||
<translation>གནམ་རྒྱབ་ཟྭ་འབྱེད།</translation>
|
||
</message>
|
||
@@ -279,16 +286,16 @@
|
||
<translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="226"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1415"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1417"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1243"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1539"/>
|
||
<source>Failed to verify %1, please enter password to unlock</source>
|
||
<translation>%1ལ་ཞིབ་བཤེར་བྱེད་མ་ཐུབ་ན། གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག་རོགས།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="231"/>
|
||
- <location filename="../src/mainwindow.cpp" line="233"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1419"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1249"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1545"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1548"/>
|
||
<source>Unable to verify %1, please enter password to unlock</source>
|
||
<translation>%1ལ་ཞིབ་བཤེར་བྱེད་ཐབས་བྲལ་བ་དང་། གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག་རོགས།</translation>
|
||
</message>
|
||
@@ -297,86 +304,121 @@
|
||
<translation type="vanished">网络异常</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="671"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="522"/>
|
||
<source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
<translation>གོ་རིམ་ཞིག་གིས་ཁྱད་དབང་དགོས་པའི་འགུལ་སྟངས་ཤིག་ལག་བསྟར་བྱེད་པར་ཚོད་ལྟ་བྱེད་བཞིན་ཡོད་པ་དང་།་འགུལ་སྟངས་འདི་ལག་བསྟར་བྱེད་པའི་དབང་ཆ་སྤྲོད་དགོས་པའི་རེ་བ་བཏོན།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="108"/>
|
||
- <location filename="../src/mainwindow.cpp" line="729"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="88"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="580"/>
|
||
<source>Input Password</source>
|
||
<translation>ནང་འཇུག་གི་གསང་གྲངས།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="105"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="85"/>
|
||
<source>Insert the ukey into the USB port</source>
|
||
<translation>བདེ་འཇགས་ཀྱི་གསང་བའི་ལྡེ་མིག་དེ་USBཡི་སྣེ་འདྲེན་དུ་འཇུག་རོགས།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="107"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="87"/>
|
||
<source>Enter the ukey password</source>
|
||
<translation>གསང་བའི་ཨང་གྲངས་ནང་འཇུག་བྱེད་པ།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="93"/>
|
||
+ <source>Close</source>
|
||
+ <translation>སྒོ་རྒྱག་པ་</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1261"/>
|
||
+ <source>Facial recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1264"/>
|
||
+ <source>Fingerprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1267"/>
|
||
+ <source>Voiceprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1270"/>
|
||
+ <source>Finger veins recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1273"/>
|
||
+ <source>Iris recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1276"/>
|
||
+ <source>Use the bound wechat scanning code to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1579"/>
|
||
+ <source>Acquisition failure</source>
|
||
+ <translation>ཕམ་ཉེས་བྱུང་བ་རེད</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
<source>hours left</source>
|
||
<translation>དུས་ཚོད་འགའ་ལས་ལྷག་མེད</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
<source>minutes left</source>
|
||
<translation>སྐར་མ་རྗེས་ནས་ཟྭ་ཕྱེ།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>seconds left</source>
|
||
<translation>སྐར་ཆའི་རྗེས་ནས་ཟྭ་ཕྱེ་བ།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="880"/>
|
||
- <location filename="../src/mainwindow.cpp" line="888"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="734"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="742"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1258"/>
|
||
<source>Input your password to authentication</source>
|
||
<translation>གསང་བའི་ཨང་གྲངས་ནང་འཇུག་བྱེད་དབང་ཡོད།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1434"/>
|
||
<source>Verify face recognition or enter password to unlock</source>
|
||
- <translation>དཔང་མིའི་གདོང་ལ་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
|
||
+ <translation type="vanished">དཔང་མིའི་གདོང་ལ་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1439"/>
|
||
<source>Press fingerprint or enter password to unlock</source>
|
||
- <translation>མཛུབ་རིས་མནན་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
|
||
+ <translation type="vanished">མཛུབ་རིས་མནན་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1444"/>
|
||
<source>Verify voiceprint or enter password to unlock</source>
|
||
- <translation>སྒྲ་རིས་ར་སྤྲོད་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
|
||
+ <translation type="vanished">སྒྲ་རིས་ར་སྤྲོད་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1449"/>
|
||
<source>Verify finger vein or enter password to unlock</source>
|
||
- <translation>ཚོད་ལྟས་ར་སྤྲོད་བྱེད་པ་ནི་སྡོད་རྩ་དང་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ་དེ་ཡིན།</translation>
|
||
+ <translation type="vanished">ཚོད་ལྟས་ར་སྤྲོད་བྱེད་པ་ནི་སྡོད་རྩ་དང་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ་དེ་ཡིན།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1454"/>
|
||
<source>Verify iris or enter password to unlock</source>
|
||
- <translation>འཇའ་སྐྱི་ར་སྤྲོད་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
|
||
+ <translation type="vanished">འཇའ་སྐྱི་ར་སྤྲོད་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1459"/>
|
||
<source>Use the bound wechat scanning code or enter the password to unlock</source>
|
||
- <translation>སྦྲེལ་ཡོད་པའི་སྐད་འཕྲིན་གྱི་ཨང་གྲངས་སམ་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་དགོས།</translation>
|
||
+ <translation type="vanished">སྦྲེལ་ཡོད་པའི་སྐད་འཕྲིན་གྱི་ཨང་གྲངས་སམ་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་དགོས།</translation>
|
||
</message>
|
||
<message>
|
||
<source>Use the bound wechat scanning code or enter the password to log in</source>
|
||
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>Account locked,</source>
|
||
<translation>རྩིས་ཐོ་ཟྭ་བརྒྱབ་པ།</translation>
|
||
</message>
|
||
@@ -388,17 +430,17 @@
|
||
<context>
|
||
<name>PolkitListener</name>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="88"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="86"/>
|
||
<source>Another client is already authenticating, please try again later.</source>
|
||
<translation>མཁོ་མཁན་གཞན་པ་ཞིག་གིས་བདེན་དཔང་ར་སྤྲོད་བྱེད་བཞིན་ཡོད།ཅུང་ཙམ་འགོར་རྗེས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱོས།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="265"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="253"/>
|
||
<source>Authentication failure, please try again.</source>
|
||
<translation>བདེན་དཔང་ར་སྤྲོད་བྱེད་མ་ཐུབ་ན་ཁྱེད་ཀྱིས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱེད།</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="272"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="259"/>
|
||
<source>Password input error!</source>
|
||
<translation>གསང་གྲངས་ནང་འཇུག་ནོར་འཁྲུལ་བྱུང་བ་རེད།</translation>
|
||
</message>
|
||
diff --git a/polkit-agent/i18n_ts/de.ts b/polkit-agent/i18n_ts/de.ts
|
||
index 8521a6d..e17acdc 100644
|
||
--- a/polkit-agent/i18n_ts/de.ts
|
||
+++ b/polkit-agent/i18n_ts/de.ts
|
||
@@ -51,6 +51,15 @@
|
||
<translation type="vanished">二维码</translation>
|
||
</message>
|
||
</context>
|
||
+<context>
|
||
+ <name>FullScreenBackground</name>
|
||
+ <message>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="75"/>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="104"/>
|
||
+ <source>Authentication</source>
|
||
+ <translation type="unfinished">Authentifizierung</translation>
|
||
+ </message>
|
||
+</context>
|
||
<context>
|
||
<name>LoginOptionsWidget</name>
|
||
<message>
|
||
@@ -65,9 +74,8 @@
|
||
<context>
|
||
<name>MainWindow</name>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="66"/>
|
||
<source>Authentication</source>
|
||
- <translation>Authentifizierung</translation>
|
||
+ <translation type="vanished">Authentifizierung</translation>
|
||
</message>
|
||
<message>
|
||
<source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
|
||
@@ -91,14 +99,14 @@
|
||
<translation type="vanished">密码</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="409"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1075"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1143"/>
|
||
+ <location filename="../src/mainwindow.ui" line="398"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="874"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="943"/>
|
||
<source>Biometric</source>
|
||
<translation>Biometrisch</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="480"/>
|
||
+ <location filename="../src/mainwindow.ui" line="493"/>
|
||
<source>use password</source>
|
||
<translation>Passwort verwenden</translation>
|
||
</message>
|
||
@@ -147,20 +155,19 @@
|
||
<translation type="vanished">Polkit.caller-pid:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="441"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1077"/>
|
||
+ <location filename="../src/mainwindow.ui" line="436"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="875"/>
|
||
<source>Cancel</source>
|
||
<translation>Abbrechen</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="460"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1073"/>
|
||
+ <location filename="../src/mainwindow.ui" line="461"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="873"/>
|
||
<source>Authenticate</source>
|
||
<translation>Beglaubigen</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1079"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1183"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="876"/>
|
||
<source>Use password</source>
|
||
<translation>Passwort verwenden</translation>
|
||
</message>
|
||
@@ -185,30 +192,30 @@
|
||
<translation type="vanished">认证中,请稍等...</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1219"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1292"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1293"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1003"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1081"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1082"/>
|
||
<source>Please try again in %1 minutes.</source>
|
||
<translation>Versuchen Sie es in %1 Minuten erneut.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1230"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1302"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1303"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1015"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1093"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1094"/>
|
||
<source>Please try again in %1 seconds.</source>
|
||
<translation>Bitte versuchen Sie es in %1 Sekunden erneut.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1240"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1241"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1311"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1312"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1026"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1027"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1104"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1105"/>
|
||
<source>Account locked permanently.</source>
|
||
<translation>Das Konto wurde dauerhaft gesperrt.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="834"/>
|
||
- <location filename="../src/mainwindow.cpp" line="835"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="688"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="689"/>
|
||
<source>Password cannot be empty</source>
|
||
<translation>Das Kennwort darf nicht leer sein.</translation>
|
||
</message>
|
||
@@ -221,8 +228,8 @@
|
||
<translation type="vanished">无法验证%1,请输入密码.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="242"/>
|
||
- <location filename="../src/mainwindow.cpp" line="246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1558"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1562"/>
|
||
<source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
<translation>%1 konnte nicht verifiziert werden, Sie haben immer noch %2 Überprüfungsmöglichkeiten</translation>
|
||
</message>
|
||
@@ -231,42 +238,42 @@
|
||
<translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="731"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="582"/>
|
||
<source>Password: </source>
|
||
<translation>Passwort: </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="335"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="165"/>
|
||
<source>Please enter your password or enroll your fingerprint </source>
|
||
<translation>Bitte geben Sie Ihr Passwort ein oder registrieren Sie Ihren Fingerabdruck </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="259"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1575"/>
|
||
<source>Abnormal network</source>
|
||
<translation>Ungewöhnliches Netzwerk</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="665"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="517"/>
|
||
<source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
<translation>Für diesen Vorgang ist die Autorisierung des Administrators erforderlich. Bitte geben Sie Ihr Passwort ein, um diesen Vorgang zuzulassen.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="733"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="584"/>
|
||
<source>_Password: </source>
|
||
<translation>_Passwort: </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="735"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="586"/>
|
||
<source>_Password:</source>
|
||
<translation>_Passwort:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="850"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="704"/>
|
||
<source>Authentication failed, please try again.</source>
|
||
<translation>Authentifizierung fehlgeschlagen, bitte versuchen Sie es erneut.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
<source>days left</source>
|
||
<translation>Verbleibende Tage</translation>
|
||
</message>
|
||
@@ -279,16 +286,16 @@
|
||
<translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="226"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1415"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1417"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1243"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1539"/>
|
||
<source>Failed to verify %1, please enter password to unlock</source>
|
||
<translation>%1 konnte nicht verifiziert werden, bitte geben Sie das Kennwort zum Entsperren ein</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="231"/>
|
||
- <location filename="../src/mainwindow.cpp" line="233"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1419"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1249"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1545"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1548"/>
|
||
<source>Unable to verify %1, please enter password to unlock</source>
|
||
<translation>%1 kann nicht verifiziert werden, bitte geben Sie das Kennwort zum Entsperren ein</translation>
|
||
</message>
|
||
@@ -297,86 +304,121 @@
|
||
<translation type="vanished">网络异常</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="671"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="522"/>
|
||
<source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
<translation>Ein Programm versucht, eine Aktion auszuführen, für die Berechtigungen erforderlich sind. Zum Ausführen der Aktion ist eine Autorisierung erforderlich.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="108"/>
|
||
- <location filename="../src/mainwindow.cpp" line="729"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="88"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="580"/>
|
||
<source>Input Password</source>
|
||
<translation>Passwort eingeben</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="105"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="85"/>
|
||
<source>Insert the ukey into the USB port</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="107"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="87"/>
|
||
<source>Enter the ukey password</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="93"/>
|
||
+ <source>Close</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1261"/>
|
||
+ <source>Facial recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1264"/>
|
||
+ <source>Fingerprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1267"/>
|
||
+ <source>Voiceprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1270"/>
|
||
+ <source>Finger veins recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1273"/>
|
||
+ <source>Iris recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1276"/>
|
||
+ <source>Use the bound wechat scanning code to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1579"/>
|
||
+ <source>Acquisition failure</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
<source>hours left</source>
|
||
<translation>Verbleibende Stunden</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
<source>minutes left</source>
|
||
<translation>Noch Minuten</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>seconds left</source>
|
||
<translation>Verbleibende Sekunden</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="880"/>
|
||
- <location filename="../src/mainwindow.cpp" line="888"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="734"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="742"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1258"/>
|
||
<source>Input your password to authentication</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1434"/>
|
||
<source>Verify face recognition or enter password to unlock</source>
|
||
- <translation>Überprüfen Sie die Gesichtserkennung oder geben Sie das Passwort ein, um zu entsperren</translation>
|
||
+ <translation type="vanished">Überprüfen Sie die Gesichtserkennung oder geben Sie das Passwort ein, um zu entsperren</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1439"/>
|
||
<source>Press fingerprint or enter password to unlock</source>
|
||
- <translation>Drücken Sie den Fingerabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
|
||
+ <translation type="vanished">Drücken Sie den Fingerabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1444"/>
|
||
<source>Verify voiceprint or enter password to unlock</source>
|
||
- <translation>Überprüfen Sie den Stimmabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
|
||
+ <translation type="vanished">Überprüfen Sie den Stimmabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1449"/>
|
||
<source>Verify finger vein or enter password to unlock</source>
|
||
- <translation>Überprüfen Sie die Fingervene oder geben Sie das Passwort ein, um zu entsperren</translation>
|
||
+ <translation type="vanished">Überprüfen Sie die Fingervene oder geben Sie das Passwort ein, um zu entsperren</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1454"/>
|
||
<source>Verify iris or enter password to unlock</source>
|
||
- <translation>Überprüfen Sie die Iris oder geben Sie das Passwort ein, um zu entsperren</translation>
|
||
+ <translation type="vanished">Überprüfen Sie die Iris oder geben Sie das Passwort ein, um zu entsperren</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1459"/>
|
||
<source>Use the bound wechat scanning code or enter the password to unlock</source>
|
||
- <translation>Verwenden Sie den gebundenen Wechat-Scan-Code oder geben Sie das Passwort zum Entsperren ein</translation>
|
||
+ <translation type="vanished">Verwenden Sie den gebundenen Wechat-Scan-Code oder geben Sie das Passwort zum Entsperren ein</translation>
|
||
</message>
|
||
<message>
|
||
<source>Use the bound wechat scanning code or enter the password to log in</source>
|
||
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>Account locked,</source>
|
||
<translation>Konto gesperrt,</translation>
|
||
</message>
|
||
@@ -388,17 +430,17 @@
|
||
<context>
|
||
<name>PolkitListener</name>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="88"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="86"/>
|
||
<source>Another client is already authenticating, please try again later.</source>
|
||
<translation>Ein anderer Client authentifiziert sich bereits, bitte versuchen Sie es später noch einmal.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="265"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="253"/>
|
||
<source>Authentication failure, please try again.</source>
|
||
<translation>Authentifizierungsfehler, bitte versuchen Sie es erneut.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="272"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="259"/>
|
||
<source>Password input error!</source>
|
||
<translation>Fehler bei der Passworteingabe!</translation>
|
||
</message>
|
||
diff --git a/polkit-agent/i18n_ts/es.ts b/polkit-agent/i18n_ts/es.ts
|
||
index 133ff59..11060b3 100644
|
||
--- a/polkit-agent/i18n_ts/es.ts
|
||
+++ b/polkit-agent/i18n_ts/es.ts
|
||
@@ -51,6 +51,15 @@
|
||
<translation type="vanished">二维码</translation>
|
||
</message>
|
||
</context>
|
||
+<context>
|
||
+ <name>FullScreenBackground</name>
|
||
+ <message>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="75"/>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="104"/>
|
||
+ <source>Authentication</source>
|
||
+ <translation type="unfinished">Autenticación</translation>
|
||
+ </message>
|
||
+</context>
|
||
<context>
|
||
<name>LoginOptionsWidget</name>
|
||
<message>
|
||
@@ -65,9 +74,8 @@
|
||
<context>
|
||
<name>MainWindow</name>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="66"/>
|
||
<source>Authentication</source>
|
||
- <translation>Autenticación</translation>
|
||
+ <translation type="vanished">Autenticación</translation>
|
||
</message>
|
||
<message>
|
||
<source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
|
||
@@ -91,14 +99,14 @@
|
||
<translation type="vanished">密码</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="409"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1075"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1143"/>
|
||
+ <location filename="../src/mainwindow.ui" line="398"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="874"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="943"/>
|
||
<source>Biometric</source>
|
||
<translation>Biométrico</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="480"/>
|
||
+ <location filename="../src/mainwindow.ui" line="493"/>
|
||
<source>use password</source>
|
||
<translation>Usar contraseña</translation>
|
||
</message>
|
||
@@ -147,20 +155,19 @@
|
||
<translation type="vanished">Polkit.caller-pid:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="441"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1077"/>
|
||
+ <location filename="../src/mainwindow.ui" line="436"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="875"/>
|
||
<source>Cancel</source>
|
||
<translation>Cancelar</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="460"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1073"/>
|
||
+ <location filename="../src/mainwindow.ui" line="461"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="873"/>
|
||
<source>Authenticate</source>
|
||
<translation>Autentificar</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1079"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1183"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="876"/>
|
||
<source>Use password</source>
|
||
<translation>Usar contraseña</translation>
|
||
</message>
|
||
@@ -185,30 +192,30 @@
|
||
<translation type="vanished">认证中,请稍等...</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1219"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1292"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1293"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1003"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1081"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1082"/>
|
||
<source>Please try again in %1 minutes.</source>
|
||
<translation>Inténtelo de nuevo en %1 minutos.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1230"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1302"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1303"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1015"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1093"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1094"/>
|
||
<source>Please try again in %1 seconds.</source>
|
||
<translation>Inténtelo de nuevo en %1 segundos.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1240"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1241"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1311"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1312"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1026"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1027"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1104"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1105"/>
|
||
<source>Account locked permanently.</source>
|
||
<translation>Cuenta bloqueada permanentemente.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="834"/>
|
||
- <location filename="../src/mainwindow.cpp" line="835"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="688"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="689"/>
|
||
<source>Password cannot be empty</source>
|
||
<translation>La contraseña no puede estar vacía</translation>
|
||
</message>
|
||
@@ -221,8 +228,8 @@
|
||
<translation type="vanished">无法验证%1,请输入密码.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="242"/>
|
||
- <location filename="../src/mainwindow.cpp" line="246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1558"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1562"/>
|
||
<source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
<translation>No se pudo verificar %1, todavía tiene %2 oportunidades de verificación</translation>
|
||
</message>
|
||
@@ -231,42 +238,42 @@
|
||
<translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="731"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="582"/>
|
||
<source>Password: </source>
|
||
<translation>Contraseña: </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="335"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="165"/>
|
||
<source>Please enter your password or enroll your fingerprint </source>
|
||
<translation>Ingrese su contraseña o registre su huella dactilar </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="259"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1575"/>
|
||
<source>Abnormal network</source>
|
||
<translation>Red anormal</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="665"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="517"/>
|
||
<source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
<translation>Esta operación requiere la autorización del administrador. Introduzca su contraseña para permitir esta operación.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="733"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="584"/>
|
||
<source>_Password: </source>
|
||
<translation>_Contraseña: </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="735"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="586"/>
|
||
<source>_Password:</source>
|
||
<translation>_Contraseña:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="850"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="704"/>
|
||
<source>Authentication failed, please try again.</source>
|
||
<translation>Error de autenticación, inténtelo de nuevo.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
<source>days left</source>
|
||
<translation>Días restantes</translation>
|
||
</message>
|
||
@@ -279,16 +286,16 @@
|
||
<translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="226"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1415"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1417"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1243"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1539"/>
|
||
<source>Failed to verify %1, please enter password to unlock</source>
|
||
<translation>No se pudo verificar %1, ingrese la contraseña para desbloquear</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="231"/>
|
||
- <location filename="../src/mainwindow.cpp" line="233"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1419"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1249"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1545"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1548"/>
|
||
<source>Unable to verify %1, please enter password to unlock</source>
|
||
<translation>No se puede verificar %1, ingrese la contraseña para desbloquear</translation>
|
||
</message>
|
||
@@ -297,86 +304,121 @@
|
||
<translation type="vanished">网络异常</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="671"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="522"/>
|
||
<source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
<translation>Un programa está intentando realizar una acción que requiere privilegios. Requiere autorización para realizar la acción.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="108"/>
|
||
- <location filename="../src/mainwindow.cpp" line="729"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="88"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="580"/>
|
||
<source>Input Password</source>
|
||
<translation>Contraseña de entrada</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="105"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="85"/>
|
||
<source>Insert the ukey into the USB port</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="107"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="87"/>
|
||
<source>Enter the ukey password</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="93"/>
|
||
+ <source>Close</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1261"/>
|
||
+ <source>Facial recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1264"/>
|
||
+ <source>Fingerprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1267"/>
|
||
+ <source>Voiceprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1270"/>
|
||
+ <source>Finger veins recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1273"/>
|
||
+ <source>Iris recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1276"/>
|
||
+ <source>Use the bound wechat scanning code to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1579"/>
|
||
+ <source>Acquisition failure</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
<source>hours left</source>
|
||
<translation>horas restantes</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
<source>minutes left</source>
|
||
<translation>Quedan minutos</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>seconds left</source>
|
||
<translation>segundos restantes</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="880"/>
|
||
- <location filename="../src/mainwindow.cpp" line="888"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="734"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="742"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1258"/>
|
||
<source>Input your password to authentication</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1434"/>
|
||
<source>Verify face recognition or enter password to unlock</source>
|
||
- <translation>Verifique el reconocimiento facial o ingrese la contraseña para desbloquear</translation>
|
||
+ <translation type="vanished">Verifique el reconocimiento facial o ingrese la contraseña para desbloquear</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1439"/>
|
||
<source>Press fingerprint or enter password to unlock</source>
|
||
- <translation>Presione la huella dactilar o ingrese la contraseña para desbloquear</translation>
|
||
+ <translation type="vanished">Presione la huella dactilar o ingrese la contraseña para desbloquear</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1444"/>
|
||
<source>Verify voiceprint or enter password to unlock</source>
|
||
- <translation>Verifica la huella de voz o ingresa la contraseña para desbloquear</translation>
|
||
+ <translation type="vanished">Verifica la huella de voz o ingresa la contraseña para desbloquear</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1449"/>
|
||
<source>Verify finger vein or enter password to unlock</source>
|
||
- <translation>Verifique la vena del dedo o ingrese la contraseña para desbloquear</translation>
|
||
+ <translation type="vanished">Verifique la vena del dedo o ingrese la contraseña para desbloquear</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1454"/>
|
||
<source>Verify iris or enter password to unlock</source>
|
||
- <translation>Verifique el iris o ingrese la contraseña para desbloquear</translation>
|
||
+ <translation type="vanished">Verifique el iris o ingrese la contraseña para desbloquear</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1459"/>
|
||
<source>Use the bound wechat scanning code or enter the password to unlock</source>
|
||
- <translation>Use el código de escaneo de wechat vinculado o ingrese la contraseña para desbloquear</translation>
|
||
+ <translation type="vanished">Use el código de escaneo de wechat vinculado o ingrese la contraseña para desbloquear</translation>
|
||
</message>
|
||
<message>
|
||
<source>Use the bound wechat scanning code or enter the password to log in</source>
|
||
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>Account locked,</source>
|
||
<translation>Cuenta bloqueada,</translation>
|
||
</message>
|
||
@@ -388,17 +430,17 @@
|
||
<context>
|
||
<name>PolkitListener</name>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="88"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="86"/>
|
||
<source>Another client is already authenticating, please try again later.</source>
|
||
<translation>Otro cliente ya se está autenticando, inténtelo de nuevo más tarde.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="265"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="253"/>
|
||
<source>Authentication failure, please try again.</source>
|
||
<translation>Error de autenticación, inténtelo de nuevo.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="272"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="259"/>
|
||
<source>Password input error!</source>
|
||
<translation>¡Error de entrada de contraseña!</translation>
|
||
</message>
|
||
diff --git a/polkit-agent/i18n_ts/fr.ts b/polkit-agent/i18n_ts/fr.ts
|
||
index 357fb71..f1c41cf 100644
|
||
--- a/polkit-agent/i18n_ts/fr.ts
|
||
+++ b/polkit-agent/i18n_ts/fr.ts
|
||
@@ -51,6 +51,15 @@
|
||
<translation type="vanished">二维码</translation>
|
||
</message>
|
||
</context>
|
||
+<context>
|
||
+ <name>FullScreenBackground</name>
|
||
+ <message>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="75"/>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="104"/>
|
||
+ <source>Authentication</source>
|
||
+ <translation type="unfinished">Authentification</translation>
|
||
+ </message>
|
||
+</context>
|
||
<context>
|
||
<name>LoginOptionsWidget</name>
|
||
<message>
|
||
@@ -65,9 +74,8 @@
|
||
<context>
|
||
<name>MainWindow</name>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="66"/>
|
||
<source>Authentication</source>
|
||
- <translation>Authentification</translation>
|
||
+ <translation type="vanished">Authentification</translation>
|
||
</message>
|
||
<message>
|
||
<source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
|
||
@@ -91,14 +99,14 @@
|
||
<translation type="vanished">密码</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="409"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1075"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1143"/>
|
||
+ <location filename="../src/mainwindow.ui" line="398"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="874"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="943"/>
|
||
<source>Biometric</source>
|
||
<translation>Biométrique</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="480"/>
|
||
+ <location filename="../src/mainwindow.ui" line="493"/>
|
||
<source>use password</source>
|
||
<translation>Utiliser le mot de passe</translation>
|
||
</message>
|
||
@@ -147,20 +155,19 @@
|
||
<translation type="vanished">Polkit.caller-pid:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="441"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1077"/>
|
||
+ <location filename="../src/mainwindow.ui" line="436"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="875"/>
|
||
<source>Cancel</source>
|
||
<translation>Annuler</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="460"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1073"/>
|
||
+ <location filename="../src/mainwindow.ui" line="461"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="873"/>
|
||
<source>Authenticate</source>
|
||
<translation>Authentifier</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1079"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1183"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="876"/>
|
||
<source>Use password</source>
|
||
<translation>Utiliser le mot de passe</translation>
|
||
</message>
|
||
@@ -185,30 +192,30 @@
|
||
<translation type="vanished">认证中,请稍等...</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1219"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1292"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1293"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1003"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1081"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1082"/>
|
||
<source>Please try again in %1 minutes.</source>
|
||
<translation>Veuillez réessayer dans %1 minutes.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1230"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1302"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1303"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1015"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1093"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1094"/>
|
||
<source>Please try again in %1 seconds.</source>
|
||
<translation>Veuillez réessayer dans %1 secondes.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1240"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1241"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1311"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1312"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1026"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1027"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1104"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1105"/>
|
||
<source>Account locked permanently.</source>
|
||
<translation>Compte verrouillé définitivement.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="834"/>
|
||
- <location filename="../src/mainwindow.cpp" line="835"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="688"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="689"/>
|
||
<source>Password cannot be empty</source>
|
||
<translation>Le mot de passe ne peut pas être vide</translation>
|
||
</message>
|
||
@@ -221,8 +228,8 @@
|
||
<translation type="vanished">无法验证%1,请输入密码.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="242"/>
|
||
- <location filename="../src/mainwindow.cpp" line="246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1558"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1562"/>
|
||
<source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
<translation>Échec de la vérification %1, vous avez encore %2 possibilités de vérification</translation>
|
||
</message>
|
||
@@ -231,42 +238,42 @@
|
||
<translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="731"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="582"/>
|
||
<source>Password: </source>
|
||
<translation>Mot de passe: </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="335"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="165"/>
|
||
<source>Please enter your password or enroll your fingerprint </source>
|
||
<translation>Veuillez saisir votre mot de passe ou enregistrer votre empreinte digitale </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="259"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1575"/>
|
||
<source>Abnormal network</source>
|
||
<translation>Réseau anormal</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="665"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="517"/>
|
||
<source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
<translation>Cette opération nécessite l’autorisation de l’administrateur. Veuillez saisir votre mot de passe pour autoriser cette opération.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="733"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="584"/>
|
||
<source>_Password: </source>
|
||
<translation>_Mot de passe: </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="735"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="586"/>
|
||
<source>_Password:</source>
|
||
<translation>_Mot de passe:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="850"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="704"/>
|
||
<source>Authentication failed, please try again.</source>
|
||
<translation>L’authentification a échoué, veuillez réessayer.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
<source>days left</source>
|
||
<translation>jours restants</translation>
|
||
</message>
|
||
@@ -279,16 +286,16 @@
|
||
<translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="226"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1415"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1417"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1243"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1539"/>
|
||
<source>Failed to verify %1, please enter password to unlock</source>
|
||
<translation>Impossible de vérifier %1, veuillez entrer le mot de passe pour déverrouiller</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="231"/>
|
||
- <location filename="../src/mainwindow.cpp" line="233"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1419"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1249"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1545"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1548"/>
|
||
<source>Unable to verify %1, please enter password to unlock</source>
|
||
<translation>Impossible de vérifier %1, veuillez entrer le mot de passe pour déverrouiller</translation>
|
||
</message>
|
||
@@ -297,86 +304,121 @@
|
||
<translation type="vanished">网络异常</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="671"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="522"/>
|
||
<source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
<translation>Un programme tente d’effectuer une action qui nécessite des privilèges. Il nécessite une autorisation pour effectuer l’action.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="108"/>
|
||
- <location filename="../src/mainwindow.cpp" line="729"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="88"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="580"/>
|
||
<source>Input Password</source>
|
||
<translation>Mot de passe d’entrée</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="105"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="85"/>
|
||
<source>Insert the ukey into the USB port</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="107"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="87"/>
|
||
<source>Enter the ukey password</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="93"/>
|
||
+ <source>Close</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1261"/>
|
||
+ <source>Facial recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1264"/>
|
||
+ <source>Fingerprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1267"/>
|
||
+ <source>Voiceprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1270"/>
|
||
+ <source>Finger veins recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1273"/>
|
||
+ <source>Iris recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1276"/>
|
||
+ <source>Use the bound wechat scanning code to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1579"/>
|
||
+ <source>Acquisition failure</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
<source>hours left</source>
|
||
<translation>Heures restantes</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
<source>minutes left</source>
|
||
<translation>minutes restantes</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>seconds left</source>
|
||
<translation>secondes restantes</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="880"/>
|
||
- <location filename="../src/mainwindow.cpp" line="888"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="734"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="742"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1258"/>
|
||
<source>Input your password to authentication</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1434"/>
|
||
<source>Verify face recognition or enter password to unlock</source>
|
||
- <translation>Vérifier la reconnaissance faciale ou saisir le mot de passe pour déverrouiller</translation>
|
||
+ <translation type="vanished">Vérifier la reconnaissance faciale ou saisir le mot de passe pour déverrouiller</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1439"/>
|
||
<source>Press fingerprint or enter password to unlock</source>
|
||
- <translation>Appuyez sur l’empreinte digitale ou entrez le mot de passe pour déverrouiller</translation>
|
||
+ <translation type="vanished">Appuyez sur l’empreinte digitale ou entrez le mot de passe pour déverrouiller</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1444"/>
|
||
<source>Verify voiceprint or enter password to unlock</source>
|
||
- <translation>Vérifier l’empreinte vocale ou saisir le mot de passe pour déverrouiller</translation>
|
||
+ <translation type="vanished">Vérifier l’empreinte vocale ou saisir le mot de passe pour déverrouiller</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1449"/>
|
||
<source>Verify finger vein or enter password to unlock</source>
|
||
- <translation>Vérifiez la veine du doigt ou entrez le mot de passe pour déverrouiller</translation>
|
||
+ <translation type="vanished">Vérifiez la veine du doigt ou entrez le mot de passe pour déverrouiller</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1454"/>
|
||
<source>Verify iris or enter password to unlock</source>
|
||
- <translation>Vérifiez l’iris ou entrez le mot de passe pour déverrouiller</translation>
|
||
+ <translation type="vanished">Vérifiez l’iris ou entrez le mot de passe pour déverrouiller</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1459"/>
|
||
<source>Use the bound wechat scanning code or enter the password to unlock</source>
|
||
- <translation>Utilisez le code d’analyse wechat lié ou entrez le mot de passe pour déverrouiller</translation>
|
||
+ <translation type="vanished">Utilisez le code d’analyse wechat lié ou entrez le mot de passe pour déverrouiller</translation>
|
||
</message>
|
||
<message>
|
||
<source>Use the bound wechat scanning code or enter the password to log in</source>
|
||
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>Account locked,</source>
|
||
<translation>Compte verrouillé,</translation>
|
||
</message>
|
||
@@ -388,17 +430,17 @@
|
||
<context>
|
||
<name>PolkitListener</name>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="88"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="86"/>
|
||
<source>Another client is already authenticating, please try again later.</source>
|
||
<translation>Un autre client est déjà en train de s’authentifier, veuillez réessayer plus tard.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="265"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="253"/>
|
||
<source>Authentication failure, please try again.</source>
|
||
<translation>Échec de l’authentification, veuillez réessayer.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="272"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="259"/>
|
||
<source>Password input error!</source>
|
||
<translation>Erreur de saisie du mot de passe !</translation>
|
||
</message>
|
||
diff --git a/polkit-agent/i18n_ts/kk.ts b/polkit-agent/i18n_ts/kk.ts
|
||
index d112f69..4a77b8f 100644
|
||
--- a/polkit-agent/i18n_ts/kk.ts
|
||
+++ b/polkit-agent/i18n_ts/kk.ts
|
||
@@ -51,6 +51,15 @@
|
||
<translation type="vanished">二维码</translation>
|
||
</message>
|
||
</context>
|
||
+<context>
|
||
+ <name>FullScreenBackground</name>
|
||
+ <message>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="75"/>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="104"/>
|
||
+ <source>Authentication</source>
|
||
+ <translation type="unfinished">شىندىقتى دالەلدەۋ</translation>
|
||
+ </message>
|
||
+</context>
|
||
<context>
|
||
<name>LoginOptionsWidget</name>
|
||
<message>
|
||
@@ -65,9 +74,8 @@
|
||
<context>
|
||
<name>MainWindow</name>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="66"/>
|
||
<source>Authentication</source>
|
||
- <translation>شىندىقتى دالەلدەۋ</translation>
|
||
+ <translation type="vanished">شىندىقتى دالەلدەۋ</translation>
|
||
</message>
|
||
<message>
|
||
<source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
|
||
@@ -91,14 +99,14 @@
|
||
<translation type="vanished">密码</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="409"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1075"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1143"/>
|
||
+ <location filename="../src/mainwindow.ui" line="398"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="874"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="943"/>
|
||
<source>Biometric</source>
|
||
<translation>بىئولەگىيەلىك ەرەكشەلىكتى ٸستەتۋ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="480"/>
|
||
+ <location filename="../src/mainwindow.ui" line="493"/>
|
||
<source>use password</source>
|
||
<translation>قۇپيا نومەر ٸستەتۋ</translation>
|
||
</message>
|
||
@@ -147,20 +155,19 @@
|
||
<translation type="vanished">Polkit.caller-pid:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="441"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1077"/>
|
||
+ <location filename="../src/mainwindow.ui" line="436"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="875"/>
|
||
<source>Cancel</source>
|
||
<translation>كۇشىنەن قالدىرۋ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="460"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1073"/>
|
||
+ <location filename="../src/mainwindow.ui" line="461"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="873"/>
|
||
<source>Authenticate</source>
|
||
<translation>ۇقىق بەرۋ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1079"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1183"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="876"/>
|
||
<source>Use password</source>
|
||
<translation>قۇپيا نومەر ٸستەتۋ ارقىلى دالەلدەۋ</translation>
|
||
</message>
|
||
@@ -185,30 +192,30 @@
|
||
<translation type="vanished">认证中,请稍等...</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1219"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1292"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1293"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1003"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1081"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1082"/>
|
||
<source>Please try again in %1 minutes.</source>
|
||
<translation>٪1 مينۋت ٸشٸندە قاتە سىناپ كور.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1230"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1302"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1303"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1015"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1093"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1094"/>
|
||
<source>Please try again in %1 seconds.</source>
|
||
<translation>٪1 سەكونت ٸشٸندە قاتە سىناپ كور.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1240"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1241"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1311"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1312"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1026"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1027"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1104"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1105"/>
|
||
<source>Account locked permanently.</source>
|
||
<translation>ەسەپات ماڭگىلىك قۇلىپتالادى.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="834"/>
|
||
- <location filename="../src/mainwindow.cpp" line="835"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="688"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="689"/>
|
||
<source>Password cannot be empty</source>
|
||
<translation>قۇپيا نۇمىردى بوس قويۋعا بولمايدى</translation>
|
||
</message>
|
||
@@ -221,8 +228,8 @@
|
||
<translation type="vanished">无法验证%1,请输入密码.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="242"/>
|
||
- <location filename="../src/mainwindow.cpp" line="246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1558"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1562"/>
|
||
<source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
<translation>٪1 نى دالەلدەۋ جەڭىلىپ قالدى، سىزدە جانەدە ٪2 دالەلدەۋ ورايى بار</translation>
|
||
</message>
|
||
@@ -231,42 +238,42 @@
|
||
<translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="731"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="582"/>
|
||
<source>Password: </source>
|
||
<translation>قۇپيا نومەر </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="335"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="165"/>
|
||
<source>Please enter your password or enroll your fingerprint </source>
|
||
<translation>قۇپيا نۇمىرىڭىزدى كىرگىزىڭىز ياكي بارماقشى ئىزىڭىزنى تونۇتۇڭ </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="259"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1575"/>
|
||
<source>Abnormal network</source>
|
||
<translation>بينورمال تور</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="665"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="517"/>
|
||
<source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
<translation>نۇ جوبالاۋ باسقارعٸشتٸڭ ۇقىق بىرىستى تالاپ ىستەيدى.قۇپيا نۇمىردى كىرەۈزۈپ بي رەتكى جوبالاۋنىڭ الىپ بېرىلىشىغا جول قويىڭىز.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="733"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="584"/>
|
||
<source>_Password: </source>
|
||
<translation>قۇپيا نومەر </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="735"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="586"/>
|
||
<source>_Password:</source>
|
||
<translation>قۇپيا نومەر</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="850"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="704"/>
|
||
<source>Authentication failed, please try again.</source>
|
||
<translation>دالەلدەۋ جەڭىلىپ قالدى، قاتە سىناڭ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
<source>days left</source>
|
||
<translation>1 كۇننەن كەيىن سناپ كور</translation>
|
||
</message>
|
||
@@ -279,16 +286,16 @@
|
||
<translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="226"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1415"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1417"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1243"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1539"/>
|
||
<source>Failed to verify %1, please enter password to unlock</source>
|
||
<translation>٪1 نى دالەلدەۋ جەڭىلىپ قالدى، قۇپيا نومەر كىرگىزىڭىز</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="231"/>
|
||
- <location filename="../src/mainwindow.cpp" line="233"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1419"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1249"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1545"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1548"/>
|
||
<source>Unable to verify %1, please enter password to unlock</source>
|
||
<translation>٪1 نى دالەلدەۋگە امالسٸز، قۇپيا نۇمىردى كىرەۈزۈپ قۇلىبىن ٴٸشڭٸز</translation>
|
||
</message>
|
||
@@ -297,86 +304,121 @@
|
||
<translation type="vanished">网络异常</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="671"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="522"/>
|
||
<source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
<translation>بٸر پٸروگٸرامما ۇقىق تالاپ ىستەيتىن ارەكەتتى ىستەۋگە ئۇرۇنماقتا. نۇ ارەكەتتى اتقار ەتۋ ٷشٸن ۇقىق تالاپ ىستەيدى.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="108"/>
|
||
- <location filename="../src/mainwindow.cpp" line="729"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="88"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="580"/>
|
||
<source>Input Password</source>
|
||
<translation>قۇپيا نومەر كىرگىزۋ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="105"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="85"/>
|
||
<source>Insert the ukey into the USB port</source>
|
||
<translation>ukey نى USB اۋزىنا چېتىپ قويىڭىز</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="107"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="87"/>
|
||
<source>Enter the ukey password</source>
|
||
<translation>ukey قۇپيا نۇمىردى كىرگىزىڭىز</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="93"/>
|
||
+ <source>Close</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1261"/>
|
||
+ <source>Facial recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1264"/>
|
||
+ <source>Fingerprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1267"/>
|
||
+ <source>Voiceprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1270"/>
|
||
+ <source>Finger veins recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1273"/>
|
||
+ <source>Iris recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1276"/>
|
||
+ <source>Use the bound wechat scanning code to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1579"/>
|
||
+ <source>Acquisition failure</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
<source>hours left</source>
|
||
<translation>بٸر ساعاتتان كەيىن اشٸلدٸ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
<source>minutes left</source>
|
||
<translation>بٸر مينوتتىن كەيىن اشٸلدٸ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>seconds left</source>
|
||
<translation>بٸر سەكونتىن كەيىن اشٸلدٸ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="880"/>
|
||
- <location filename="../src/mainwindow.cpp" line="888"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="734"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="742"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1258"/>
|
||
<source>Input your password to authentication</source>
|
||
<translation>قۇپيا نۇمىردى كىرەۈزۈپ ازاماتتىق كۋالىك دالەلدەۋ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1434"/>
|
||
<source>Verify face recognition or enter password to unlock</source>
|
||
- <translation>چىراي تانىسن دالەلدەۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
|
||
+ <translation type="vanished">چىراي تانىسن دالەلدەۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1439"/>
|
||
<source>Press fingerprint or enter password to unlock</source>
|
||
- <translation>بارماقشى ٴٸزدٸ باسٸۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
|
||
+ <translation type="vanished">بارماقشى ٴٸزدٸ باسٸۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1444"/>
|
||
<source>Verify voiceprint or enter password to unlock</source>
|
||
- <translation>اۋا ٴٸزدٸ دالەلدەۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
|
||
+ <translation type="vanished">اۋا ٴٸزدٸ دالەلدەۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1449"/>
|
||
<source>Verify finger vein or enter password to unlock</source>
|
||
- <translation>بارماقشى ٴٸزٸ ارقىلى انىقتاۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
|
||
+ <translation type="vanished">بارماقشى ٴٸزٸ ارقىلى انىقتاۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1454"/>
|
||
<source>Verify iris or enter password to unlock</source>
|
||
- <translation>Iris نى انىقتاۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
|
||
+ <translation type="vanished">Iris نى انىقتاۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1459"/>
|
||
<source>Use the bound wechat scanning code or enter the password to unlock</source>
|
||
- <translation>بايلانعان ئۈندىدارنى كەسكىندەۋ بەلگىسى ياكي قۇپيا نۇمىردى كىرەۈزۈپ قۇلىپ ٸشٸۋ</translation>
|
||
+ <translation type="vanished">بايلانعان ئۈندىدارنى كەسكىندەۋ بەلگىسى ياكي قۇپيا نۇمىردى كىرەۈزۈپ قۇلىپ ٸشٸۋ</translation>
|
||
</message>
|
||
<message>
|
||
<source>Use the bound wechat scanning code or enter the password to log in</source>
|
||
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>Account locked,</source>
|
||
<translation>ٸستەتۋ نومەرىڭىز قۇلىپتانىپ قالدى</translation>
|
||
</message>
|
||
@@ -388,17 +430,17 @@
|
||
<context>
|
||
<name>PolkitListener</name>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="88"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="86"/>
|
||
<source>Another client is already authenticating, please try again later.</source>
|
||
<translation>جانە بٸر قاريدار دالەلدەپ جاتىر، سەل تۇرٸپ قاتە سىناڭ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="265"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="253"/>
|
||
<source>Authentication failure, please try again.</source>
|
||
<translation>دالەلدەۋ جەڭىلىپ قالدى، قاتە سىناڭ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="272"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="259"/>
|
||
<source>Password input error!</source>
|
||
<translation>كىرگىزگەن قۇپيا نومەر قاتە قالدى</translation>
|
||
</message>
|
||
diff --git a/polkit-agent/i18n_ts/ky.ts b/polkit-agent/i18n_ts/ky.ts
|
||
index 8ccad26..47cb3c6 100644
|
||
--- a/polkit-agent/i18n_ts/ky.ts
|
||
+++ b/polkit-agent/i18n_ts/ky.ts
|
||
@@ -51,6 +51,15 @@
|
||
<translation type="vanished">二维码</translation>
|
||
</message>
|
||
</context>
|
||
+<context>
|
||
+ <name>FullScreenBackground</name>
|
||
+ <message>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="75"/>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="104"/>
|
||
+ <source>Authentication</source>
|
||
+ <translation type="unfinished">راستىنى دالىلدۅ</translation>
|
||
+ </message>
|
||
+</context>
|
||
<context>
|
||
<name>LoginOptionsWidget</name>
|
||
<message>
|
||
@@ -65,9 +74,8 @@
|
||
<context>
|
||
<name>MainWindow</name>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="66"/>
|
||
<source>Authentication</source>
|
||
- <translation>راستىنى دالىلدۅ</translation>
|
||
+ <translation type="vanished">راستىنى دالىلدۅ</translation>
|
||
</message>
|
||
<message>
|
||
<source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
|
||
@@ -91,14 +99,14 @@
|
||
<translation type="vanished">密码</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="409"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1075"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1143"/>
|
||
+ <location filename="../src/mainwindow.ui" line="398"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="874"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="943"/>
|
||
<source>Biometric</source>
|
||
<translation>بىئولەگىيەلىك ۅزگۅچۅلۉگۉ ىشتەتىش</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="480"/>
|
||
+ <location filename="../src/mainwindow.ui" line="493"/>
|
||
<source>use password</source>
|
||
<translation>جاشىرۇۇن نومۇر ىشتەتىش</translation>
|
||
</message>
|
||
@@ -147,20 +155,19 @@
|
||
<translation type="vanished">Polkit.caller-pid:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="441"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1077"/>
|
||
+ <location filename="../src/mainwindow.ui" line="436"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="875"/>
|
||
<source>Cancel</source>
|
||
<translation>ارعادان قالتىرىش</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="460"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1073"/>
|
||
+ <location filename="../src/mainwindow.ui" line="461"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="873"/>
|
||
<source>Authenticate</source>
|
||
<translation>ۇقۇق بەرۉۉ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1079"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1183"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="876"/>
|
||
<source>Use password</source>
|
||
<translation>جاشىرۇۇن نومۇر ىشتەتىش ارقىلۇۇ دالىلدۅ</translation>
|
||
</message>
|
||
@@ -185,30 +192,30 @@
|
||
<translation type="vanished">认证中,请稍等...</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1219"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1292"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1293"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1003"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1081"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1082"/>
|
||
<source>Please try again in %1 minutes.</source>
|
||
<translation>٪1 مىنۇت ىچىندە قايرا سىناپ باعىڭ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1230"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1302"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1303"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1015"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1093"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1094"/>
|
||
<source>Please try again in %1 seconds.</source>
|
||
<translation>٪1 سىكونت ىچىندە قايرا سىناپ باعىڭ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1240"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1241"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1311"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1312"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1026"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1027"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1104"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1105"/>
|
||
<source>Account locked permanently.</source>
|
||
<translation>ەسابات تۉبۅلۉك قۇلۇپلىنىدۇ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="834"/>
|
||
- <location filename="../src/mainwindow.cpp" line="835"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="688"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="689"/>
|
||
<source>Password cannot be empty</source>
|
||
<translation>جاشىرۇۇن نومۇردۇ بوش ،بەكەر قويۇشقا بولبويت</translation>
|
||
</message>
|
||
@@ -221,8 +228,8 @@
|
||
<translation type="vanished">无法验证%1,请输入密码.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="242"/>
|
||
- <location filename="../src/mainwindow.cpp" line="246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1558"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1562"/>
|
||
<source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
<translation>٪1 نى دالىلدۅ جەڭىلۉۉ بولدۇ ، سىزدە داعى ەلە ٪2 دالىلدۅ مۅۅرتۉ بار</translation>
|
||
</message>
|
||
@@ -231,42 +238,42 @@
|
||
<translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="731"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="582"/>
|
||
<source>Password: </source>
|
||
<translation>جاشىرۇۇن نومۇر </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="335"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="165"/>
|
||
<source>Please enter your password or enroll your fingerprint </source>
|
||
<translation>جاشىرۇۇن نومۇرۇڭۇزدۇ كىرگىزىڭ كۅرۉنۉشتۅرۉ بارماق ئىزىڭىزنى تونۇتۇڭ </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="259"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1575"/>
|
||
<source>Abnormal network</source>
|
||
<translation>بۅتۅنچۅ تور</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="665"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="517"/>
|
||
<source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
<translation>بۇل ماشقۇلدانۇۇ باشقارۇۇچۇنۇن ۇقۇق بەرۉۉنۉ تالاپ جاسايت .جاشىرۇۇن نومۇردۇ كىيىرىپ بي قاتىمقى ماشقۇلدانۇۇ نىڭ الىپ بېرىلىشىغا جول قويۇڭ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="733"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="584"/>
|
||
<source>_Password: </source>
|
||
<translation>جاشىرۇۇن نومۇر </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="735"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="586"/>
|
||
<source>_Password:</source>
|
||
<translation>جاشىرۇۇن نومۇر</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="850"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="704"/>
|
||
<source>Authentication failed, please try again.</source>
|
||
<translation>دالىلدۅ جەڭىلۉۉ بولدۇ ، قايرا سىناڭ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
<source>days left</source>
|
||
<translation>1 كۉندۅن كىيىن سىناپ باعىڭ</translation>
|
||
</message>
|
||
@@ -279,16 +286,16 @@
|
||
<translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="226"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1415"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1417"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1243"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1539"/>
|
||
<source>Failed to verify %1, please enter password to unlock</source>
|
||
<translation>٪1 نى دالىلدۅ جەڭىلۉۉ بولدۇ ، سىرلۇۇ نومۇر كىرگىزىڭ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="231"/>
|
||
- <location filename="../src/mainwindow.cpp" line="233"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1419"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1249"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1545"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1548"/>
|
||
<source>Unable to verify %1, please enter password to unlock</source>
|
||
<translation>٪1 نى دالىلدۅۅگۅ ايلاسىز، جاشىرۇۇن نومۇردۇ كىيىرىپ قۇلۇپنى اچىڭ</translation>
|
||
</message>
|
||
@@ -297,86 +304,121 @@
|
||
<translation type="vanished">网络异常</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="671"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="522"/>
|
||
<source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
<translation>بىر پراگرامما ۇقۇق تالاپ جاسايتۇرعان قىيمىلدى جاسووعو ئۇرۇنماقتا. بۇل قىيمىلدى اتقارماق جاسوو ،اتقارۇۇ ۉچۉن ۇقۇق تالاپ جاسايت .</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="108"/>
|
||
- <location filename="../src/mainwindow.cpp" line="729"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="88"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="580"/>
|
||
<source>Input Password</source>
|
||
<translation>جاشىرۇۇن نومۇر كىرگىزۉۉ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="105"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="85"/>
|
||
<source>Insert the ukey into the USB port</source>
|
||
<translation>ukey نى USB ووزۇنا چېتىپ قويۇڭ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="107"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="87"/>
|
||
<source>Enter the ukey password</source>
|
||
<translation>ukey جاشىرۇۇن نومۇرۇن كىرگىزىڭ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="93"/>
|
||
+ <source>Close</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1261"/>
|
||
+ <source>Facial recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1264"/>
|
||
+ <source>Fingerprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1267"/>
|
||
+ <source>Voiceprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1270"/>
|
||
+ <source>Finger veins recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1273"/>
|
||
+ <source>Iris recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1276"/>
|
||
+ <source>Use the bound wechat scanning code to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1579"/>
|
||
+ <source>Acquisition failure</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
<source>hours left</source>
|
||
<translation>بىر سائەتتىن كىيىن اچىلات</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
<source>minutes left</source>
|
||
<translation>بىر مىنۇتتان كىيىن اچىلات</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>seconds left</source>
|
||
<translation>بىر سەكۇنتتان كىيىن اچىلات</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="880"/>
|
||
- <location filename="../src/mainwindow.cpp" line="888"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="734"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="742"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1258"/>
|
||
<source>Input your password to authentication</source>
|
||
<translation>جاشىرۇۇن نومۇردۇ كىيىرىپ كۉبۅلۉك دالىلدۅ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1434"/>
|
||
<source>Verify face recognition or enter password to unlock</source>
|
||
- <translation>چىراي تاانىشتى دالىلدۅ كۅرۉنۉشتۅرۉ جاشىرۇۇن نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
|
||
+ <translation type="vanished">چىراي تاانىشتى دالىلدۅ كۅرۉنۉشتۅرۉ جاشىرۇۇن نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1439"/>
|
||
<source>Press fingerprint or enter password to unlock</source>
|
||
- <translation>بارماق ىزىن باسۇۇدا كۅرۉنۉشتۅرۉ جاشىرۇۇن نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
|
||
+ <translation type="vanished">بارماق ىزىن باسۇۇدا كۅرۉنۉشتۅرۉ جاشىرۇۇن نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1444"/>
|
||
<source>Verify voiceprint or enter password to unlock</source>
|
||
- <translation>دووش ىزىن دالىلدۅ كۅرۉنۉشتۅرۉ جاشىرۇۇن نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
|
||
+ <translation type="vanished">دووش ىزىن دالىلدۅ كۅرۉنۉشتۅرۉ جاشىرۇۇن نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1449"/>
|
||
<source>Verify finger vein or enter password to unlock</source>
|
||
- <translation>بارماق ئزى ارقىلۇۇ انىقتاش كۅرۉنۉشتۅرۉ جاشىرۇۇن نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
|
||
+ <translation type="vanished">بارماق ئزى ارقىلۇۇ انىقتاش كۅرۉنۉشتۅرۉ جاشىرۇۇن نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1454"/>
|
||
<source>Verify iris or enter password to unlock</source>
|
||
- <translation>Iris نى انىقتاش كۅرۉنۉشتۅرۉ جاشىرۇۇن نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
|
||
+ <translation type="vanished">Iris نى انىقتاش كۅرۉنۉشتۅرۉ جاشىرۇۇن نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1459"/>
|
||
<source>Use the bound wechat scanning code or enter the password to unlock</source>
|
||
- <translation>بايلانعان ئۈندىدارنى ىسكاننىردوو قۇپۇيا نومۇرۇ كۅرۉنۉشتۅرۉ جاشىرۇۇن نومۇرۇن كىيىرىپ قۇلپ اچۇۇ</translation>
|
||
+ <translation type="vanished">بايلانعان ئۈندىدارنى ىسكاننىردوو قۇپۇيا نومۇرۇ كۅرۉنۉشتۅرۉ جاشىرۇۇن نومۇرۇن كىيىرىپ قۇلپ اچۇۇ</translation>
|
||
</message>
|
||
<message>
|
||
<source>Use the bound wechat scanning code or enter the password to log in</source>
|
||
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>Account locked,</source>
|
||
<translation>ىشتەتىش نومۇرۇڭۇز قۇلۇپتالىپ قالدى</translation>
|
||
</message>
|
||
@@ -388,17 +430,17 @@
|
||
<context>
|
||
<name>PolkitListener</name>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="88"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="86"/>
|
||
<source>Another client is already authenticating, please try again later.</source>
|
||
<translation>داعى بىر سووداگەر ، جولووچۇ دالىلدەپ جاتات، سەل تۇرۇپ قايرا سىناڭ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="265"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="253"/>
|
||
<source>Authentication failure, please try again.</source>
|
||
<translation>دالىلدۅ جەڭىلۉۉ بولدۇ ، قايرا سىناڭ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="272"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="259"/>
|
||
<source>Password input error!</source>
|
||
<translation>كىيىرگەن جاشىرۇۇن نومۇر قاتاا بولدۇ</translation>
|
||
</message>
|
||
diff --git a/polkit-agent/i18n_ts/mn.ts b/polkit-agent/i18n_ts/mn.ts
|
||
index 4f8ed3c..7f6bfe9 100644
|
||
--- a/polkit-agent/i18n_ts/mn.ts
|
||
+++ b/polkit-agent/i18n_ts/mn.ts
|
||
@@ -51,6 +51,15 @@
|
||
<translation type="vanished">二维码</translation>
|
||
</message>
|
||
</context>
|
||
+<context>
|
||
+ <name>FullScreenBackground</name>
|
||
+ <message>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="75"/>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="104"/>
|
||
+ <source>Authentication</source>
|
||
+ <translation type="unfinished">ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ</translation>
|
||
+ </message>
|
||
+</context>
|
||
<context>
|
||
<name>LoginOptionsWidget</name>
|
||
<message>
|
||
@@ -65,9 +74,8 @@
|
||
<context>
|
||
<name>MainWindow</name>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="66"/>
|
||
<source>Authentication</source>
|
||
- <translation>ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ</translation>
|
||
+ <translation type="vanished">ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ</translation>
|
||
</message>
|
||
<message>
|
||
<source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
|
||
@@ -91,14 +99,14 @@
|
||
<translation type="vanished">密码</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="409"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1075"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1143"/>
|
||
+ <location filename="../src/mainwindow.ui" line="398"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="874"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="943"/>
|
||
<source>Biometric</source>
|
||
<translation>ᠠᠮᠢᠳᠤ ᠪᠤᠳᠠᠰ ᠢ᠋ ᠬᠡᠷᠡᠭᠯᠡᠵᠤ ᠢᠯᠭᠠᠨ ᠳᠠᠨᠢᠬᠤ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="480"/>
|
||
+ <location filename="../src/mainwindow.ui" line="493"/>
|
||
<source>use password</source>
|
||
<translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠭᠰᠠᠨ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠢ᠋ ᠬᠡᠷᠡᠭᠯᠡᠬᠦ</translation>
|
||
</message>
|
||
@@ -147,20 +155,19 @@
|
||
<translation type="vanished">Polkit.caller-pid:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="441"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1077"/>
|
||
+ <location filename="../src/mainwindow.ui" line="436"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="875"/>
|
||
<source>Cancel</source>
|
||
<translation>ᠦᠬᠡᠢᠰᠭᠡᠬᠦ᠌</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="460"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1073"/>
|
||
+ <location filename="../src/mainwindow.ui" line="461"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="873"/>
|
||
<source>Authenticate</source>
|
||
<translation>ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1079"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1183"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="876"/>
|
||
<source>Use password</source>
|
||
<translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠭᠰᠠᠨ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠢ᠋ ᠬᠡᠷᠡᠭᠯᠡᠬᠦ</translation>
|
||
</message>
|
||
@@ -185,30 +192,30 @@
|
||
<translation type="vanished">认证中,请稍等...</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1219"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1292"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1293"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1003"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1081"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1082"/>
|
||
<source>Please try again in %1 minutes.</source>
|
||
<translation>%1 ᠮᠢᠨᠦ᠋ᠲᠦᠨ ᠳᠠᠷᠠᠭᠠ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠱᠢᠭᠠᠷᠠᠢ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1230"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1302"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1303"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1015"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1093"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1094"/>
|
||
<source>Please try again in %1 seconds.</source>
|
||
<translation>%1 ᠮᠢᠨᠦ᠋ᠲᠦᠨ ᠳᠠᠷᠠᠭᠠ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠱᠢᠭᠠᠷᠠᠢ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1240"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1241"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1311"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1312"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1026"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1027"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1104"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1105"/>
|
||
<source>Account locked permanently.</source>
|
||
<translation>ᠳᠠᠩᠰᠠ ᠨᠢᠭᠡᠨᠳᠡ ᠦᠨᠢᠳᠡ ᠤᠨᠢᠰᠤᠯᠠᠭᠳᠠᠪᠠ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="834"/>
|
||
- <location filename="../src/mainwindow.cpp" line="835"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="688"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="689"/>
|
||
<source>Password cannot be empty</source>
|
||
<translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠬᠤᠭᠤᠰᠤᠨ ᠪᠠᠢᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ</translation>
|
||
</message>
|
||
@@ -221,8 +228,8 @@
|
||
<translation type="vanished">无法验证%1,请输入密码.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="242"/>
|
||
- <location filename="../src/mainwindow.cpp" line="246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1558"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1562"/>
|
||
<source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
<translation>%1ᠶᠢᠨ/ᠦᠨ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠢᠴᠠᠭᠠᠯᠳᠠ ᠢᠯᠠᠭᠳᠠᠪᠠ ᠂ ᠲᠠ ᠪᠠᠰᠠ%2 ᠤᠳᠠᠭᠠᠨᠤ ᠳᠤᠷᠱᠢᠬᠤ ᠵᠠᠪᠱᠢᠶᠠᠨ ᠲᠠᠢ</translation>
|
||
</message>
|
||
@@ -231,42 +238,42 @@
|
||
<translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="731"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="582"/>
|
||
<source>Password: </source>
|
||
<translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋᠄ </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="335"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="165"/>
|
||
<source>Please enter your password or enroll your fingerprint </source>
|
||
<translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠪᠤᠶᠤ ᠬᠤᠷᠤᠭᠤᠨ ᠤ᠋ ᠤᠷᠤᠮ ᠵᠢᠨᠨ ᠤᠷᠤᠭᠤᠯᠤᠭᠠᠷᠠᠢ </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="259"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1575"/>
|
||
<source>Abnormal network</source>
|
||
<translation>ᠲᠤᠷ ᠰᠦᠯᠵᠢᠶᠡ ᠬᠡᠪ ᠤ᠋ᠨ ᠪᠤᠰᠤ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="665"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="517"/>
|
||
<source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
<translation>ᠳᠤᠰ ᠤᠳᠠᠭᠠᠨ ᠤ᠋ ᠠᠵᠢᠯᠯᠠᠬᠤᠢ ᠵᠢᠨ ᠬᠠᠮᠢᠶᠠᠷᠤᠭᠴᠢ ᠵᠢᠨ ᠡᠷᠬᠡ ᠤᠯᠭᠤᠯᠳᠠ ᠪᠡᠷ ᠰᠠᠶᠢ ᠦᠷᠬᠦᠯᠵᠢᠯᠡᠨ ᠬᠡᠷᠡᠭᠵᠢᠬᠦᠯᠦᠨᠡ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠵᠢᠨᠨ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠳᠤᠰ ᠠᠵᠢᠯᠯᠠᠬᠤᠢ ᠵᠢ ᠵᠦᠪᠰᠢᠶᠡᠷᠡᠭᠡᠷᠡᠢ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="733"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="584"/>
|
||
<source>_Password: </source>
|
||
<translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋: </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="735"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="586"/>
|
||
<source>_Password:</source>
|
||
<translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="850"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="704"/>
|
||
<source>Authentication failed, please try again.</source>
|
||
<translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ᠂ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
<source>days left</source>
|
||
<translation>ᠡᠳᠦᠷ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨᠠ</translation>
|
||
</message>
|
||
@@ -279,16 +286,16 @@
|
||
<translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="226"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1415"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1417"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1243"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1539"/>
|
||
<source>Failed to verify %1, please enter password to unlock</source>
|
||
<translation>%1ᠶᠢ/ᠢ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠠᠷᠭᠠ ᠦᠬᠡᠢ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="231"/>
|
||
- <location filename="../src/mainwindow.cpp" line="233"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1419"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1249"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1545"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1548"/>
|
||
<source>Unable to verify %1, please enter password to unlock</source>
|
||
<translation>%1ᠶᠢ/ᠢ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠠᠷᠭᠠ ᠦᠬᠡᠢ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
|
||
</message>
|
||
@@ -297,86 +304,121 @@
|
||
<translation type="vanished">网络异常</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="671"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="522"/>
|
||
<source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
<translation>ᠨᠢᠭᠡ ᠫᠡᠷᠦᠭᠷᠡᠮ ᠶᠠᠭ ᠨᠢᠭᠡ ᠤᠨᠠᠴᠠ ᠡᠷᠬᠡ ᠬᠡᠷᠡᠭᠰᠡᠬᠦ ᠬᠦᠳᠡᠯᠬᠡᠬᠡᠨ ᠢ᠋ ᠬᠡᠷᠡᠭᠵᠢᠬᠦᠯᠬᠦ ᠪᠡᠷ ᠳᠤᠷᠰᠢᠵᠤ ᠪᠠᠢᠨᠠ᠂ ᠳᠤᠰ ᠬᠦᠳᠡᠯᠬᠡᠬᠡᠨ ᠢ᠋ ᠬᠦᠢᠴᠡᠳᠬᠡᠬᠦ ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ ᠵᠢ ᠱᠠᠭᠠᠷᠳᠠᠵᠤ ᠪᠠᠢᠨᠠ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="108"/>
|
||
- <location filename="../src/mainwindow.cpp" line="729"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="88"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="580"/>
|
||
<source>Input Password</source>
|
||
<translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠬᠤ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="105"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="85"/>
|
||
<source>Insert the ukey into the USB port</source>
|
||
<translation>ᠠᠮᠤᠷ ᠲᠦᠪᠰᠢᠨ ᠦ ᠨᠢᠭᠤᠴᠠ ᠶᠢ USB ᠦᠵᠦᠭᠦᠷ ᠲᠦ ᠬᠠᠳᠬᠤᠵᠤ ᠣᠷᠣᠭᠠᠷᠠᠢ ᠃</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="107"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="87"/>
|
||
<source>Enter the ukey password</source>
|
||
<translation>ᠠᠮᠤᠷ ᠲᠦᠪᠰᠢᠨ ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ ᠢ ᠣᠷᠣᠭᠤᠯᠤᠨᠠ ᠃</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="93"/>
|
||
+ <source>Close</source>
|
||
+ <translation>ᠬᠠᠭᠠᠬᠤ</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1261"/>
|
||
+ <source>Facial recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1264"/>
|
||
+ <source>Fingerprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1267"/>
|
||
+ <source>Voiceprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1270"/>
|
||
+ <source>Finger veins recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1273"/>
|
||
+ <source>Iris recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1276"/>
|
||
+ <source>Use the bound wechat scanning code to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1579"/>
|
||
+ <source>Acquisition failure</source>
|
||
+ <translation>ᠢᠯᠠᠭᠳᠠᠯ ᠢ ᠣᠯᠪᠠ ᠃</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
<source>hours left</source>
|
||
<translation>ᠨᠢᠭᠡ ᠴᠠᠭ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨᠠ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
<source>minutes left</source>
|
||
<translation>ᠮᠢᠨᠦ᠋ᠲ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨᠠ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>seconds left</source>
|
||
<translation>ᠰᠸᠺᠦᠨ᠋ᠲ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨᠠ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="880"/>
|
||
- <location filename="../src/mainwindow.cpp" line="888"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="734"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="742"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1258"/>
|
||
<source>Input your password to authentication</source>
|
||
<translation>ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ ᠣᠷᠣᠭᠤᠯᠬᠤ ᠳᠤ ᠡᠷᠬᠡ ᠣᠯᠭᠣᠨᠠ ᠃</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1434"/>
|
||
<source>Verify face recognition or enter password to unlock</source>
|
||
- <translation>ᠨᠢᠭᠤᠷ ᠱᠢᠷᠪᠢᠵᠤ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
|
||
+ <translation type="vanished">ᠨᠢᠭᠤᠷ ᠱᠢᠷᠪᠢᠵᠤ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1439"/>
|
||
<source>Press fingerprint or enter password to unlock</source>
|
||
- <translation>ᠬᠤᠷᠤᠭᠤᠨᠤ ᠤᠷᠤᠮ ᠳᠠᠷᠤᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
|
||
+ <translation type="vanished">ᠬᠤᠷᠤᠭᠤᠨᠤ ᠤᠷᠤᠮ ᠳᠠᠷᠤᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1444"/>
|
||
<source>Verify voiceprint or enter password to unlock</source>
|
||
- <translation>ᠳᠠᠭᠤᠪᠠᠷ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
|
||
+ <translation type="vanished">ᠳᠠᠭᠤᠪᠠᠷ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1449"/>
|
||
<source>Verify finger vein or enter password to unlock</source>
|
||
- <translation>ᠬᠤᠷᠤᠭᠤᠨᠤ ᠨᠠᠮᠵᠢᠭᠤᠨ ᠰᠤᠳᠠᠯᠢᠶᠠᠷ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
|
||
+ <translation type="vanished">ᠬᠤᠷᠤᠭᠤᠨᠤ ᠨᠠᠮᠵᠢᠭᠤᠨ ᠰᠤᠳᠠᠯᠢᠶᠠᠷ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1454"/>
|
||
<source>Verify iris or enter password to unlock</source>
|
||
- <translation>ᠰᠤᠯᠤᠩᠭᠠ ᠪᠦᠷᠬᠦᠪᠴᠢᠶᠢ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
|
||
+ <translation type="vanished">ᠰᠤᠯᠤᠩᠭᠠ ᠪᠦᠷᠬᠦᠪᠴᠢᠶᠢ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1459"/>
|
||
<source>Use the bound wechat scanning code or enter the password to unlock</source>
|
||
- <translation>ᠤᠶᠠᠭᠰᠠᠨ ᠸᠢᠴᠠᠲᠢᠶᠠᠷ ᠺᠤᠳ᠋ ᠱᠢᠷᠪᠢᠬᠦ᠌ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
|
||
+ <translation type="vanished">ᠤᠶᠠᠭᠰᠠᠨ ᠸᠢᠴᠠᠲᠢᠶᠠᠷ ᠺᠤᠳ᠋ ᠱᠢᠷᠪᠢᠬᠦ᠌ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
|
||
</message>
|
||
<message>
|
||
<source>Use the bound wechat scanning code or enter the password to log in</source>
|
||
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>Account locked,</source>
|
||
<translation>ᠳᠠᠨᠭᠰᠠ ᠵᠢ ᠨᠢᠬᠡᠨᠳᠡ ᠤᠨᠢᠰᠤᠯᠠᠪᠠ</translation>
|
||
</message>
|
||
@@ -388,17 +430,17 @@
|
||
<context>
|
||
<name>PolkitListener</name>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="88"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="86"/>
|
||
<source>Another client is already authenticating, please try again later.</source>
|
||
<translation>ᠦᠬᠡᠷᠡ ᠨᠢᠭᠡ ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠦᠵᠦᠬᠦᠷᠯᠢᠭ ᠢ᠋ ᠶᠠᠭ ᠨᠤᠳᠠᠯᠠᠵᠤ ᠪᠠᠢᠨᠠ᠂ ᠤᠳᠠᠰᠬᠢᠭᠠᠳ ᠳᠠᠬᠢᠨ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="265"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="253"/>
|
||
<source>Authentication failure, please try again.</source>
|
||
<translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ᠂ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="272"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="259"/>
|
||
<source>Password input error!</source>
|
||
<translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠢ᠋ ᠪᠤᠷᠤᠭᠤ ᠤᠷᠤᠭᠤᠯᠪᠠ!</translation>
|
||
</message>
|
||
diff --git a/polkit-agent/i18n_ts/pt.ts b/polkit-agent/i18n_ts/pt.ts
|
||
index 155dec7..90bc880 100644
|
||
--- a/polkit-agent/i18n_ts/pt.ts
|
||
+++ b/polkit-agent/i18n_ts/pt.ts
|
||
@@ -15,6 +15,13 @@
|
||
<translation type="obsolete">Formato</translation>
|
||
</message>
|
||
</context>
|
||
+<context>
|
||
+ <name>FullScreenBackground</name>
|
||
+ <message>
|
||
+ <source>Authentication</source>
|
||
+ <translation type="unfinished">Autenticação</translation>
|
||
+ </message>
|
||
+</context>
|
||
<context>
|
||
<name>MainWindow</name>
|
||
<message>
|
||
@@ -59,7 +66,7 @@
|
||
</message>
|
||
<message>
|
||
<source>Authentication</source>
|
||
- <translation>Autenticação</translation>
|
||
+ <translation type="vanished">Autenticação</translation>
|
||
</message>
|
||
<message>
|
||
<source>in authentication, please wait...</source>
|
||
@@ -126,75 +133,83 @@
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Verify face recognition or enter password to unlock</source>
|
||
+ <source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Press fingerprint or enter password to unlock</source>
|
||
+ <source>Input Password</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Verify voiceprint or enter password to unlock</source>
|
||
+ <source>Failed to verify %1, please enter password to unlock</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Verify finger vein or enter password to unlock</source>
|
||
+ <source>Unable to verify %1, please enter password to unlock</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Verify iris or enter password to unlock</source>
|
||
+ <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
+ <source>_Password:</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Input Password</source>
|
||
+ <source>_Password: </source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Use the bound wechat scanning code or enter the password to unlock</source>
|
||
+ <source>Abnormal network</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Failed to verify %1, please enter password to unlock</source>
|
||
+ <source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Unable to verify %1, please enter password to unlock</source>
|
||
+ <source>Insert the ukey into the USB port</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
+ <source>Enter the ukey password</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>_Password:</source>
|
||
+ <source>Input your password to authentication</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>_Password: </source>
|
||
+ <source>Close</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Abnormal network</source>
|
||
+ <source>Acquisition failure</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
+ <source>Facial recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Insert the ukey into the USB port</source>
|
||
+ <source>Fingerprint recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Enter the ukey password</source>
|
||
+ <source>Voiceprint recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Input your password to authentication</source>
|
||
+ <source>Finger veins recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <source>Iris recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <source>Use the bound wechat scanning code to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
</context>
|
||
diff --git a/polkit-agent/i18n_ts/ru.ts b/polkit-agent/i18n_ts/ru.ts
|
||
index c75c155..e8c5d91 100644
|
||
--- a/polkit-agent/i18n_ts/ru.ts
|
||
+++ b/polkit-agent/i18n_ts/ru.ts
|
||
@@ -15,6 +15,13 @@
|
||
<translation type="obsolete">форма</translation>
|
||
</message>
|
||
</context>
|
||
+<context>
|
||
+ <name>FullScreenBackground</name>
|
||
+ <message>
|
||
+ <source>Authentication</source>
|
||
+ <translation type="unfinished">Аутентификация</translation>
|
||
+ </message>
|
||
+</context>
|
||
<context>
|
||
<name>MainWindow</name>
|
||
<message>
|
||
@@ -59,7 +66,7 @@
|
||
</message>
|
||
<message>
|
||
<source>Authentication</source>
|
||
- <translation>Аутентификация</translation>
|
||
+ <translation type="vanished">Аутентификация</translation>
|
||
</message>
|
||
<message>
|
||
<source>in authentication, please wait...</source>
|
||
@@ -126,75 +133,83 @@
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Verify face recognition or enter password to unlock</source>
|
||
+ <source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Press fingerprint or enter password to unlock</source>
|
||
+ <source>Input Password</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Verify voiceprint or enter password to unlock</source>
|
||
+ <source>Failed to verify %1, please enter password to unlock</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Verify finger vein or enter password to unlock</source>
|
||
+ <source>Unable to verify %1, please enter password to unlock</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Verify iris or enter password to unlock</source>
|
||
+ <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
+ <source>_Password:</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Input Password</source>
|
||
+ <source>_Password: </source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Use the bound wechat scanning code or enter the password to unlock</source>
|
||
+ <source>Abnormal network</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Failed to verify %1, please enter password to unlock</source>
|
||
+ <source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Unable to verify %1, please enter password to unlock</source>
|
||
+ <source>Insert the ukey into the USB port</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
+ <source>Enter the ukey password</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>_Password:</source>
|
||
+ <source>Input your password to authentication</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>_Password: </source>
|
||
+ <source>Close</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Abnormal network</source>
|
||
+ <source>Acquisition failure</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
+ <source>Facial recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Insert the ukey into the USB port</source>
|
||
+ <source>Fingerprint recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Enter the ukey password</source>
|
||
+ <source>Voiceprint recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <source>Input your password to authentication</source>
|
||
+ <source>Finger veins recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <source>Iris recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <source>Use the bound wechat scanning code to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
</context>
|
||
diff --git a/polkit-agent/i18n_ts/tr.ts b/polkit-agent/i18n_ts/tr.ts
|
||
index f59c7a3..89b19dd 100644
|
||
--- a/polkit-agent/i18n_ts/tr.ts
|
||
+++ b/polkit-agent/i18n_ts/tr.ts
|
||
@@ -31,160 +31,178 @@
|
||
<translation type="obsolete">Ses İzi</translation>
|
||
</message>
|
||
</context>
|
||
+<context>
|
||
+ <name>FullScreenBackground</name>
|
||
+ <message>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="75"/>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="104"/>
|
||
+ <source>Authentication</source>
|
||
+ <translation type="unfinished">Kimlik Doğrulama</translation>
|
||
+ </message>
|
||
+</context>
|
||
<context>
|
||
<name>MainWindow</name>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="66"/>
|
||
<source>Authentication</source>
|
||
- <translation>Kimlik Doğrulama</translation>
|
||
+ <translation type="vanished">Kimlik Doğrulama</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="226"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1415"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1417"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1243"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1539"/>
|
||
<source>Failed to verify %1, please enter password to unlock</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="231"/>
|
||
- <location filename="../src/mainwindow.cpp" line="233"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1419"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1249"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1545"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1548"/>
|
||
<source>Unable to verify %1, please enter password to unlock</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="242"/>
|
||
- <location filename="../src/mainwindow.cpp" line="246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1558"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1562"/>
|
||
<source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="259"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1575"/>
|
||
<source>Abnormal network</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="665"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="517"/>
|
||
<source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="671"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="522"/>
|
||
<source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="108"/>
|
||
- <location filename="../src/mainwindow.cpp" line="729"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="88"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="580"/>
|
||
<source>Input Password</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="105"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="85"/>
|
||
<source>Insert the ukey into the USB port</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="107"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="87"/>
|
||
<source>Enter the ukey password</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
- <source>Account locked,</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="93"/>
|
||
+ <source>Close</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
- <source>days left</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1261"/>
|
||
+ <source>Facial recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
- <source>hours left</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1264"/>
|
||
+ <source>Fingerprint recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
- <source>minutes left</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1267"/>
|
||
+ <source>Voiceprint recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
- <source>seconds left</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1270"/>
|
||
+ <source>Finger veins recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="834"/>
|
||
- <location filename="../src/mainwindow.cpp" line="835"/>
|
||
- <source>Password cannot be empty</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1273"/>
|
||
+ <source>Iris recognition to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="880"/>
|
||
- <location filename="../src/mainwindow.cpp" line="888"/>
|
||
- <source>Input your password to authentication</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1276"/>
|
||
+ <source>Use the bound wechat scanning code to authorization</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1079"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1183"/>
|
||
- <source>Use password</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1579"/>
|
||
+ <source>Acquisition failure</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1219"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1292"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1293"/>
|
||
- <source>Please try again in %1 minutes.</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
+ <source>Account locked,</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1230"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1302"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1303"/>
|
||
- <source>Please try again in %1 seconds.</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
+ <source>days left</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1240"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1241"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1311"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1312"/>
|
||
- <source>Account locked permanently.</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
+ <source>hours left</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
+ <source>minutes left</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
+ <source>seconds left</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1434"/>
|
||
- <source>Verify face recognition or enter password to unlock</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="688"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="689"/>
|
||
+ <source>Password cannot be empty</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1439"/>
|
||
- <source>Press fingerprint or enter password to unlock</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="734"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="742"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1258"/>
|
||
+ <source>Input your password to authentication</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1444"/>
|
||
- <source>Verify voiceprint or enter password to unlock</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="876"/>
|
||
+ <source>Use password</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1449"/>
|
||
- <source>Verify finger vein or enter password to unlock</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1003"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1081"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1082"/>
|
||
+ <source>Please try again in %1 minutes.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1454"/>
|
||
- <source>Verify iris or enter password to unlock</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1015"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1093"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1094"/>
|
||
+ <source>Please try again in %1 seconds.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1459"/>
|
||
- <source>Use the bound wechat scanning code or enter the password to unlock</source>
|
||
+ <location filename="../src/mainwindow.cpp" line="1026"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1027"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1104"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1105"/>
|
||
+ <source>Account locked permanently.</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
<message>
|
||
@@ -205,9 +223,9 @@
|
||
<translation type="obsolete">Parola</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="409"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1075"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1143"/>
|
||
+ <location filename="../src/mainwindow.ui" line="398"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="874"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="943"/>
|
||
<source>Biometric</source>
|
||
<translation>Biyometrik</translation>
|
||
</message>
|
||
@@ -256,19 +274,19 @@
|
||
<translation type="vanished">Polkit.caller-pid:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="441"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1077"/>
|
||
+ <location filename="../src/mainwindow.ui" line="436"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="875"/>
|
||
<source>Cancel</source>
|
||
<translation>İptal</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="460"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1073"/>
|
||
+ <location filename="../src/mainwindow.ui" line="461"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="873"/>
|
||
<source>Authenticate</source>
|
||
<translation>Kimlik Doğrulaması</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="480"/>
|
||
+ <location filename="../src/mainwindow.ui" line="493"/>
|
||
<source>use password</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
@@ -277,7 +295,7 @@
|
||
<translation type="obsolete">Kimlik Doğrulaması</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="335"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="165"/>
|
||
<source>Please enter your password or enroll your fingerprint </source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
@@ -290,22 +308,22 @@
|
||
<translation type="vanished">Bir uygulama, ayrıcalıklar gerektiren bir eylem gerçekleştirmeye çalışıyor. Bu işlemi gerçekleştirmek için kimlik doğrulaması gerekiyor.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="731"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="582"/>
|
||
<source>Password: </source>
|
||
<translation type="unfinished">Parola: </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="733"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="584"/>
|
||
<source>_Password: </source>
|
||
<translation type="unfinished">_Parola: </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="735"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="586"/>
|
||
<source>_Password:</source>
|
||
<translation type="unfinished">_Parola:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="850"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="704"/>
|
||
<source>Authentication failed, please try again.</source>
|
||
<translation>Kimlik doğrulama başarısız, lütfen tekrar deneyin.</translation>
|
||
</message>
|
||
@@ -317,17 +335,17 @@
|
||
<context>
|
||
<name>PolkitListener</name>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="88"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="86"/>
|
||
<source>Another client is already authenticating, please try again later.</source>
|
||
<translation>Başka bir hesap zaten kimlik doğrulaması yapıyor, lütfen daha sonra tekrar deneyin.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="265"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="253"/>
|
||
<source>Authentication failure, please try again.</source>
|
||
<translation>Kimlik doğrulama hatalı, lütfen tekrar deneyin.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="272"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="259"/>
|
||
<source>Password input error!</source>
|
||
<translation type="unfinished"></translation>
|
||
</message>
|
||
diff --git a/polkit-agent/i18n_ts/ug.ts b/polkit-agent/i18n_ts/ug.ts
|
||
index 58164c0..8614ae4 100644
|
||
--- a/polkit-agent/i18n_ts/ug.ts
|
||
+++ b/polkit-agent/i18n_ts/ug.ts
|
||
@@ -51,6 +51,15 @@
|
||
<translation type="vanished">二维码</translation>
|
||
</message>
|
||
</context>
|
||
+<context>
|
||
+ <name>FullScreenBackground</name>
|
||
+ <message>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="75"/>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="104"/>
|
||
+ <source>Authentication</source>
|
||
+ <translation type="unfinished">راستىنى دەلىللەش</translation>
|
||
+ </message>
|
||
+</context>
|
||
<context>
|
||
<name>LoginOptionsWidget</name>
|
||
<message>
|
||
@@ -65,9 +74,8 @@
|
||
<context>
|
||
<name>MainWindow</name>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="66"/>
|
||
<source>Authentication</source>
|
||
- <translation>راستىنى دەلىللەش</translation>
|
||
+ <translation type="vanished">راستىنى دەلىللەش</translation>
|
||
</message>
|
||
<message>
|
||
<source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
|
||
@@ -91,14 +99,14 @@
|
||
<translation type="vanished">密码</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="409"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1075"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1143"/>
|
||
+ <location filename="../src/mainwindow.ui" line="398"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="874"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="943"/>
|
||
<source>Biometric</source>
|
||
<translation>بىئولەگىيەلىك ئالاھىدىلىكنى ئىشلىتىش</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="480"/>
|
||
+ <location filename="../src/mainwindow.ui" line="493"/>
|
||
<source>use password</source>
|
||
<translation>مەخپىي نومۇر ئىشلىتىش</translation>
|
||
</message>
|
||
@@ -147,20 +155,19 @@
|
||
<translation type="vanished">Polkit.caller-pid:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="441"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1077"/>
|
||
+ <location filename="../src/mainwindow.ui" line="436"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="875"/>
|
||
<source>Cancel</source>
|
||
<translation>ئەمەلدىن قالدۇرۇش</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="460"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1073"/>
|
||
+ <location filename="../src/mainwindow.ui" line="461"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="873"/>
|
||
<source>Authenticate</source>
|
||
<translation>ھوقۇق بېرىش</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1079"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1183"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="876"/>
|
||
<source>Use password</source>
|
||
<translation>مەخپىي نومۇر ئىشلىتىش ئارقىلىق دەلىللەش</translation>
|
||
</message>
|
||
@@ -185,30 +192,30 @@
|
||
<translation type="vanished">认证中,请稍等...</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1219"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1292"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1293"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1003"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1081"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1082"/>
|
||
<source>Please try again in %1 minutes.</source>
|
||
<translation>٪1 مىنۇت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1230"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1302"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1303"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1015"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1093"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1094"/>
|
||
<source>Please try again in %1 seconds.</source>
|
||
<translation>٪1 سېكۇنت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1240"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1241"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1311"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1312"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1026"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1027"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1104"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1105"/>
|
||
<source>Account locked permanently.</source>
|
||
<translation>ھېسابات مەڭگۈلۈك قۇلۇپلىنىدۇ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="834"/>
|
||
- <location filename="../src/mainwindow.cpp" line="835"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="688"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="689"/>
|
||
<source>Password cannot be empty</source>
|
||
<translation>مەخپىي نومۇرنى بوش قويۇشقا بولمايدۇ</translation>
|
||
</message>
|
||
@@ -221,8 +228,8 @@
|
||
<translation type="vanished">无法验证%1,请输入密码.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="242"/>
|
||
- <location filename="../src/mainwindow.cpp" line="246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1558"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1562"/>
|
||
<source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
<translation>٪1 نى دەلىللەش مەغلۇپ بولدى، سىزدە يەنىلا ٪2 دەلىللەش پۇرسىتى بار</translation>
|
||
</message>
|
||
@@ -231,42 +238,42 @@
|
||
<translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="731"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="582"/>
|
||
<source>Password: </source>
|
||
<translation>مەخپىي نومۇر </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="335"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="165"/>
|
||
<source>Please enter your password or enroll your fingerprint </source>
|
||
<translation>مەخپىي نومۇرىڭىزنى كىرگۈزۈڭ ياكى بارماق ئىزىڭىزنى تونۇتۇڭ </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="259"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1575"/>
|
||
<source>Abnormal network</source>
|
||
<translation>بىنورمال تور</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="665"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="517"/>
|
||
<source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
<translation>بۇ مەشغۇلات باشقۇرغۇچىنىڭ ھوقۇق بېرىشىنى تەلەپ قىلىدۇ.مەخپىي نومۇرنى كىرگۈزۈپ بي قېتىمقى مەشغۇلاتنىڭ ئېلىپ بېرىلىشىغا يول قويۇڭ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="733"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="584"/>
|
||
<source>_Password: </source>
|
||
<translation>مەخپىي نومۇر </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="735"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="586"/>
|
||
<source>_Password:</source>
|
||
<translation>مەخپىي نومۇر</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="850"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="704"/>
|
||
<source>Authentication failed, please try again.</source>
|
||
<translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناڭ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
<source>days left</source>
|
||
<translation>1 كۈندىن كېيىن سىناب بېقىڭ</translation>
|
||
</message>
|
||
@@ -279,16 +286,16 @@
|
||
<translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="226"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1415"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1417"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1243"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1539"/>
|
||
<source>Failed to verify %1, please enter password to unlock</source>
|
||
<translation>٪1 نى دەلىللەش مەغلۇپ بولدى، مەخپى نۇمۇر كىرگۈزۈڭ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="231"/>
|
||
- <location filename="../src/mainwindow.cpp" line="233"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1419"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1249"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1545"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1548"/>
|
||
<source>Unable to verify %1, please enter password to unlock</source>
|
||
<translation>٪1 نى دەلىللەشكە ئامالسىز، مەخپىي نومۇرنى كىرگۈزۈپ قۇلۇپنى ئېچىڭ</translation>
|
||
</message>
|
||
@@ -297,86 +304,121 @@
|
||
<translation type="vanished">网络异常</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="671"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="522"/>
|
||
<source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
<translation>بىر پروگرامما ئىمتىياز تەلەپ قىلىدىغان ھەرىكەتنى قىلىشقا ئۇرۇنماقتا. بۇ ھەرىكەتنى ئىجرا قىلىش ئۈچۈن ھوقۇق تەلەپ قىلىدۇ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="108"/>
|
||
- <location filename="../src/mainwindow.cpp" line="729"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="88"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="580"/>
|
||
<source>Input Password</source>
|
||
<translation>ئىم كىرگۈزۈش</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="105"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="85"/>
|
||
<source>Insert the ukey into the USB port</source>
|
||
<translation>ukey نى USB ئېغىزىغا چېتىپ قويۇڭ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="107"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="87"/>
|
||
<source>Enter the ukey password</source>
|
||
<translation>ukey مەخپىي نومۇرىنى كىرگۈزۈڭ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="93"/>
|
||
+ <source>Close</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1261"/>
|
||
+ <source>Facial recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1264"/>
|
||
+ <source>Fingerprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1267"/>
|
||
+ <source>Voiceprint recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1270"/>
|
||
+ <source>Finger veins recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1273"/>
|
||
+ <source>Iris recognition to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1276"/>
|
||
+ <source>Use the bound wechat scanning code to authorization</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1579"/>
|
||
+ <source>Acquisition failure</source>
|
||
+ <translation type="unfinished"></translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
<source>hours left</source>
|
||
<translation>بىر سائەتتىن كېيىن ئېچىلىدۇ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
<source>minutes left</source>
|
||
<translation>بىر مىنۇتتىن كېيىن ئېچىلىدۇ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>seconds left</source>
|
||
<translation>بىر سېكۇنتتىن كېيىن ئېچىلىدۇ</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="880"/>
|
||
- <location filename="../src/mainwindow.cpp" line="888"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="734"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="742"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1258"/>
|
||
<source>Input your password to authentication</source>
|
||
<translation>مەخپىي نومۇرنى كىرگۈزۈپ كىملىك دەلىللەش.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1434"/>
|
||
<source>Verify face recognition or enter password to unlock</source>
|
||
- <translation>چىراي تونۇشنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
|
||
+ <translation type="vanished">چىراي تونۇشنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1439"/>
|
||
<source>Press fingerprint or enter password to unlock</source>
|
||
- <translation>بارماق ئىزىنى بېسىش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
|
||
+ <translation type="vanished">بارماق ئىزىنى بېسىش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1444"/>
|
||
<source>Verify voiceprint or enter password to unlock</source>
|
||
- <translation>ئاۋاز ئىزىنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
|
||
+ <translation type="vanished">ئاۋاز ئىزىنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1449"/>
|
||
<source>Verify finger vein or enter password to unlock</source>
|
||
- <translation>بارماق ئىزى ئارقىلىق ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
|
||
+ <translation type="vanished">بارماق ئىزى ئارقىلىق ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1454"/>
|
||
<source>Verify iris or enter password to unlock</source>
|
||
- <translation>Iris نى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
|
||
+ <translation type="vanished">Iris نى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1459"/>
|
||
<source>Use the bound wechat scanning code or enter the password to unlock</source>
|
||
- <translation>باغلانغان ئۈندىدارنى سىكاننېرلاش كودى ياكى مەخپىي نومۇرىنى كىرگۈزۈپ قۇلۇپ ئېچىش</translation>
|
||
+ <translation type="vanished">باغلانغان ئۈندىدارنى سىكاننېرلاش كودى ياكى مەخپىي نومۇرىنى كىرگۈزۈپ قۇلۇپ ئېچىش</translation>
|
||
</message>
|
||
<message>
|
||
<source>Use the bound wechat scanning code or enter the password to log in</source>
|
||
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>Account locked,</source>
|
||
<translation>ئىشلىتىش نومۇرىڭىز قۇلۇپلىنىپ قالدى</translation>
|
||
</message>
|
||
@@ -388,17 +430,17 @@
|
||
<context>
|
||
<name>PolkitListener</name>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="88"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="86"/>
|
||
<source>Another client is already authenticating, please try again later.</source>
|
||
<translation>يەنە بىر خېرىدار دەلىللەۋاتىدۇ، سەل تۇرۇپ قايتا سىناڭ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="265"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="253"/>
|
||
<source>Authentication failure, please try again.</source>
|
||
<translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناڭ.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="272"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="259"/>
|
||
<source>Password input error!</source>
|
||
<translation>كىرگۈزگەن مەخپىي نومۇر خاتا بولدى</translation>
|
||
</message>
|
||
diff --git a/polkit-agent/i18n_ts/zh_CN.ts b/polkit-agent/i18n_ts/zh_CN.ts
|
||
index 070732c..5fc6ea0 100644
|
||
--- a/polkit-agent/i18n_ts/zh_CN.ts
|
||
+++ b/polkit-agent/i18n_ts/zh_CN.ts
|
||
@@ -51,6 +51,15 @@
|
||
<translation type="vanished">二维码</translation>
|
||
</message>
|
||
</context>
|
||
+<context>
|
||
+ <name>FullScreenBackground</name>
|
||
+ <message>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="75"/>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="104"/>
|
||
+ <source>Authentication</source>
|
||
+ <translation type="unfinished">授权</translation>
|
||
+ </message>
|
||
+</context>
|
||
<context>
|
||
<name>LoginOptionsWidget</name>
|
||
<message>
|
||
@@ -65,9 +74,8 @@
|
||
<context>
|
||
<name>MainWindow</name>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="66"/>
|
||
<source>Authentication</source>
|
||
- <translation>授权</translation>
|
||
+ <translation type="vanished">授权</translation>
|
||
</message>
|
||
<message>
|
||
<source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
|
||
@@ -91,14 +99,14 @@
|
||
<translation type="vanished">密码</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="409"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1075"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1143"/>
|
||
+ <location filename="../src/mainwindow.ui" line="398"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="874"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="943"/>
|
||
<source>Biometric</source>
|
||
<translation>使用生物识别</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="480"/>
|
||
+ <location filename="../src/mainwindow.ui" line="493"/>
|
||
<source>use password</source>
|
||
<translation>使用密码验证</translation>
|
||
</message>
|
||
@@ -147,20 +155,19 @@
|
||
<translation type="vanished">Polkit.caller-pid:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="441"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1077"/>
|
||
+ <location filename="../src/mainwindow.ui" line="436"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="875"/>
|
||
<source>Cancel</source>
|
||
<translation>取消</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="460"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1073"/>
|
||
+ <location filename="../src/mainwindow.ui" line="461"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="873"/>
|
||
<source>Authenticate</source>
|
||
<translation>授权</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1079"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1183"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="876"/>
|
||
<source>Use password</source>
|
||
<translation>使用密码验证</translation>
|
||
</message>
|
||
@@ -185,30 +192,30 @@
|
||
<translation type="vanished">认证中,请稍等...</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1219"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1292"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1293"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1003"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1081"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1082"/>
|
||
<source>Please try again in %1 minutes.</source>
|
||
<translation>请%1分钟后再试</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1230"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1302"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1303"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1015"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1093"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1094"/>
|
||
<source>Please try again in %1 seconds.</source>
|
||
<translation>请%1秒后再试</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1240"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1241"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1311"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1312"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1026"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1027"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1104"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1105"/>
|
||
<source>Account locked permanently.</source>
|
||
<translation>账号已被永久锁定</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="834"/>
|
||
- <location filename="../src/mainwindow.cpp" line="835"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="688"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="689"/>
|
||
<source>Password cannot be empty</source>
|
||
<translation>密码不能为空</translation>
|
||
</message>
|
||
@@ -221,8 +228,8 @@
|
||
<translation type="vanished">无法验证%1,请输入密码.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="242"/>
|
||
- <location filename="../src/mainwindow.cpp" line="246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1558"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1562"/>
|
||
<source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
<translation>验证%1失败,您还有%2次尝试机会</translation>
|
||
</message>
|
||
@@ -231,42 +238,42 @@
|
||
<translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="731"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="582"/>
|
||
<source>Password: </source>
|
||
<translation>密码: </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="335"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="165"/>
|
||
<source>Please enter your password or enroll your fingerprint </source>
|
||
<translation>请输入密码或者录入指纹</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="259"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1575"/>
|
||
<source>Abnormal network</source>
|
||
<translation>网络异常</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="665"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="517"/>
|
||
<source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
<translation>本次操作需要通过管理员的授权才能继续执行,请输入密码以允许本次操作。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="733"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="584"/>
|
||
<source>_Password: </source>
|
||
<translation>密码: </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="735"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="586"/>
|
||
<source>_Password:</source>
|
||
<translation>密码:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="850"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="704"/>
|
||
<source>Authentication failed, please try again.</source>
|
||
<translation>认证失败,请重试。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
<source>days left</source>
|
||
<translation>天后解锁</translation>
|
||
</message>
|
||
@@ -279,16 +286,16 @@
|
||
<translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="226"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1415"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1417"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1243"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1539"/>
|
||
<source>Failed to verify %1, please enter password to unlock</source>
|
||
<translation>验证%1失败,请输入密码解锁</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="231"/>
|
||
- <location filename="../src/mainwindow.cpp" line="233"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1419"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1249"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1545"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1548"/>
|
||
<source>Unable to verify %1, please enter password to unlock</source>
|
||
<translation>无法验证%1,请输入密码解锁</translation>
|
||
</message>
|
||
@@ -297,86 +304,121 @@
|
||
<translation type="vanished">网络异常</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="671"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="522"/>
|
||
<source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
<translation>一个程序正试图执行一个需要特权的动作,要求授权以执行该动作。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="108"/>
|
||
- <location filename="../src/mainwindow.cpp" line="729"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="88"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="580"/>
|
||
<source>Input Password</source>
|
||
<translation>输入密码</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="105"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="85"/>
|
||
<source>Insert the ukey into the USB port</source>
|
||
<translation>请将安全密钥插入USB端口</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="107"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="87"/>
|
||
<source>Enter the ukey password</source>
|
||
<translation>输入安全密钥密码</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="93"/>
|
||
+ <source>Close</source>
|
||
+ <translation>关闭</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1261"/>
|
||
+ <source>Facial recognition to authorization</source>
|
||
+ <translation>识别人脸以授权</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1264"/>
|
||
+ <source>Fingerprint recognition to authorization</source>
|
||
+ <translation>识别指纹以授权</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1267"/>
|
||
+ <source>Voiceprint recognition to authorization</source>
|
||
+ <translation>识别声纹以授权</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1270"/>
|
||
+ <source>Finger veins recognition to authorization</source>
|
||
+ <translation>识别指静脉以授权</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1273"/>
|
||
+ <source>Iris recognition to authorization</source>
|
||
+ <translation>识别虹膜以授权</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1276"/>
|
||
+ <source>Use the bound wechat scanning code to authorization</source>
|
||
+ <translation>微信扫码以授权</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1579"/>
|
||
+ <source>Acquisition failure</source>
|
||
+ <translation>获取失败</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
<source>hours left</source>
|
||
<translation>小时后解锁</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
<source>minutes left</source>
|
||
<translation>分钟后解锁</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>seconds left</source>
|
||
<translation>秒后解锁</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="880"/>
|
||
- <location filename="../src/mainwindow.cpp" line="888"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="734"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="742"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1258"/>
|
||
<source>Input your password to authentication</source>
|
||
<translation>输入密码以授权</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1434"/>
|
||
<source>Verify face recognition or enter password to unlock</source>
|
||
- <translation>验证人脸识别或输入密码解锁</translation>
|
||
+ <translation type="vanished">验证人脸识别或输入密码解锁</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1439"/>
|
||
<source>Press fingerprint or enter password to unlock</source>
|
||
- <translation>按压指纹或输入密码解锁</translation>
|
||
+ <translation type="vanished">按压指纹或输入密码解锁</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1444"/>
|
||
<source>Verify voiceprint or enter password to unlock</source>
|
||
- <translation>验证声纹或输入密码解锁</translation>
|
||
+ <translation type="vanished">验证声纹或输入密码解锁</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1449"/>
|
||
<source>Verify finger vein or enter password to unlock</source>
|
||
- <translation>验证指静脉或输入密码解锁</translation>
|
||
+ <translation type="vanished">验证指静脉或输入密码解锁</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1454"/>
|
||
<source>Verify iris or enter password to unlock</source>
|
||
- <translation>验证虹膜或输入密码解锁</translation>
|
||
+ <translation type="vanished">验证虹膜或输入密码解锁</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1459"/>
|
||
<source>Use the bound wechat scanning code or enter the password to unlock</source>
|
||
- <translation>使用绑定的微信扫码或输入密码解锁</translation>
|
||
+ <translation type="vanished">使用绑定的微信扫码或输入密码解锁</translation>
|
||
</message>
|
||
<message>
|
||
<source>Use the bound wechat scanning code or enter the password to log in</source>
|
||
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>Account locked,</source>
|
||
<translation>账户已锁定,</translation>
|
||
</message>
|
||
@@ -388,17 +430,17 @@
|
||
<context>
|
||
<name>PolkitListener</name>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="88"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="86"/>
|
||
<source>Another client is already authenticating, please try again later.</source>
|
||
<translation>有另外一个客户端正在认证,请稍后重试。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="265"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="253"/>
|
||
<source>Authentication failure, please try again.</source>
|
||
<translation>认证失败,请重试。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="272"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="259"/>
|
||
<source>Password input error!</source>
|
||
<translation>密码输入错误!</translation>
|
||
</message>
|
||
diff --git a/polkit-agent/i18n_ts/zh_HK.ts b/polkit-agent/i18n_ts/zh_HK.ts
|
||
index 95c8c43..52c432d 100644
|
||
--- a/polkit-agent/i18n_ts/zh_HK.ts
|
||
+++ b/polkit-agent/i18n_ts/zh_HK.ts
|
||
@@ -1,6 +1,6 @@
|
||
<?xml version="1.0" encoding="utf-8"?>
|
||
<!DOCTYPE TS>
|
||
-<TS version="2.1" language="zh_Hant">
|
||
+<TS version="2.1" language="zh">
|
||
<context>
|
||
<name>BioAuthWidget</name>
|
||
<message>
|
||
@@ -51,6 +51,15 @@
|
||
<translation type="vanished">二维码</translation>
|
||
</message>
|
||
</context>
|
||
+<context>
|
||
+ <name>FullScreenBackground</name>
|
||
+ <message>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="75"/>
|
||
+ <location filename="../src/fullscreenbackground.cpp" line="104"/>
|
||
+ <source>Authentication</source>
|
||
+ <translation type="unfinished">授權</translation>
|
||
+ </message>
|
||
+</context>
|
||
<context>
|
||
<name>LoginOptionsWidget</name>
|
||
<message>
|
||
@@ -65,9 +74,8 @@
|
||
<context>
|
||
<name>MainWindow</name>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="66"/>
|
||
<source>Authentication</source>
|
||
- <translation>授權</translation>
|
||
+ <translation type="vanished">授權</translation>
|
||
</message>
|
||
<message>
|
||
<source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
|
||
@@ -91,14 +99,14 @@
|
||
<translation type="vanished">密码</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="409"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1075"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1143"/>
|
||
+ <location filename="../src/mainwindow.ui" line="398"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="874"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="943"/>
|
||
<source>Biometric</source>
|
||
<translation>使用生物識別</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="480"/>
|
||
+ <location filename="../src/mainwindow.ui" line="493"/>
|
||
<source>use password</source>
|
||
<translation>使用密碼驗證</translation>
|
||
</message>
|
||
@@ -147,20 +155,19 @@
|
||
<translation type="vanished">Polkit.caller-pid:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="441"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1077"/>
|
||
+ <location filename="../src/mainwindow.ui" line="436"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="875"/>
|
||
<source>Cancel</source>
|
||
<translation>取消</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.ui" line="460"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1073"/>
|
||
+ <location filename="../src/mainwindow.ui" line="461"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="873"/>
|
||
<source>Authenticate</source>
|
||
<translation>授權</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1079"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1183"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="876"/>
|
||
<source>Use password</source>
|
||
<translation>使用密碼驗證</translation>
|
||
</message>
|
||
@@ -185,30 +192,30 @@
|
||
<translation type="vanished">认证中,请稍等...</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1219"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1292"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1293"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1003"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1081"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1082"/>
|
||
<source>Please try again in %1 minutes.</source>
|
||
<translation>請%1分鐘后再試</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1230"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1302"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1303"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1015"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1093"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1094"/>
|
||
<source>Please try again in %1 seconds.</source>
|
||
<translation>請%1秒後再試</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1240"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1241"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1311"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1312"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1026"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1027"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1104"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1105"/>
|
||
<source>Account locked permanently.</source>
|
||
<translation>帳號已被永久鎖定</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="834"/>
|
||
- <location filename="../src/mainwindow.cpp" line="835"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="688"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="689"/>
|
||
<source>Password cannot be empty</source>
|
||
<translation>密碼不能為空</translation>
|
||
</message>
|
||
@@ -221,8 +228,8 @@
|
||
<translation type="vanished">无法验证%1,请输入密码.</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="242"/>
|
||
- <location filename="../src/mainwindow.cpp" line="246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1558"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1562"/>
|
||
<source>Failed to verify %1, you still have %2 verification opportunities</source>
|
||
<translation>驗證%1失敗,您還有%2次嘗試機會</translation>
|
||
</message>
|
||
@@ -231,42 +238,42 @@
|
||
<translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="731"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="582"/>
|
||
<source>Password: </source>
|
||
<translation>密碼: </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="335"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="165"/>
|
||
<source>Please enter your password or enroll your fingerprint </source>
|
||
<translation>請輸入密碼或者錄入指紋 </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="259"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1575"/>
|
||
<source>Abnormal network</source>
|
||
<translation>網路異常</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="665"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="517"/>
|
||
<source>This operation requires the administrator's authorization. Please enter your password to allow this operation.</source>
|
||
<translation>本次操作需要通過管理員的授權才能繼續執行,請輸入密碼以允許本次操作。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="733"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="584"/>
|
||
<source>_Password: </source>
|
||
<translation>密碼: </translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="735"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="586"/>
|
||
<source>_Password:</source>
|
||
<translation>密碼:</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="850"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="704"/>
|
||
<source>Authentication failed, please try again.</source>
|
||
<translation>認證失敗,請重試。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
<source>days left</source>
|
||
<translation>天后解鎖</translation>
|
||
</message>
|
||
@@ -279,16 +286,16 @@
|
||
<translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="226"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1415"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1417"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1243"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1246"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1539"/>
|
||
<source>Failed to verify %1, please enter password to unlock</source>
|
||
<translation>驗證%1失敗,請輸入密碼解鎖</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="231"/>
|
||
- <location filename="../src/mainwindow.cpp" line="233"/>
|
||
- <location filename="../src/mainwindow.cpp" line="1419"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1249"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1545"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1548"/>
|
||
<source>Unable to verify %1, please enter password to unlock</source>
|
||
<translation>無法驗證%1,請輸入密碼解鎖</translation>
|
||
</message>
|
||
@@ -297,86 +304,121 @@
|
||
<translation type="vanished">网络异常</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="671"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="522"/>
|
||
<source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
|
||
<translation>一個程式正試圖執行一個需要特權的動作,要求授權以執行該動作。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="108"/>
|
||
- <location filename="../src/mainwindow.cpp" line="729"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="88"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="580"/>
|
||
<source>Input Password</source>
|
||
<translation>輸入密碼</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="105"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="85"/>
|
||
<source>Insert the ukey into the USB port</source>
|
||
<translation>請將安全金鑰插入USB埠</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="107"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="87"/>
|
||
<source>Enter the ukey password</source>
|
||
<translation>輸入安全金鑰密碼</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="93"/>
|
||
+ <source>Close</source>
|
||
+ <translation>關閉</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1261"/>
|
||
+ <source>Facial recognition to authorization</source>
|
||
+ <translation>識別人臉以授權</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1264"/>
|
||
+ <source>Fingerprint recognition to authorization</source>
|
||
+ <translation>識別指紋以授權</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1267"/>
|
||
+ <source>Voiceprint recognition to authorization</source>
|
||
+ <translation>識別聲紋以授權</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1270"/>
|
||
+ <source>Finger veins recognition to authorization</source>
|
||
+ <translation>識別指靜脈以授權</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1273"/>
|
||
+ <source>Iris recognition to authorization</source>
|
||
+ <translation>識別虹膜以授權</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1276"/>
|
||
+ <source>Use the bound wechat scanning code to authorization</source>
|
||
+ <translation>微信掃碼以授權</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="1579"/>
|
||
+ <source>Acquisition failure</source>
|
||
+ <translation>獲取失敗</translation>
|
||
+ </message>
|
||
+ <message>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
<source>hours left</source>
|
||
<translation>小時後解鎖</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
<source>minutes left</source>
|
||
<translation>分鐘後解鎖</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>seconds left</source>
|
||
<translation>秒後解鎖</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="880"/>
|
||
- <location filename="../src/mainwindow.cpp" line="888"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="734"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="742"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="1258"/>
|
||
<source>Input your password to authentication</source>
|
||
<translation>輸入密碼以認證</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1434"/>
|
||
<source>Verify face recognition or enter password to unlock</source>
|
||
- <translation>驗證人臉識別或輸入密碼解鎖</translation>
|
||
+ <translation type="vanished">驗證人臉識別或輸入密碼解鎖</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1439"/>
|
||
<source>Press fingerprint or enter password to unlock</source>
|
||
- <translation>按壓指紋或輸入密碼解鎖</translation>
|
||
+ <translation type="vanished">按壓指紋或輸入密碼解鎖</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1444"/>
|
||
<source>Verify voiceprint or enter password to unlock</source>
|
||
- <translation>驗證聲紋或輸入密碼解鎖</translation>
|
||
+ <translation type="vanished">驗證聲紋或輸入密碼解鎖</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1449"/>
|
||
<source>Verify finger vein or enter password to unlock</source>
|
||
- <translation>驗證指靜脈或輸入密碼解鎖</translation>
|
||
+ <translation type="vanished">驗證指靜脈或輸入密碼解鎖</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1454"/>
|
||
<source>Verify iris or enter password to unlock</source>
|
||
- <translation>驗證虹膜或輸入密碼解鎖</translation>
|
||
+ <translation type="vanished">驗證虹膜或輸入密碼解鎖</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="1459"/>
|
||
<source>Use the bound wechat scanning code or enter the password to unlock</source>
|
||
- <translation>使用綁定的微信掃碼或輸入密碼解鎖</translation>
|
||
+ <translation type="vanished">使用綁定的微信掃碼或輸入密碼解鎖</translation>
|
||
</message>
|
||
<message>
|
||
<source>Use the bound wechat scanning code or enter the password to log in</source>
|
||
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/mainwindow.cpp" line="779"/>
|
||
- <location filename="../src/mainwindow.cpp" line="783"/>
|
||
- <location filename="../src/mainwindow.cpp" line="787"/>
|
||
- <location filename="../src/mainwindow.cpp" line="791"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="635"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="638"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="641"/>
|
||
+ <location filename="../src/mainwindow.cpp" line="644"/>
|
||
<source>Account locked,</source>
|
||
<translation>帳戶已鎖定,</translation>
|
||
</message>
|
||
@@ -388,17 +430,17 @@
|
||
<context>
|
||
<name>PolkitListener</name>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="88"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="86"/>
|
||
<source>Another client is already authenticating, please try again later.</source>
|
||
<translation>有另外一個用戶端正在認證,請稍後重試。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="265"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="253"/>
|
||
<source>Authentication failure, please try again.</source>
|
||
<translation>認證失敗,請重試。</translation>
|
||
</message>
|
||
<message>
|
||
- <location filename="../src/PolkitListener.cpp" line="272"/>
|
||
+ <location filename="../src/PolkitListener.cpp" line="259"/>
|
||
<source>Password input error!</source>
|
||
<translation>密碼輸入錯誤!</translation>
|
||
</message>
|
||
diff --git a/polkit-agent/src/PolkitListener.cpp b/polkit-agent/src/PolkitListener.cpp
|
||
index 749e551..6a37a22 100644
|
||
--- a/polkit-agent/src/PolkitListener.cpp
|
||
+++ b/polkit-agent/src/PolkitListener.cpp
|
||
@@ -31,28 +31,21 @@
|
||
#include <QApplication>
|
||
#include <QScreen>
|
||
#include <fcntl.h>
|
||
-#include <kysdk/kysdk-system/libkysysinfo.h>
|
||
|
||
#include "PolkitListener.h"
|
||
#include "mainwindow.h"
|
||
#include "generic.h"
|
||
#include <libkysysinfo.h>
|
||
-#include "windowmanager/windowmanager.h"
|
||
|
||
PolkitListener::PolkitListener(QObject *parent)
|
||
- : Listener(parent),
|
||
- inProgress(false),
|
||
- currentIdentity(0),
|
||
- mainWindow(nullptr)
|
||
+ : Listener(parent), inProgress(false), currentIdentity(0), m_managerFullScreen(nullptr)
|
||
{
|
||
m_isSupportTableMode = isSupportTableMode();
|
||
- m_isMavis = isMavis();
|
||
- qDebug()<<"isSupportTableMode:"<<m_isSupportTableMode;
|
||
+ m_isMavis = isMavis();
|
||
+ qDebug() << "isSupportTableMode:" << m_isSupportTableMode;
|
||
}
|
||
|
||
-PolkitListener::~PolkitListener()
|
||
-{
|
||
-}
|
||
+PolkitListener::~PolkitListener() {}
|
||
|
||
bool PolkitListener::isMavis()
|
||
{
|
||
@@ -81,12 +74,15 @@ bool PolkitListener::isSupportTableMode()
|
||
|
||
/* initiateAuthentication message from polkit */
|
||
void PolkitListener::initiateAuthentication(
|
||
- const QString &actionId, const QString &message,
|
||
- const QString &iconName, const PolkitQt1::Details &details,
|
||
- const QString &cookie, const PolkitQt1::Identity::List &identities,
|
||
+ const QString &actionId,
|
||
+ const QString &message,
|
||
+ const QString &iconName,
|
||
+ const PolkitQt1::Details &details,
|
||
+ const QString &cookie,
|
||
+ const PolkitQt1::Identity::List &identities,
|
||
PolkitQt1::Agent::AsyncResult *result)
|
||
{
|
||
- if(inProgress){
|
||
+ if (inProgress) {
|
||
result->setError(tr("Another client is already authenticating, please try again later."));
|
||
result->setCompleted();
|
||
qDebug() << "Another client is already authenticating, please try again later.";
|
||
@@ -107,13 +103,13 @@ void PolkitListener::initiateAuthentication(
|
||
|
||
subjectPid = details.lookup("polkit.subject-pid");
|
||
callerPid = details.lookup("polkit.caller-pid");
|
||
+ implicitActiveStr = details.lookup("implicit_authorization");
|
||
|
||
/* find action description for actionId */
|
||
- foreach(const PolkitQt1::ActionDescription &desc,
|
||
- PolkitQt1::Authority::instance()->enumerateActionsSync()) {
|
||
+ foreach (const PolkitQt1::ActionDescription &desc, PolkitQt1::Authority::instance()->enumerateActionsSync()) {
|
||
if (actionId == desc.actionId()) {
|
||
actionDesc = desc;
|
||
- qDebug() << "Action description has been found" ;
|
||
+ qDebug() << "Action description has been found";
|
||
break;
|
||
}
|
||
}
|
||
@@ -135,117 +131,103 @@ void PolkitListener::initiateAuthentication(
|
||
this->result = result;
|
||
session.clear();
|
||
if (identities.length() == 1) {
|
||
- this->currentIdentity = identities[0];
|
||
+ this->currentIdentity = identities[0];
|
||
} else {
|
||
currentIdentity = identities[0];
|
||
}
|
||
|
||
/* Create the polkit window */
|
||
|
||
- mainWindow = new MainWindow;
|
||
-// MotifWmHints hints;
|
||
-// hints.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS;
|
||
-// hints.functions = MWM_FUNC_ALL;
|
||
-// hints.decorations = MWM_DECOR_BORDER;
|
||
-// XAtomHelper::getInstance()->setWindowMotifHint(mainWindow->winId(), hints);
|
||
- mainWindow->setIcon(iconName);
|
||
- mainWindow->setCurProject(m_isMavis);
|
||
- mainWindow->setHeader(message);
|
||
- mainWindow->setUsers(usersList);
|
||
- mainWindow->setEditInputMethod(m_isSupportTableMode);
|
||
- mainWindow->setFixedSize(420, 297);
|
||
- /*
|
||
- mainWindow->setDetails(subjectPid, callerPid,
|
||
- actionDesc.actionId(),
|
||
- actionDesc.description(),
|
||
- actionDesc.vendorName(),
|
||
- actionDesc.vendorUrl());
|
||
- */
|
||
- /* set the position of the mainwindow */
|
||
- QPoint pos = QCursor::pos();
|
||
- QRect desScreenGeometry;
|
||
- for (QScreen *screen : qApp->screens()) {
|
||
- if (screen->geometry().contains(pos)) {
|
||
- desScreenGeometry = screen->geometry();
|
||
- }
|
||
- }
|
||
-
|
||
- if (desScreenGeometry.isEmpty()) {
|
||
- desScreenGeometry = qApp->primaryScreen()->geometry();
|
||
- }
|
||
-// mainWindow->move(desScreenGeometry.x() + (desScreenGeometry.width() - mainWindow->width())/2,
|
||
-// desScreenGeometry.y() + (desScreenGeometry.height() - mainWindow->height())/2);
|
||
-// qDebug()<<"MoveWindow to center1:"<<desScreenGeometry<<","<<mainWindow->geometry()<<QGuiApplication::platformName();;
|
||
-
|
||
-
|
||
-
|
||
- connect(mainWindow, &MainWindow::accept, this, &PolkitListener::onResponse);
|
||
- connect(mainWindow, &MainWindow::canceled, this, [&]{
|
||
- wasCancelled = true;
|
||
- unacknowledged_messages = false;
|
||
- if(!session.isNull()) {
|
||
- session.data()->cancel();
|
||
- }
|
||
- });
|
||
-
|
||
- connect(mainWindow, &MainWindow::switchToBiometric, this, [&]{
|
||
- wasSwitchToBiometric = true;
|
||
- startAuthentication();
|
||
- });
|
||
-
|
||
- connect(mainWindow, &MainWindow::restartAuth, this, [&]{
|
||
- startAuthentication();
|
||
- });
|
||
-
|
||
- connect(mainWindow, &MainWindow::userChanged, this, [&](const QString &userName){
|
||
- for(int i = 0; i < this->identities.size(); i++) {
|
||
- auto identity = this->identities.at(i);
|
||
- if(identity.toString().remove("unix-user:") == userName) {
|
||
- this->currentIdentity = this->identities.at(i);
|
||
- numTries = 0;
|
||
- startAuthentication();
|
||
- break;
|
||
+ m_managerFullScreen = new FullScreenBackground();
|
||
+ m_managerFullScreen->initMainWindow(
|
||
+ iconName, message, usersList, subjectPid, callerPid, actionDesc, m_isMavis, m_isSupportTableMode);
|
||
+
|
||
+ if (m_managerFullScreen && m_managerFullScreen->getMainWindow()) {
|
||
+ connect(m_managerFullScreen->getMainWindow(), &MainWindow::accept, this, &PolkitListener::onResponse);
|
||
+ connect(m_managerFullScreen->getMainWindow(), &MainWindow::canceled, this, [&] {
|
||
+ if (inProgress && !gainedAuthorization) {
|
||
+ wasCancelled = true;
|
||
+ unacknowledged_messages = false;
|
||
+ if (!session.isNull()) {
|
||
+ session.data()->cancel();
|
||
+ }
|
||
+ finishObtainPrivilege();
|
||
}
|
||
- }
|
||
- });
|
||
+ });
|
||
+
|
||
+ connect(m_managerFullScreen->getMainWindow(), &MainWindow::switchToBiometric, this, [&] {
|
||
+ wasSwitchToBiometric = true;
|
||
+ startAuthentication();
|
||
+ });
|
||
+
|
||
+ connect(m_managerFullScreen->getMainWindow(), &MainWindow::yesPrompted, this, [=] {
|
||
+ result->setCompleted();
|
||
+ this->gainedAuthorization = true;
|
||
+ finishObtainPrivilege();
|
||
+ });
|
||
+
|
||
+ connect(m_managerFullScreen->getMainWindow(), &MainWindow::restartAuth, this, [&] { startAuthentication(); });
|
||
+
|
||
+ connect(m_managerFullScreen->getMainWindow(), &MainWindow::userChanged, this, [&](const QString &userName) {
|
||
+ for (int i = 0; i < this->identities.size(); i++) {
|
||
+ auto identity = this->identities.at(i);
|
||
+ if (identity.toString().remove("unix-user:") == userName) {
|
||
+ this->currentIdentity = this->identities.at(i);
|
||
+ numTries = 0;
|
||
+ startAuthentication();
|
||
+ break;
|
||
+ }
|
||
+ }
|
||
+ });
|
||
|
||
- numTries = 0;
|
||
- wasCancelled = false;
|
||
- wasSwitchToBiometric = false;
|
||
+ numTries = 0;
|
||
+ wasCancelled = false;
|
||
+ wasSwitchToBiometric = false;
|
||
|
||
- mainWindow->userChanged(usersList.at(0));
|
||
+ if (implicitActiveStr == "yes_prompt") {
|
||
+ m_managerFullScreen->getMainWindow()->onShowYesPrompt();
|
||
+ m_managerFullScreen->getMainWindow()->setFixedSize(m_managerFullScreen->getMainWindow()->width(), 200);
|
||
+ m_managerFullScreen->getMainWindow()->show();
|
||
+ m_managerFullScreen->getMainWindow()->activateWindow();
|
||
+ return;
|
||
+ }
|
||
|
||
+ m_managerFullScreen->getMainWindow()->userChanged(usersList.at(0));
|
||
+ }
|
||
}
|
||
|
||
-static
|
||
-int get_pam_tally(int *deny, int *unlock_time)
|
||
+static int get_pam_tally(int *deny, int *unlock_time)
|
||
{
|
||
char buf[128];
|
||
- FILE *auth_file;
|
||
+ FILE *auth_file = NULL;
|
||
|
||
- if( (auth_file = fopen("/etc/pam.d/common-auth", "r")) == NULL)
|
||
+ if ((auth_file = fopen("/etc/pam.d/common-auth", "r")) == NULL)
|
||
return -1;
|
||
|
||
- while(fgets(buf, sizeof(buf), auth_file)) {
|
||
- if(strlen(buf) == 0 || buf[0] == '#')
|
||
+ while (fgets(buf, sizeof(buf), auth_file)) {
|
||
+ if (strlen(buf) == 0 || buf[0] == '#')
|
||
continue;
|
||
- if(!strstr(buf, "deny"))
|
||
+ if (!strstr(buf, "deny"))
|
||
continue;
|
||
|
||
char *ptr = strtok(buf, " \t");
|
||
- while(ptr) {
|
||
- if(strncmp(ptr, "deny=", 5)==0){
|
||
+ while (ptr) {
|
||
+ if (strncmp(ptr, "deny=", 5) == 0) {
|
||
sscanf(ptr, "deny=%d", deny);
|
||
- //gs_debug("-------------------- deny=%d", *deny);
|
||
+ // gs_debug("-------------------- deny=%d", *deny);
|
||
}
|
||
- if(strncmp(ptr, "unlock_time=", 12)==0){
|
||
+ if (strncmp(ptr, "unlock_time=", 12) == 0) {
|
||
sscanf(ptr, "unlock_time=%d", unlock_time);
|
||
- //gs_debug("-------------------- unlock_time=%d", *unlock_time);
|
||
+ // gs_debug("-------------------- unlock_time=%d", *unlock_time);
|
||
}
|
||
ptr = strtok(NULL, " \t");
|
||
}
|
||
+ fclose(auth_file);
|
||
+ auth_file = NULL;
|
||
return 1;
|
||
}
|
||
+ fclose(auth_file);
|
||
+ auth_file = NULL;
|
||
return 0;
|
||
}
|
||
|
||
@@ -253,54 +235,59 @@ void PolkitListener::finishObtainPrivilege()
|
||
{
|
||
/* Number of tries increase only when some user is selected */
|
||
if (currentIdentity.isValid()) {
|
||
- numTries++;
|
||
+ numTries++;
|
||
}
|
||
qDebug().noquote() << QString("Finishing obtaining "
|
||
- "privileges (G:%1, C:%2, D:%3).")
|
||
- .arg(gainedAuthorization)
|
||
- .arg(wasCancelled)
|
||
- .arg(mainWindow != NULL);
|
||
-
|
||
- if (!gainedAuthorization && !wasCancelled && (mainWindow != NULL)) {
|
||
- int deny = 0, unlock_time = 0;
|
||
- mainWindow->stopDoubleAuth();
|
||
- if(!get_pam_tally(&deny, &unlock_time)||(deny == 0 &&unlock_time == 0)) {
|
||
- //if(!wasSwitchToBiometric){
|
||
- if (!unacknowledged_messages)
|
||
- mainWindow->setAuthResult(gainedAuthorization, tr("Authentication failure, please try again."));
|
||
- //}
|
||
- startAuthentication();
|
||
- return;
|
||
- }
|
||
- else {
|
||
- if (!unacknowledged_messages) {
|
||
- mainWindow->setAuthResult(gainedAuthorization, tr("Password input error!"));
|
||
- }
|
||
- startAuthentication();
|
||
- return;
|
||
- }
|
||
-
|
||
- startAuthentication();
|
||
+ "privileges (G:%1, C:%2, D:%3).")
|
||
+ .arg(gainedAuthorization)
|
||
+ .arg(wasCancelled)
|
||
+ .arg(m_managerFullScreen && m_managerFullScreen->getMainWindow());
|
||
+
|
||
+ if (!gainedAuthorization && !wasCancelled && (m_managerFullScreen && m_managerFullScreen->getMainWindow())) {
|
||
+ int deny = 0, unlock_time = 0;
|
||
+ m_managerFullScreen->getMainWindow()->stopDoubleAuth();
|
||
+ if (!get_pam_tally(&deny, &unlock_time) || (deny == 0 && unlock_time == 0)) {
|
||
+ // if(!wasSwitchToBiometric){
|
||
+ if (!unacknowledged_messages)
|
||
+ m_managerFullScreen->getMainWindow()->setAuthResult(
|
||
+ gainedAuthorization, tr("Authentication failure, please try again."));
|
||
+ //}
|
||
+ startAuthentication();
|
||
return;
|
||
+ } else {
|
||
+ if (!unacknowledged_messages) {
|
||
+ m_managerFullScreen->getMainWindow()->setAuthResult(gainedAuthorization, tr("Password input error!"));
|
||
+ }
|
||
+ startAuthentication();
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ startAuthentication();
|
||
+ return;
|
||
}
|
||
|
||
- if (mainWindow) {
|
||
- mainWindow->hide();
|
||
- mainWindow->stopDoubleAuth();
|
||
- mainWindow->close();
|
||
- mainWindow->deleteLater();
|
||
- mainWindow = NULL;
|
||
+ if (m_managerFullScreen) {
|
||
+ m_managerFullScreen->closeDialog();
|
||
+ m_managerFullScreen->deleteLater();
|
||
+ m_managerFullScreen = nullptr;
|
||
+ }
|
||
+
|
||
+ if ((implicitActiveStr == "yes_prompt") && wasCancelled) {
|
||
+ result->setError("polkit-ukui-authentication-agent-1 cancel");
|
||
}
|
||
|
||
if (!session.isNull()) {
|
||
session.data()->result()->setCompleted();
|
||
+ session.data()->deleteLater();
|
||
+ session.clear();
|
||
} else {
|
||
result->setCompleted();
|
||
}
|
||
- session.data()->deleteLater();
|
||
|
||
this->inProgress = false;
|
||
+ implicitActiveStr = "";
|
||
qDebug() << "Finish obtain authorization:" << gainedAuthorization;
|
||
+ gainedAuthorization = false;
|
||
}
|
||
|
||
void establishToBioPAM()
|
||
@@ -308,12 +295,12 @@ void establishToBioPAM()
|
||
FILE *file;
|
||
const char *data = "polkit-ukui-authentication-agent-1";
|
||
|
||
- if( (file = fopen(BIO_COM_FILE, "w")) == NULL){
|
||
+ if ((file = fopen(BIO_COM_FILE, "w")) == NULL) {
|
||
qWarning() << "open communication file failed: " << strerror(errno);
|
||
return;
|
||
}
|
||
|
||
- if(fputs(data, file) == EOF) {
|
||
+ if (fputs(data, file) == EOF) {
|
||
qWarning() << "write to communication file error: " << strerror(errno);
|
||
}
|
||
fclose(file);
|
||
@@ -323,7 +310,7 @@ void PolkitListener::startAuthentication()
|
||
{
|
||
qDebug() << "start authenticate user " << currentIdentity.toString();
|
||
unacknowledged_messages = false;
|
||
- if(!session.isNull()) {
|
||
+ if (!session.isNull()) {
|
||
session.data()->deleteLater();
|
||
}
|
||
|
||
@@ -332,92 +319,61 @@ void PolkitListener::startAuthentication()
|
||
|
||
establishToBioPAM();
|
||
|
||
- session = new Session(currentIdentity, cookie, result);
|
||
- connect(session.data(), SIGNAL(request(QString, bool)), this,
|
||
- SLOT(onShowPrompt(QString,bool)));
|
||
- connect(session.data(), SIGNAL(completed(bool)), this,
|
||
- SLOT(onAuthCompleted(bool)));
|
||
- connect(session.data(), SIGNAL(showError(QString)), this,
|
||
- SLOT(onShowError(QString)));
|
||
- connect(session.data(), SIGNAL(showInfo(QString)), this,
|
||
- SLOT(onShowError(QString)));
|
||
- session.data()->initiate();
|
||
+ session = new Session(currentIdentity, cookie, result);
|
||
+ connect(session.data(), SIGNAL(request(QString, bool)), this, SLOT(onShowPrompt(QString, bool)));
|
||
+ connect(session.data(), SIGNAL(completed(bool)), this, SLOT(onAuthCompleted(bool)));
|
||
+ connect(session.data(), SIGNAL(showError(QString)), this, SLOT(onShowError(QString)));
|
||
+ connect(session.data(), SIGNAL(showInfo(QString)), this, SLOT(onShowError(QString)));
|
||
+ session.data()->initiate();
|
||
}
|
||
|
||
- mainWindow->clearEdit();
|
||
+ if (m_managerFullScreen && m_managerFullScreen->getMainWindow()) {
|
||
+ m_managerFullScreen->getMainWindow()->clearEdit();
|
||
+ }
|
||
}
|
||
|
||
void PolkitListener::onShowPrompt(const QString &prompt, bool echo)
|
||
{
|
||
qDebug() << "Prompt: " << prompt << "echo: " << echo;
|
||
-
|
||
- if(prompt == BIOMETRIC_PAM || prompt == BIOMETRIC_PAM_QRCODE) {
|
||
- mainWindow->setDoubleAuth(false);
|
||
- mainWindow->switchAuthMode(MainWindow::BIOMETRIC);
|
||
- }else if(prompt == BIOMETRIC_PAM_DOUBLE){
|
||
- mainWindow->setDoubleAuth(true);
|
||
- mainWindow->switchAuthMode(MainWindow::BIOMETRIC);
|
||
- //这时候不需要显示授权弹窗,下一次收到prompt请求的时候再显示
|
||
+ if (!m_managerFullScreen || !m_managerFullScreen->getMainWindow()) {
|
||
return;
|
||
}
|
||
- else {
|
||
+ if (prompt == BIOMETRIC_PAM || prompt == BIOMETRIC_PAM_QRCODE) {
|
||
+ m_managerFullScreen->getMainWindow()->setDoubleAuth(false);
|
||
+ m_managerFullScreen->getMainWindow()->switchAuthMode(MainWindow::BIOMETRIC);
|
||
+ } else if (prompt == BIOMETRIC_PAM_DOUBLE) {
|
||
+ m_managerFullScreen->getMainWindow()->setDoubleAuth(true);
|
||
+ m_managerFullScreen->getMainWindow()->switchAuthMode(MainWindow::BIOMETRIC);
|
||
+ //这时候不需要显示授权弹窗,下一次收到prompt请求的时候再显示
|
||
+ return;
|
||
+ } else {
|
||
unacknowledged_messages = false;
|
||
- mainWindow->switchAuthMode(MainWindow::PASSWORD);
|
||
- mainWindow->setPrompt(prompt, echo);
|
||
+ m_managerFullScreen->getMainWindow()->switchAuthMode(MainWindow::PASSWORD);
|
||
+ m_managerFullScreen->getMainWindow()->setPrompt(prompt, echo);
|
||
+ m_managerFullScreen->showDialog();
|
||
}
|
||
- mainWindow->setFixedSize(mainWindow->width(),mainWindow->height());
|
||
-
|
||
- /* set the position of the mainwindow */
|
||
- QPoint pos = QCursor::pos();
|
||
- QRect desScreenGeometry;
|
||
- for (QScreen *screen : qApp->screens()) {
|
||
- if (screen->geometry().contains(pos)) {
|
||
- desScreenGeometry = screen->geometry();
|
||
- }
|
||
- }
|
||
-
|
||
- if (desScreenGeometry.isEmpty()) {
|
||
- desScreenGeometry = qApp->primaryScreen()->geometry();
|
||
- }
|
||
-
|
||
- kdk::WindowManager::setGeometry(mainWindow->windowHandle(),
|
||
- QRect(desScreenGeometry.left() + (desScreenGeometry.width() - mainWindow->width())/2,
|
||
- desScreenGeometry.top() + (desScreenGeometry.height() - mainWindow->height())/2,
|
||
- mainWindow->width(), mainWindow->height()));
|
||
-
|
||
- mainWindow->show();
|
||
- // 重新开始认证不调整窗口位置
|
||
-// QPoint pos = QCursor::pos();
|
||
-// for(auto screen : QGuiApplication::screens())
|
||
-// {
|
||
-// if(screen->geometry().contains(pos))
|
||
-// {
|
||
-// mainWindow->move(screen->geometry().left() + (screen->geometry().width() - mainWindow->width()) / 2,
|
||
-// screen->geometry().top() + (screen->geometry().height() - mainWindow->height()) / 2);
|
||
-// }
|
||
-// }
|
||
-
|
||
- mainWindow->activateWindow();
|
||
}
|
||
|
||
//目前返回的pam错误就onShowError,onShowInfo两类
|
||
void PolkitListener::onShowError(const QString &text)
|
||
{
|
||
- qDebug() << "[Polkit]:" << "Error:" << text;
|
||
+ qDebug() << "[Polkit]:"
|
||
+ << "Error:" << text;
|
||
unacknowledged_messages = true;
|
||
- if(mainWindow){
|
||
- QString strText = mainWindow->check_is_pam_message(text);
|
||
- mainWindow->setMessage(strText);
|
||
+ if (m_managerFullScreen && m_managerFullScreen->getMainWindow()) {
|
||
+ QString strText = m_managerFullScreen->getMainWindow()->check_is_pam_message(text);
|
||
+ m_managerFullScreen->getMainWindow()->setMessage(strText);
|
||
}
|
||
}
|
||
|
||
void PolkitListener::onShowInfo(const QString &text)
|
||
{
|
||
- qDebug() << "[Polkit]:" << "Info:" << text;
|
||
+ qDebug() << "[Polkit]:"
|
||
+ << "Info:" << text;
|
||
unacknowledged_messages = true;
|
||
- if(mainWindow){
|
||
- QString strText = mainWindow->check_is_pam_message(text);
|
||
- mainWindow->setMessage(strText);
|
||
+ if (m_managerFullScreen && m_managerFullScreen->getMainWindow()) {
|
||
+ QString strText = m_managerFullScreen->getMainWindow()->check_is_pam_message(text);
|
||
+ m_managerFullScreen->getMainWindow()->setMessage(strText);
|
||
}
|
||
}
|
||
|
||
diff --git a/polkit-agent/src/PolkitListener.h b/polkit-agent/src/PolkitListener.h
|
||
index 850077c..4137f79 100644
|
||
--- a/polkit-agent/src/PolkitListener.h
|
||
+++ b/polkit-agent/src/PolkitListener.h
|
||
@@ -22,45 +22,47 @@
|
||
#include <QPointer>
|
||
|
||
#include "mainwindow.h"
|
||
+#include "fullscreenbackground.h"
|
||
|
||
using namespace PolkitQt1::Agent;
|
||
|
||
class PolkitListener : public Listener
|
||
{
|
||
- Q_OBJECT
|
||
+ Q_OBJECT
|
||
public:
|
||
- PolkitListener(QObject *parent = 0);
|
||
- virtual ~PolkitListener();
|
||
+ PolkitListener(QObject *parent = 0);
|
||
+ virtual ~PolkitListener();
|
||
|
||
private:
|
||
bool isSupportTableMode();
|
||
bool isMavis();
|
||
|
||
public slots:
|
||
- void initiateAuthentication(const QString &actionId,
|
||
- const QString &message,
|
||
- const QString &iconName,
|
||
- const PolkitQt1::Details &details,
|
||
- const QString &cookie,
|
||
- const PolkitQt1::Identity::List &identities,
|
||
- PolkitQt1::Agent::AsyncResult *result);
|
||
- bool initiateAuthenticationFinish();
|
||
- void cancelAuthentication();
|
||
- void finishObtainPrivilege();
|
||
-
|
||
+ void initiateAuthentication(
|
||
+ const QString &actionId,
|
||
+ const QString &message,
|
||
+ const QString &iconName,
|
||
+ const PolkitQt1::Details &details,
|
||
+ const QString &cookie,
|
||
+ const PolkitQt1::Identity::List &identities,
|
||
+ PolkitQt1::Agent::AsyncResult *result);
|
||
+ bool initiateAuthenticationFinish();
|
||
+ void cancelAuthentication();
|
||
+ void finishObtainPrivilege();
|
||
|
||
private:
|
||
- bool gainedAuthorization;
|
||
- bool wasCancelled;
|
||
- bool wasSwitchToBiometric;
|
||
+ bool gainedAuthorization = false;
|
||
+ bool wasCancelled = false;
|
||
+ bool wasSwitchToBiometric = false;
|
||
bool inProgress;
|
||
- int numTries;
|
||
+ int numTries;
|
||
+ QString implicitActiveStr;
|
||
QPointer<Session> session;
|
||
- PolkitQt1::Identity::List identities;
|
||
- PolkitQt1::Identity currentIdentity;
|
||
- PolkitQt1::Agent::AsyncResult *result;
|
||
- QString cookie;
|
||
- MainWindow *mainWindow;
|
||
+ PolkitQt1::Identity::List identities;
|
||
+ PolkitQt1::Identity currentIdentity;
|
||
+ PolkitQt1::Agent::AsyncResult *result;
|
||
+ QString cookie;
|
||
+ FullScreenBackground *m_managerFullScreen;
|
||
bool unacknowledged_messages = false;
|
||
bool m_isSupportTableMode = false;
|
||
bool m_isMavis = false;
|
||
diff --git a/polkit-agent/src/fullscreenbackground.cpp b/polkit-agent/src/fullscreenbackground.cpp
|
||
new file mode 100644
|
||
index 0000000..9bbaa3d
|
||
--- /dev/null
|
||
+++ b/polkit-agent/src/fullscreenbackground.cpp
|
||
@@ -0,0 +1,513 @@
|
||
+/*
|
||
+ * Copyright (C) 2024 Tianjin KYLIN Information Technology Co., Ltd.
|
||
+ *
|
||
+ * This program is free software; you can redistribute it and/or modify
|
||
+ * it under the terms of the GNU General Public License as published by
|
||
+ * the Free Software Foundation; either version 3, or (at your option)
|
||
+ * any later version.
|
||
+ *
|
||
+ * This program is distributed in the hope that it will be useful,
|
||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
+ * GNU General Public License for more details.
|
||
+ *
|
||
+ * You should have received a copy of the GNU General Public License
|
||
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||
+ *
|
||
+ **/
|
||
+#include "fullscreenbackground.h"
|
||
+#include "mainwindow.h"
|
||
+#include <unistd.h>
|
||
+#include <QDebug>
|
||
+#include <QImageReader>
|
||
+#include <QPixmap>
|
||
+#include <QApplication>
|
||
+#include <QScreen>
|
||
+#include <QCursor>
|
||
+#include <QTimer>
|
||
+#include <QDesktopWidget>
|
||
+#include <QPainter>
|
||
+#include <QPainterPath>
|
||
+#include <KWindowSystem>
|
||
+#include <windowmanager/windowmanager.h>
|
||
+
|
||
+using namespace kdk;
|
||
+
|
||
+#define PERSONALSIE_SCHEMA "org.mate.background"
|
||
+#define PERSONALSIE_TRAN_KEY "picture-filename"
|
||
+
|
||
+#define USD_MEDIA_KEYS_SCHEMA "org.ukui.SettingsDaemon.plugins.media-keys"
|
||
+#define USD_MEDIA_KEYS_WINDOW_SWTICH_KEY "ukuiWindowSwitch"
|
||
+#define USD_MEDIA_KEYS_WINDOW_SWTICH2_KEY "ukuiWindowSwitch2"
|
||
+
|
||
+FullScreenBackground::FullScreenBackground(QWidget *parent) : QWidget(parent)
|
||
+{
|
||
+ m_isWayland = QString(qgetenv("XDG_SESSION_TYPE")) == "wayland";
|
||
+ initUI();
|
||
+ initConnections();
|
||
+}
|
||
+
|
||
+FullScreenBackground::~FullScreenBackground()
|
||
+{
|
||
+ closeDialog();
|
||
+}
|
||
+
|
||
+void FullScreenBackground::initMainWindow(
|
||
+ const QString &strIconName,
|
||
+ const QString &strMsg,
|
||
+ const QStringList &listUsers,
|
||
+ const QString &subjectPid,
|
||
+ const QString &callerPid,
|
||
+ const PolkitQt1::ActionDescription &actionDesc,
|
||
+ const bool &isMavis,
|
||
+ const bool &isSupportTableMode)
|
||
+{
|
||
+ if (!m_wndMain) {
|
||
+ if (m_isWayland) {
|
||
+ m_wndMain = new MainWindow();
|
||
+ m_wndMain->setWindowFlags(windowFlags() | Qt::Tool | Qt::WindowStaysOnTopHint);
|
||
+ KWindowSystem::setState(m_wndMain->winId(), NET::State::KeepAbove | NET::State::SkipTaskbar);
|
||
+ } else {
|
||
+ m_wndMain = new MainWindow(this);
|
||
+ m_wndMain->setModal(true);
|
||
+ }
|
||
+ setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint & ~Qt::WindowMinimizeButtonHint);
|
||
+ m_wndMain->setWindowTitle(tr("Authentication"));
|
||
+ WindowManager::setSkipTaskBar(m_wndMain->windowHandle(), true);
|
||
+ m_wndMain->setIcon(strIconName);
|
||
+ m_wndMain->setCurProject(isMavis);
|
||
+ m_wndMain->setHeader(strMsg);
|
||
+ m_wndMain->setUsers(listUsers);
|
||
+ m_wndMain->setEditInputMethod(isSupportTableMode);
|
||
+ m_wndMain->setFixedSize(420, 337);
|
||
+ /*
|
||
+ *
|
||
+ mainWindow->setDetails(subjectPid, callerPid,
|
||
+ actionDesc.actionId(),
|
||
+ actionDesc.description(),
|
||
+ actionDesc.vendorName(),
|
||
+ actionDesc.vendorUrl());
|
||
+ */
|
||
+ connect(m_wndMain, &MainWindow::finished, this, [=](int nResult) {
|
||
+ qDebug() << "auth dialog finished:" << nResult;
|
||
+ });
|
||
+ }
|
||
+ if (m_isWayland) {
|
||
+ hide();
|
||
+ } else {
|
||
+ show();
|
||
+ }
|
||
+}
|
||
+
|
||
+void FullScreenBackground::initUI()
|
||
+{
|
||
+ setWindowTitle(tr("Authentication"));
|
||
+ if (m_isWayland) {
|
||
+ setAttribute(Qt::WA_TranslucentBackground);
|
||
+ setGeometry(0, 0, 0, 0);
|
||
+ } else {
|
||
+ setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
|
||
+ setWindowOpacity(0.25);
|
||
+ KWindowSystem::setState(winId(), NET::State::KeepAbove | NET::State::SkipTaskbar);
|
||
+ WindowManager::setSkipTaskBar(this->windowHandle(), true);
|
||
+ installEventFilter(this);
|
||
+
|
||
+ if (!isSupportCompositing()) {
|
||
+ m_pixmapBackground = getBackground();
|
||
+ }
|
||
+ setGeometry(0, 0, 7680, 4320);
|
||
+ }
|
||
+ qDebug() << "Window geometry:" << geometry();
|
||
+}
|
||
+
|
||
+void FullScreenBackground::initConnections()
|
||
+{
|
||
+ QDesktopWidget *desktop = QApplication::desktop();
|
||
+ if (desktop) {
|
||
+ connect(desktop, &QDesktopWidget::resized, this, &FullScreenBackground::onDesktopResized);
|
||
+ connect(desktop, &QDesktopWidget::workAreaResized, this, &FullScreenBackground::onWorkAreaResized);
|
||
+ connect(desktop, &QDesktopWidget::primaryScreenChanged, this, &FullScreenBackground::onPrimaryScreenChanged);
|
||
+ connect(desktop, &QDesktopWidget::screenCountChanged, this, &FullScreenBackground::onScreenCountChanged);
|
||
+ }
|
||
+}
|
||
+
|
||
+void FullScreenBackground::onScreenCountChanged(int)
|
||
+{
|
||
+ qDebug() << "onScreenCountChanged----";
|
||
+ if (m_isWayland) {
|
||
+ update();
|
||
+ moveToCursorScreen();
|
||
+ return;
|
||
+ }
|
||
+ QDesktopWidget *desktop = QApplication::desktop();
|
||
+ if ((desktop->geometry().x() != 0 || desktop->geometry().y() != 0) && this->geometry().contains(desktop->geometry())
|
||
+ && (QApplication::screens().count() == 1)) {
|
||
+ return;
|
||
+ }
|
||
+ if (desktop->geometry().height() > height() || desktop->geometry().width() > width()) {
|
||
+ setGeometry(
|
||
+ desktop->geometry().x(),
|
||
+ desktop->geometry().y(),
|
||
+ desktop->geometry().width() + 1,
|
||
+ desktop->geometry().height() + 1);
|
||
+ }
|
||
+
|
||
+ update();
|
||
+ moveToCursorScreen();
|
||
+ qDebug() << desktop->geometry();
|
||
+}
|
||
+
|
||
+void FullScreenBackground::onWorkAreaResized()
|
||
+{
|
||
+ qDebug() << "onWorkAreaResized----";
|
||
+ update();
|
||
+}
|
||
+
|
||
+void FullScreenBackground::onPrimaryScreenChanged()
|
||
+{
|
||
+ qDebug() << "onPrimaryScreenChanged----";
|
||
+ moveToCursorScreen();
|
||
+}
|
||
+
|
||
+void FullScreenBackground::onDesktopResized()
|
||
+{
|
||
+ qDebug() << "onDesktopResized----";
|
||
+ if (m_isWayland) {
|
||
+ update();
|
||
+ moveToCursorScreen();
|
||
+ return;
|
||
+ }
|
||
+ QDesktopWidget *desktop = QApplication::desktop();
|
||
+ if ((desktop->geometry().x() != 0 || desktop->geometry().y() != 0) && this->geometry().contains(desktop->geometry())
|
||
+ && (QGuiApplication::screens().count() == 1)) {
|
||
+ return;
|
||
+ }
|
||
+ if (desktop->geometry().height() > height() || desktop->geometry().width() > width()) {
|
||
+ setGeometry(
|
||
+ desktop->geometry().x(),
|
||
+ desktop->geometry().y(),
|
||
+ desktop->geometry().width() + 1,
|
||
+ desktop->geometry().height() + 1);
|
||
+ }
|
||
+
|
||
+ update();
|
||
+ moveToCursorScreen();
|
||
+ qDebug() << desktop->geometry();
|
||
+}
|
||
+
|
||
+void FullScreenBackground::showDialog()
|
||
+{
|
||
+ if (m_isFirstShow) {
|
||
+ m_isFirstShow = false;
|
||
+ blockSomeShortCut(true);
|
||
+ if (!m_isWayland) {
|
||
+ show();
|
||
+ }
|
||
+ if (m_wndMain) {
|
||
+ qDebug() << "DialogGeometry:" << m_wndMain->geometry();
|
||
+ m_wndMain->show();
|
||
+ m_wndMain->activateWindow();
|
||
+ // move auth dialog to cursor screen
|
||
+ moveToCursorScreen();
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+void FullScreenBackground::closeDialog()
|
||
+{
|
||
+ blockSomeShortCut(false);
|
||
+ if (m_wndMain) {
|
||
+ m_wndMain->hide();
|
||
+ m_wndMain->stopDoubleAuth();
|
||
+ m_wndMain->close();
|
||
+ m_wndMain->deleteLater();
|
||
+ m_wndMain = nullptr;
|
||
+ }
|
||
+}
|
||
+
|
||
+bool FullScreenBackground::isSupportCompositing()
|
||
+{
|
||
+ if (QString(qgetenv("XDG_SESSION_TYPE")) == "wayland") {
|
||
+ return true;
|
||
+ }
|
||
+ QDBusInterface kwinCompositor(
|
||
+ "org.ukui.KWin", "/Compositor", "org.freedesktop.DBus.Properties", QDBusConnection::sessionBus());
|
||
+ QDBusReply<QDBusVariant> sessionReply = kwinCompositor.call("Get", "org.kde.kwin.Compositing", "compositingType");
|
||
+ if (!sessionReply.isValid()) {
|
||
+ qWarning() << sessionReply.error();
|
||
+ } else {
|
||
+ QString strType = sessionReply.value().variant().toString();
|
||
+ if (strType.isEmpty() || strType == "none")
|
||
+ return false;
|
||
+ }
|
||
+ return true;
|
||
+}
|
||
+
|
||
+QPixmap FullScreenBackground::getBackground()
|
||
+{
|
||
+ QPixmap pixmapBackground;
|
||
+ QString strPicName = "";
|
||
+
|
||
+ // 获取桌面壁纸路径
|
||
+ QGSettings *personalGSettings = nullptr;
|
||
+ if (QGSettings::isSchemaInstalled(PERSONALSIE_SCHEMA)) {
|
||
+ personalGSettings = new QGSettings(PERSONALSIE_SCHEMA, QByteArray(), this);
|
||
+ QStringList keys = personalGSettings->keys();
|
||
+ if (keys.contains(PERSONALSIE_TRAN_KEY)) {
|
||
+ strPicName = personalGSettings->get(PERSONALSIE_TRAN_KEY).toString();
|
||
+ }
|
||
+ delete personalGSettings;
|
||
+ personalGSettings = nullptr;
|
||
+ }
|
||
+
|
||
+ // 文件存在且可读则加载图片
|
||
+ QFileInfo fileInfo(strPicName);
|
||
+ if (fileInfo.exists() && fileInfo.isReadable()) {
|
||
+ // do nothing
|
||
+ } else {
|
||
+ strPicName = getAccountBackground();
|
||
+ }
|
||
+
|
||
+ if (!strPicName.isEmpty()) {
|
||
+ QImageReader reader;
|
||
+ reader.setFileName(strPicName);
|
||
+ reader.setAutoTransform(true);
|
||
+ reader.setDecideFormatFromContent(true);
|
||
+ pixmapBackground = QPixmap::fromImageReader(&reader);
|
||
+ }
|
||
+
|
||
+ return pixmapBackground;
|
||
+}
|
||
+
|
||
+QString FullScreenBackground::getAccountBackground()
|
||
+{
|
||
+ QString strTmpPicName = "/usr/share/backgrounds/ubuntukylin-default-settings.jpg";
|
||
+
|
||
+ uid_t uid = getuid();
|
||
+ QDBusInterface iface(
|
||
+ "org.freedesktop.Accounts",
|
||
+ "/org/freedesktop/Accounts",
|
||
+ "org.freedesktop.Accounts",
|
||
+ QDBusConnection::systemBus());
|
||
+
|
||
+ QDBusReply<QDBusObjectPath> userPath = iface.call("FindUserById", (qint64)uid);
|
||
+ if (!userPath.isValid()) {
|
||
+ return strTmpPicName;
|
||
+ } else {
|
||
+ QDBusInterface userIface(
|
||
+ "org.freedesktop.Accounts",
|
||
+ userPath.value().path(),
|
||
+ "org.freedesktop.DBus.Properties",
|
||
+ QDBusConnection::systemBus());
|
||
+ QDBusReply<QDBusVariant> backgroundReply
|
||
+ = userIface.call("Get", "org.freedesktop.Accounts.User", "BackgroundFile");
|
||
+ if (backgroundReply.isValid()) {
|
||
+ QString strPicName = backgroundReply.value().variant().toString();
|
||
+ if (!strPicName.isEmpty()) {
|
||
+ QFileInfo fileInfo(strPicName);
|
||
+ if (fileInfo.exists() && fileInfo.isReadable()) {
|
||
+ return strPicName;
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ return strTmpPicName;
|
||
+}
|
||
+
|
||
+void FullScreenBackground::moveToScreen(QScreen *screen)
|
||
+{
|
||
+ // 将主全屏更新到新屏幕上,并重新将对话框居中
|
||
+ if (!screen) {
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ if (m_wndMain) {
|
||
+ QRect rectParent = screen->geometry();
|
||
+ QRect rectDes = QRect(
|
||
+ rectParent.x() + (rectParent.width() - m_wndMain->width()) / 2,
|
||
+ rectParent.y() + (rectParent.height() - m_wndMain->height()) / 2,
|
||
+ m_wndMain->width(),
|
||
+ m_wndMain->height());
|
||
+
|
||
+ WindowManager::setGeometry(m_wndMain->windowHandle(), rectDes);
|
||
+ qDebug() << "new rect:" << rectParent << "," << rectDes << "," << m_wndMain->geometry();
|
||
+ }
|
||
+}
|
||
+
|
||
+void FullScreenBackground::moveToCursorScreen()
|
||
+{
|
||
+ bool isFoundScreen = false;
|
||
+ if (m_isWayland) {
|
||
+ QString strCurScreen = WindowManager::currentOutputName();
|
||
+ for (auto screen : QApplication::screens()) {
|
||
+ qDebug() << "Screen:" << screen->name() << "," << screen->geometry();
|
||
+ if (screen && screen->name() == strCurScreen) {
|
||
+ isFoundScreen = true;
|
||
+ moveToScreen(screen);
|
||
+ break;
|
||
+ }
|
||
+ }
|
||
+ } else {
|
||
+ QPoint cursor = QCursor::pos();
|
||
+ for (auto screen : QApplication::screens()) {
|
||
+ qDebug() << "Screen:" << screen->name() << "," << screen->geometry();
|
||
+ if (screen && screen->geometry().contains(cursor)) {
|
||
+ isFoundScreen = true;
|
||
+ moveToScreen(screen);
|
||
+ break;
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ if (!isFoundScreen) {
|
||
+ if (QApplication::primaryScreen()) {
|
||
+ moveToScreen(QApplication::primaryScreen());
|
||
+ }
|
||
+ isFoundScreen = true;
|
||
+ }
|
||
+}
|
||
+
|
||
+void FullScreenBackground::paintEvent(QPaintEvent *event)
|
||
+{
|
||
+ if (!m_isWayland) {
|
||
+ for (auto screen : QApplication::screens()) {
|
||
+ QPainter painter(this);
|
||
+ if (!m_pixmapBackground.isNull()) {
|
||
+ painter.drawPixmap(screen->geometry(), m_pixmapBackground);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ return QWidget::paintEvent(event);
|
||
+}
|
||
+
|
||
+void FullScreenBackground::closeEvent(QCloseEvent *event)
|
||
+{
|
||
+ qDebug() << "FullScreenBackground::closeEvent";
|
||
+ if (!m_isWayland) {
|
||
+ // 断开屏幕变化信号
|
||
+ QDesktopWidget *desktop = QApplication::desktop();
|
||
+ disconnect(desktop, &QDesktopWidget::resized, this, &FullScreenBackground::onDesktopResized);
|
||
+ disconnect(desktop, &QDesktopWidget::workAreaResized, this, &FullScreenBackground::onWorkAreaResized);
|
||
+ disconnect(desktop, &QDesktopWidget::primaryScreenChanged, this, &FullScreenBackground::onPrimaryScreenChanged);
|
||
+ disconnect(desktop, &QDesktopWidget::screenCountChanged, this, &FullScreenBackground::onScreenCountChanged);
|
||
+ }
|
||
+
|
||
+ return QWidget::closeEvent(event);
|
||
+}
|
||
+
|
||
+void FullScreenBackground::resizeEvent(QResizeEvent *event)
|
||
+{
|
||
+ Q_UNUSED(event);
|
||
+ qDebug() << "WndSize:" << this->size();
|
||
+}
|
||
+
|
||
+void FullScreenBackground::blockSomeShortCut(bool isBlock /* = false*/)
|
||
+{
|
||
+ static bool sIsBlocked = false;
|
||
+ if (sIsBlocked == isBlock) {
|
||
+ return;
|
||
+ }
|
||
+ QStringList listBlockShortCut = {
|
||
+ "Minimize All Window", // 最小化所有窗口
|
||
+ "Minimize Or Unminimize All Window Besides Active Window", // 最小化或还原非焦点窗口
|
||
+ "Multitask View show", // 显示工作区
|
||
+ "Show/Hide Desktop", // 显示/隐藏桌面
|
||
+ "ShowDesktopGrid", // Show Desktop Grid
|
||
+ "ShowMultitaskView", // Show Multitask View
|
||
+ "Switch One Desktop Down", // 切换到下面的桌面
|
||
+ "Switch One Desktop Up", // 切换到上面的桌面
|
||
+ "Switch One Desktop to the Left", // 切换到左边的工作区
|
||
+ "Switch One Desktop to the Right", // 切换到右边的工作区
|
||
+ "Switch to Desktop 1", // 切换到桌面 1
|
||
+ "Switch to Desktop 2", // 切换到桌面 2
|
||
+ "Switch to Desktop 3", // 切换到桌面 3
|
||
+ "Switch to Desktop 4", // 切换到桌面 4
|
||
+ "Switch to Next Screen", // 切换到下一屏幕
|
||
+ "Switch to Previous Screen", // 切换到上一个屏幕
|
||
+ "Toggle Window Raise/Lower", // 窗口置前或置后
|
||
+ "Unminimize All Window", // 还原所有最小化窗口
|
||
+ "Walk Through Desktop List", // 遍历桌面列表
|
||
+ "Walk Through Desktop List (Reverse)", // 遍历桌面列表(反向)
|
||
+ "Walk Through Desktops", // 遍历桌面
|
||
+ "Walk Through Desktops (Reverse)", // 遍历桌面(反向)
|
||
+ "Walk Through Windows", // 遍历窗口
|
||
+ "Walk Through Windows (Reverse)", // 遍历窗口(反向)
|
||
+ "Walk Through Windows Alternative", // 遍历窗口候选
|
||
+ "Walk Through Windows Alternative (Reverse)", // 遍历窗口候选(反向)
|
||
+ "Walk Through Windows of Current Application", // 遍历当前应用程序窗口
|
||
+ "Walk Through Windows of Current Application (Reverse)", // 遍历当前应用程序窗口(反向)
|
||
+ "Walk Through Windows of Current Application Alternative", // 遍历当前应用程序窗口候选
|
||
+ "Walk Through Windows of Current Application Alternative (Reverse)", // 遍历当前应用程序窗口候选(反向)
|
||
+ "Walk Through fullscreenWindows", // 遍历所有最大化或全屏窗口
|
||
+ "Window Lower", // 降低窗口
|
||
+ "Window Maximize", // 最大化窗口
|
||
+ "Window Maximize Horizontal", // 水平最大化窗口
|
||
+ "Window Maximize Vertical", // 垂直最大化窗口
|
||
+ "Window Minimize", // 最小化窗口
|
||
+ "Window On All Desktops", // 将窗口放到全部桌面
|
||
+ "Window One Desktop Down", // 窗口下移一个桌面
|
||
+ "Window One Desktop Up", // 窗口上移一个桌面
|
||
+ "Window One Desktop to the Left", // 窗口左移一个桌面
|
||
+ "Window One Desktop to the Right", // 窗口右移一个桌面
|
||
+ "Window Operations Menu", // 窗口操作菜单
|
||
+ "Window Quick Move And Maximize Left Screen", // 窗口快速移动并最大化到下一个屏幕
|
||
+ "Window Quick Move And Maximize Right Screen", // 窗口快速移动并最大化到上一个屏幕
|
||
+ "Window Quick Move Left Screen", // 窗口快速移动到下一个屏幕
|
||
+ "Window Quick Move Right Screen", // 窗口快速移动到上一个屏幕
|
||
+ "Window to Desktop 1", // 窗口到桌面 1
|
||
+ "Window to Desktop 2", // 窗口到桌面 2
|
||
+ "Window to Desktop 3", // 窗口到桌面 3
|
||
+ "Window to Desktop 4", // 窗口到桌面 4
|
||
+ "Window to Next Desktop", // 窗口到下一桌面
|
||
+ "Window to Next Screen", // 窗口到下一屏幕
|
||
+ "Window to Previous Desktop", // 窗口到前一桌面
|
||
+ "Window to Previous Screen", // 窗口到前一屏幕
|
||
+ "Window to Screen 0", // 窗口到屏幕 0
|
||
+ "Window to Screen 1", // 窗口到屏幕 1
|
||
+ "Window to Screen 2", // 窗口到屏幕 2
|
||
+ "Window to Screen 3", // 窗口到屏幕 3
|
||
+ "Window to Screen 4", // 窗口到屏幕 4
|
||
+ };
|
||
+ sIsBlocked = isBlock;
|
||
+ if (sIsBlocked) {
|
||
+ if (!m_isWayland) {
|
||
+ // kwin shortcut
|
||
+ QDBusInterface kwinInterface("org.ukui.KWin", "/KWin", "org.kde.KWin", QDBusConnection::sessionBus());
|
||
+ for (QString strShortCut : listBlockShortCut) {
|
||
+ QDBusMessage blockMessage = kwinInterface.call("blockShortcut", strShortCut, true);
|
||
+ if (blockMessage.type() == QDBusMessage::ErrorMessage) {
|
||
+ qWarning() << "Kwin dbus error:" << blockMessage.errorMessage();
|
||
+ break;
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ // usd shortcut
|
||
+ if (!m_usdBlockShortCut) {
|
||
+ m_usdBlockShortCut = new USDBlockShortCut(this);
|
||
+ }
|
||
+ } else {
|
||
+ if (!m_isWayland) {
|
||
+ // kwin shortcut
|
||
+ QDBusInterface kwinInterface("org.ukui.KWin", "/KWin", "org.kde.KWin", QDBusConnection::sessionBus());
|
||
+ for (QString strShortCut : listBlockShortCut) {
|
||
+ QDBusMessage blockMessage = kwinInterface.call("blockShortcut", strShortCut, false);
|
||
+ if (blockMessage.type() == QDBusMessage::ErrorMessage) {
|
||
+ qWarning() << "Kwin dbus error1:" << blockMessage.errorMessage();
|
||
+ break;
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ // usd shortcut
|
||
+ if (m_usdBlockShortCut) {
|
||
+ delete m_usdBlockShortCut;
|
||
+ m_usdBlockShortCut = nullptr;
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+bool FullScreenBackground::eventFilter(QObject *obj, QEvent *event)
|
||
+{
|
||
+ return QWidget::eventFilter(obj, event);
|
||
+}
|
||
diff --git a/polkit-agent/src/fullscreenbackground.h b/polkit-agent/src/fullscreenbackground.h
|
||
new file mode 100644
|
||
index 0000000..90c0665
|
||
--- /dev/null
|
||
+++ b/polkit-agent/src/fullscreenbackground.h
|
||
@@ -0,0 +1,173 @@
|
||
+/*
|
||
+ * Copyright (C) 2024 Tianjin KYLIN Information Technology Co., Ltd.
|
||
+ *
|
||
+ * This program is free software; you can redistribute it and/or modify
|
||
+ * it under the terms of the GNU General Public License as published by
|
||
+ * the Free Software Foundation; either version 3, or (at your option)
|
||
+ * any later version.
|
||
+ *
|
||
+ * This program is distributed in the hope that it will be useful,
|
||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
+ * GNU General Public License for more details.
|
||
+ *
|
||
+ * You should have received a copy of the GNU General Public License
|
||
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||
+ *
|
||
+ **/
|
||
+#ifndef FULLSCREENMANAGER_H
|
||
+#define FULLSCREENMANAGER_H
|
||
+
|
||
+#include <QWidget>
|
||
+#include <QList>
|
||
+#include <QPair>
|
||
+#include <QRect>
|
||
+#include <PolkitQt1/ActionDescription>
|
||
+#include <QPixmap>
|
||
+#include <QScreen>
|
||
+#include "usdblockshortcut.h"
|
||
+
|
||
+class MainWindow;
|
||
+class FullScreenBackground : public QWidget
|
||
+{
|
||
+ Q_OBJECT
|
||
+public:
|
||
+ explicit FullScreenBackground(QWidget *parent = nullptr);
|
||
+ virtual ~FullScreenBackground();
|
||
+
|
||
+ /**
|
||
+ * @brief getMainWindow 获取认证对话框
|
||
+ * @return 认证对话框指针
|
||
+ */
|
||
+ inline MainWindow *getMainWindow()
|
||
+ {
|
||
+ return m_wndMain;
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * @brief initMainWindow 初始化认证对话框
|
||
+ * @param strIconName 认证图标名称
|
||
+ * @param strMsg 认证消息
|
||
+ * @param listUsers 认证用户列表
|
||
+ * @param subjectPid 项目进程号
|
||
+ * @param callerPid 调用者进程号
|
||
+ * @param actionDesc 动作描述
|
||
+ * @param isMavis 是否为mavis平台
|
||
+ * @param isSupportTableMode 是否支持平板模式
|
||
+ */
|
||
+ void initMainWindow(
|
||
+ const QString &strIconName,
|
||
+ const QString &strMsg,
|
||
+ const QStringList &listUsers,
|
||
+ const QString &subjectPid,
|
||
+ const QString &callerPid,
|
||
+ const PolkitQt1::ActionDescription &actionDesc,
|
||
+ const bool &isMavis,
|
||
+ const bool &isSupportTableMode);
|
||
+
|
||
+ /**
|
||
+ * @brief showDialog 显示认证对话框
|
||
+ */
|
||
+ void showDialog();
|
||
+
|
||
+ /**
|
||
+ * @brief closeDialog 关闭认证对话框
|
||
+ */
|
||
+ void closeDialog();
|
||
+
|
||
+protected:
|
||
+ /**
|
||
+ * @brief paintEvent 绘制事件处理
|
||
+ * @param event 事件指针
|
||
+ */
|
||
+ void paintEvent(QPaintEvent *event);
|
||
+
|
||
+ /**
|
||
+ * @brief closeEvent 窗口关闭事件处理
|
||
+ * @param event 事件指针
|
||
+ */
|
||
+ void closeEvent(QCloseEvent *event);
|
||
+
|
||
+ /**
|
||
+ * @brief resizeEvent 窗口大小改变事件处理
|
||
+ * @param event 事件指针
|
||
+ */
|
||
+ void resizeEvent(QResizeEvent *event);
|
||
+
|
||
+ bool eventFilter(QObject *obj, QEvent *event);
|
||
+
|
||
+private Q_SLOTS:
|
||
+ /**
|
||
+ * @brief onScreenCountChanged 屏幕数变化处理
|
||
+ */
|
||
+ void onScreenCountChanged(int);
|
||
+
|
||
+ /**
|
||
+ * @brief onDesktopResized 桌面大小变化处理
|
||
+ */
|
||
+ void onDesktopResized();
|
||
+
|
||
+ /**
|
||
+ * @brief onPrimaryScreenChanged 主屏变化处理
|
||
+ */
|
||
+ void onPrimaryScreenChanged();
|
||
+
|
||
+ /**
|
||
+ * @brief onWorkAreaResized 工作区大小变化处理
|
||
+ */
|
||
+ void onWorkAreaResized();
|
||
+
|
||
+private:
|
||
+ /**
|
||
+ * @brief initUI 初始化UI
|
||
+ */
|
||
+ void initUI();
|
||
+
|
||
+ /**
|
||
+ * @brief initConnections 初始化信号槽连接
|
||
+ */
|
||
+ void initConnections();
|
||
+ /**
|
||
+ * @brief isSupportCompositing 是否支持窗口复合
|
||
+ * @return true 支持,否则不支持
|
||
+ */
|
||
+ bool isSupportCompositing();
|
||
+
|
||
+ /**
|
||
+ * @brief getBackground 获取背景
|
||
+ * @return 背景pixmap
|
||
+ */
|
||
+ QPixmap getBackground();
|
||
+
|
||
+ /**
|
||
+ * @brief getAccountBackground 获取账户背景
|
||
+ * @return 背景路径
|
||
+ */
|
||
+ QString getAccountBackground();
|
||
+
|
||
+ /**
|
||
+ * @brief moveToScreen 移动认证弹窗到指定屏幕
|
||
+ * @param screen 屏幕信息指针
|
||
+ */
|
||
+ void moveToScreen(QScreen *screen);
|
||
+
|
||
+ /**
|
||
+ * @brief moveToCursorScreen 移动认证窗口到光标屏幕
|
||
+ */
|
||
+ void moveToCursorScreen();
|
||
+
|
||
+ /**
|
||
+ * @brief blockSomeShortCut 禁启用快捷键
|
||
+ * @param isBlock 是否为禁用
|
||
+ */
|
||
+ void blockSomeShortCut(bool isBlock = false);
|
||
+
|
||
+private:
|
||
+ MainWindow *m_wndMain = nullptr; // 认证对话框
|
||
+ QPixmap m_pixmapBackground; // 背景图
|
||
+ bool m_isFirstShow = true; // 第一次显示才主动移动对话框居中
|
||
+ USDBlockShortCut *m_usdBlockShortCut = nullptr; // usd禁启用快捷键实例
|
||
+ bool m_isWayland = false;
|
||
+};
|
||
+
|
||
+#endif // FULLSCREENMANAGER_H
|
||
diff --git a/polkit-agent/src/kalabel.cpp b/polkit-agent/src/kalabel.cpp
|
||
index a74f9da..9f14c79 100644
|
||
--- a/polkit-agent/src/kalabel.cpp
|
||
+++ b/polkit-agent/src/kalabel.cpp
|
||
@@ -17,15 +17,12 @@
|
||
**/
|
||
#include "kalabel.h"
|
||
|
||
-
|
||
-KALabel::KALabel(QWidget *parent)
|
||
- : QLabel(parent)
|
||
+KALabel::KALabel(QWidget *parent) : QLabel(parent)
|
||
{
|
||
m_strText = "";
|
||
}
|
||
|
||
-KALabel::KALabel(QString strText, QWidget *parent)
|
||
- : QLabel(strText, parent)
|
||
+KALabel::KALabel(QString strText, QWidget *parent) : QLabel(strText, parent)
|
||
{
|
||
m_strText = strText;
|
||
}
|
||
@@ -38,7 +35,7 @@ void KALabel::setText(const QString &strText)
|
||
|
||
void KALabel::paintEvent(QPaintEvent *event)
|
||
{
|
||
- QString strEText = getElidedText(font(), width() ,m_strText);
|
||
+ QString strEText = getElidedText(font(), width(), m_strText);
|
||
if (strEText != m_strText) {
|
||
QLabel::setText(strEText);
|
||
setToolTip(m_strText);
|
||
@@ -49,13 +46,12 @@ void KALabel::paintEvent(QPaintEvent *event)
|
||
QLabel::paintEvent(event);
|
||
}
|
||
|
||
-QString KALabel::getElidedText(QFont font,int width,QString strInfo)
|
||
+QString KALabel::getElidedText(QFont font, int width, QString strInfo)
|
||
{
|
||
QFontMetrics fontMetrics(font);
|
||
//如果当前字体下,字符串长度大于指定宽度
|
||
- if(fontMetrics.width(strInfo) > width)
|
||
- {
|
||
- strInfo= QFontMetrics(font).elidedText(strInfo, Qt::ElideRight, width);
|
||
+ if (fontMetrics.width(strInfo) > width) {
|
||
+ strInfo = QFontMetrics(font).elidedText(strInfo, Qt::ElideRight, width);
|
||
}
|
||
return strInfo;
|
||
}
|
||
diff --git a/polkit-agent/src/kalabel.h b/polkit-agent/src/kalabel.h
|
||
index 8fc9b53..7ee60cb 100644
|
||
--- a/polkit-agent/src/kalabel.h
|
||
+++ b/polkit-agent/src/kalabel.h
|
||
@@ -26,7 +26,8 @@ class KALabel : public QLabel
|
||
public:
|
||
KALabel(QWidget *parent = nullptr);
|
||
KALabel(QString strText, QWidget *parent = nullptr);
|
||
- QString getElidedText(QFont font,int width,QString strInfo);
|
||
+ QString getElidedText(QFont font, int width, QString strInfo);
|
||
+
|
||
public slots:
|
||
void setText(const QString &);
|
||
|
||
diff --git a/polkit-agent/src/mainwindow.cpp b/polkit-agent/src/mainwindow.cpp
|
||
index 74a0730..1a99b89 100644
|
||
--- a/polkit-agent/src/mainwindow.cpp
|
||
+++ b/polkit-agent/src/mainwindow.cpp
|
||
@@ -13,8 +13,8 @@
|
||
*
|
||
* You should have received a copy of the GNU General Public License
|
||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||
- *
|
||
-**/
|
||
+ *
|
||
+ **/
|
||
#include "mainwindow.h"
|
||
#include "ui_mainwindow.h"
|
||
#include <QMovie>
|
||
@@ -44,58 +44,38 @@
|
||
#include "biotypes.h"
|
||
#include "modeButton.h"
|
||
#include <QDebug>
|
||
+#include <windowmanager/windowmanager.h>
|
||
#define _(string) gettext(string)
|
||
extern void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed);
|
||
|
||
-MainWindow::MainWindow(QWidget *parent) :
|
||
- QWidget(parent),
|
||
- ui(new Ui::MainWindow),
|
||
- users(new Users(this)),
|
||
- enableBioAuth(false),
|
||
- receiveBioPAM(false),
|
||
- authMode(UNDEFINED),
|
||
- useDoubleAuth(false),
|
||
- m_timer(nullptr),
|
||
- w_timer(nullptr),
|
||
- isLockingFlg(false),
|
||
- m_nCurLockMin(0),
|
||
- isbioSuccess(false)
|
||
+MainWindow::MainWindow(QWidget *parent)
|
||
+ : kdk::KDialog(parent)
|
||
+ , ui(new Ui::MainWindow)
|
||
+ , users(new Users(this))
|
||
+ , enableBioAuth(false)
|
||
+ , receiveBioPAM(false)
|
||
+ , authMode(UNDEFINED)
|
||
+ , useDoubleAuth(false)
|
||
+ , m_timer(nullptr)
|
||
+ , w_timer(nullptr)
|
||
+ , isLockingFlg(false)
|
||
+ , m_nCurLockMin(0)
|
||
+ , isbioSuccess(false)
|
||
{
|
||
- setWindowFlags(Qt::Tool | Qt::WindowCloseButtonHint | Qt::WindowStaysOnTopHint);
|
||
ui->setupUi(this);
|
||
- setWindowTitle(tr("Authentication"));
|
||
+ mainLayout()->addLayout(ui->verticalLayout_2);
|
||
|
||
pam_tally_init(); //
|
||
|
||
-// headerLayout = new QHBoxLayout();
|
||
-// headerLayout->setContentsMargins(8,0,8,0);
|
||
-// headerLayout->setSpacing(8);
|
||
-// logoLabel = new QLabel();
|
||
-// logoLabel->setPixmap(QIcon::fromTheme("ukui-polkit").pixmap(QSize(24,24)));
|
||
-// headerLayout->addWidget(logoLabel);
|
||
-// titleLabel = new QLabel();
|
||
-// titleLabel->setText(tr("Authenticate"));
|
||
-// headerLayout->addWidget(titleLabel);
|
||
-// ui->headerWidget->setLayout(headerLayout);
|
||
-// headerLayout->addStretch();
|
||
-// closeBtn = new QPushButton();
|
||
-// closeBtn->setFixedSize(30, 30);
|
||
-// closeBtn->setToolTip(tr("Close"));
|
||
-// closeBtn->setProperty("isWindowButton", 0x02);
|
||
-// closeBtn->setProperty("useIconHighlightEffect", 0x08);
|
||
-// closeBtn->setFlat(true);
|
||
-// closeBtn->setIcon(QIcon::fromTheme("window-close-symbolic"));
|
||
-// connect(closeBtn, &QPushButton::clicked, this, &MainWindow::close);
|
||
-// headerLayout->addWidget(closeBtn);
|
||
-
|
||
// 登录选项
|
||
m_labelTip = new KALabel();
|
||
m_labelTip->setText("");
|
||
+ m_labelTip->setFixedHeight(30);
|
||
m_labelTip->hide();
|
||
m_loginOptsWidget = new LoginOptionsWidget();
|
||
m_loginOptsWidget->hide();
|
||
ui->titleTipLayout->addWidget(m_labelTip);
|
||
- ui->loginOptionsLayout->setAlignment(Qt::AlignTop|Qt::AlignCenter);
|
||
+ ui->loginOptionsLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter);
|
||
ui->loginOptionsLayout->addWidget(m_loginOptsWidget);
|
||
ui->loadingUkeyWidget->adjustSize();
|
||
ui->loadingUkeyWidget->hide();
|
||
@@ -103,174 +83,19 @@ MainWindow::MainWindow(QWidget *parent) :
|
||
ui->loadingUkeyBtn->setAttribute(Qt::WA_TransparentForMouseEvents, true);
|
||
ui->ukeyPassword->setEchoMode(QLineEdit::Password);
|
||
ui->loadingUkeyLbl->setText(tr("Insert the ukey into the USB port"));
|
||
- ui->loadingUkeyLbl->setAlignment(Qt::AlignTop|Qt::AlignHCenter);
|
||
+ ui->loadingUkeyLbl->setAlignment(Qt::AlignTop | Qt::AlignHCenter);
|
||
ui->ukeyTipLbl->setText(tr("Enter the ukey password"));
|
||
ui->ukeyPassword->setPlaceholderText(tr("Input Password"));
|
||
+ ui->btnCancel->setAutoDefault(false);
|
||
+ ui->btnCancel->setDefault(false);
|
||
maxFailedTimes = bioDevices.getFailedTimes();
|
||
isHiddenSwitchButton = bioDevices.GetHiddenSwitchButton();
|
||
+ closeButton()->setToolTip(tr("Close"));
|
||
|
||
- connect(m_loginOptsWidget, &LoginOptionsWidget::optionSelected,
|
||
- this, [&](unsigned uCurLoginOptType, const DeviceInfoPtr &deviceInfo){
|
||
- isLoadingUkey = false;
|
||
-
|
||
- if(uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY){
|
||
- stopLoadingUkey();
|
||
- }
|
||
-
|
||
- if(uCurLoginOptType == LOGINOPT_TYPE_PASSWORD){
|
||
- switchLoginOptType(uCurLoginOptType);
|
||
- if(m_loginOptsWidget){
|
||
- m_loginOptsWidget->stopAuth();
|
||
- }
|
||
- m_deviceInfo = nullptr;
|
||
- authMode = PASSWORD;
|
||
- emit restartAuth();
|
||
- return;
|
||
- }
|
||
-
|
||
- if (uCurLoginOptType != LOGINOPT_TYPE_GENERAL_UKEY && !deviceInfo)
|
||
- return;
|
||
-
|
||
- if(deviceInfo)
|
||
- qDebug() << "device changed: " << deviceInfo->biotype;
|
||
-
|
||
- if(deviceInfo && m_failMap[getUid(userName)][deviceInfo->device_id] >= maxFailedTimes){
|
||
- qDebug() << "Failed MAX!!";
|
||
- return ;
|
||
- }
|
||
-
|
||
- if (uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY && !deviceInfo){
|
||
- isLoadingUkey = true;
|
||
- startLoadingUkey();
|
||
- m_loginOptsWidget->updateUkeyUIStatus(LOGINOPT_TYPE_GENERAL_UKEY);
|
||
- }else if(uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY && deviceInfo){
|
||
- stopLoadingUkey();
|
||
- m_loginOptsWidget->updateUkeyUIStatus(LOGINOPT_TYPE_GENERAL_UKEY);
|
||
- }
|
||
-
|
||
- if (deviceInfo == m_deviceInfo) {
|
||
- return;
|
||
- }
|
||
-
|
||
- if (uCurLoginOptType != LOGINOPT_TYPE_GENERAL_UKEY && deviceInfo == m_deviceInfo) {
|
||
- return ;
|
||
- }
|
||
-
|
||
- if(m_bioTimer)
|
||
- m_bioTimer->stop();
|
||
-
|
||
- m_deviceInfo = deviceInfo;
|
||
- switchLoginOptType(uCurLoginOptType);
|
||
- if(!isbioSuccess && m_deviceInfo) {
|
||
- startBioAuth();
|
||
- }
|
||
- });
|
||
-
|
||
- connect(m_loginOptsWidget, &LoginOptionsWidget::notifyOptionsChange,
|
||
- this, [&](unsigned uOptionsCount){
|
||
- if (uOptionsCount > 0) {
|
||
- m_loginOptsWidget->show();
|
||
- } else {
|
||
- //m_loginOptsWidget->hide();
|
||
- }
|
||
-
|
||
- if (m_deviceInfo && m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
|
||
- stopLoadingUkey();
|
||
- }
|
||
-
|
||
- if (!m_deviceInfo || !m_loginOptsWidget->findDeviceById(m_deviceInfo->device_id)
|
||
- || m_loginOptsWidget->isDeviceDisable(m_deviceInfo->device_id)) {
|
||
- m_loginOptsWidget->stopAuth();
|
||
- if (authMode != UNDEFINED) {
|
||
- authMode = UNDEFINED;
|
||
- emit switchToBiometric();
|
||
- }
|
||
- }
|
||
- });
|
||
-
|
||
- connect(m_loginOptsWidget, &LoginOptionsWidget::authComplete,
|
||
- this, [&](uid_t uid, bool ret, int nStatus){
|
||
- qDebug() << "biometric authentication complete: " << uid << ret << nStatus;
|
||
-
|
||
- if(m_deviceInfo && m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY && ui->widgetUkeyAuth->isVisible()){
|
||
- ui->ukeyPassword->setText("");
|
||
- }
|
||
-
|
||
- if(uid == getUid(userName) && ret) {
|
||
- isbioSuccess = true;
|
||
- emit switchToBiometric();
|
||
- authMode = UNDEFINED;
|
||
- } else {
|
||
- if (nStatus == 5 && m_deviceInfo) {
|
||
- if(w_timer && w_timer->isActive())
|
||
- w_timer->stop();
|
||
- QImage imgFailed;
|
||
- m_loginOptsWidget->setFaceImg(imgFailed, 2);
|
||
- return;
|
||
- } else if (nStatus >= 2 && nStatus != 5)if (nStatus >= 2) {
|
||
- if (m_deviceInfo) {
|
||
- uid_t curUid = getUid(userName);
|
||
- if(m_failMap.contains(curUid) && m_failMap[curUid].contains(m_deviceInfo->device_id)){
|
||
- m_failMap[curUid][m_deviceInfo->device_id] = m_failMap[curUid][m_deviceInfo->device_id] + 1;
|
||
- }else{
|
||
- m_failMap[curUid][m_deviceInfo->device_id] = 1;
|
||
- }
|
||
- qDebug()<<"Failed count:"<<m_failMap[curUid][m_deviceInfo->device_id]<<",Max:"<<maxFailedTimes;
|
||
- if (m_deviceInfo->biotype == BIOTYPE_FACE) {
|
||
- QImage imgFailed;
|
||
- m_loginOptsWidget->setFaceImg(imgFailed, 1);
|
||
- }
|
||
- if(m_failMap[curUid][m_deviceInfo->device_id] >= maxFailedTimes){
|
||
- no_changes = true;
|
||
- if (m_deviceInfo->biotype == REMOTE_QRCODE_TYPE) {
|
||
- setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock").arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
|
||
- QImage nullImage;
|
||
- m_loginOptsWidget->setQRCode(nullImage);
|
||
- } else if(m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
|
||
- ui->ukeyPassword->setReadOnly(true);
|
||
- setUkeyTypeTip(tr("Unable to verify %1, please enter password to unlock").arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
|
||
- }else {
|
||
- setLoginTypeTip(tr("Unable to verify %1, please enter password to unlock").arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
|
||
- }
|
||
-
|
||
- m_loginOptsWidget->setDeviceDisable(m_deviceInfo->device_id, true);
|
||
- useDoubleAuth = false;
|
||
- return ;
|
||
- }
|
||
- no_changes = false;
|
||
- if(m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
|
||
- setUkeyTypeTip(tr("Failed to verify %1, you still have %2 verification opportunities")
|
||
- .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype))
|
||
- .arg(maxFailedTimes-m_failMap[curUid][m_deviceInfo->device_id]));
|
||
- }else{
|
||
- setLoginTypeTip(tr("Failed to verify %1, you still have %2 verification opportunities")
|
||
- .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype))
|
||
- .arg(maxFailedTimes-m_failMap[curUid][m_deviceInfo->device_id]));
|
||
- }
|
||
- }
|
||
- }
|
||
- if(!isbioSuccess) {
|
||
- // dbus error
|
||
- if (nStatus == -1) {
|
||
- qDebug()<<"Biometric dbus error:"<<authMode;
|
||
- }
|
||
- if (m_uCurLoginOptType == LOGINOPT_TYPE_QRCODE && nStatus == 1) {
|
||
- m_isNetworkErr = true;
|
||
- m_loginOptsWidget->setQRCodeMsg(tr("Abnormal network"));
|
||
- startBioAuth(10000);
|
||
- } else {
|
||
- startBioAuth();
|
||
- }
|
||
- if (nStatus >= 2 && m_deviceInfo) {
|
||
- if (m_deviceInfo->biotype == BIOTYPE_FACE) {
|
||
- QImage imgFailed;
|
||
- m_loginOptsWidget->setFaceImg(imgFailed, 1);
|
||
- }
|
||
- }
|
||
- }
|
||
- }
|
||
- });
|
||
-
|
||
+ // 连接登录选项信号响应槽
|
||
+ connect(m_loginOptsWidget, &LoginOptionsWidget::optionSelected, this, &MainWindow::onOptionSelected);
|
||
+ connect(m_loginOptsWidget, &LoginOptionsWidget::notifyOptionsChange, this, &MainWindow::onNotifyOptionsChanged);
|
||
+ connect(m_loginOptsWidget, &LoginOptionsWidget::authComplete, this, &MainWindow::onLoginOptionsAuthCompleted);
|
||
connect(m_loginOptsWidget, &LoginOptionsWidget::updateAuthMsg, this, &MainWindow::onUpdateBioAuthMsg);
|
||
connect(m_loginOptsWidget, &LoginOptionsWidget::updateWndSize, this, &MainWindow::onUpdateWndSize);
|
||
|
||
@@ -279,36 +104,29 @@ MainWindow::MainWindow(QWidget *parent) :
|
||
setStyleSheet(qssFile.readAll());
|
||
qssFile.close();
|
||
|
||
- //ui->cmbUsers->hide();
|
||
- //ui->widgetDetails->hide();
|
||
- //ui->btnDetails->setIcon(QIcon(":/image/assets/arrow_right.svg"));
|
||
- //ui->btnDetails->hide();
|
||
ui->lePassword->installEventFilter(this);
|
||
+ // 初始化UI状态
|
||
switchWidget(UNDEFINED);
|
||
editIcon();
|
||
ui->lblContent->adjustSize();
|
||
- ui->lblContent->height();
|
||
- ui->lblMessage->adjustSize();
|
||
+ ui->lblContent->hide();
|
||
+ ui->lblMessage->setFixedSize(372, 30);
|
||
ui->widgetPasswdAuth->adjustSize();
|
||
ui->widgetUkeyAuth->adjustSize();
|
||
- ui->lblMessage->height();
|
||
ui->cmbUsers->view()->setTextElideMode(Qt::ElideRight);
|
||
-
|
||
- settings = new QGSettings("org.ukui.style","",this);
|
||
- fontSize = settings->get("system-font-size").toInt();
|
||
- connect(settings, &QGSettings::changed,
|
||
- this, &MainWindow::onConfigurationChanged);
|
||
-
|
||
- QDBusInterface *interfaceScreensaver = new QDBusInterface(
|
||
- "org.ukui.ScreenSaver",
|
||
- "/",
|
||
- "org.ukui.ScreenSaver",
|
||
- QDBusConnection::sessionBus());
|
||
- connect(interfaceScreensaver, SIGNAL(lock()),
|
||
- this, SLOT(onLockStatus()));
|
||
- connect(interfaceScreensaver, SIGNAL(unlock()),
|
||
- this, SLOT(onUnlockStatus()));
|
||
-
|
||
+ ui->cmbUsers->setFixedHeight(36);
|
||
+ ui->lePassword->setFixedHeight(36);
|
||
+ ui->btnBioAuth->hide();
|
||
+ ui->returnButton->hide();
|
||
+
|
||
+ settings = new QGSettings("org.ukui.style", "", this);
|
||
+ fontSize = settings->get("system-font-size").toInt();
|
||
+ connect(settings, &QGSettings::changed, this, &MainWindow::onConfigurationChanged);
|
||
+
|
||
+ QDBusInterface *interfaceScreensaver
|
||
+ = new QDBusInterface("org.ukui.ScreenSaver", "/", "org.ukui.ScreenSaver", QDBusConnection::sessionBus());
|
||
+ connect(interfaceScreensaver, SIGNAL(lock()), this, SLOT(onLockStatus()));
|
||
+ connect(interfaceScreensaver, SIGNAL(unlock()), this, SLOT(onUnlockStatus()));
|
||
}
|
||
|
||
MainWindow::~MainWindow()
|
||
@@ -318,19 +136,31 @@ MainWindow::~MainWindow()
|
||
|
||
void MainWindow::onConfigurationChanged(QString key)
|
||
{
|
||
- if(key == "systemFontSize"){
|
||
+ if (key == "systemFontSize") {
|
||
m_loginOptsWidget->updateUIStatus(false);
|
||
- fontSize = settings->get("system-font-size").toInt();
|
||
+ fontSize = settings->get("system-font-size").toInt();
|
||
}
|
||
- if(key == "iconThemeName") {
|
||
+ if (key == "iconThemeName") {
|
||
setIcon(app_IconName);
|
||
}
|
||
+ if (key == "styleName") {
|
||
+ QPalette pe;
|
||
+ if (no_changes) {
|
||
+ pe.setColor(QPalette::WindowText, Qt::red);
|
||
+ m_labelTip->setPalette(pe);
|
||
+ } else {
|
||
+ QColor color = palette().color(QPalette::WindowText);
|
||
+ QPalette pal(this->palette());
|
||
+ pal.setColor(QPalette::WindowText, QColor(color));
|
||
+ m_labelTip->setPalette(pal);
|
||
+ }
|
||
+ }
|
||
}
|
||
|
||
void MainWindow::restart_bio_identify()
|
||
{
|
||
DeviceInfoPtr device = bioDevices.getDefaultDevice(getUid(userName));
|
||
- if(device){
|
||
+ if (device) {
|
||
m_loginOptsWidget->startAuth(device, getUid(userName));
|
||
setMessage(tr("Please enter your password or enroll your fingerprint "));
|
||
}
|
||
@@ -338,21 +168,20 @@ void MainWindow::restart_bio_identify()
|
||
|
||
void MainWindow::closeEvent(QCloseEvent *event)
|
||
{
|
||
- m_loginOptsWidget->stopAuth();
|
||
+ if (m_loginOptsWidget) {
|
||
+ m_loginOptsWidget->stopAuth();
|
||
+ }
|
||
m_failMap.clear();
|
||
emit canceled();
|
||
-
|
||
- return QWidget::closeEvent(event);
|
||
+ return kdk::KDialog::closeEvent(event);
|
||
}
|
||
|
||
void MainWindow::setUkeyTypeTip(QString text)
|
||
{
|
||
QString textTip = text;
|
||
if (!textTip.isEmpty()) {
|
||
-// QFontMetrics font(m_ukeyMessageLabel->font());
|
||
-// QString textTip = font.elidedText(textTip, Qt::ElideRight, m_messageLabel->width()-8);
|
||
QPalette pe;
|
||
- pe.setColor(QPalette::WindowText,Qt::red);
|
||
+ pe.setColor(QPalette::WindowText, Qt::red);
|
||
ui->ukeyMessage->setPalette(pe);
|
||
ui->ukeyMessage->setText(textTip);
|
||
ui->ukeyMessage->setToolTip(text);
|
||
@@ -364,7 +193,7 @@ void MainWindow::setUkeyTypeTip(QString text)
|
||
|
||
void MainWindow::startLoadingUkey()
|
||
{
|
||
- m_loadingPixmap = QIcon::fromTheme("ukui-loading-0-symbolic").pixmap(27,27);
|
||
+ m_loadingPixmap = QIcon::fromTheme("ukui-loading-0-symbolic").pixmap(27, 27);
|
||
ui->loadingUkeyBtn->setIcon(m_loadingPixmap);
|
||
ui->loadingUkeyBtn->setIconSize(QSize(27, 27));
|
||
|
||
@@ -378,8 +207,7 @@ void MainWindow::startLoadingUkey()
|
||
isLoadingUkey = true;
|
||
ui->loadingUkeyWidget->show();
|
||
|
||
- if(!m_loadingTimer)
|
||
- {
|
||
+ if (!m_loadingTimer) {
|
||
m_loadingTimer = new QTimer(this);
|
||
m_loadingTimer->setInterval(150);
|
||
connect(m_loadingTimer, &QTimer::timeout, this, &MainWindow::updateLoadingPixmap);
|
||
@@ -390,13 +218,13 @@ void MainWindow::startLoadingUkey()
|
||
void MainWindow::stopLoadingUkey()
|
||
{
|
||
isLoadingUkey = false;
|
||
- if(m_loadingTimer){
|
||
+ if (m_loadingTimer) {
|
||
m_loadingTimer->stop();
|
||
}
|
||
|
||
ui->loadingUkeyWidget->hide();
|
||
- //ui->cmbUsers->show();
|
||
- //ui->widgetUkeyAuth->show();
|
||
+ // ui->cmbUsers->show();
|
||
+ // ui->widgetUkeyAuth->show();
|
||
}
|
||
|
||
void MainWindow::updateLoadingPixmap()
|
||
@@ -409,20 +237,19 @@ void MainWindow::updateLoadingPixmap()
|
||
|
||
void MainWindow::paintEvent(QPaintEvent *event)
|
||
{
|
||
-
|
||
Q_UNUSED(event);
|
||
QStyleOption *option = new QStyleOption();
|
||
QPainter p(this);
|
||
p.setRenderHint(QPainter::Antialiasing);
|
||
QPainterPath rectPath;
|
||
- rectPath.addRoundedRect(this->rect().adjusted(0,0,0,0),0,0);
|
||
+ rectPath.addRoundedRect(this->rect().adjusted(0, 0, 0, 0), 0, 0);
|
||
// 画一个黑底
|
||
QPixmap pixmap(this->rect().size());
|
||
pixmap.fill(Qt::transparent);
|
||
QPainter pixmapPainter(&pixmap);
|
||
pixmapPainter.setRenderHint(QPainter::Antialiasing);
|
||
pixmapPainter.setPen(Qt::transparent);
|
||
- pixmapPainter.setBrush(QColor(0,0,0,100));
|
||
+ pixmapPainter.setBrush(QColor(0, 0, 0, 100));
|
||
pixmapPainter.drawPath(rectPath);
|
||
pixmapPainter.end();
|
||
|
||
@@ -444,34 +271,49 @@ void MainWindow::paintEvent(QPaintEvent *event)
|
||
|
||
// 绘制一个背景
|
||
p.save();
|
||
- p.fillPath(rectPath,option->palette.color(QPalette::Base));
|
||
+ p.fillPath(rectPath, option->palette.color(QPalette::Base));
|
||
p.restore();
|
||
- //绘制一个矩形
|
||
-
|
||
- p.setPen(Qt::red);
|
||
- QRectF rect(0,290,20,20);
|
||
-
|
||
}
|
||
|
||
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
|
||
{
|
||
- if(obj == ui->lePassword){
|
||
- if(event->type() == QEvent::KeyPress){ //禁止复制粘贴功能。
|
||
+ if (obj == ui->lePassword) {
|
||
+ if (event->type() == QEvent::KeyPress) { // 禁止复制粘贴功能。
|
||
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
|
||
- if(keyEvent->matches(QKeySequence::Copy) || keyEvent->matches(QKeySequence::Cut) || keyEvent->matches(QKeySequence::Paste)){
|
||
+ if (keyEvent->matches(QKeySequence::Copy) || keyEvent->matches(QKeySequence::Cut)
|
||
+ || keyEvent->matches(QKeySequence::Paste)) {
|
||
event->ignore();
|
||
return true;
|
||
}
|
||
}
|
||
- if(event->type() == QEvent::MouseButtonRelease) { //禁用鼠标中键
|
||
- QMouseEvent *mouseevent = static_cast<QMouseEvent*>(event);
|
||
- if(mouseevent->button() == Qt::MidButton){
|
||
+ if (event->type() == QEvent::MouseButtonRelease) { // 禁用鼠标中键
|
||
+ QMouseEvent *mouseevent = static_cast<QMouseEvent *>(event);
|
||
+ if (mouseevent->button() == Qt::MidButton) {
|
||
event->ignore();
|
||
return true;
|
||
}
|
||
}
|
||
+ } else if (obj == this) {
|
||
+ if (event->type() == QEvent::Show || event->type() == QEvent::UpdateRequest) {
|
||
+ if (QString(qgetenv("XDG_SESSION_TYPE")) == "wayland") {
|
||
+ WindowManager::setWindowLayer(this->windowHandle(), (kdk::WindowLayer)15);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ return kdk::KDialog::eventFilter(obj, event);
|
||
+}
|
||
+
|
||
+void MainWindow::keyPressEvent(QKeyEvent *event)
|
||
+{
|
||
+ switch (event->key()) {
|
||
+ case Qt::Key_Escape: {
|
||
+ break;
|
||
+ }
|
||
+ default: {
|
||
+ kdk::KDialog::keyPressEvent(event);
|
||
+ break;
|
||
+ }
|
||
}
|
||
- return false;
|
||
}
|
||
|
||
/*** main ***/
|
||
@@ -479,14 +321,14 @@ void MainWindow::on_cmbUsers_currentTextChanged(const QString &userName)
|
||
{
|
||
qDebug() << "user changed to " << userName;
|
||
m_loginOptsWidget->stopAuth();
|
||
- if(m_bioTimer && m_bioTimer->isActive())
|
||
+ if (m_bioTimer && m_bioTimer->isActive())
|
||
m_bioTimer->stop();
|
||
- authMode=UNDEFINED;
|
||
+ authMode = UNDEFINED;
|
||
|
||
QList<UserItem> accountUsers = users->getUsers();
|
||
this->userName = userName;
|
||
- for(UserItem user:accountUsers){
|
||
- if(user.realName == userName){
|
||
+ for (UserItem user : accountUsers) {
|
||
+ if (user.realName == userName) {
|
||
this->userName = user.name;
|
||
}
|
||
}
|
||
@@ -506,36 +348,35 @@ int MainWindow::enable_biometric_authentication()
|
||
char line[1024], is_enable[16];
|
||
int i;
|
||
|
||
-
|
||
- if((file = fopen(conf_file, "r")) == NULL){
|
||
+ if ((file = fopen(conf_file, "r")) == NULL) {
|
||
return 0;
|
||
}
|
||
- while(fgets(line, sizeof(line), file)) {
|
||
- i = sscanf(line, "EnableAuth=%s\n", is_enable);
|
||
- if(i > 0) {
|
||
+ while (fgets(line, sizeof(line), file)) {
|
||
+ i = sscanf(line, "EnableAuth=%s\n", is_enable);
|
||
+ if (i > 0) {
|
||
break;
|
||
}
|
||
}
|
||
|
||
fclose(file);
|
||
- if(!strcmp(is_enable, "true"))
|
||
+ if (!strcmp(is_enable, "true"))
|
||
return 1;
|
||
return 0;
|
||
}
|
||
|
||
void MainWindow::on_btnDetails_clicked()
|
||
-{/*
|
||
- if(ui->widgetDetails->isHidden()) {
|
||
- ui->widgetDetails->show();
|
||
- ui->btnDetails->setIcon(QIcon(":/image/assets/arrow_down.svg"));
|
||
-// resize(width(), height() + ui->widgetDetails->height());
|
||
- }
|
||
- else {
|
||
- ui->widgetDetails->hide();
|
||
- ui->btnDetails->setIcon(QIcon(":/image/assets/arrow_right.svg"));
|
||
-// resize(width(), height() - ui->widgetDetails->height());
|
||
- }
|
||
- adjustSize();*/
|
||
+{ /*
|
||
+ if(ui->widgetDetails->isHidden()) {
|
||
+ ui->widgetDetails->show();
|
||
+ ui->btnDetails->setIcon(QIcon(":/image/assets/arrow_down.svg"));
|
||
+ // resize(width(), height() + ui->widgetDetails->height());
|
||
+ }
|
||
+ else {
|
||
+ ui->widgetDetails->hide();
|
||
+ ui->btnDetails->setIcon(QIcon(":/image/assets/arrow_right.svg"));
|
||
+ // resize(width(), height() - ui->widgetDetails->height());
|
||
+ }
|
||
+ adjustSize();*/
|
||
}
|
||
|
||
void MainWindow::on_btnCancel_clicked()
|
||
@@ -545,22 +386,37 @@ void MainWindow::on_btnCancel_clicked()
|
||
|
||
void MainWindow::on_btnAuth_clicked()
|
||
{
|
||
- if(ui->widgetUkeyAuth->isVisible()){
|
||
+ if (doNotNeedAuth) {
|
||
+ emit yesPrompted();
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ if (ui->widgetUkeyAuth->isVisible()) {
|
||
on_ukeyPassword_returnPressed();
|
||
- }else{
|
||
+ } else {
|
||
on_lePassword_returnPressed();
|
||
}
|
||
}
|
||
|
||
+void MainWindow::onShowYesPrompt()
|
||
+{
|
||
+ doNotNeedAuth = true;
|
||
+ ui->widgetPasswdAuth->hide();
|
||
+ ui->cmbUsers->hide();
|
||
+ ui->btnBioAuth->hide();
|
||
+ ui->returnButton->hide();
|
||
+ ui->btnAuth->show();
|
||
+}
|
||
+
|
||
void MainWindow::onLockStatus()
|
||
{
|
||
- //m_loginOptsWidget->stopAuth();
|
||
+ // m_loginOptsWidget->stopAuth();
|
||
m_loginOptsWidget->lockStatusChanged(true);
|
||
}
|
||
|
||
void MainWindow::onUnlockStatus()
|
||
{
|
||
- //m_loginOptsWidget->readDevicesInfo();
|
||
+ // m_loginOptsWidget->readDevicesInfo();
|
||
m_loginOptsWidget->lockStatusChanged(false);
|
||
startBioAuth();
|
||
}
|
||
@@ -570,7 +426,7 @@ void MainWindow::editIcon()
|
||
{
|
||
m_modeButton = new ModeButton(ui->lePassword);
|
||
m_modeButton->setFocusPolicy(Qt::NoFocus);
|
||
- connect(m_modeButton, &QPushButton::clicked, this, [=](){
|
||
+ connect(m_modeButton, &QPushButton::clicked, this, [=]() {
|
||
if (ui->lePassword->echoMode() == QLineEdit::Password) {
|
||
ui->lePassword->setEchoMode(QLineEdit::Normal);
|
||
} else {
|
||
@@ -580,15 +436,15 @@ void MainWindow::editIcon()
|
||
QHBoxLayout *layout = new QHBoxLayout(ui->lePassword);
|
||
layout->addStretch();
|
||
layout->addWidget(m_modeButton);
|
||
- layout->setContentsMargins(0,0,8,0);
|
||
+ layout->setContentsMargins(0, 0, 8, 0);
|
||
|
||
- ui->lePassword->setTextMargins(1, 1, 4+ m_modeButton->width(), 1);
|
||
+ ui->lePassword->setTextMargins(1, 1, 4 + m_modeButton->width(), 1);
|
||
}
|
||
|
||
void MainWindow::on_ukeyPassword_returnPressed()
|
||
{
|
||
- if(m_loginOptsWidget && m_deviceInfo){
|
||
- m_loginOptsWidget->SetExtraInfo(ui->ukeyPassword->text(),"pincode");
|
||
+ if (m_loginOptsWidget && m_deviceInfo) {
|
||
+ m_loginOptsWidget->SetExtraInfo(ui->ukeyPassword->text(), "pincode");
|
||
m_loginOptsWidget->startAuth(m_deviceInfo, getUid(userName));
|
||
}
|
||
}
|
||
@@ -598,8 +454,7 @@ void MainWindow::on_lePassword_returnPressed()
|
||
emit accept(ui->lePassword->text());
|
||
ui->btnAuth->hide();
|
||
ui->btnLoading->show();
|
||
- if(!w_timer)
|
||
- {
|
||
+ if (!w_timer) {
|
||
w_timer = new QTimer(this);
|
||
w_timer->setInterval(150);
|
||
connect(w_timer, &QTimer::timeout, this, &MainWindow::updatePixmap);
|
||
@@ -625,20 +480,19 @@ void MainWindow::on_returnButton_clicked()
|
||
}
|
||
/*** end of control's slot ***/
|
||
|
||
-
|
||
/*** public member ***/
|
||
|
||
void MainWindow::setIcon(const QString &iconName)
|
||
{
|
||
-// QIcon::setThemeName("ukui-icon-theme");
|
||
+ // QIcon::setThemeName("ukui-icon-theme");
|
||
app_IconName = iconName;
|
||
- if(!QIcon::hasThemeIcon("ukui-polkit")) {
|
||
+ if (!QIcon::hasThemeIcon("ukui-polkit")) {
|
||
QDir iconsDir("/usr/share/icons");
|
||
auto themesList = iconsDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
|
||
qDebug() << themesList;
|
||
- for(auto theme : themesList) {
|
||
+ for (auto theme : themesList) {
|
||
QIcon::setThemeName(theme);
|
||
- if(QIcon::hasThemeIcon("ukui-polkit")) {
|
||
+ if (QIcon::hasThemeIcon("ukui-polkit")) {
|
||
qDebug() << theme << "has ukui-polkit icon";
|
||
break;
|
||
}
|
||
@@ -649,25 +503,22 @@ void MainWindow::setIcon(const QString &iconName)
|
||
QPainter painter;
|
||
|
||
painter.begin(&icon);
|
||
- QRect rect(32,
|
||
- 32,
|
||
- 32, 32);
|
||
+ QRect rect(32, 32, 32, 32);
|
||
painter.drawPixmap(rect, actionIcon);
|
||
painter.end();
|
||
|
||
setWindowIcon(icon);
|
||
- //ui->lblIcon->setPixmap(icon);
|
||
+ // ui->lblIcon->setPixmap(icon);
|
||
}
|
||
|
||
void MainWindow::setHeader(const QString &text)
|
||
{
|
||
- if(is_Mavis)
|
||
+ if (is_Mavis)
|
||
ui->lblHeader->setText(tr("This operation requires the administrator's authorization. "
|
||
- "Please enter your password to allow this operation."));
|
||
+ "Please enter your password to allow this operation."));
|
||
else
|
||
ui->lblHeader->setText(text);
|
||
ui->lblHeader->adjustSize();
|
||
- ui->lblHeader->height();
|
||
ui->lblContent->setText(tr("A program is attempting to perform an action that requires privileges."
|
||
"It requires authorization to perform the action."));
|
||
ui->lblContent->adjustSize();
|
||
@@ -675,24 +526,24 @@ void MainWindow::setHeader(const QString &text)
|
||
|
||
void MainWindow::setUsers(const QStringList &usersList)
|
||
{
|
||
- if(usersList.isEmpty())
|
||
+ if (usersList.isEmpty())
|
||
return;
|
||
|
||
- if(usersList.size() == 1) {
|
||
+ if (usersList.size() == 1) {
|
||
UserItem user = users->getUserByName(usersList.at(0));
|
||
- if(user.realName != ""){
|
||
+ if (user.realName != "") {
|
||
userName = user.realName;
|
||
- }else{
|
||
+ } else {
|
||
userName = usersList.at(0);
|
||
}
|
||
}
|
||
|
||
QList<UserItem> accountUsers = users->getUsers();
|
||
- for(QString identifyUser:usersList){
|
||
+ for (QString identifyUser : usersList) {
|
||
bool isFoundAccount = false;
|
||
- for(UserItem user:accountUsers){
|
||
- if(identifyUser == user.name){
|
||
- if(user.realName != "")
|
||
+ for (UserItem user : accountUsers) {
|
||
+ if (identifyUser == user.name) {
|
||
+ if (user.realName != "")
|
||
ui->cmbUsers->addItem(user.realName);
|
||
else
|
||
ui->cmbUsers->addItem(user.name);
|
||
@@ -706,7 +557,7 @@ void MainWindow::setUsers(const QStringList &usersList)
|
||
}
|
||
|
||
ui->cmbUsers->show();
|
||
- //ui->cmbUsers->adjustSize();
|
||
+ // ui->cmbUsers->adjustSize();
|
||
}
|
||
/*
|
||
void MainWindow::setDetails(const QString &subPid, const QString &callerPid, const QString &actionId,
|
||
@@ -725,7 +576,7 @@ void MainWindow::setPrompt(const QString &text, bool echo)
|
||
{
|
||
QString prompt = text;
|
||
|
||
- if(text == "Input Password"){
|
||
+ if (text == "Input Password") {
|
||
prompt = tr("Input Password");
|
||
} else if (text == "Password: " || text == "Password:") {
|
||
prompt = tr("Password: ");
|
||
@@ -734,18 +585,18 @@ void MainWindow::setPrompt(const QString &text, bool echo)
|
||
} else if (text == "_Password:") {
|
||
prompt = tr("_Password:");
|
||
}
|
||
- if(!m_timer){
|
||
+ if (!m_timer) {
|
||
m_timer = new QTimer(this);
|
||
m_timer->setInterval(200);
|
||
connect(m_timer, &QTimer::timeout, this, &MainWindow::unlock_countdown);
|
||
}
|
||
- //qDebug() << "6666";
|
||
+ // qDebug() << "6666";
|
||
m_timer->start();
|
||
unlock_countdown();
|
||
|
||
ui->lePassword->clear();
|
||
ui->lePassword->setPlaceholderText(prompt);
|
||
- // switchWidget(PASSWORD);
|
||
+ // switchWidget(PASSWORD);
|
||
}
|
||
|
||
/*
|
||
@@ -756,89 +607,92 @@ void MainWindow::setPrompt(const QString &text, bool echo)
|
||
*/
|
||
QString MainWindow::check_is_pam_message(QString text)
|
||
{
|
||
- setlocale(LC_ALL,"");
|
||
- bindtextdomain("Linux-PAM","/usr/share/locale");
|
||
- bind_textdomain_codeset("Linux-PAM","UTF-8");
|
||
+ if (text.isEmpty()) {
|
||
+ return text;
|
||
+ }
|
||
+ setlocale(LC_ALL, "");
|
||
+ bindtextdomain("Linux-PAM", "/usr/share/locale");
|
||
+ bind_textdomain_codeset("Linux-PAM", "UTF-8");
|
||
textdomain("Linux-PAM");
|
||
- char* str;
|
||
+ char *str;
|
||
QString strTrans = "";
|
||
QByteArray ba = text.toLocal8Bit(); // must
|
||
- str=ba.data();
|
||
+ str = ba.data();
|
||
char l_str[1024];
|
||
- int a,b;
|
||
- //兼容旧版本翻译,以及适配新版本翻译
|
||
- //因为不知道什么原因,pam发过来的始终为英文,因此这里主动加载pam的翻译文件,使用gettext获取翻译
|
||
- if(text.contains("attemps",Qt::CaseSensitive) && sscanf(str,"Authenticated failed, %d login attemps left",&a))
|
||
- snprintf(l_str,1024,_("Authenticated failed, %d login attemps left"),a);
|
||
- else if(text.contains("attempts",Qt::CaseSensitive) && sscanf(str,"Authenticated failed, %d login attempts left",&a))
|
||
- snprintf(l_str,1024,_("Authenticated failed, %d login attempts left"),a);
|
||
- else if(text.contains("attempt",Qt::CaseSensitive) && sscanf(str,"Authenticated failed, %d login attempt left",&a))
|
||
- snprintf(l_str,1024,_("Authenticated failed, %d login attempt left"),a);
|
||
- else if(text.contains("days",Qt::CaseSensitive) && sscanf(str,"Account locked, %d days left",&a)){
|
||
- //这里的消息是多个字符串拼接起来的,无法在翻译文件中找到对应的句子,只能自己翻译
|
||
+ int a, b;
|
||
+ // 兼容旧版本翻译,以及适配新版本翻译
|
||
+ // 因为不知道什么原因,pam发过来的始终为英文,因此这里主动加载pam的翻译文件,使用gettext获取翻译
|
||
+ if (text.contains("attemps", Qt::CaseSensitive) && sscanf(str, "Authenticated failed, %d login attemps left", &a))
|
||
+ snprintf(l_str, 1024, _("Authenticated failed, %d login attemps left"), a);
|
||
+ else if (
|
||
+ text.contains("attempts", Qt::CaseSensitive) && sscanf(str, "Authenticated failed, %d login attempts left", &a))
|
||
+ snprintf(l_str, 1024, _("Authenticated failed, %d login attempts left"), a);
|
||
+ else if (
|
||
+ text.contains("attempt", Qt::CaseSensitive) && sscanf(str, "Authenticated failed, %d login attempt left", &a))
|
||
+ snprintf(l_str, 1024, _("Authenticated failed, %d login attempt left"), a);
|
||
+ else if (text.contains("days", Qt::CaseSensitive) && sscanf(str, "Account locked, %d days left", &a)) {
|
||
+ // 这里的消息是多个字符串拼接起来的,无法在翻译文件中找到对应的句子,只能自己翻译
|
||
strTrans = tr("Account locked,") + QString("%1 ").arg(a) + tr("days left");
|
||
return strTrans;
|
||
- }
|
||
- else if(text.contains("hours",Qt::CaseSensitive) && sscanf(str,"Account locked, %d hours left",&a)){
|
||
+ } else if (text.contains("hours", Qt::CaseSensitive) && sscanf(str, "Account locked, %d hours left", &a)) {
|
||
strTrans = tr("Account locked,") + QString("%1 ").arg(a) + tr("hours left");
|
||
return strTrans;
|
||
- }
|
||
- else if(text.contains("minutes",Qt::CaseSensitive) && sscanf(str,"Account locked, %d minutes left",&a)){
|
||
+ } else if (text.contains("minutes", Qt::CaseSensitive) && sscanf(str, "Account locked, %d minutes left", &a)) {
|
||
strTrans = tr("Account locked,") + QString("%1 ").arg(a) + tr("minutes left");
|
||
return strTrans;
|
||
- }
|
||
- else if(text.contains("seconds",Qt::CaseSensitive) && sscanf(str,"Account locked, %d seconds left",&a)){
|
||
+ } else if (text.contains("seconds", Qt::CaseSensitive) && sscanf(str, "Account locked, %d seconds left", &a)) {
|
||
strTrans = tr("Account locked,") + QString("%1 ").arg(a) + tr("seconds left");
|
||
return strTrans;
|
||
- }else if(text.contains("Warning: ",Qt::CaseSensitive) && sscanf(str,"Warning: your password will expire in %d day",&a)){
|
||
- snprintf(l_str,1024,_("Warning: your password will expire in %d day"),a);
|
||
- }else if(text.contains("Warning: ",Qt::CaseSensitive) && sscanf(str,"Warning: your password will expire in %d days",&a)){
|
||
- snprintf(l_str,1024,_("Warning: your password will expire in %d days"),a);
|
||
- }
|
||
- else{
|
||
+ } else if (
|
||
+ text.contains("Warning: ", Qt::CaseSensitive)
|
||
+ && sscanf(str, "Warning: your password will expire in %d day", &a)) {
|
||
+ snprintf(l_str, 1024, _("Warning: your password will expire in %d day"), a);
|
||
+ } else if (
|
||
+ text.contains("Warning: ", Qt::CaseSensitive)
|
||
+ && sscanf(str, "Warning: your password will expire in %d days", &a)) {
|
||
+ snprintf(l_str, 1024, _("Warning: your password will expire in %d days"), a);
|
||
+ } else {
|
||
return _(str);
|
||
}
|
||
-
|
||
- qDebug()<<"l_str = "<<l_str;
|
||
+
|
||
+ qDebug() << "l_str = " << l_str;
|
||
return QString(l_str);
|
||
}
|
||
|
||
-void MainWindow::setMessage(const QString &text,situation situat)
|
||
+void MainWindow::setMessage(const QString &text, situation situat)
|
||
{
|
||
|
||
- if(situat == ERROR){
|
||
+ if (situat == ERROR) {
|
||
QPalette pe;
|
||
- pe.setColor(QPalette::WindowText,Qt::red);
|
||
+ pe.setColor(QPalette::WindowText, Qt::red);
|
||
ui->lblMessage->setPalette(pe);
|
||
-// ui->lePassword->setStyleSheet("QLineEdit{background-color: palette(Button);"
|
||
-// "border-radius: 6px;border: 1px solid #F3222D;}");
|
||
- }else if(situat == TRUE){
|
||
- QColor color = palette().color(QPalette::WindowText);
|
||
- QPalette pal(this->palette());
|
||
- pal.setColor(QPalette::WindowText,QColor(color));
|
||
- ui->lblMessage->setPalette(pal);
|
||
+ // ui->lePassword->setStyleSheet("QLineEdit{background-color: palette(Button);"
|
||
+ // "border-radius: 6px;border: 1px solid #F3222D;}");
|
||
+ } else if (situat == TRUE) {
|
||
+ QColor color = palette().color(QPalette::WindowText);
|
||
+ QPalette pal(this->palette());
|
||
+ pal.setColor(QPalette::WindowText, QColor(color));
|
||
+ ui->lblMessage->setPalette(pal);
|
||
}
|
||
|
||
// qDebug()<<"receive:text = "<<text;
|
||
- if (text.indexOf("account locked") != -1 || text.indexOf("账户已锁定") != -1
|
||
- || text.indexOf("Account locked") != -1 || text.indexOf("永久锁定") != -1)
|
||
- {
|
||
- if(!m_timer){
|
||
+ if (text.indexOf("account locked") != -1 || text.indexOf("账户已锁定") != -1 || text.indexOf("Account locked") != -1
|
||
+ || text.indexOf("永久锁定") != -1) {
|
||
+ if (!m_timer) {
|
||
m_timer = new QTimer(this);
|
||
m_timer->setInterval(800);
|
||
connect(m_timer, &QTimer::timeout, this, &MainWindow::unlock_countdown);
|
||
}
|
||
m_timer->start();
|
||
- }else if (text.indexOf("No password received, please input password") != -1)
|
||
- {
|
||
+ } else if (text.indexOf("No password received, please input password") != -1) {
|
||
ui->lblMessage->setText(tr("Password cannot be empty"));
|
||
ui->lblMessage->setToolTip(tr("Password cannot be empty"));
|
||
- }else{
|
||
+ } else {
|
||
ui->lblMessage->setText(text);
|
||
ui->lblMessage->setToolTip(text);
|
||
}
|
||
- ui->lblMessage->adjustSize();
|
||
- //ui->widgetPasswdAuth->adjustSize();
|
||
+ // ui->lblMessage->adjustSize();
|
||
+ // ui->widgetPasswdAuth->adjustSize();
|
||
// ui->lblMessage->setText(text);
|
||
}
|
||
|
||
@@ -846,36 +700,36 @@ void MainWindow::setAuthResult(bool result, const QString &text)
|
||
{
|
||
QString message = text;
|
||
|
||
- if(!result && text.isEmpty()){
|
||
+ if (!result && text.isEmpty()) {
|
||
message = tr("Authentication failed, please try again.");
|
||
}
|
||
|
||
- if(authMode == PASSWORD) {
|
||
+ if (authMode == PASSWORD) {
|
||
switchWidget(PASSWORD);
|
||
- setMessage(message,ERROR);
|
||
- }
|
||
- else if(authMode == BIOMETRIC)
|
||
- setMessage(message,ERROR);
|
||
-
|
||
-
|
||
+ setMessage(message, ERROR);
|
||
+ } else if (authMode == BIOMETRIC)
|
||
+ setMessage(message, ERROR);
|
||
}
|
||
|
||
void MainWindow::clearEdit()
|
||
{
|
||
ui->lePassword->setText("");
|
||
+ ui->lePassword->setDisabled(true);
|
||
+ ui->lePassword->setReadOnly(true);
|
||
ui->ukeyPassword->setText("");
|
||
+ ui->btnAuth->setDisabled(true);
|
||
}
|
||
|
||
void MainWindow::switchAuthMode(Mode mode)
|
||
{
|
||
- if(isbioSuccess){
|
||
+ if (isbioSuccess) {
|
||
accept(BIOMETRIC_SUCCESS);
|
||
- return ;
|
||
+ return;
|
||
}
|
||
int uid = getUid(userName);
|
||
m_loginOptsWidget->setUser(uid);
|
||
int count = m_loginOptsWidget->getLoginOptCount();
|
||
- enableBioAuth = count > 0;
|
||
+ enableBioAuth = count > 0;
|
||
if (count < 1) {
|
||
setLoginTypeTip(tr("Input your password to authentication"));
|
||
m_loginOptsWidget->hide();
|
||
@@ -884,185 +738,131 @@ void MainWindow::switchAuthMode(Mode mode)
|
||
m_loginOptsWidget->setEnabled(true);
|
||
}
|
||
|
||
- if(m_loginOptsWidget->getHasUkeyOptions()){
|
||
+ if (m_loginOptsWidget->getHasUkeyOptions()) {
|
||
setLoginTypeTip(tr("Input your password to authentication"));
|
||
m_loginOptsWidget->show();
|
||
}
|
||
-
|
||
- switch(mode){
|
||
- case PASSWORD:
|
||
- {
|
||
- qDebug() << "switch to password";
|
||
|
||
- authMode = mode;
|
||
+ switch (mode) {
|
||
+ case PASSWORD: {
|
||
+ qDebug() << "switch to password";
|
||
|
||
- if(!enableBioAuth || !receiveBioPAM || useDoubleAuth) {
|
||
- ui->btnBioAuth->hide();
|
||
- }else{
|
||
- ui->btnBioAuth->show();
|
||
- }
|
||
-
|
||
- if(isHiddenSwitchButton)
|
||
- ui->btnBioAuth->hide();
|
||
-
|
||
-
|
||
- // if(enableBioAuth && useDoubleAuth){
|
||
- // DeviceInfoPtr device = bioDevices.getDefaultDevice(getUid(userName));
|
||
- // if(device){
|
||
- // widgetBioAuth->startAuth(getUid(userName), device);
|
||
- // }
|
||
- // }
|
||
- }
|
||
- break;
|
||
- case BIOMETRIC:
|
||
- {
|
||
- if(authMode == PASSWORD){
|
||
- emit accept(BIOMETRIC_IGNORE);
|
||
- isFirstAuth = false;
|
||
- return;
|
||
- }
|
||
- authMode = mode;
|
||
- qDebug() << "switch to biometric";
|
||
- if (m_deviceInfo) {
|
||
- if (!m_loginOptsWidget->findDeviceById(m_deviceInfo->device_id)
|
||
- || m_loginOptsWidget->isDeviceDisable(m_deviceInfo->device_id)) {
|
||
- m_deviceInfo = DeviceInfoPtr();
|
||
- }
|
||
- }
|
||
+ authMode = mode;
|
||
|
||
- if(!enableBioAuth){
|
||
- qDebug() << "It doesn't meet the condition for enabling biometric authentication, switch to password.";
|
||
- emit accept(BIOMETRIC_IGNORE);
|
||
- isFirstAuth = false;
|
||
- return;
|
||
- } else if(authMode == BIOMETRIC) {
|
||
- QString strDeviceName;
|
||
- if(isLoadingUkey){
|
||
- strDeviceName = m_loginOptsWidget->GetDefaultDevice(uid, UniT_General_Ukey);
|
||
- }else{
|
||
- strDeviceName = m_loginOptsWidget->GetDefaultDevice(uid);
|
||
- }
|
||
- //如果默认设备为空的话,第一次不启动生物识别认证
|
||
- if(strDeviceName.isEmpty() && !m_deviceInfo)
|
||
- {
|
||
- qDebug() << "No default device";
|
||
- emit accept(BIOMETRIC_IGNORE);
|
||
- isFirstAuth = false;
|
||
- return;
|
||
+ if (!enableBioAuth || !receiveBioPAM || useDoubleAuth) {
|
||
+ ui->btnBioAuth->hide();
|
||
+ } else {
|
||
+ ui->btnBioAuth->show();
|
||
}
|
||
|
||
- //第一次,获取默认设备的设备信息,之后使用的则是从设备选择窗口传出的设备信息
|
||
- if(!m_deviceInfo)
|
||
- {
|
||
- m_deviceInfo = m_loginOptsWidget->findDeviceByName(strDeviceName);
|
||
+ if (isHiddenSwitchButton) {
|
||
+ ui->btnBioAuth->hide();
|
||
}
|
||
- if(!m_deviceInfo){
|
||
+ } break;
|
||
+ case BIOMETRIC: {
|
||
+ if (authMode == PASSWORD) {
|
||
emit accept(BIOMETRIC_IGNORE);
|
||
isFirstAuth = false;
|
||
return;
|
||
}
|
||
+ authMode = mode;
|
||
+ qDebug() << "switch to biometric";
|
||
+ if (m_deviceInfo) {
|
||
+ if (!m_loginOptsWidget->findDeviceById(m_deviceInfo->device_id)
|
||
+ || m_loginOptsWidget->isDeviceDisable(m_deviceInfo->device_id)) {
|
||
+ m_deviceInfo = DeviceInfoPtr();
|
||
+ }
|
||
+ }
|
||
|
||
- if(m_failMap.contains(uid) && m_failMap[uid].contains(m_deviceInfo->device_id)
|
||
- && m_failMap[uid][m_deviceInfo->device_id] >= maxFailedTimes){
|
||
+ if (!enableBioAuth) {
|
||
+ qDebug() << "It doesn't meet the condition for enabling biometric authentication, switch to password.";
|
||
emit accept(BIOMETRIC_IGNORE);
|
||
isFirstAuth = false;
|
||
return;
|
||
- }
|
||
-
|
||
- if(m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
|
||
- if(isFirstAuth){
|
||
- isFirstAuth = false;
|
||
- m_deviceInfo = nullptr;
|
||
- emit accept(BIOMETRIC_IGNORE);
|
||
- return ;
|
||
+ } else if (authMode == BIOMETRIC) {
|
||
+ QString strDeviceName;
|
||
+ if (isLoadingUkey) {
|
||
+ strDeviceName = m_loginOptsWidget->GetDefaultDevice(uid, UniT_General_Ukey);
|
||
+ } else {
|
||
+ strDeviceName = m_loginOptsWidget->GetDefaultDevice(uid);
|
||
}
|
||
- switchLoginOptType(LOGINOPT_TYPE_GENERAL_UKEY);
|
||
- stopLoadingUkey();
|
||
- startBioAuth();
|
||
- m_loginOptsWidget->setCurrentDevice(m_deviceInfo);
|
||
- m_loginOptsWidget->updateUIStatus(false);
|
||
-
|
||
- return ;
|
||
- }
|
||
-
|
||
- isFirstAuth = false;
|
||
- startBioAuth();
|
||
- emit accept(BIOMETRIC_IGNORE);
|
||
- return;
|
||
- } /*else if(authMode == UNDEFINED){
|
||
- authMode = BIOMETRIC;
|
||
-
|
||
- if(enableBioAuth) {
|
||
- qDebug() << "enable biometric authenticaion";
|
||
- QString strDeviceName = m_loginOptsWidget->GetDefaultDevice(uid);
|
||
- //如果默认设备为空的话,第一次不启动生物识别认证
|
||
- if(strDeviceName.isEmpty() && !m_deviceInfo)
|
||
- {
|
||
+ // 如果默认设备为空的话,第一次不启动生物识别认证
|
||
+ if (strDeviceName.isEmpty() && !m_deviceInfo) {
|
||
qDebug() << "No default device";
|
||
- if(useFirstDevice == true){
|
||
- m_deviceInfo = m_loginOptsWidget->getFirstDevInfo();
|
||
- }else{
|
||
- emit accept(BIOMETRIC_IGNORE);
|
||
- return;
|
||
- }
|
||
+ emit accept(BIOMETRIC_IGNORE);
|
||
+ isFirstAuth = false;
|
||
+ return;
|
||
}
|
||
- //第一次,获取默认设备的设备信息,之后使用的则是从设备选择窗口传出的设备信息
|
||
- if(!m_deviceInfo)
|
||
- {
|
||
+
|
||
+ // 第一次,获取默认设备的设备信息,之后使用的则是从设备选择窗口传出的设备信息
|
||
+ if (!m_deviceInfo) {
|
||
m_deviceInfo = m_loginOptsWidget->findDeviceByName(strDeviceName);
|
||
- if (!m_deviceInfo)
|
||
- m_deviceInfo = m_loginOptsWidget->getFirstDevInfo();
|
||
}
|
||
- if(!m_deviceInfo){
|
||
+
|
||
+ if (!m_deviceInfo) {
|
||
emit accept(BIOMETRIC_IGNORE);
|
||
+ isFirstAuth = false;
|
||
return;
|
||
}
|
||
- if(m_failMap.contains(uid) && m_failMap[uid].contains(m_deviceInfo->device_id)
|
||
- && m_failMap[uid][m_deviceInfo->device_id] >= maxFailedTimes){
|
||
+
|
||
+ if (m_failMap.contains(uid) && m_failMap[uid].contains(m_deviceInfo->device_id)
|
||
+ && m_failMap[uid][m_deviceInfo->device_id] >= maxFailedTimes) {
|
||
emit accept(BIOMETRIC_IGNORE);
|
||
+ isFirstAuth = false;
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ if (m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
|
||
+ if (isFirstAuth) {
|
||
+ isFirstAuth = false;
|
||
+ m_deviceInfo = nullptr;
|
||
+ emit accept(BIOMETRIC_IGNORE);
|
||
+ return;
|
||
+ }
|
||
+ switchLoginOptType(LOGINOPT_TYPE_GENERAL_UKEY);
|
||
+ stopLoadingUkey();
|
||
+ startBioAuth();
|
||
+ m_loginOptsWidget->setCurrentDevice(m_deviceInfo);
|
||
+ m_loginOptsWidget->updateUIStatus(false);
|
||
return;
|
||
}
|
||
+
|
||
+ isFirstAuth = false;
|
||
+ switchLoginOptType(m_loginOptsWidget->convertDeviceType(m_deviceInfo->biotype));
|
||
startBioAuth();
|
||
emit accept(BIOMETRIC_IGNORE);
|
||
return;
|
||
- } else {*/
|
||
- /* pass biometric's pam module if there are not available devices */
|
||
-// qDebug() << "It doesn't meet the condition for enabling biometric authentication, switch to password.";
|
||
-// emit accept(BIOMETRIC_IGNORE);
|
||
-// return;
|
||
-// }
|
||
-// }
|
||
- }
|
||
- break;
|
||
- default:
|
||
- break;
|
||
+ }
|
||
+ } break;
|
||
+ default:
|
||
+ break;
|
||
}
|
||
switchWidget(mode);
|
||
}
|
||
|
||
/*** end of public memeber ***/
|
||
|
||
-
|
||
/*** private member ***/
|
||
|
||
uid_t MainWindow::getUid(const QString &userName)
|
||
{
|
||
struct passwd *pwd = getpwnam(userName.toStdString().c_str());
|
||
- if(pwd == NULL) {
|
||
+ if (pwd == NULL) {
|
||
qWarning() << "getpwnam error: " << strerror(errno);
|
||
return -1;
|
||
}
|
||
return pwd->pw_uid;
|
||
}
|
||
|
||
-void MainWindow::setDoubleAuth(bool val){
|
||
- useDoubleAuth = val;
|
||
+void MainWindow::setDoubleAuth(bool val)
|
||
+{
|
||
+ useDoubleAuth = val;
|
||
}
|
||
|
||
void MainWindow::stopDoubleAuth()
|
||
{
|
||
-// if(useDoubleAuth && widgetBioAuth)
|
||
-// widgetBioAuth->stopAuth();
|
||
+ // if(useDoubleAuth && widgetBioAuth)
|
||
+ // widgetBioAuth->stopAuth();
|
||
}
|
||
|
||
void MainWindow::switchWidget(Mode mode)
|
||
@@ -1071,127 +871,110 @@ void MainWindow::switchWidget(Mode mode)
|
||
ui->btnAuth->hide();
|
||
ui->btnLoading->hide();
|
||
ui->btnAuth->setText(tr("Authenticate"));
|
||
- ui->btnAuth->adjustSize();
|
||
ui->btnBioAuth->setText(tr("Biometric"));
|
||
- ui->btnBioAuth->adjustSize();
|
||
ui->btnCancel->setText(tr("Cancel"));
|
||
- ui->btnCancel->adjustSize();
|
||
ui->returnButton->setText(tr("Use password"));
|
||
ui->btnLoading->setDisabled(true);
|
||
- ui->returnButton->adjustSize();
|
||
- m_labelTip->adjustSize();
|
||
- if(is_Mavis){
|
||
+ if (is_Mavis) {
|
||
ui->cmbUsers->setFixedHeight(48);
|
||
ui->lePassword->setFixedHeight(48);
|
||
ui->ukeyPassword->setFixedHeight(48);
|
||
ui->btnAuth->setFixedHeight(48);
|
||
ui->btnCancel->setFixedHeight(48);
|
||
- }
|
||
- switch(mode){
|
||
- case PASSWORD:
|
||
- {
|
||
- setFixedWidth(420);
|
||
-
|
||
- if (m_deviceInfo && m_loginOptsWidget->findDeviceById(m_deviceInfo->device_id)) {
|
||
- switchLoginOptType(m_loginOptsWidget->convertDeviceType(m_deviceInfo->biotype));
|
||
- } else {
|
||
- switchLoginOptType(LOGINOPT_TYPE_PASSWORD);
|
||
- }
|
||
- if (!m_loginOptsWidget->isHidden()) {
|
||
- m_loginOptsWidget->adjustSize();
|
||
- }
|
||
- int height;
|
||
- if(fontSize = 10){
|
||
- height = 130 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
|
||
- + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
|
||
- + ui->btnAuth->height();
|
||
- } else if(fontSize = 11 ){
|
||
- height = 150 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
|
||
- + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
|
||
- + ui->btnAuth->height();
|
||
- } else if (fontSize = 12){
|
||
- height = 160 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
|
||
- + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
|
||
- + ui->btnAuth->height();
|
||
- } else if (fontSize = 13){
|
||
- height = 170 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
|
||
- + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
|
||
- + ui->btnAuth->height();
|
||
- } else if (fontSize = 14){
|
||
- height = 190 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
|
||
- + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
|
||
- + ui->btnAuth->height();
|
||
- } else if (fontSize = 15){
|
||
- height = 230 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
|
||
- + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
|
||
- + ui->btnAuth->height();
|
||
- }
|
||
-// if (m_loginOptsWidget->isHidden()) {
|
||
-// height = height - m_labelTip->height() - 10;
|
||
-// }
|
||
-
|
||
- unsigned uOptsWidgetHeight = m_loginOptsWidget->height();
|
||
- if (m_loginOptsWidget->isHidden()) {
|
||
- uOptsWidgetHeight = 0;
|
||
- height = height + m_labelTip->height() - 10;
|
||
- }
|
||
- setFixedHeight(height + uOptsWidgetHeight + 10);
|
||
-
|
||
- //m_loginOptsWidget->updateUIStatus();
|
||
- ui->btnBioAuth->setStyleSheet("QPushButton{font-size:14px;}QPushButton:hover{border:none;color:#3E6CE5;}QPushButton:pressed{border:none;}");
|
||
- ui->btnBioAuth->setFlat(true);
|
||
- ui->btnBioAuth->setText(tr("Biometric"));
|
||
- ui->btnBioAuth->setAttribute(Qt::WA_UnderMouse,false);
|
||
- ui->btnBioAuth->adjustSize();
|
||
- ui->widgetPasswdAuth->show();
|
||
- ui->lePassword->setFocus();
|
||
- //ui->lePassword->setAttribute(Qt::WA_InputMethodEnabled, false);
|
||
- if (m_modeButton && m_modeButton->isShowPwd()) {
|
||
- ui->lePassword->setEchoMode(QLineEdit::Normal);
|
||
- } else {
|
||
- ui->lePassword->setEchoMode(QLineEdit::Password);
|
||
- }
|
||
- ui->btnAuth->show();
|
||
- ui->btnLoading->hide();
|
||
- //ui->lePassword->setDisabled(false);
|
||
- if(w_timer && w_timer->isActive())
|
||
- {
|
||
- w_timer->stop();
|
||
- }
|
||
- ui->btnCancel->show();
|
||
- //ui->lblContent->show();
|
||
- ui->returnButton->hide();
|
||
- ui->lblContent->hide();
|
||
- }
|
||
- break;
|
||
-
|
||
- case BIOMETRIC:
|
||
- setFixedWidth(420);
|
||
- if(m_loginOptsWidget->getLoginOptCount() <= 1){
|
||
- setFixedHeight(392+ui->cmbUsers->height()+ui->lblHeader->height());
|
||
- } else {
|
||
- setFixedHeight(482+ui->cmbUsers->height()+ui->lblHeader->height());
|
||
- }
|
||
-
|
||
- ui->btnCancel->hide();
|
||
- ui->lblContent->hide();
|
||
- ui->btnBioAuth->hide();
|
||
- ui->returnButton->show();
|
||
- ui->returnButton->setAttribute(Qt::WA_UnderMouse,false);
|
||
- ui->returnButton->setFlat(true);
|
||
- ui->returnButton->setStyleSheet("QPushButton{font-size:14px;}QPushButton:hover{border:none;color:#3E6CE5;}QPushButton:pressed{border:none;}");
|
||
- ui->returnButton->setText(tr("Use password"));
|
||
- ui->returnButton->adjustSize();
|
||
- break;
|
||
-// case DEVICES:
|
||
-// widgetBioAuth->show();
|
||
-
|
||
-// break;
|
||
- default:
|
||
- break;
|
||
+ } else {
|
||
+ ui->cmbUsers->setFixedHeight(36);
|
||
+ ui->lePassword->setFixedHeight(36);
|
||
+ ui->ukeyPassword->setFixedHeight(36);
|
||
+ ui->btnAuth->setFixedHeight(36);
|
||
+ ui->btnBioAuth->setFixedHeight(36);
|
||
+ ui->btnCancel->setFixedHeight(36);
|
||
+ ui->returnButton->setFixedHeight(36);
|
||
+ }
|
||
+ switch (mode) {
|
||
+ case PASSWORD: {
|
||
+ setFixedWidth(420);
|
||
+
|
||
+ if (m_deviceInfo && m_loginOptsWidget->findDeviceById(m_deviceInfo->device_id)) {
|
||
+ switchLoginOptType(m_loginOptsWidget->convertDeviceType(m_deviceInfo->biotype));
|
||
+ } else {
|
||
+ switchLoginOptType(LOGINOPT_TYPE_PASSWORD);
|
||
+ }
|
||
+ // 标题+间隔+内容头+间隔+类型提示+间隔+用户列表+间隔+
|
||
+ // (密码输入框+间隔+验证提示+间隔+授权按钮+边距)/ --仅密码方式
|
||
+ // (密码输入框+间隔+验证提示+间隔+登录选项+间隔+授权按钮+边距)/ --密码+生物识别 选择密码
|
||
+ // (登录选项+间隔+授权按钮+边距)/ --密码+生物识别 选择生物识别
|
||
+ // (ukey加载页+间隔+登录选项+间隔+授权按钮+边距)/(ukey认证页+间隔+登录选项+间隔+授权按钮+边距)
|
||
+ // --选择Ukey
|
||
+ int height = 40 + 8 + ui->lblHeader->height() + 8 + m_labelTip->height() + 8;
|
||
+ switch (m_uCurLoginOptType) {
|
||
+ case LOGINOPT_TYPE_PASSWORD: {
|
||
+ height += ui->cmbUsers->height() + 8 + ui->lePassword->height() + 8 + ui->lblMessage->height() + 8;
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_FACE:
|
||
+ case LOGINOPT_TYPE_FINGERPRINT:
|
||
+ case LOGINOPT_TYPE_FINGERVEIN:
|
||
+ case LOGINOPT_TYPE_IRIS:
|
||
+ case LOGINOPT_TYPE_VOICEPRINT:
|
||
+ case LOGINOPT_TYPE_QRCODE: {
|
||
+ height += ui->cmbUsers->height() + 8;
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_GENERAL_UKEY:
|
||
+ case LOGINOPT_TYPE_ADVANCED_UKEY: {
|
||
+ if (!ui->widgetUkeyAuth->isHidden()) {
|
||
+ height += ui->widgetUkeyAuth->height() + 8;
|
||
+ } else if (!ui->loadingUkeyWidget->isHidden()) {
|
||
+ height += ui->loadingUkeyWidget->height() + 8;
|
||
+ }
|
||
+ } break;
|
||
+ default:
|
||
+ break;
|
||
+ }
|
||
+ if (!m_loginOptsWidget->isHidden()) {
|
||
+ height += m_loginOptsWidget->height() + 8;
|
||
+ }
|
||
+ height += ui->btnAuth->height() + 24;
|
||
+ setFixedSize(width(), height);
|
||
+ qInfo() << "MainWindow geometry:" << geometry() << height;
|
||
+
|
||
+ // m_loginOptsWidget->updateUIStatus();
|
||
+ ui->btnBioAuth->setStyleSheet("QPushButton{font-size:14px;}QPushButton:hover{border:none;color:#3E6CE5;}"
|
||
+ "QPushButton:pressed{border:none;}");
|
||
+ ui->btnBioAuth->setFlat(true);
|
||
+ ui->btnBioAuth->setText(tr("Biometric"));
|
||
+ ui->btnBioAuth->setAttribute(Qt::WA_UnderMouse, false);
|
||
+ ui->btnBioAuth->adjustSize();
|
||
+ if (m_uCurLoginOptType == LOGINOPT_TYPE_PASSWORD) {
|
||
+ ui->widgetPasswdAuth->show();
|
||
+ ui->lePassword->setFocus();
|
||
+ // ui->lePassword->setAttribute(Qt::WA_InputMethodEnabled, false);
|
||
+ if (m_modeButton && m_modeButton->isShowPwd()) {
|
||
+ ui->lePassword->setEchoMode(QLineEdit::Normal);
|
||
+ } else {
|
||
+ ui->lePassword->setEchoMode(QLineEdit::Password);
|
||
+ }
|
||
+ }
|
||
+ ui->btnAuth->show();
|
||
+ ui->btnLoading->hide();
|
||
+ if (w_timer && w_timer->isActive()) {
|
||
+ w_timer->stop();
|
||
+ }
|
||
+ ui->btnCancel->show();
|
||
+ // ui->lblContent->show();
|
||
+ ui->returnButton->hide();
|
||
+ ui->lblContent->hide();
|
||
+ } break;
|
||
+
|
||
+ case BIOMETRIC:
|
||
+ setFixedWidth(420);
|
||
+ ui->btnCancel->hide();
|
||
+ ui->lblContent->hide();
|
||
+ ui->btnBioAuth->hide();
|
||
+ break;
|
||
+ default:
|
||
+ break;
|
||
}
|
||
|
||
-// adjustSize();
|
||
+ // adjustSize();
|
||
}
|
||
|
||
void MainWindow::unlock_countdown()
|
||
@@ -1199,70 +982,75 @@ void MainWindow::unlock_countdown()
|
||
int failed_count = 0;
|
||
int time_left = 0;
|
||
int deny = 0;
|
||
- int fail_time =0;
|
||
+ int fail_time = 0;
|
||
int unlock_time = 0;
|
||
- pam_tally_unlock_time_left(getUid(userName),&failed_count, &time_left, &deny,&fail_time,&unlock_time);
|
||
+ pam_tally_unlock_time_left(getUid(userName), &failed_count, &time_left, &deny, &fail_time, &unlock_time);
|
||
|
||
- // qDebug() << "failed_count:" << failed_count << "time_left:" <<time_left <<"deny:"<<deny<<"fail_time:"<< fail_time<<"unlock_time:" << unlock_time;
|
||
- if(time_left >= 60)//请多少分钟后重试
|
||
+ // qDebug() << "failed_count:" << failed_count << "time_left:" <<time_left <<"deny:"<<deny<<"fail_time:"<<
|
||
+ // fail_time<<"unlock_time:" << unlock_time;
|
||
+ if (time_left >= 60) // 请多少分钟后重试
|
||
{
|
||
- int nMinuteleft = time_left/60;
|
||
- if (isLockingFlg == false){
|
||
- m_nCurLockMin = unlock_time/60;//获取当前需要锁定的分钟数
|
||
+ int nMinuteleft = time_left / 60;
|
||
+ if (isLockingFlg == false) {
|
||
+ m_nCurLockMin = unlock_time / 60; // 获取当前需要锁定的分钟数
|
||
}
|
||
|
||
- //如果当前设置的不是1min钟锁定,那么1min显示成2min,由2min直接跳到59s || 剩余分钟数小于当前设置的锁定时间,并且大于1min,自增+1
|
||
- if ((nMinuteleft == 1 && m_nCurLockMin != 1) || (nMinuteleft > 1 && nMinuteleft < m_nCurLockMin))
|
||
- {
|
||
+ // 如果当前设置的不是1min钟锁定,那么1min显示成2min,由2min直接跳到59s ||
|
||
+ // 剩余分钟数小于当前设置的锁定时间,并且大于1min,自增+1
|
||
+ if ((nMinuteleft == 1 && m_nCurLockMin != 1) || (nMinuteleft > 1 && nMinuteleft < m_nCurLockMin)) {
|
||
nMinuteleft = nMinuteleft + 1;
|
||
}
|
||
- setMessage(tr("Please try again in %1 minutes.").arg(nMinuteleft),TRUE);
|
||
- //ui->lblMessage->setToolTip(tr("Please try again in %1 minutes.").arg(nMinute));
|
||
+ setMessage(tr("Please try again in %1 minutes.").arg(nMinuteleft), ERROR);
|
||
+ // ui->lblMessage->setToolTip(tr("Please try again in %1 minutes.").arg(nMinute));
|
||
ui->lePassword->setText("");
|
||
ui->lePassword->setDisabled(true);
|
||
+ ui->lePassword->setReadOnly(true);
|
||
ui->btnAuth->setDisabled(true);
|
||
isLockingFlg = true;
|
||
- return ;
|
||
- }
|
||
- else if(time_left > 0 && time_left < 60)//请多少秒后重试
|
||
+ setBiometricAuthDisabledStatus(isLockingFlg);
|
||
+ return;
|
||
+ } else if (time_left > 0 && time_left < 60) // 请多少秒后重试
|
||
{
|
||
- char ch[100]={0};
|
||
- setMessage(tr("Please try again in %1 seconds.").arg(time_left%60),TRUE);
|
||
- //ui->lblMessage->setToolTip(tr("Please try again in %1 seconds.").arg(time_left%60));
|
||
+ char ch[100] = { 0 };
|
||
+ setMessage(tr("Please try again in %1 seconds.").arg(time_left % 60), ERROR);
|
||
+ // ui->lblMessage->setToolTip(tr("Please try again in %1 seconds.").arg(time_left%60));
|
||
ui->lePassword->setText("");
|
||
ui->lePassword->setDisabled(true);
|
||
+ ui->lePassword->setReadOnly(true);
|
||
ui->btnAuth->setDisabled(true);
|
||
isLockingFlg = true;
|
||
- return ;
|
||
- }
|
||
- else if (failed_count == 0xFFFF)//账号被永久锁定
|
||
+ setBiometricAuthDisabledStatus(isLockingFlg);
|
||
+ return;
|
||
+ } else if (failed_count == 0xFFFF) // 账号被永久锁定
|
||
{
|
||
ui->lblMessage->setText(tr("Account locked permanently."));
|
||
ui->lblMessage->setToolTip(tr("Account locked permanently."));
|
||
ui->lePassword->setText("");
|
||
ui->lePassword->setDisabled(true);
|
||
+ ui->lePassword->setReadOnly(true);
|
||
ui->btnAuth->setDisabled(true);
|
||
isLockingFlg = true;
|
||
- return ;
|
||
- }
|
||
- else
|
||
- {
|
||
- if(ui->lePassword){
|
||
+ setBiometricAuthDisabledStatus(isLockingFlg);
|
||
+ return;
|
||
+ } else {
|
||
+ if (ui->lePassword) {
|
||
ui->lePassword->setDisabled(false);
|
||
+ ui->lePassword->setReadOnly(false);
|
||
ui->lePassword->setFocus();
|
||
}
|
||
- if(ui->btnAuth){
|
||
+ if (ui->btnAuth) {
|
||
ui->btnAuth->setDisabled(false);
|
||
}
|
||
|
||
if (isLockingFlg) {
|
||
- //setMessage(tr("Authentication failed, please try again."),ERROR);
|
||
+ // setMessage(tr("Authentication failed, please try again."),ERROR);
|
||
setMessage("");
|
||
isLockingFlg = false;
|
||
+ setBiometricAuthDisabledStatus(isLockingFlg);
|
||
}
|
||
m_timer->stop();
|
||
}
|
||
- return ;
|
||
+ return;
|
||
}
|
||
|
||
void MainWindow::root_unlock_countdown()
|
||
@@ -1270,22 +1058,23 @@ void MainWindow::root_unlock_countdown()
|
||
int failed_count = 0;
|
||
int time_left = 0;
|
||
int deny = 0;
|
||
- int fail_time =0;
|
||
+ int fail_time = 0;
|
||
int unlock_time = 0;
|
||
- pam_tally_root_unlock_time_left(&failed_count, &time_left, &deny,&fail_time,&unlock_time);
|
||
+ pam_tally_root_unlock_time_left(&failed_count, &time_left, &deny, &fail_time, &unlock_time);
|
||
|
||
- // qDebug() << "failed_count:" << failed_count << "time_left:" <<time_left <<"deny:"<<deny<<"fail_time:"<< fail_time<<"unlock_time:" << unlock_time;
|
||
- int nMinuteleft = time_left/60;
|
||
- if(time_left >= 60)//请多少分钟后重试
|
||
+ // qDebug() << "failed_count:" << failed_count << "time_left:" <<time_left <<"deny:"<<deny<<"fail_time:"<<
|
||
+ // fail_time<<"unlock_time:" << unlock_time;
|
||
+ int nMinuteleft = time_left / 60;
|
||
+ if (time_left >= 60) // 请多少分钟后重试
|
||
{
|
||
- int nMinuteleft = time_left/60;
|
||
- if (isLockingFlg == false){
|
||
- m_nCurLockMin = unlock_time/60;//获取当前需要锁定的分钟数
|
||
+ int nMinuteleft = time_left / 60;
|
||
+ if (isLockingFlg == false) {
|
||
+ m_nCurLockMin = unlock_time / 60; // 获取当前需要锁定的分钟数
|
||
}
|
||
|
||
- //如果当前设置的不是1min钟锁定,那么1min显示成2min,由2min直接跳到59s || 剩余分钟数小于当前设置的锁定时间,并且大于1min,自增+1
|
||
- if ((nMinuteleft == 1 && m_nCurLockMin != 1) || (nMinuteleft > 1 && nMinuteleft < m_nCurLockMin))
|
||
- {
|
||
+ // 如果当前设置的不是1min钟锁定,那么1min显示成2min,由2min直接跳到59s ||
|
||
+ // 剩余分钟数小于当前设置的锁定时间,并且大于1min,自增+1
|
||
+ if ((nMinuteleft == 1 && m_nCurLockMin != 1) || (nMinuteleft > 1 && nMinuteleft < m_nCurLockMin)) {
|
||
nMinuteleft = nMinuteleft + 1;
|
||
}
|
||
|
||
@@ -1293,179 +1082,204 @@ void MainWindow::root_unlock_countdown()
|
||
ui->lblMessage->setToolTip(tr("Please try again in %1 minutes.").arg(nMinuteleft));
|
||
ui->lePassword->setText("");
|
||
ui->lePassword->setDisabled(true);
|
||
+ ui->lePassword->setReadOnly(true);
|
||
+ ui->btnAuth->setDisabled(true);
|
||
isLockingFlg = true;
|
||
- return ;
|
||
- }
|
||
- else if(time_left > 0 && time_left < 60)//请多少秒后重试
|
||
+ setBiometricAuthDisabledStatus(isLockingFlg);
|
||
+ return;
|
||
+ } else if (time_left > 0 && time_left < 60) // 请多少秒后重试
|
||
{
|
||
- char ch[100]={0};
|
||
- ui->lblMessage->setText(tr("Please try again in %1 seconds.").arg(time_left%60));
|
||
- ui->lblMessage->setToolTip(tr("Please try again in %1 seconds.").arg(time_left%60));
|
||
+ char ch[100] = { 0 };
|
||
+ ui->lblMessage->setText(tr("Please try again in %1 seconds.").arg(time_left % 60));
|
||
+ ui->lblMessage->setToolTip(tr("Please try again in %1 seconds.").arg(time_left % 60));
|
||
ui->lePassword->setText("");
|
||
ui->lePassword->setDisabled(true);
|
||
+ ui->lePassword->setReadOnly(true);
|
||
+ ui->btnAuth->setDisabled(true);
|
||
isLockingFlg = true;
|
||
- return ;
|
||
- }
|
||
- else if (failed_count == 0xFFFF)//账号被永久锁定
|
||
+ setBiometricAuthDisabledStatus(isLockingFlg);
|
||
+ return;
|
||
+ } else if (failed_count == 0xFFFF) // 账号被永久锁定
|
||
{
|
||
ui->lblMessage->setText(tr("Account locked permanently."));
|
||
ui->lblMessage->setToolTip(tr("Account locked permanently."));
|
||
ui->lePassword->setText("");
|
||
ui->lePassword->setDisabled(true);
|
||
+ ui->lePassword->setReadOnly(false);
|
||
+ ui->btnAuth->setDisabled(true);
|
||
isLockingFlg = true;
|
||
- return ;
|
||
- }
|
||
- else
|
||
- {
|
||
- if(ui->lePassword){
|
||
+ setBiometricAuthDisabledStatus(isLockingFlg);
|
||
+ return;
|
||
+ } else {
|
||
+ if (ui->lePassword) {
|
||
ui->lePassword->setDisabled(false);
|
||
+ ui->lePassword->setReadOnly(false);
|
||
ui->lePassword->setFocus();
|
||
}
|
||
+ if (ui->btnAuth) {
|
||
+ ui->btnAuth->setDisabled(false);
|
||
+ }
|
||
|
||
- if (isLockingFlg)
|
||
- {
|
||
- //setMessage(tr("Authentication failed, please try again."),ERROR);
|
||
+ if (isLockingFlg) {
|
||
+ // setMessage(tr("Authentication failed, please try again."),ERROR);
|
||
setMessage("");
|
||
isLockingFlg = false;
|
||
+ setBiometricAuthDisabledStatus(isLockingFlg);
|
||
}
|
||
-
|
||
+
|
||
m_timer->stop();
|
||
}
|
||
- return ;
|
||
+ return;
|
||
+}
|
||
+
|
||
+void MainWindow::setBiometricAuthDisabledStatus(bool locked)
|
||
+{
|
||
+ if (locked) {
|
||
+ if (m_loginOptsWidget) {
|
||
+ m_loginOptsWidget->stopAuth();
|
||
+ m_loginOptsWidget->setAllDeviceDisable(true);
|
||
+ if (m_bioTimer && m_bioTimer->isActive())
|
||
+ m_bioTimer->stop();
|
||
+ }
|
||
+ if (m_deviceInfo && m_deviceInfo->biotype == BIOTYPE_FACE) {
|
||
+ QImage imgFailed;
|
||
+ m_loginOptsWidget->setFaceImg(imgFailed, 1);
|
||
+ } else if (m_deviceInfo && m_deviceInfo->biotype == REMOTE_QRCODE_TYPE) {
|
||
+ QImage nullImage;
|
||
+ m_loginOptsWidget->setQRCode(nullImage);
|
||
+ }
|
||
+ } else {
|
||
+ if (m_deviceInfo && m_loginOptsWidget) {
|
||
+ m_loginOptsWidget->startAuth(m_deviceInfo, getUid(userName));
|
||
+ m_loginOptsWidget->setAllDeviceDisable(false);
|
||
+ }
|
||
+ }
|
||
}
|
||
|
||
void MainWindow::onRespondUkey(const QString &text)
|
||
{
|
||
- if (m_loginOptsWidget){
|
||
- m_loginOptsWidget->SetExtraInfo(text,"pincode");
|
||
- }
|
||
+ if (m_loginOptsWidget) {
|
||
+ m_loginOptsWidget->SetExtraInfo(text, "pincode");
|
||
+ }
|
||
}
|
||
|
||
void MainWindow::switchLoginOptType(unsigned uLoginOptType)
|
||
{
|
||
- switch(uLoginOptType) {
|
||
- case LOGINOPT_TYPE_PASSWORD:
|
||
- {
|
||
- //m_loginOptsWidget->hide();
|
||
- ui->lePassword->show();
|
||
- ui->cmbUsers->show();
|
||
- ui->widgetPasswdAuth->show();
|
||
- ui->widgetUkeyAuth->hide();
|
||
- ui->ukeyPassword->clearFocus();
|
||
- ui->loadingUkeyWidget->hide();
|
||
- setFocusProxy(ui->lePassword);
|
||
- ui->cmbUsers->show();
|
||
- }
|
||
- break;
|
||
- case LOGINOPT_TYPE_FACE:
|
||
- case LOGINOPT_TYPE_FINGERPRINT:
|
||
- case LOGINOPT_TYPE_IRIS:
|
||
- case LOGINOPT_TYPE_VOICEPRINT:
|
||
- case LOGINOPT_TYPE_FINGERVEIN:
|
||
- case LOGINOPT_TYPE_QRCODE:
|
||
- {
|
||
- //m_loginOptsWidget->show();
|
||
- // 延迟检查错误状态
|
||
- m_isNetworkErr = false;
|
||
- QTimer::singleShot(500, this, [&,this](){
|
||
- if (!this->m_isNetworkErr) {
|
||
- m_loginOptsWidget->setQRCodeMsg("");
|
||
+ switch (uLoginOptType) {
|
||
+ case LOGINOPT_TYPE_PASSWORD: {
|
||
+ // m_loginOptsWidget->hide();
|
||
+ ui->lePassword->show();
|
||
+ ui->cmbUsers->show();
|
||
+ ui->widgetPasswdAuth->show();
|
||
+ ui->widgetUkeyAuth->hide();
|
||
+ ui->ukeyPassword->clearFocus();
|
||
+ ui->loadingUkeyWidget->hide();
|
||
+ setFocusProxy(ui->lePassword);
|
||
+ ui->cmbUsers->show();
|
||
+ m_loginOptsWidget->stopBioWaiting();
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_FACE:
|
||
+ case LOGINOPT_TYPE_FINGERPRINT:
|
||
+ case LOGINOPT_TYPE_IRIS:
|
||
+ case LOGINOPT_TYPE_VOICEPRINT:
|
||
+ case LOGINOPT_TYPE_FINGERVEIN:
|
||
+ case LOGINOPT_TYPE_QRCODE: {
|
||
+ switch (uLoginOptType) {
|
||
+ case LOGINOPT_TYPE_FINGERPRINT:
|
||
+ case LOGINOPT_TYPE_IRIS:
|
||
+ case LOGINOPT_TYPE_VOICEPRINT:
|
||
+ case LOGINOPT_TYPE_FINGERVEIN: {
|
||
+ m_loginOptsWidget->startBioWaiting(uLoginOptType);
|
||
+ } break;
|
||
+ default:
|
||
+ m_loginOptsWidget->stopBioWaiting();
|
||
+ break;
|
||
}
|
||
- });
|
||
-
|
||
- //m_loginOptsWidget->hide();
|
||
- ui->lePassword->show();
|
||
- ui->widgetUkeyAuth->hide();
|
||
- ui->loadingUkeyWidget->hide();
|
||
- ui->ukeyPassword->clearFocus();
|
||
- setFocusProxy(ui->lePassword);
|
||
- ui->cmbUsers->show();
|
||
- ui->widgetPasswdAuth->show();
|
||
- }
|
||
- break;
|
||
- case LOGINOPT_TYPE_GENERAL_UKEY:
|
||
- {
|
||
- ui->lePassword->hide();
|
||
- ui->cmbUsers->hide();
|
||
- if(m_deviceInfo){
|
||
- stopLoadingUkey();
|
||
- ui->widgetUkeyAuth->show();
|
||
- }else{
|
||
- startLoadingUkey();
|
||
- }
|
||
- setFocusProxy(ui->ukeyPassword);
|
||
- ui->ukeyPassword->setFocusPolicy(Qt::StrongFocus);
|
||
- ui->ukeyPassword->setFocus();
|
||
- ui->widgetPasswdAuth->hide();
|
||
- }
|
||
- break;
|
||
- default:
|
||
- return;
|
||
+
|
||
+ // 延迟检查错误状态
|
||
+ m_isNetworkErr = false;
|
||
+ QTimer::singleShot(500, this, [&, this]() {
|
||
+ if (!this->m_isNetworkErr) {
|
||
+ m_loginOptsWidget->setQRCodeMsg("");
|
||
+ }
|
||
+ });
|
||
+
|
||
+ ui->lePassword->show();
|
||
+ ui->widgetUkeyAuth->hide();
|
||
+ ui->loadingUkeyWidget->hide();
|
||
+ ui->ukeyPassword->clearFocus();
|
||
+ setFocusProxy(ui->lePassword);
|
||
+ ui->cmbUsers->show();
|
||
+ ui->widgetPasswdAuth->hide();
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_GENERAL_UKEY: {
|
||
+ ui->lePassword->hide();
|
||
+ ui->cmbUsers->hide();
|
||
+ if (m_deviceInfo) {
|
||
+ stopLoadingUkey();
|
||
+ ui->widgetUkeyAuth->show();
|
||
+ } else {
|
||
+ startLoadingUkey();
|
||
+ }
|
||
+ setFocusProxy(ui->ukeyPassword);
|
||
+ ui->ukeyPassword->setFocusPolicy(Qt::StrongFocus);
|
||
+ ui->ukeyPassword->setFocus();
|
||
+ ui->widgetPasswdAuth->hide();
|
||
+ m_loginOptsWidget->stopBioWaiting();
|
||
+ } break;
|
||
+ default:
|
||
+ return;
|
||
}
|
||
- qDebug()<<"CurOptType:"<<uLoginOptType;
|
||
- if(m_deviceInfo && m_failMap.contains(getUid(userName))
|
||
+ qDebug() << "CurOptType:" << uLoginOptType;
|
||
+ if (m_deviceInfo && m_failMap.contains(getUid(userName))
|
||
&& m_failMap[getUid(userName)].contains(m_deviceInfo->device_id)
|
||
- && m_failMap[getUid(userName)][m_deviceInfo->device_id] >= maxFailedTimes){
|
||
+ && m_failMap[getUid(userName)][m_deviceInfo->device_id] >= maxFailedTimes) {
|
||
if (m_deviceInfo->biotype == BIOTYPE_FACE) {
|
||
QImage imgFailed;
|
||
m_loginOptsWidget->setFaceImg(imgFailed, 1);
|
||
}
|
||
no_changes = true;
|
||
if (m_deviceInfo->biotype == REMOTE_QRCODE_TYPE) {
|
||
- setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock").arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
|
||
- }else if(m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
|
||
- setUkeyTypeTip(tr("Failed to verify %1, please enter password to unlock").arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
|
||
- }else {
|
||
- setLoginTypeTip(tr("Unable to verify %1, please enter password to unlock").arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
|
||
+ setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock")
|
||
+ .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
|
||
+ } else if (m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
|
||
+ setUkeyTypeTip(tr("Failed to verify %1, please enter password to unlock")
|
||
+ .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
|
||
+ } else {
|
||
+ setLoginTypeTip(tr("Unable to verify %1, please enter password to unlock")
|
||
+ .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
|
||
}
|
||
m_loginOptsWidget->setDeviceDisable(m_deviceInfo->device_id, true);
|
||
} else {
|
||
no_changes = false;
|
||
if (uLoginOptType != m_uCurLoginOptType || (m_deviceInfo && m_deviceInfo->device_id != m_nLastDeviceId)) {
|
||
- switch(uLoginOptType) {
|
||
- case LOGINOPT_TYPE_PASSWORD:
|
||
- {
|
||
- setLoginTypeTip("");
|
||
- //setMessage("",TRUE);
|
||
- }
|
||
- break;
|
||
- case LOGINOPT_TYPE_FACE:
|
||
- {
|
||
- setLoginTypeTip(tr("Verify face recognition or enter password to unlock"));
|
||
- }
|
||
- break;
|
||
- case LOGINOPT_TYPE_FINGERPRINT:
|
||
- {
|
||
- setLoginTypeTip(tr("Press fingerprint or enter password to unlock"));
|
||
- }
|
||
- break;
|
||
- case LOGINOPT_TYPE_VOICEPRINT:
|
||
- {
|
||
- setLoginTypeTip(tr("Verify voiceprint or enter password to unlock"));
|
||
- }
|
||
- break;
|
||
- case LOGINOPT_TYPE_FINGERVEIN:
|
||
- {
|
||
- setLoginTypeTip(tr("Verify finger vein or enter password to unlock"));
|
||
- }
|
||
- break;
|
||
- case LOGINOPT_TYPE_IRIS:
|
||
- {
|
||
- setLoginTypeTip(tr("Verify iris or enter password to unlock"));
|
||
- }
|
||
- break;
|
||
- case LOGINOPT_TYPE_QRCODE:
|
||
- {
|
||
- setLoginTypeTip(tr("Use the bound wechat scanning code or enter the password to unlock"));
|
||
- }
|
||
- break;
|
||
- case LOGINOPT_TYPE_GENERAL_UKEY:
|
||
- {
|
||
- setLoginTypeTip("");
|
||
- }
|
||
- break;
|
||
- default:
|
||
- return;
|
||
+ switch (uLoginOptType) {
|
||
+ case LOGINOPT_TYPE_PASSWORD: {
|
||
+ setLoginTypeTip(tr("Input your password to authentication"));
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_FACE: {
|
||
+ setLoginTypeTip(tr("Facial recognition to authorization"));
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_FINGERPRINT: {
|
||
+ setLoginTypeTip(tr("Fingerprint recognition to authorization"));
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_VOICEPRINT: {
|
||
+ setLoginTypeTip(tr("Voiceprint recognition to authorization"));
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_FINGERVEIN: {
|
||
+ setLoginTypeTip(tr("Finger veins recognition to authorization"));
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_IRIS: {
|
||
+ setLoginTypeTip(tr("Iris recognition to authorization"));
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_QRCODE: {
|
||
+ setLoginTypeTip(tr("Use the bound wechat scanning code to authorization"));
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_GENERAL_UKEY: {
|
||
+ setLoginTypeTip("");
|
||
+ } break;
|
||
+ default:
|
||
+ return;
|
||
}
|
||
}
|
||
}
|
||
@@ -1475,6 +1289,7 @@ void MainWindow::switchLoginOptType(unsigned uLoginOptType)
|
||
m_nLastDeviceId = -1;
|
||
}
|
||
m_uCurLoginOptType = uLoginOptType;
|
||
+ m_loginOptsWidget->updateUIStatus(true, m_uCurLoginOptType);
|
||
}
|
||
|
||
void MainWindow::setLoginTypeTip(QString strLoginTypeTip)
|
||
@@ -1484,13 +1299,13 @@ void MainWindow::setLoginTypeTip(QString strLoginTypeTip)
|
||
m_labelTip->hide();
|
||
} else {
|
||
QPalette pe;
|
||
- if(no_changes) {
|
||
- pe.setColor(QPalette::WindowText,Qt::red);
|
||
+ if (no_changes) {
|
||
+ pe.setColor(QPalette::WindowText, Qt::red);
|
||
m_labelTip->setPalette(pe);
|
||
} else {
|
||
QColor color = palette().color(QPalette::WindowText);
|
||
QPalette pal(this->palette());
|
||
- pal.setColor(QPalette::WindowText,QColor(color));
|
||
+ pal.setColor(QPalette::WindowText, QColor(color));
|
||
m_labelTip->setPalette(pal);
|
||
}
|
||
m_labelTip->setText(m_strLoginTypeTip);
|
||
@@ -1501,9 +1316,9 @@ void MainWindow::setLoginTypeTip(QString strLoginTypeTip)
|
||
void MainWindow::startBioAuthDelay()
|
||
{
|
||
if (m_deviceInfo) {
|
||
- if(m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
|
||
+ if (m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
|
||
|
||
- }else{
|
||
+ } else {
|
||
m_loginOptsWidget->startAuth(m_deviceInfo, getUid(userName));
|
||
}
|
||
switchLoginOptType(m_loginOptsWidget->convertDeviceType(m_deviceInfo->biotype));
|
||
@@ -1517,11 +1332,11 @@ void MainWindow::startBioAuth(unsigned uTimeout)
|
||
{
|
||
m_loginOptsWidget->stopAuth();
|
||
|
||
- if(m_deviceInfo && m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
|
||
+ if (m_deviceInfo && m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
|
||
switchLoginOptType(m_loginOptsWidget->convertDeviceType(m_deviceInfo->biotype));
|
||
}
|
||
|
||
- if(!m_bioTimer){
|
||
+ if (!m_bioTimer) {
|
||
m_bioTimer = new QTimer(this);
|
||
connect(m_bioTimer, SIGNAL(timeout()), this, SLOT(startBioAuthDelay()));
|
||
}
|
||
@@ -1538,8 +1353,10 @@ void MainWindow::onUpdateBioAuthMsg(QString strMsg)
|
||
void MainWindow::updatePixmap()
|
||
{
|
||
ui->btnAuth->hide();
|
||
+ ui->btnAuth->setDisabled(true);
|
||
ui->btnLoading->show();
|
||
ui->lePassword->setDisabled(true);
|
||
+ ui->lePassword->setReadOnly(true);
|
||
QMatrix matrix;
|
||
matrix.rotate(90.0);
|
||
m_waitingPixmap = m_waitingPixmap.transformed(matrix, Qt::FastTransformation);
|
||
@@ -1549,64 +1366,49 @@ void MainWindow::updatePixmap()
|
||
void MainWindow::onUpdateWndSize(unsigned uLoginOptType, unsigned uLoginOptSize)
|
||
{
|
||
ui->lblContent->hide();
|
||
- if (!m_loginOptsWidget->isHidden()) {
|
||
- m_loginOptsWidget->adjustSize();
|
||
- }
|
||
- unsigned uOptsWidgetHeight = m_loginOptsWidget->height();
|
||
- if (m_loginOptsWidget->isHidden() ||
|
||
- (uLoginOptSize == 1 && uLoginOptType != LOGINOPT_TYPE_QRCODE && uLoginOptType != LOGINOPT_TYPE_FACE)) {
|
||
- uOptsWidgetHeight = 0;
|
||
- }
|
||
ui->lblHeader->adjustSize();
|
||
- if(uLoginOptType == LOGINOPT_TYPE_QRCODE && uLoginOptType == LOGINOPT_TYPE_FACE){
|
||
- uOptsWidgetHeight = m_loginOptsWidget->height() + 20;
|
||
- }
|
||
- else if(uLoginOptType == LOGINOPT_TYPE_FINGERPRINT){
|
||
- uOptsWidgetHeight = m_loginOptsWidget->height() + 10 ;
|
||
- }
|
||
-// ui->lblContent->adjustSize();
|
||
-// ui->lblHeader->adjustSize();
|
||
- int height;
|
||
- if(fontSize = 10){
|
||
- height = 130 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
|
||
- + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
|
||
- + ui->btnAuth->height();
|
||
- } else if(fontSize = 11 ){
|
||
- height = 150 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
|
||
- + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
|
||
- + ui->btnAuth->height();
|
||
- } else if (fontSize = 12){
|
||
- height = 160 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
|
||
- + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
|
||
- + ui->btnAuth->height();
|
||
- } else if (fontSize = 13){
|
||
- height = 170 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
|
||
- + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
|
||
- + ui->btnAuth->height();
|
||
- } else if (fontSize = 14){
|
||
- height = 190 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
|
||
- + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
|
||
- + ui->btnAuth->height();
|
||
- } else if (fontSize = 15){
|
||
- height = 230 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
|
||
- + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
|
||
- + ui->btnAuth->height();
|
||
- }
|
||
- if (m_loginOptsWidget->isHidden()) {
|
||
- height = height + m_labelTip->height() - 10;
|
||
- }
|
||
|
||
- if(uLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY){
|
||
- setLoginTypeTip("");
|
||
- setFixedSize(width(), height + uOptsWidgetHeight + 10);
|
||
- }else{
|
||
- setFixedSize(width(), height + uOptsWidgetHeight);
|
||
+ // 标题+间隔+内容头+间隔+类型提示+间隔+用户列表+间隔+
|
||
+ // (密码输入框+间隔+验证提示+间隔+授权按钮+边距)/ --仅密码方式
|
||
+ // (密码输入框+间隔+验证提示+间隔+登录选项+间隔+授权按钮+边距)/ --密码+生物识别 选择密码
|
||
+ // (登录选项+间隔+授权按钮+边距)/ --密码+生物识别 选择生物识别
|
||
+ // (ukey加载页+间隔+登录选项+间隔+授权按钮+边距)/(ukey认证页+间隔+登录选项+间隔+授权按钮+边距)
|
||
+ // --选择Ukey
|
||
+ int height = 40 + 8 + ui->lblHeader->height() + 8 + m_labelTip->height() + 8;
|
||
+ switch (m_uCurLoginOptType) {
|
||
+ case LOGINOPT_TYPE_PASSWORD: {
|
||
+ height += ui->cmbUsers->height() + 8 + ui->lePassword->height() + 8 + ui->lblMessage->height() + 8;
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_FACE:
|
||
+ case LOGINOPT_TYPE_FINGERPRINT:
|
||
+ case LOGINOPT_TYPE_FINGERVEIN:
|
||
+ case LOGINOPT_TYPE_IRIS:
|
||
+ case LOGINOPT_TYPE_VOICEPRINT:
|
||
+ case LOGINOPT_TYPE_QRCODE: {
|
||
+ height += ui->cmbUsers->height() + 8;
|
||
+ } break;
|
||
+ case LOGINOPT_TYPE_GENERAL_UKEY:
|
||
+ case LOGINOPT_TYPE_ADVANCED_UKEY: {
|
||
+ if (!ui->widgetUkeyAuth->isHidden()) {
|
||
+ height += ui->widgetUkeyAuth->height() + 8;
|
||
+ } else if (!ui->loadingUkeyWidget->isHidden()) {
|
||
+ height += ui->loadingUkeyWidget->height() + 8;
|
||
+ }
|
||
+ } break;
|
||
+ default:
|
||
+ break;
|
||
+ }
|
||
+ if (!m_loginOptsWidget->isHidden()) {
|
||
+ height += m_loginOptsWidget->height() + 8;
|
||
}
|
||
+ height += ui->btnAuth->height() + 24;
|
||
+ setFixedSize(width(), height);
|
||
+ qInfo() << "MainWindow geometry update:" << geometry() << height;
|
||
}
|
||
|
||
void MainWindow::setEditInputMethod(bool bEnable)
|
||
{
|
||
- qDebug()<<"setEditInputMethod:"<<bEnable;
|
||
+ qDebug() << "setEditInputMethod:" << bEnable;
|
||
if (bEnable) {
|
||
ui->lePassword->setAttribute(Qt::WA_InputMethodEnabled, true);
|
||
} else {
|
||
@@ -1619,4 +1421,174 @@ void MainWindow::setCurProject(bool isMavis)
|
||
is_Mavis = isMavis;
|
||
}
|
||
|
||
+void MainWindow::onOptionSelected(unsigned uCurLoginOptType, const DeviceInfoPtr &deviceInfo)
|
||
+{
|
||
+ isLoadingUkey = false;
|
||
+
|
||
+ if (uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY) {
|
||
+ stopLoadingUkey();
|
||
+ }
|
||
+
|
||
+ if (uCurLoginOptType == LOGINOPT_TYPE_PASSWORD) {
|
||
+ switchLoginOptType(uCurLoginOptType);
|
||
+ if (m_loginOptsWidget) {
|
||
+ m_loginOptsWidget->stopAuth();
|
||
+ }
|
||
+ m_deviceInfo = nullptr;
|
||
+ authMode = PASSWORD;
|
||
+ emit restartAuth();
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ if (uCurLoginOptType != LOGINOPT_TYPE_GENERAL_UKEY && !deviceInfo)
|
||
+ return;
|
||
+
|
||
+ if (deviceInfo)
|
||
+ qDebug() << "device changed: " << deviceInfo->biotype;
|
||
+
|
||
+ if (deviceInfo && m_failMap[getUid(userName)][deviceInfo->device_id] >= maxFailedTimes) {
|
||
+ qDebug() << "Failed MAX!!";
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ if (uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY && !deviceInfo) {
|
||
+ isLoadingUkey = true;
|
||
+ startLoadingUkey();
|
||
+ m_loginOptsWidget->updateUkeyUIStatus(LOGINOPT_TYPE_GENERAL_UKEY);
|
||
+ } else if (uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY && deviceInfo) {
|
||
+ stopLoadingUkey();
|
||
+ m_loginOptsWidget->updateUkeyUIStatus(LOGINOPT_TYPE_GENERAL_UKEY);
|
||
+ }
|
||
+
|
||
+ if (deviceInfo == m_deviceInfo) {
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ if (uCurLoginOptType != LOGINOPT_TYPE_GENERAL_UKEY && deviceInfo == m_deviceInfo) {
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ if (m_bioTimer)
|
||
+ m_bioTimer->stop();
|
||
+
|
||
+ m_deviceInfo = deviceInfo;
|
||
+ switchLoginOptType(uCurLoginOptType);
|
||
+ if (!isbioSuccess && m_deviceInfo) {
|
||
+ startBioAuth();
|
||
+ }
|
||
+}
|
||
+
|
||
+void MainWindow::onNotifyOptionsChanged(unsigned uOptionsCount)
|
||
+{
|
||
+ if (uOptionsCount > 0) {
|
||
+ m_loginOptsWidget->show();
|
||
+ } else {
|
||
+ // m_loginOptsWidget->hide();
|
||
+ }
|
||
+
|
||
+ if (m_deviceInfo && m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
|
||
+ stopLoadingUkey();
|
||
+ }
|
||
+
|
||
+ if (!m_deviceInfo || !m_loginOptsWidget->findDeviceById(m_deviceInfo->device_id)
|
||
+ || m_loginOptsWidget->isDeviceDisable(m_deviceInfo->device_id)) {
|
||
+ m_loginOptsWidget->stopAuth();
|
||
+ if (authMode != UNDEFINED) {
|
||
+ authMode = UNDEFINED;
|
||
+ emit switchToBiometric();
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+void MainWindow::onLoginOptionsAuthCompleted(uid_t uid, bool ret, int nStatus)
|
||
+{
|
||
+ qDebug() << "biometric authentication complete: " << uid << ret << nStatus;
|
||
+ if (m_deviceInfo && m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY && ui->widgetUkeyAuth->isVisible()) {
|
||
+ ui->ukeyPassword->setText("");
|
||
+ }
|
||
+
|
||
+ if (uid == getUid(userName) && ret) {
|
||
+ isbioSuccess = true;
|
||
+ emit switchToBiometric();
|
||
+ authMode = UNDEFINED;
|
||
+ } else {
|
||
+ if (nStatus == 5 && m_deviceInfo) {
|
||
+ if (w_timer && w_timer->isActive())
|
||
+ w_timer->stop();
|
||
+ QImage imgFailed;
|
||
+ m_loginOptsWidget->setFaceImg(imgFailed, 2);
|
||
+ return;
|
||
+ } else if (nStatus >= 2 && nStatus != 5)
|
||
+ if (nStatus >= 2) {
|
||
+ if (m_deviceInfo) {
|
||
+ uid_t curUid = getUid(userName);
|
||
+ if (m_failMap.contains(curUid) && m_failMap[curUid].contains(m_deviceInfo->device_id)) {
|
||
+ m_failMap[curUid][m_deviceInfo->device_id] = m_failMap[curUid][m_deviceInfo->device_id] + 1;
|
||
+ } else {
|
||
+ m_failMap[curUid][m_deviceInfo->device_id] = 1;
|
||
+ }
|
||
+ qDebug() << "Failed count:" << m_failMap[curUid][m_deviceInfo->device_id]
|
||
+ << ",Max:" << maxFailedTimes;
|
||
+ if (m_deviceInfo->biotype == BIOTYPE_FACE) {
|
||
+ QImage imgFailed;
|
||
+ m_loginOptsWidget->setFaceImg(imgFailed, 1);
|
||
+ }
|
||
+ if (m_failMap[curUid][m_deviceInfo->device_id] >= maxFailedTimes) {
|
||
+ no_changes = true;
|
||
+ if (m_deviceInfo->biotype == REMOTE_QRCODE_TYPE) {
|
||
+ setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock")
|
||
+ .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
|
||
+ QImage nullImage;
|
||
+ m_loginOptsWidget->setQRCode(nullImage);
|
||
+ } else if (m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
|
||
+ ui->ukeyPassword->setReadOnly(true);
|
||
+ setUkeyTypeTip(tr("Unable to verify %1, please enter password to unlock")
|
||
+ .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
|
||
+ } else {
|
||
+ setLoginTypeTip(tr("Unable to verify %1, please enter password to unlock")
|
||
+ .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
|
||
+ }
|
||
+
|
||
+ m_loginOptsWidget->setDeviceDisable(m_deviceInfo->device_id, true);
|
||
+ useDoubleAuth = false;
|
||
+ return;
|
||
+ }
|
||
+ no_changes = false;
|
||
+ if (m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
|
||
+ setUkeyTypeTip(tr("Failed to verify %1, you still have %2 verification opportunities")
|
||
+ .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype))
|
||
+ .arg(maxFailedTimes - m_failMap[curUid][m_deviceInfo->device_id]));
|
||
+ } else {
|
||
+ setLoginTypeTip(tr("Failed to verify %1, you still have %2 verification opportunities")
|
||
+ .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype))
|
||
+ .arg(maxFailedTimes - m_failMap[curUid][m_deviceInfo->device_id]));
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ if (!isbioSuccess) {
|
||
+ // dbus error
|
||
+ if (nStatus == -1) {
|
||
+ qDebug() << "Biometric dbus error:" << authMode;
|
||
+ }
|
||
+ if (m_uCurLoginOptType == LOGINOPT_TYPE_QRCODE && nStatus == 1) {
|
||
+ m_isNetworkErr = true;
|
||
+ m_loginOptsWidget->setQRCodeMsg(tr("Abnormal network"));
|
||
+ startBioAuth(10000);
|
||
+ } else if (m_uCurLoginOptType == LOGINOPT_TYPE_QRCODE && nStatus == -4) {
|
||
+ m_isNetworkErr = true;
|
||
+ m_loginOptsWidget->setQRCodeMsg(tr("Acquisition failure"));
|
||
+ startBioAuth(10000);
|
||
+ } else {
|
||
+ startBioAuth();
|
||
+ }
|
||
+ if (nStatus >= 2 && m_deviceInfo) {
|
||
+ if (m_deviceInfo->biotype == BIOTYPE_FACE) {
|
||
+ QImage imgFailed;
|
||
+ m_loginOptsWidget->setFaceImg(imgFailed, 1);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
/*** end of private member ***/
|
||
diff --git a/polkit-agent/src/mainwindow.h b/polkit-agent/src/mainwindow.h
|
||
index 898f2d0..bf8e9ab 100644
|
||
--- a/polkit-agent/src/mainwindow.h
|
||
+++ b/polkit-agent/src/mainwindow.h
|
||
@@ -31,11 +31,14 @@
|
||
#include "loginoptionswidget.h"
|
||
#include "modeButton.h"
|
||
#include "kalabel.h"
|
||
+#include <kysdk/applications/kdialog.h>
|
||
+using namespace kdk;
|
||
+
|
||
namespace Ui {
|
||
class MainWindow;
|
||
}
|
||
|
||
-class MainWindow : public QWidget
|
||
+class MainWindow : public kdk::KDialog
|
||
{
|
||
Q_OBJECT
|
||
|
||
@@ -45,17 +48,32 @@ public:
|
||
void closeEvent(QCloseEvent *event);
|
||
bool eventFilter(QObject *obj, QEvent *event);
|
||
void paintEvent(QPaintEvent *event);
|
||
- enum Mode{UNDEFINED, PASSWORD, BIOMETRIC, DEVICES};
|
||
- enum situation{TRUE, ERROR};
|
||
+ void keyPressEvent(QKeyEvent *event); //屏蔽esc按钮
|
||
+ enum Mode
|
||
+ {
|
||
+ UNDEFINED,
|
||
+ PASSWORD,
|
||
+ BIOMETRIC,
|
||
+ DEVICES
|
||
+ };
|
||
+ enum situation
|
||
+ {
|
||
+ TRUE,
|
||
+ ERROR
|
||
+ };
|
||
void setIcon(const QString &iconName);
|
||
void setHeader(const QString &text);
|
||
void setUsers(const QStringList &usersList);
|
||
- void setDetails(const QString &subPid, const QString &callerPid,
|
||
- const QString &actionId, const QString &actionDesc,
|
||
- const QString vendorName, const QString vendorUrl);
|
||
+ void setDetails(
|
||
+ const QString &subPid,
|
||
+ const QString &callerPid,
|
||
+ const QString &actionId,
|
||
+ const QString &actionDesc,
|
||
+ const QString vendorName,
|
||
+ const QString vendorUrl);
|
||
void setPrompt(const QString &text, bool echo);
|
||
- void setMessage(const QString &text,situation situat = ERROR);
|
||
- void setAuthResult(bool result, const QString &text="");
|
||
+ void setMessage(const QString &text, situation situat = ERROR);
|
||
+ void setAuthResult(bool result, const QString &text = "");
|
||
void clearEdit();
|
||
void switchAuthMode(Mode mode);
|
||
void setDoubleAuth(bool val);
|
||
@@ -69,15 +87,14 @@ public:
|
||
void stopLoadingUkey();
|
||
void updateLoadingPixmap();
|
||
|
||
-private:
|
||
+private:
|
||
uid_t getUid(const QString &userName);
|
||
void setMovie();
|
||
void setPixmap();
|
||
- void startBioAuth(unsigned uTimeout = 1000);
|
||
+ void startBioAuth(unsigned uTimeout = 200);
|
||
void switchWidget(Mode mode);
|
||
int enable_biometric_authentication();
|
||
|
||
-
|
||
void root_unlock_countdown();
|
||
void unlock_countdown();
|
||
void editIcon();
|
||
@@ -85,11 +102,35 @@ private:
|
||
void setMavisSheel();
|
||
void updatePixmap();
|
||
|
||
+ void setBiometricAuthDisabledStatus(bool locked);
|
||
+
|
||
public slots:
|
||
void onUpdateBioAuthMsg(QString strMsg);
|
||
void onUpdateWndSize(unsigned uLoginOptType, unsigned uLoginOptSize);
|
||
+ void onShowYesPrompt();
|
||
|
||
private slots:
|
||
+ /**
|
||
+ * @brief onOptionSelected
|
||
+ * @param uCurLoginOptType
|
||
+ * @param deviceInfo
|
||
+ */
|
||
+ void onOptionSelected(unsigned uCurLoginOptType, const DeviceInfoPtr &deviceInfo);
|
||
+
|
||
+ /**
|
||
+ * @brief onNotifyOptionsChanged
|
||
+ * @param uOptionsCount
|
||
+ */
|
||
+ void onNotifyOptionsChanged(unsigned uOptionsCount);
|
||
+
|
||
+ /**
|
||
+ * @brief onLoginOptionsAuthCompleted
|
||
+ * @param uid
|
||
+ * @param ret
|
||
+ * @param nStatus
|
||
+ */
|
||
+ void onLoginOptionsAuthCompleted(uid_t uid, bool ret, int nStatus);
|
||
+
|
||
void on_btnDetails_clicked();
|
||
void on_lePassword_returnPressed();
|
||
void on_ukeyPassword_returnPressed();
|
||
@@ -112,10 +153,11 @@ signals:
|
||
void switchToBiometric();
|
||
void userChanged(const QString &userName);
|
||
void restartAuth();
|
||
+ void yesPrompted();
|
||
|
||
private:
|
||
Ui::MainWindow *ui;
|
||
- Users *users;
|
||
+ Users *users;
|
||
QString userName;
|
||
bool enableBioAuth;
|
||
bool receiveBioPAM;
|
||
@@ -124,25 +166,25 @@ private:
|
||
bool isFirst;
|
||
bool useDoubleAuth;
|
||
bool isbioSuccess;
|
||
- QMap<qint32,QMap<int,int>> m_failMap;
|
||
- int maxFailedTimes;
|
||
+ QMap<qint32, QMap<int, int>> m_failMap;
|
||
+ int maxFailedTimes;
|
||
bool isHiddenSwitchButton;
|
||
ModeButton *m_modeButton;
|
||
QIcon modeIcon;
|
||
bool pwdShow = false;
|
||
bool isHover = false;
|
||
|
||
- //ukey优先级比密码低,该变量用于判断是否第一次认证,并选中密码
|
||
+ // ukey优先级比密码低,该变量用于判断是否第一次认证,并选中密码
|
||
bool isFirstAuth = true;
|
||
|
||
QTimer *m_timer;
|
||
- //const DeviceInfo *device = NULL;
|
||
- bool isLockingFlg; //判断当前是否正在锁定倒计时
|
||
- int m_nCurLockMin; //当前锁定的分钟数
|
||
+ // const DeviceInfo *device = NULL;
|
||
+ bool isLockingFlg; //判断当前是否正在锁定倒计时
|
||
+ int m_nCurLockMin; //当前锁定的分钟数
|
||
// 登录选项
|
||
KALabel *m_labelTip = nullptr;
|
||
LoginOptionsWidget *m_loginOptsWidget = nullptr;
|
||
- unsigned m_uCurLoginOptType = LOGINOPT_TYPE_PASSWORD; // 当前登录验证方式
|
||
+ unsigned m_uCurLoginOptType = LOGINOPT_TYPE_PASSWORD; // 当前登录验证方式
|
||
QString m_strLoginTypeTip = "";
|
||
QTimer *m_bioTimer = nullptr;
|
||
DeviceInfoPtr m_deviceInfo = nullptr;
|
||
@@ -153,7 +195,7 @@ private:
|
||
QLabel *titleLabel;
|
||
QPushButton *closeBtn;
|
||
|
||
- QGSettings *settings;
|
||
+ QGSettings *settings;
|
||
int fontSize;
|
||
|
||
QString app_IconName;
|
||
@@ -165,9 +207,11 @@ private:
|
||
QTimer *w_timer;
|
||
QPixmap m_waitingPixmap;
|
||
|
||
- QTimer *m_loadingTimer = nullptr;
|
||
- QPixmap m_loadingPixmap;
|
||
- bool isLoadingUkey = false;
|
||
+ QTimer *m_loadingTimer = nullptr;
|
||
+ QPixmap m_loadingPixmap;
|
||
+ bool isLoadingUkey = false;
|
||
+
|
||
+ bool doNotNeedAuth = false;
|
||
};
|
||
|
||
#endif // MAINWINDOW_H
|
||
diff --git a/polkit-agent/src/mainwindow.ui b/polkit-agent/src/mainwindow.ui
|
||
index 01fc13b..7a29dab 100644
|
||
--- a/polkit-agent/src/mainwindow.ui
|
||
+++ b/polkit-agent/src/mainwindow.ui
|
||
@@ -7,7 +7,7 @@
|
||
<x>0</x>
|
||
<y>0</y>
|
||
<width>459</width>
|
||
- <height>646</height>
|
||
+ <height>716</height>
|
||
</rect>
|
||
</property>
|
||
<property name="sizePolicy">
|
||
@@ -27,7 +27,7 @@
|
||
</property>
|
||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||
<property name="spacing">
|
||
- <number>0</number>
|
||
+ <number>8</number>
|
||
</property>
|
||
<property name="sizeConstraint">
|
||
<enum>QLayout::SetDefaultConstraint</enum>
|
||
@@ -36,7 +36,7 @@
|
||
<number>0</number>
|
||
</property>
|
||
<property name="topMargin">
|
||
- <number>6</number>
|
||
+ <number>8</number>
|
||
</property>
|
||
<property name="rightMargin">
|
||
<number>0</number>
|
||
@@ -45,21 +45,15 @@
|
||
<number>24</number>
|
||
</property>
|
||
<item>
|
||
- <layout class="QFormLayout" name="formLayout">
|
||
- <property name="fieldGrowthPolicy">
|
||
- <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
|
||
- </property>
|
||
- <property name="rowWrapPolicy">
|
||
- <enum>QFormLayout::WrapAllRows</enum>
|
||
- </property>
|
||
- <property name="horizontalSpacing">
|
||
- <number>0</number>
|
||
+ <layout class="QVBoxLayout" name="verticalLayout_5">
|
||
+ <property name="spacing">
|
||
+ <number>8</number>
|
||
</property>
|
||
<property name="leftMargin">
|
||
<number>24</number>
|
||
</property>
|
||
<property name="topMargin">
|
||
- <number>15</number>
|
||
+ <number>0</number>
|
||
</property>
|
||
<property name="rightMargin">
|
||
<number>24</number>
|
||
@@ -67,7 +61,7 @@
|
||
<property name="bottomMargin">
|
||
<number>0</number>
|
||
</property>
|
||
- <item row="0" column="1">
|
||
+ <item>
|
||
<widget class="QLabel" name="lblHeader">
|
||
<property name="minimumSize">
|
||
<size>
|
||
@@ -98,7 +92,7 @@
|
||
</property>
|
||
</widget>
|
||
</item>
|
||
- <item row="1" column="1">
|
||
+ <item>
|
||
<widget class="QLabel" name="lblContent">
|
||
<property name="styleSheet">
|
||
<string notr="true"/>
|
||
@@ -111,24 +105,20 @@
|
||
</property>
|
||
</widget>
|
||
</item>
|
||
- <item row="3" column="1">
|
||
- <layout class="QFormLayout" name="bioAuthLayout">
|
||
- <property name="bottomMargin">
|
||
- <number>8</number>
|
||
- </property>
|
||
- </layout>
|
||
- </item>
|
||
- <item row="4" column="1">
|
||
+ <item>
|
||
<layout class="QHBoxLayout" name="titleTipLayout">
|
||
+ <property name="spacing">
|
||
+ <number>0</number>
|
||
+ </property>
|
||
<property name="topMargin">
|
||
- <number>8</number>
|
||
+ <number>0</number>
|
||
</property>
|
||
<property name="bottomMargin">
|
||
- <number>8</number>
|
||
+ <number>0</number>
|
||
</property>
|
||
</layout>
|
||
</item>
|
||
- <item row="5" column="1">
|
||
+ <item>
|
||
<widget class="QWidget" name="loadingUkeyWidget" native="true">
|
||
<property name="minimumSize">
|
||
<size>
|
||
@@ -140,6 +130,9 @@
|
||
<string notr="true"/>
|
||
</property>
|
||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||
+ <property name="spacing">
|
||
+ <number>8</number>
|
||
+ </property>
|
||
<property name="leftMargin">
|
||
<number>0</number>
|
||
</property>
|
||
@@ -149,6 +142,9 @@
|
||
<property name="rightMargin">
|
||
<number>0</number>
|
||
</property>
|
||
+ <property name="bottomMargin">
|
||
+ <number>0</number>
|
||
+ </property>
|
||
<item>
|
||
<widget class="QPushButton" name="loadingUkeyBtn">
|
||
<property name="text">
|
||
@@ -169,7 +165,7 @@
|
||
</layout>
|
||
</widget>
|
||
</item>
|
||
- <item row="6" column="1">
|
||
+ <item>
|
||
<widget class="QComboBox" name="cmbUsers">
|
||
<property name="enabled">
|
||
<bool>true</bool>
|
||
@@ -179,14 +175,7 @@
|
||
</property>
|
||
</widget>
|
||
</item>
|
||
- <item row="7" column="1">
|
||
- <layout class="QFormLayout" name="bioDeviceLayout">
|
||
- <property name="bottomMargin">
|
||
- <number>8</number>
|
||
- </property>
|
||
- </layout>
|
||
- </item>
|
||
- <item row="8" column="1">
|
||
+ <item>
|
||
<widget class="QWidget" name="widgetUkeyAuth" native="true">
|
||
<property name="minimumSize">
|
||
<size>
|
||
@@ -211,12 +200,9 @@
|
||
<number>9</number>
|
||
</property>
|
||
<item>
|
||
- <layout class="QFormLayout" name="formLayout_3">
|
||
- <property name="horizontalSpacing">
|
||
- <number>0</number>
|
||
- </property>
|
||
- <property name="verticalSpacing">
|
||
- <number>6</number>
|
||
+ <layout class="QVBoxLayout" name="verticalLayout_7">
|
||
+ <property name="spacing">
|
||
+ <number>8</number>
|
||
</property>
|
||
<property name="topMargin">
|
||
<number>0</number>
|
||
@@ -227,7 +213,17 @@
|
||
<property name="bottomMargin">
|
||
<number>0</number>
|
||
</property>
|
||
- <item row="1" column="0" colspan="2">
|
||
+ <item>
|
||
+ <widget class="QLabel" name="ukeyTipLbl">
|
||
+ <property name="text">
|
||
+ <string/>
|
||
+ </property>
|
||
+ <property name="alignment">
|
||
+ <set>Qt::AlignCenter</set>
|
||
+ </property>
|
||
+ </widget>
|
||
+ </item>
|
||
+ <item>
|
||
<widget class="QLineEdit" name="ukeyPassword">
|
||
<property name="contextMenuPolicy">
|
||
<enum>Qt::NoContextMenu</enum>
|
||
@@ -237,7 +233,7 @@
|
||
</property>
|
||
</widget>
|
||
</item>
|
||
- <item row="3" column="0" colspan="2">
|
||
+ <item>
|
||
<widget class="KALabel" name="ukeyMessage">
|
||
<property name="minimumSize">
|
||
<size>
|
||
@@ -262,22 +258,12 @@
|
||
</property>
|
||
</widget>
|
||
</item>
|
||
- <item row="0" column="0" colspan="2">
|
||
- <widget class="QLabel" name="ukeyTipLbl">
|
||
- <property name="text">
|
||
- <string/>
|
||
- </property>
|
||
- <property name="alignment">
|
||
- <set>Qt::AlignCenter</set>
|
||
- </property>
|
||
- </widget>
|
||
- </item>
|
||
</layout>
|
||
</item>
|
||
</layout>
|
||
</widget>
|
||
</item>
|
||
- <item row="9" column="1">
|
||
+ <item>
|
||
<widget class="QWidget" name="widgetPasswdAuth" native="true">
|
||
<property name="minimumSize">
|
||
<size>
|
||
@@ -299,17 +285,14 @@
|
||
<number>0</number>
|
||
</property>
|
||
<item>
|
||
- <layout class="QFormLayout" name="formLayout_2">
|
||
- <property name="horizontalSpacing">
|
||
- <number>0</number>
|
||
- </property>
|
||
- <property name="verticalSpacing">
|
||
- <number>6</number>
|
||
+ <layout class="QVBoxLayout" name="verticalLayout_6">
|
||
+ <property name="spacing">
|
||
+ <number>8</number>
|
||
</property>
|
||
<property name="topMargin">
|
||
<number>0</number>
|
||
</property>
|
||
- <item row="0" column="0" colspan="2">
|
||
+ <item>
|
||
<widget class="QLineEdit" name="lePassword">
|
||
<property name="contextMenuPolicy">
|
||
<enum>Qt::NoContextMenu</enum>
|
||
@@ -319,7 +302,7 @@
|
||
</property>
|
||
</widget>
|
||
</item>
|
||
- <item row="2" column="0" colspan="2">
|
||
+ <item>
|
||
<widget class="KALabel" name="lblMessage">
|
||
<property name="minimumSize">
|
||
<size>
|
||
@@ -351,23 +334,10 @@
|
||
</item>
|
||
</layout>
|
||
</item>
|
||
- <item>
|
||
- <spacer name="verticalSpacer_2">
|
||
- <property name="orientation">
|
||
- <enum>Qt::Vertical</enum>
|
||
- </property>
|
||
- <property name="sizeHint" stdset="0">
|
||
- <size>
|
||
- <width>20</width>
|
||
- <height>40</height>
|
||
- </size>
|
||
- </property>
|
||
- </spacer>
|
||
- </item>
|
||
<item>
|
||
<layout class="QVBoxLayout" name="loginOptionsLayout">
|
||
<property name="spacing">
|
||
- <number>8</number>
|
||
+ <number>0</number>
|
||
</property>
|
||
<property name="leftMargin">
|
||
<number>24</number>
|
||
@@ -383,6 +353,19 @@
|
||
</property>
|
||
</layout>
|
||
</item>
|
||
+ <item>
|
||
+ <spacer name="verticalSpacer">
|
||
+ <property name="orientation">
|
||
+ <enum>Qt::Vertical</enum>
|
||
+ </property>
|
||
+ <property name="sizeHint" stdset="0">
|
||
+ <size>
|
||
+ <width>20</width>
|
||
+ <height>40</height>
|
||
+ </size>
|
||
+ </property>
|
||
+ </spacer>
|
||
+ </item>
|
||
<item>
|
||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||
<property name="spacing">
|
||
@@ -399,6 +382,12 @@
|
||
</property>
|
||
<item>
|
||
<widget class="QPushButton" name="btnBioAuth">
|
||
+ <property name="minimumSize">
|
||
+ <size>
|
||
+ <width>0</width>
|
||
+ <height>36</height>
|
||
+ </size>
|
||
+ </property>
|
||
<property name="cursor">
|
||
<cursorShape>ArrowCursor</cursorShape>
|
||
</property>
|
||
@@ -431,6 +420,12 @@
|
||
<verstretch>0</verstretch>
|
||
</sizepolicy>
|
||
</property>
|
||
+ <property name="minimumSize">
|
||
+ <size>
|
||
+ <width>0</width>
|
||
+ <height>36</height>
|
||
+ </size>
|
||
+ </property>
|
||
<property name="cursor">
|
||
<cursorShape>ArrowCursor</cursorShape>
|
||
</property>
|
||
@@ -450,6 +445,12 @@
|
||
<verstretch>0</verstretch>
|
||
</sizepolicy>
|
||
</property>
|
||
+ <property name="minimumSize">
|
||
+ <size>
|
||
+ <width>0</width>
|
||
+ <height>36</height>
|
||
+ </size>
|
||
+ </property>
|
||
<property name="cursor">
|
||
<cursorShape>ArrowCursor</cursorShape>
|
||
</property>
|
||
@@ -463,6 +464,12 @@
|
||
</item>
|
||
<item>
|
||
<widget class="QPushButton" name="btnLoading">
|
||
+ <property name="minimumSize">
|
||
+ <size>
|
||
+ <width>0</width>
|
||
+ <height>36</height>
|
||
+ </size>
|
||
+ </property>
|
||
<property name="text">
|
||
<string/>
|
||
</property>
|
||
@@ -473,6 +480,12 @@
|
||
</item>
|
||
<item>
|
||
<widget class="QPushButton" name="returnButton">
|
||
+ <property name="minimumSize">
|
||
+ <size>
|
||
+ <width>0</width>
|
||
+ <height>36</height>
|
||
+ </size>
|
||
+ </property>
|
||
<property name="styleSheet">
|
||
<string notr="true"/>
|
||
</property>
|
||
diff --git a/polkit-agent/src/modeButton.h b/polkit-agent/src/modeButton.h
|
||
index 51ab67f..63bc0fd 100644
|
||
--- a/polkit-agent/src/modeButton.h
|
||
+++ b/polkit-agent/src/modeButton.h
|
||
@@ -37,7 +37,7 @@ public:
|
||
bool isShowPwd();
|
||
|
||
protected:
|
||
- bool eventFilter(QObject *obj, QEvent *event) override; //事件过滤
|
||
+ bool eventFilter(QObject *obj, QEvent *event) override; //事件过滤
|
||
private:
|
||
void initStyleTheme();
|
||
|
||
diff --git a/polkit-agent/src/pam-tally.c b/polkit-agent/src/pam-tally.c
|
||
index da2651b..180c7d2 100644
|
||
--- a/polkit-agent/src/pam-tally.c
|
||
+++ b/polkit-agent/src/pam-tally.c
|
||
@@ -111,7 +111,7 @@ int get_is_open_other_authentication()
|
||
int get_pam_tally(int *deny, int *unlock_time , int *root_unlock_time)
|
||
{
|
||
char buf[128];
|
||
- FILE *auth_file;
|
||
+ FILE *auth_file = NULL;
|
||
|
||
if( (auth_file = fopen("/etc/pam.d/common-auth", "r")) == NULL)
|
||
return -1;
|
||
@@ -138,8 +138,12 @@ int get_pam_tally(int *deny, int *unlock_time , int *root_unlock_time)
|
||
}
|
||
ptr = strtok(NULL, " \t");
|
||
}
|
||
+ fclose(auth_file);
|
||
+ auth_file = NULL;
|
||
return 1;
|
||
}
|
||
+ fclose(auth_file);
|
||
+ auth_file = NULL;
|
||
return 0;
|
||
}
|
||
|
||
@@ -389,15 +393,15 @@ void get_tally(uid_t uid, int *tfile, struct tallylog *tally)
|
||
|
||
int pam_tally_unlock_time_left(int uid, int *fail_cnt,int *left_time, int *deny, int *fail_time, int *unlock_time1)
|
||
{
|
||
- pam_tally *tally_ptr;
|
||
+ pam_tally *tally_ptr;
|
||
|
||
- if((tally_ptr = pam_tally_memory()) == NULL)
|
||
- return 0;
|
||
+ if((tally_ptr = pam_tally_memory()) == NULL)
|
||
+ return 0;
|
||
|
||
- int unlock_time = tally_ptr->unlock_time;
|
||
+ int unlock_time = tally_ptr->unlock_time;
|
||
*deny = tally_ptr->deny;
|
||
if(unlock_time == 0)
|
||
- return 0;
|
||
+ return 0;
|
||
|
||
int tfile = -1;
|
||
struct tallylog tally;
|
||
diff --git a/polkit-agent/src/pam-tally.h b/polkit-agent/src/pam-tally.h
|
||
index 2585f56..5741e83 100644
|
||
--- a/polkit-agent/src/pam-tally.h
|
||
+++ b/polkit-agent/src/pam-tally.h
|
||
@@ -21,30 +21,32 @@
|
||
#include <time.h>
|
||
|
||
#ifdef __cplusplus
|
||
-extern "C" {
|
||
+extern "C"
|
||
+{
|
||
#endif
|
||
|
||
#define SHM_TALLY "/shm_tally"
|
||
-struct _pam_tally {
|
||
- int deny; //失败次数上限
|
||
- int unlock_time; //普通用户失败次数达到上限后,多少秒之后才能解锁
|
||
- int root_unlock_time; //root用户失败次数达到上限后,多少秒之后才能解锁
|
||
- int failed; //当前失败的次数
|
||
- time_t lock_start_time; //失败次数达到上限后,开始计时
|
||
-};
|
||
-typedef struct _pam_tally pam_tally;
|
||
+ struct _pam_tally
|
||
+ {
|
||
+ int deny; //失败次数上限
|
||
+ int unlock_time; //普通用户失败次数达到上限后,多少秒之后才能解锁
|
||
+ int root_unlock_time; // root用户失败次数达到上限后,多少秒之后才能解锁
|
||
+ int failed; //当前失败的次数
|
||
+ time_t lock_start_time; //失败次数达到上限后,开始计时
|
||
+ };
|
||
+ typedef struct _pam_tally pam_tally;
|
||
|
||
-int pam_tally_init();
|
||
-int pam_tally_add_failed();
|
||
-int pam_tally_clear_failed();
|
||
-int pam_tally_falure_is_out();
|
||
-int pam_tally_deny();
|
||
-int pam_tally_failed_count();
|
||
-int pam_tally_unlock_time();
|
||
-int pam_tally_is_enbled();
|
||
-int pam_tally_is_canUnlock();
|
||
-int pam_tally_unlock_time_left(int uid, int *fail_cnt, int *left_time, int *deny, int *fail_time, int *unlock_time);
|
||
-int pam_tally_root_unlock_time_left(int *fail_cnt, int *left_time, int *deny, int *fail_time, int *unlock_time1);
|
||
+ int pam_tally_init();
|
||
+ int pam_tally_add_failed();
|
||
+ int pam_tally_clear_failed();
|
||
+ int pam_tally_falure_is_out();
|
||
+ int pam_tally_deny();
|
||
+ int pam_tally_failed_count();
|
||
+ int pam_tally_unlock_time();
|
||
+ int pam_tally_is_enbled();
|
||
+ int pam_tally_is_canUnlock();
|
||
+ int pam_tally_unlock_time_left(int uid, int *fail_cnt, int *left_time, int *deny, int *fail_time, int *unlock_time);
|
||
+ int pam_tally_root_unlock_time_left(int *fail_cnt, int *left_time, int *deny, int *fail_time, int *unlock_time1);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
diff --git a/polkit-agent/src/sessionmanager.cpp b/polkit-agent/src/sessionmanager.cpp
|
||
index 61d4ace..d9ee886 100644
|
||
--- a/polkit-agent/src/sessionmanager.cpp
|
||
+++ b/polkit-agent/src/sessionmanager.cpp
|
||
@@ -27,40 +27,35 @@
|
||
#define SM_DBUS_INTERFACE "org.gnome.SessionManager"
|
||
#define SM_DBUS_CLIENT_INTERFACE "org.gnome.SessionManager.ClientPrivate"
|
||
|
||
-
|
||
SessionManager::SessionManager(QObject *parent) : QObject(parent)
|
||
{
|
||
- smInterface = new QDBusInterface(SM_DBUS_SERVICE,
|
||
- SM_DBUS_PATH,
|
||
- SM_DBUS_INTERFACE,
|
||
- QDBusConnection::sessionBus());
|
||
+ smInterface = new QDBusInterface(SM_DBUS_SERVICE, SM_DBUS_PATH, SM_DBUS_INTERFACE, QDBusConnection::sessionBus());
|
||
QString appId("polkit-ukui-authentication-agent-1.desktop");
|
||
QString clientStartupId(qgetenv("DESKTOP_AUTOSTART_ID"));
|
||
|
||
- QDBusReply<QDBusObjectPath> reply = smInterface->call("RegisterClient",
|
||
- appId, clientStartupId);
|
||
+ QDBusReply<QDBusObjectPath> reply = smInterface->call("RegisterClient", appId, clientStartupId);
|
||
|
||
- if(!reply.isValid()) {
|
||
+ if (!reply.isValid()) {
|
||
qWarning() << "Register Client to gnome session failed";
|
||
}
|
||
clientId = reply.value().path();
|
||
|
||
qDebug() << "Register Client to gnome session: " << reply.value().path();
|
||
|
||
- clientInterface = new QDBusInterface(SM_DBUS_SERVICE,
|
||
- clientId,
|
||
- SM_DBUS_CLIENT_INTERFACE,
|
||
- QDBusConnection::sessionBus());
|
||
+ clientInterface
|
||
+ = new QDBusInterface(SM_DBUS_SERVICE, clientId, SM_DBUS_CLIENT_INTERFACE, QDBusConnection::sessionBus());
|
||
qDebug() << clientInterface->isValid();
|
||
|
||
QDBusConnection conn = clientInterface->connection();
|
||
- conn.connect(SM_DBUS_SERVICE, clientId, SM_DBUS_CLIENT_INTERFACE,
|
||
- "Stop", this, SLOT(onStop()));
|
||
- conn.connect(SM_DBUS_SERVICE, clientId, SM_DBUS_CLIENT_INTERFACE,
|
||
- "EndSession", this, SLOT(onEndSession(unsigned int)));
|
||
- conn.connect(SM_DBUS_SERVICE, clientId, SM_DBUS_CLIENT_INTERFACE,
|
||
- "QueryEndSession", this, SLOT(onQueryEndSession(unsigned int)));
|
||
-
|
||
+ conn.connect(SM_DBUS_SERVICE, clientId, SM_DBUS_CLIENT_INTERFACE, "Stop", this, SLOT(onStop()));
|
||
+ conn.connect(
|
||
+ SM_DBUS_SERVICE, clientId, SM_DBUS_CLIENT_INTERFACE, "EndSession", this, SLOT(onEndSession(unsigned int)));
|
||
+ conn.connect(SM_DBUS_SERVICE,
|
||
+ clientId,
|
||
+ SM_DBUS_CLIENT_INTERFACE,
|
||
+ "QueryEndSession",
|
||
+ this,
|
||
+ SLOT(onQueryEndSession(unsigned int)));
|
||
}
|
||
|
||
void SessionManager::onStop()
|
||
@@ -82,6 +77,6 @@ void SessionManager::onQueryEndSession(unsigned int flag)
|
||
void SessionManager::endSessionResponse()
|
||
{
|
||
QDBusMessage msg = clientInterface->call("EndSessionResponse", true, "");
|
||
- if(msg.type() == QDBusMessage::ErrorMessage)
|
||
+ if (msg.type() == QDBusMessage::ErrorMessage)
|
||
qDebug() << "Failed to call EndSessionResponse " << msg.errorMessage();
|
||
}
|
||
diff --git a/polkit-agent/src/types.h b/polkit-agent/src/types.h
|
||
index ded7185..3881c37 100644
|
||
--- a/polkit-agent/src/types.h
|
||
+++ b/polkit-agent/src/types.h
|
||
@@ -34,34 +34,34 @@ enum ScreenStatus
|
||
SCREEN_LOCK = 0x02
|
||
};
|
||
|
||
-#define SM_DBUS_SERVICE "org.gnome.SessionManager"
|
||
-#define SM_DBUS_PATH "/org/gnome/SessionManager/Presence"
|
||
-#define SM_DBUS_INTERFACE "org.gnome.SessionManager.Presence"
|
||
+#define SM_DBUS_SERVICE "org.gnome.SessionManager"
|
||
+#define SM_DBUS_PATH "/org/gnome/SessionManager/Presence"
|
||
+#define SM_DBUS_INTERFACE "org.gnome.SessionManager.Presence"
|
||
|
||
-#define DM_DBUS_SERVICE "org.freedesktop.DisplayManager"
|
||
-#define DM_DBUS_PATH "/org/freedesktop/DisplayManager"
|
||
-#define DM_DBUS_INTERFACE "org.freedesktop.DisplayManager"
|
||
-#define DM_SEAT_INTERFACE "org.freedesktop.DisplayManager.Seat"
|
||
+#define DM_DBUS_SERVICE "org.freedesktop.DisplayManager"
|
||
+#define DM_DBUS_PATH "/org/freedesktop/DisplayManager"
|
||
+#define DM_DBUS_INTERFACE "org.freedesktop.DisplayManager"
|
||
+#define DM_SEAT_INTERFACE "org.freedesktop.DisplayManager.Seat"
|
||
|
||
-#define ACT_DBUS_SERVICE "org.freedesktop.Accounts"
|
||
-#define ACT_DBUS_PATH "/org/freedesktop/Accounts"
|
||
-#define ACT_DBUS_INTERFACE "org.freedesktop.Accounts"
|
||
-#define ACT_USER_INTERFACE "org.freedesktop.Accounts.User"
|
||
+#define ACT_DBUS_SERVICE "org.freedesktop.Accounts"
|
||
+#define ACT_DBUS_PATH "/org/freedesktop/Accounts"
|
||
+#define ACT_DBUS_INTERFACE "org.freedesktop.Accounts"
|
||
+#define ACT_USER_INTERFACE "org.freedesktop.Accounts.User"
|
||
|
||
#define DBUS_PROP_INTERFACE "org.freedesktop.DBus.Properties"
|
||
|
||
-#define SS_DBUS_SERVICE "org.ukui.ScreenSaver"
|
||
-#define SS_DBUS_PATH "/"
|
||
-#define SS_DBUS_INTERFACE "org.ukui.ScreenSaver"
|
||
+#define SS_DBUS_SERVICE "org.ukui.ScreenSaver"
|
||
+#define SS_DBUS_PATH "/"
|
||
+#define SS_DBUS_INTERFACE "org.ukui.ScreenSaver"
|
||
|
||
#define BIO_ERROR -1
|
||
#define BIO_FAILED 0
|
||
#define BIO_SUCCESS 1
|
||
#define BIO_IGNORE 2
|
||
|
||
-#define BIOMETRIC_PAM "BIOMETRIC_PAM"
|
||
-#define BIOMETRIC_IGNORE "BIOMETRIC_IGNORE"
|
||
-#define BIOMETRIC_SUCCESS "BIOMETRIC_SUCCESS"
|
||
-#define BIOMETRIC_FAILED "BIOMETRIC_FAILED"
|
||
+#define BIOMETRIC_PAM "BIOMETRIC_PAM"
|
||
+#define BIOMETRIC_IGNORE "BIOMETRIC_IGNORE"
|
||
+#define BIOMETRIC_SUCCESS "BIOMETRIC_SUCCESS"
|
||
+#define BIOMETRIC_FAILED "BIOMETRIC_FAILED"
|
||
|
||
#endif // TYPES_H
|
||
diff --git a/polkit-agent/src/usdblockshortcut.cpp b/polkit-agent/src/usdblockshortcut.cpp
|
||
new file mode 100644
|
||
index 0000000..2d0b57c
|
||
--- /dev/null
|
||
+++ b/polkit-agent/src/usdblockshortcut.cpp
|
||
@@ -0,0 +1,61 @@
|
||
+/*
|
||
+ * Copyright (C) 2024 Tianjin KYLIN Information Technology Co., Ltd.
|
||
+ *
|
||
+ * This program is free software; you can redistribute it and/or modify
|
||
+ * it under the terms of the GNU General Public License as published by
|
||
+ * the Free Software Foundation; either version 3, or (at your option)
|
||
+ * any later version.
|
||
+ *
|
||
+ * This program is distributed in the hope that it will be useful,
|
||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
+ * GNU General Public License for more details.
|
||
+ *
|
||
+ * You should have received a copy of the GNU General Public License
|
||
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||
+ *
|
||
+ **/
|
||
+#include "usdblockshortcut.h"
|
||
+#include <QDBusConnection>
|
||
+#include <QDBusError>
|
||
+#include <QDBusMetaType>
|
||
+#include <QDebug>
|
||
+
|
||
+USDBlockShortCut::USDBlockShortCut(QObject *parent) : QObject(parent)
|
||
+{
|
||
+ QString displayNum = QString(qgetenv("DISPLAY")).replace(":", "").replace(".", "_");
|
||
+ m_strDbusPath = QString("%1%2").arg(QString("org.ukui.settingsDaemon.shortcut.ukui-polkit")).arg(displayNum);
|
||
+ m_isRegistService = QDBusConnection::sessionBus().registerService(m_strDbusPath);
|
||
+ if (!m_isRegistService) {
|
||
+ qInfo() << "registerService " << m_strDbusPath << " failed!!";
|
||
+ } else {
|
||
+ m_isRegistObject = QDBusConnection::sessionBus().registerObject(
|
||
+ "/org/ukui/settingsDaemon/shortcut",
|
||
+ "org.ukui.settingsDaemon.shortcut",
|
||
+ this,
|
||
+ QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllProperties);
|
||
+ if (!m_isRegistObject) {
|
||
+ qInfo() << "registerObject /org/ukui/settingsDaemon/shortcut failed!!";
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+USDBlockShortCut::~USDBlockShortCut()
|
||
+{
|
||
+ if (m_isRegistObject) {
|
||
+ QDBusConnection::sessionBus().unregisterObject("/org/ukui/settingsDaemon/shortcut");
|
||
+ m_isRegistObject = false;
|
||
+ }
|
||
+ if (m_isRegistService) {
|
||
+ QDBusConnection::sessionBus().unregisterService(m_strDbusPath);
|
||
+ m_isRegistService = false;
|
||
+ }
|
||
+}
|
||
+
|
||
+QStringList USDBlockShortCut::blockShortcuts()
|
||
+{
|
||
+ QStringList listShortCut = {
|
||
+ "WINDOWSWITCH_KEY", "WLCOM_SWITCH_WORKSPACE", "WLCOM_WINDOW_ACTION", "WLCOM_MAXIMIZED_VIEWS", "WLCOM_CTRL_VIEWS"
|
||
+ };
|
||
+ return listShortCut;
|
||
+}
|
||
diff --git a/polkit-agent/src/usdblockshortcut.h b/polkit-agent/src/usdblockshortcut.h
|
||
new file mode 100644
|
||
index 0000000..645cba9
|
||
--- /dev/null
|
||
+++ b/polkit-agent/src/usdblockshortcut.h
|
||
@@ -0,0 +1,49 @@
|
||
+/*
|
||
+ * Copyright (C) 2024 Tianjin KYLIN Information Technology Co., Ltd.
|
||
+ *
|
||
+ * This program is free software; you can redistribute it and/or modify
|
||
+ * it under the terms of the GNU General Public License as published by
|
||
+ * the Free Software Foundation; either version 3, or (at your option)
|
||
+ * any later version.
|
||
+ *
|
||
+ * This program is distributed in the hope that it will be useful,
|
||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
+ * GNU General Public License for more details.
|
||
+ *
|
||
+ * You should have received a copy of the GNU General Public License
|
||
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||
+ *
|
||
+ **/
|
||
+#ifndef USDBLOCKSHORTCUT_H
|
||
+#define USDBLOCKSHORTCUT_H
|
||
+
|
||
+#include <QObject>
|
||
+#include <QDBusAbstractAdaptor>
|
||
+#include <QDBusContext>
|
||
+#include <QStringList>
|
||
+
|
||
+class USDBlockShortCut : public QObject, public QDBusContext
|
||
+{
|
||
+ Q_OBJECT
|
||
+ Q_CLASSINFO("D-Bus Interface", "org.ukui.settingsDaemon.shortcut")
|
||
+ Q_PROPERTY(QStringList blockShortcuts READ blockShortcuts)
|
||
+
|
||
+public:
|
||
+ USDBlockShortCut(QObject *parent = nullptr);
|
||
+ virtual ~USDBlockShortCut();
|
||
+
|
||
+public slots:
|
||
+ /**
|
||
+ * @brief blockShortcuts 禁用按键列表
|
||
+ * @return 禁用按键字符串列表
|
||
+ */
|
||
+ QStringList blockShortcuts();
|
||
+
|
||
+private:
|
||
+ bool m_isRegistService = false; /**是否已注册服务*/
|
||
+ bool m_isRegistObject = false; /**是否已注册对象*/
|
||
+ QString m_strDbusPath; /**dbus服务路径*/
|
||
+};
|
||
+
|
||
+#endif // USDBLOCKSHORTCUT_H
|
||
diff --git a/polkit-agent/src/users.cpp b/polkit-agent/src/users.cpp
|
||
index 64395c5..d9908f5 100644
|
||
--- a/polkit-agent/src/users.cpp
|
||
+++ b/polkit-agent/src/users.cpp
|
||
@@ -29,8 +29,7 @@
|
||
|
||
QDebug operator<<(QDebug stream, const UserItem &user)
|
||
{
|
||
- stream << user.name << user.realName << user.uid
|
||
- << user.icon << user.path;
|
||
+ stream << user.name << user.realName << user.uid << user.icon << user.path;
|
||
return stream;
|
||
}
|
||
|
||
@@ -47,26 +46,20 @@ QList<UserItem> Users::getUsers()
|
||
|
||
UserItem Users::getUserByName(const QString &name)
|
||
{
|
||
- for(int i = 0 ; i < users.size() ; i++) {
|
||
- if(users.at(i).name == name)
|
||
- {
|
||
+ for (int i = 0; i < users.size(); i++) {
|
||
+ if (users.at(i).name == name) {
|
||
return users.at(i);
|
||
}
|
||
}
|
||
UserItem user;
|
||
- if(name == "root")
|
||
- {
|
||
+ if (name == "root") {
|
||
user.icon = "/root/.face";
|
||
- if(!QFile(user.icon).exists())
|
||
- {
|
||
+ if (!QFile(user.icon).exists()) {
|
||
user.icon = defaultIcon;
|
||
}
|
||
- }
|
||
- else
|
||
- {
|
||
- user.icon = qgetenv("HOME")+"/.face";
|
||
- if(!QFile(user.icon).exists())
|
||
- {
|
||
+ } else {
|
||
+ user.icon = qgetenv("HOME") + "/.face";
|
||
+ if (!QFile(user.icon).exists()) {
|
||
user.icon = defaultIcon;
|
||
}
|
||
}
|
||
@@ -81,29 +74,23 @@ QString Users::getDefaultIcon()
|
||
return defaultIcon;
|
||
}
|
||
|
||
-
|
||
-//https://stackoverflow.com/questions/20206376/
|
||
-//how-do-i-extract-the-returned-data-from-qdbusmessage-in-a-qt-dbus-call
|
||
+// https://stackoverflow.com/questions/20206376/
|
||
+// how-do-i-extract-the-returned-data-from-qdbusmessage-in-a-qt-dbus-call
|
||
void Users::loadUsers()
|
||
{
|
||
qDebug() << "loadUsers";
|
||
- actService = new QDBusInterface(ACT_DBUS_SERVICE,
|
||
- ACT_DBUS_PATH,
|
||
- ACT_DBUS_INTERFACE,
|
||
- QDBusConnection::systemBus());
|
||
+ actService = new QDBusInterface(ACT_DBUS_SERVICE, ACT_DBUS_PATH, ACT_DBUS_INTERFACE, QDBusConnection::systemBus());
|
||
|
||
- connect(actService, SIGNAL(UserAdded(const QDBusObjectPath&)),
|
||
- this, SLOT(onUserAdded(const QDBusObjectPath&)));
|
||
- connect(actService, SIGNAL(UserDeleted(const QDBusObjectPath&)),
|
||
- this, SLOT(onUserDeleted(const QDBusObjectPath&)));
|
||
+ connect(actService, SIGNAL(UserAdded(const QDBusObjectPath &)), this, SLOT(onUserAdded(const QDBusObjectPath &)));
|
||
+ connect(
|
||
+ actService, SIGNAL(UserDeleted(const QDBusObjectPath &)), this, SLOT(onUserDeleted(const QDBusObjectPath &)));
|
||
QDBusMessage ret = actService->call("ListCachedUsers");
|
||
- QList<QVariant> outArgs = ret.arguments(); //(QVariant(QDBusArgument,))
|
||
- QVariant first = outArgs.at(0); //QVariant(QDBusArgument,)
|
||
+ QList<QVariant> outArgs = ret.arguments(); //(QVariant(QDBusArgument,))
|
||
+ QVariant first = outArgs.at(0); // QVariant(QDBusArgument,)
|
||
const QDBusArgument &dbusArgs = first.value<QDBusArgument>();
|
||
QDBusObjectPath path;
|
||
dbusArgs.beginArray();
|
||
- while (!dbusArgs.atEnd())
|
||
- {
|
||
+ while (!dbusArgs.atEnd()) {
|
||
dbusArgs >> path;
|
||
getUser(path.path());
|
||
}
|
||
@@ -112,10 +99,7 @@ void Users::loadUsers()
|
||
|
||
UserItem Users::getUser(const QString &path)
|
||
{
|
||
- QDBusInterface iface(ACT_DBUS_SERVICE,
|
||
- path,
|
||
- DBUS_PROP_INTERFACE,
|
||
- QDBusConnection::systemBus());
|
||
+ QDBusInterface iface(ACT_DBUS_SERVICE, path, DBUS_PROP_INTERFACE, QDBusConnection::systemBus());
|
||
QDBusMessage ret = iface.call("GetAll", ACT_USER_INTERFACE);
|
||
QList<QVariant> outArgs = ret.arguments();
|
||
QVariant first = outArgs.at(0);
|
||
@@ -123,57 +107,45 @@ UserItem Users::getUser(const QString &path)
|
||
UserItem user;
|
||
user.path = path;
|
||
dbusArgs.beginMap();
|
||
- while(!dbusArgs.atEnd())
|
||
- {
|
||
+ while (!dbusArgs.atEnd()) {
|
||
QString key;
|
||
QVariant value;
|
||
dbusArgs.beginMapEntry();
|
||
dbusArgs >> key >> value;
|
||
- if(key == "UserName")
|
||
- {
|
||
- user.name = value.toString();
|
||
- }
|
||
- else if(key == "RealName")
|
||
- {
|
||
+ if (key == "UserName") {
|
||
+ user.name = value.toString();
|
||
+ } else if (key == "RealName") {
|
||
user.realName = value.toString();
|
||
- }
|
||
- else if(key == "IconFile")
|
||
- {
|
||
+ } else if (key == "IconFile") {
|
||
user.icon = value.toString();
|
||
- if(!QFile(user.icon).exists())
|
||
- {
|
||
+ if (!QFile(user.icon).exists()) {
|
||
user.icon = defaultIcon;
|
||
}
|
||
- }
|
||
- else if(key == "Uid")
|
||
- {
|
||
+ } else if (key == "Uid") {
|
||
user.uid = value.toUInt();
|
||
}
|
||
dbusArgs.endMapEntry();
|
||
}
|
||
dbusArgs.endMap();
|
||
- if(user.realName.isEmpty())
|
||
- {
|
||
+ if (user.realName.isEmpty()) {
|
||
user.realName = user.name;
|
||
}
|
||
users.push_back(user);
|
||
return user;
|
||
}
|
||
|
||
-void Users::onUserAdded(const QDBusObjectPath& path)
|
||
+void Users::onUserAdded(const QDBusObjectPath &path)
|
||
{
|
||
int index = findUserByPath(path.path());
|
||
- if(index >=0 &&index<users.count())
|
||
- {
|
||
+ if (index >= 0 && index < users.count()) {
|
||
UserItem user = getUser(path.path());
|
||
Q_EMIT userAdded(user);
|
||
}
|
||
}
|
||
-void Users::onUserDeleted(const QDBusObjectPath& path)
|
||
+void Users::onUserDeleted(const QDBusObjectPath &path)
|
||
{
|
||
int index = findUserByPath(path.path());
|
||
- if(index >= 0 && index<users.count())
|
||
- {
|
||
+ if (index >= 0 && index < users.count()) {
|
||
UserItem user = users.at(index);
|
||
users.removeAt(index);
|
||
Q_EMIT userDeleted(user);
|
||
@@ -182,13 +154,9 @@ void Users::onUserDeleted(const QDBusObjectPath& path)
|
||
|
||
int Users::findUserByPath(const QString &path)
|
||
{
|
||
- auto iter = std::find_if(users.begin(), users.end(),
|
||
- [&](const UserItem &user){
|
||
- return user.path == path;
|
||
- });
|
||
+ auto iter = std::find_if(users.begin(), users.end(), [&](const UserItem &user) { return user.path == path; });
|
||
|
||
int index = iter - users.begin();
|
||
|
||
return index;
|
||
}
|
||
-
|
||
diff --git a/polkit-agent/src/users.h b/polkit-agent/src/users.h
|
||
index 509cb3f..747bcc3 100644
|
||
--- a/polkit-agent/src/users.h
|
||
+++ b/polkit-agent/src/users.h
|
||
@@ -20,14 +20,13 @@
|
||
|
||
#include <QObject>
|
||
|
||
-
|
||
struct UserItem
|
||
{
|
||
QString name;
|
||
QString realName;
|
||
QString icon;
|
||
quint64 uid;
|
||
- QString path; //accounts service path
|
||
+ QString path; // accounts service path
|
||
friend QDebug operator<<(QDebug stream, const UserItem &user);
|
||
};
|
||
|
||
@@ -48,17 +47,17 @@ private:
|
||
int findUserByPath(const QString &path);
|
||
|
||
private Q_SLOTS:
|
||
- void onUserAdded(const QDBusObjectPath& path);
|
||
- void onUserDeleted(const QDBusObjectPath& path);
|
||
+ void onUserAdded(const QDBusObjectPath &path);
|
||
+ void onUserDeleted(const QDBusObjectPath &path);
|
||
|
||
Q_SIGNALS:
|
||
void userAdded(const UserItem &user);
|
||
void userDeleted(const UserItem &user);
|
||
|
||
private:
|
||
- QDBusInterface *actService;
|
||
- QList<UserItem> users;
|
||
- QString defaultIcon;
|
||
+ QDBusInterface *actService;
|
||
+ QList<UserItem> users;
|
||
+ QString defaultIcon;
|
||
};
|
||
|
||
#endif // USERS_H
|