diff -Nru kylin-os-manager-2.0.0/debian/changelog kylin-os-manager-2.0.0/debian/changelog
--- kylin-os-manager-2.0.0/debian/changelog	2024-11-12 14:39:16.000000000 +0800
+++ kylin-os-manager-2.0.0/debian/changelog	2025-01-23 11:01:58.000000000 +0800
@@ -1,3 +1,21 @@
+kylin-os-manager (2.0.0-56) nile; urgency=medium
+
+  * BUG:#IBJ7U2 【重要】【麒麟管家】百宝箱下载小工具,一直显示下载中,重启麒麟管家后,显示工具已下载
+  * 需求:无
+  * 其他改动说明:无
+  * 其他改动影响域:无
+
+ -- jishengjie <jishengjie@kylinos.cn>  Thu, 23 Jan 2025 11:01:58 +0800
+
+kylin-os-manager (2.0.0-55) nile; urgency=medium
+
+  * BUG:无
+  * 需求:无
+  * 其他改动说明:#419021 【openKylin 2.0系列】【麒麟管家】同步商业主线版本新功能到openKylin 2.0版本(task)
+  * 其他改动影响域:无
+
+ -- jishengjie <jishengjie@kylinos.cn>  Tue, 14 Jan 2025 14:49:21 +0800
+
 kylin-os-manager (2.0.0-54) nile; urgency=medium
 
   * BUG:无
diff -Nru kylin-os-manager-2.0.0/debian/control kylin-os-manager-2.0.0/debian/control
--- kylin-os-manager-2.0.0/debian/control	2024-11-12 14:39:16.000000000 +0800
+++ kylin-os-manager-2.0.0/debian/control	2025-01-23 11:01:58.000000000 +0800
@@ -14,6 +14,7 @@
                libkysdk-systime-dev (>=1.2.0.0),
                libkysdk-diagnosetest-dev,
                libkysdk-soundeffects-dev,
+               libkysdk-system-dev,
                cmake (>= 3.16),
                qttools5-dev,
                qtbase5-dev (>= 5.6),
diff -Nru kylin-os-manager-2.0.0/debian/kylin-os-manager.install kylin-os-manager-2.0.0/debian/kylin-os-manager.install
--- kylin-os-manager-2.0.0/debian/kylin-os-manager.install	2024-11-12 14:39:16.000000000 +0800
+++ kylin-os-manager-2.0.0/debian/kylin-os-manager.install	2025-01-23 11:01:58.000000000 +0800
@@ -17,8 +17,11 @@
 data/icons/256x256@2x/*.png /usr/share/icons/hicolor/256x256@2x/apps/
 data/icons/512svg/*.svg /usr/share/icons/hicolor/scalable/apps/
 
+# 统一匹配可执行程序
+usr/lib/kylin-os-manager/bin/*
+
 # 统一匹配插件
-opt/kylin-os-manager/plugins/*.so
+usr/lib/kylin-os-manager/plugins/*.so
 
 # 统一匹配菜单栏的 desktop 文件
 usr/share/applications/*.desktop
@@ -26,7 +29,7 @@
 # 统一匹配百宝箱小工具配置文件
 usr/share/kylin-os-manager/plugins/tool-box/plugins/*.conf
 
-# 插件管理器
+# 兼容库
 usr/lib/*.so
 
 # 管家后台服务
@@ -35,7 +38,6 @@
 etc/dbus-1/system.d/com.kylin-os-manager.conf
 
 # 管家后台 session 服务
-usr/share/kylin-os-manager/kylin-os-manager-session-service/kylin-os-manager-session-service
 etc/xdg/autostart/sessionservice-config.desktop
 
 # dbus安全管控
@@ -51,22 +53,16 @@
 etc/kylin-config/basic/com.kylin.assistant.systemdaemon.yaml
 
 # 配置服务
-usr/share/kylin-os-manager/komd-config/komd-config
 etc/xdg/autostart/komd-config.desktop
 
-# 监控服务
-#usr/bin/kylin-os-manager-monitor
-#lib/systemd/system/com.kylin-os-manager-monitor.service
-#usr/share/glib-2.0/schemas/komd.crash.gschema.xml
-
 # 崩溃监控服务
 usr/share/kylin-os-manager/kylin-core-dump-monitor/first-party-service-list.conf
 usr/share/kylin-os-manager/kylin-core-dump-monitor/first-party-ui-app-list.conf
 usr/share/kylin-os-manager/kylin-core-dump-monitor/kylin-core-dump-handler.sh
 usr/share/kylin-os-manager/kylin-core-dump-monitor/kylin-core-dump-monitor.sh
-usr/share/kylin-os-manager/kylin-core-dump-monitor/kylin-core-dump-trailblazer.sh
+# usr/share/kylin-os-manager/kylin-core-dump-monitor/kylin-core-dump-trailblazer.sh
 lib/systemd/system/kylin-core-dump-monitor.service
-lib/systemd/system/kylin-core-dump-trailblazer.service
+# lib/systemd/system/kylin-core-dump-trailblazer.service
 
 # 主框架
 usr/bin/kylin-os-manager
@@ -76,14 +72,6 @@
 etc/ld.so.conf.d/kylin-os-manager.conf
 etc/kylin-os-manager/kylin-os-manager-plugin.ini
 
-# 进程管理服务
-#usr/bin/kylin-os-manager-process-manager
-#etc/kylin-os-manager/process-manager.ini
-#etc/xdg/autostart/kylin-os-manager-process-manager.desktop
-
-# 托盘服务
-#usr/bin/kylin-os-manager-tray
-
 # 服务支持
 usr/share/kylin-os-manager/kylin-service-support
 usr/share/kylin-os-manager/script/*.py
@@ -91,68 +79,55 @@
 # 故障诊断
 usr/share/kylin-os-manager/fault-diagnosis/i18n.conf
 usr/share/kylin-os-manager/fault-diagnosis/translations/*.qm
-usr/share/kylin-os-manager/fault-diagnosis/test/fault-diagnosis-test
 usr/share/kylin-os-manager/fault-diagnosis/test/solution_key.db
 
 # 垃圾清理
 usr/share/kylin-os-manager/junk-clean/translations/*.qm
 
 # 百宝箱
-usr/share/kylin-os-manager/plugins/tool-box/bin/app_launcher
 usr/share/kylin-os-manager/plugins/tool-box/translations/*.qm
 
-#工具箱dbus
+# 工具箱 dbus
 kyasDbus/* /usr/lib/python3/dist-packages/kylin-assistant-daemon/
 kyasDbus/systemdaemon/conf/com.kylin.assistant.systemdaemon.conf /etc/dbus-1/system.d/
 kyasDbus/systemdaemon/conf/com.kylin.assistant.systemdaemon.service /usr/share/dbus-1/system-services/
 kyasDbus/systemdaemon/conf/com.kylin.assistant.systemdaemon.policy /usr/share/polkit-1/actions/
 kyasDbus/sessiondaemon/conf/com.kylin.assistant.sessiondaemon.service /usr/share/dbus-1/services/
 
-#设备管理gsetting
+# 设备管理 gsetting
 data/org.kylin-os-manager-data.gschema.xml /usr/share/glib-2.0/schemas/
 
 # 网络连通性检测工具
-usr/share/kylin-os-manager/treasure-chest/kylin-telnet/kylin-telnet
 usr/share/kylin-os-manager/treasure-chest/kylin-telnet/translations/*.qm
 usr/share/kylin-user-guide/data/guide/kylin-telnet/*
 
 # 网络路由跟踪工具
-usr/share/kylin-os-manager/treasure-chest/kylin-traceroute/kylin-traceroute
 usr/share/kylin-os-manager/treasure-chest/kylin-traceroute/translations/*.qm
 
 # IP 冲突检测工具
-usr/share/kylin-os-manager/treasure-chest/kylin-iputils-arping/kylin-iputils-arping
 usr/share/kylin-os-manager/treasure-chest/kylin-iputils-arping/translations/*.qm
 
 # 网络带宽测试工具
-usr/share/kylin-os-manager/treasure-chest/kylin-iperf/kylin-iperf
 usr/share/kylin-os-manager/treasure-chest/kylin-iperf/translations/*.qm
 
 # 网络数据包抓取工具
-usr/share/kylin-os-manager/treasure-chest/kylin-tcpdump/kylin-tcpdump
 usr/share/kylin-os-manager/treasure-chest/kylin-tcpdump/translations/*.qm
 
 # 换机助手
-usr/share/kylin-os-manager/replacement/replacement
-usr/share/kylin-os-manager/replacement/translations/*.qm
-usr/share/kylin-os-manager/replacement/data/*
-usr/share/kylin-os-manager/replacement/icon/*
-usr/share/applications/replacement.desktop
-usr/share/kylin-os-manager/treasure-chest/kylin-win-data-migration/kylin-win-data-migration
 usr/share/kylin-os-manager/treasure-chest/kylin-win-data-migration/howtouse.html
 usr/share/kylin-os-manager/treasure-chest/kylin-win-data-migration/translations/*.qm
 usr/share/kylin-os-manager/treasure-chest/kylin-win-data-migration/icon/*.svg
 usr/share/kylin-os-manager/treasure-chest/kylin-win-data-migration/icon/*.png
+usr/share/kylin-os-manager/replacement/translations/*.qm
+usr/share/kylin-os-manager/replacement/data/*
+usr/share/kylin-os-manager/replacement/icon/*
 
 # 文件粉碎机
-usr/share/kylin-os-manager/treasure-chest/kylin-file-crush/kylin-file-crush
 usr/share/kylin-os-manager/treasure-chest/kylin-file-crush/translations/*.qm
 usr/share/kylin-user-guide/data/guide/kylin-file-crush/*
 
 # 系统瘦身
-usr/share/kylin-os-manager/treasure-chest/kylin-system-cleanup/kylin-system-cleanup
 usr/share/kylin-os-manager/treasure-chest/kylin-system-cleanup/translations/*.qm
 
 # 源更新工具
-usr/share/kylin-os-manager/treasure-chest/kylin-source-update-tool/kylin-source-update-tool
 usr/share/kylin-os-manager/treasure-chest/kylin-source-update-tool/translations/*.qm
diff -Nru kylin-os-manager-2.0.0/debian/kylin-os-manager.links kylin-os-manager-2.0.0/debian/kylin-os-manager.links
--- kylin-os-manager-2.0.0/debian/kylin-os-manager.links	2024-11-12 14:39:16.000000000 +0800
+++ kylin-os-manager-2.0.0/debian/kylin-os-manager.links	2025-01-23 11:01:58.000000000 +0800
@@ -1,2 +1,3 @@
 /usr/lib/python3/dist-packages/kylin-assistant-daemon/sessiondaemon/kasessiondbusmain.py  /usr/bin/kylin-assistant-sessiondaemon.py
 /usr/lib/python3/dist-packages/kylin-assistant-daemon/systemdaemon/kasystemdbusmain.py  /usr/bin/kylin-assistant-systemdaemon.py
+/usr/lib/kylin-os-manager/bin/service-support-mini /opt/kylin-os-manager/tools/service-support-mini
diff -Nru kylin-os-manager-2.0.0/debian/kylin-os-manager.postinst kylin-os-manager-2.0.0/debian/kylin-os-manager.postinst
--- kylin-os-manager-2.0.0/debian/kylin-os-manager.postinst	2024-11-12 14:39:16.000000000 +0800
+++ kylin-os-manager-2.0.0/debian/kylin-os-manager.postinst	2025-01-23 11:01:58.000000000 +0800
@@ -1,3 +1,5 @@
+#!/bin/bash
+
 chmod 755 /usr/lib/python3/dist-packages/kylin-assistant-daemon/sessiondaemon/kasessiondbusmain.py
 chmod 755 /usr/lib/python3/dist-packages/kylin-assistant-daemon/systemdaemon/kasystemdbusmain.py
 
@@ -14,28 +16,14 @@
 systemctl daemon-reload
 systemctl enable com.kylin-os-manager.service
 systemctl restart com.kylin-os-manager.service
-#systemctl enable com.kylin-os-manager-monitor.service
-#systemctl restart com.kylin-os-manager-monitor.service
 
 # 设置 kylin-core-dump-trailblazer.service、kylin-core-dump-monitor.service 开机自启
-systemctl enable kylin-core-dump-trailblazer.service
+# systemctl enable kylin-core-dump-trailblazer.service
 systemctl enable kylin-core-dump-monitor.service
 
 # 安装完包后启动 kylin-core-dump-monitor.service
 systemctl restart kylin-core-dump-monitor.service
 
-# 远程协助被控工具建立软链接
-if [ ! -f "/usr/share/kylin-os-manager/komt-rcu/komt-rcu" ];then
-    if [ -f "/usr/share/kylin-os-manager/treasure-chest/kylin-os-manager-remote-user/kylin-os-manager-remote-user" ];then
-        mkdir -p /usr/share/kylin-os-manager/komt-rcu/
-        ln -sf /usr/share/kylin-os-manager/treasure-chest/kylin-os-manager-remote-user/kylin-os-manager-remote-user /usr/share/kylin-os-manager/komt-rcu/komt-rcu
-    else 
-        echo " kom-install not exist kylin-os-manager-remote-user ,ln file fail"
-    fi
-else
-    echo " kom-install exist komt-rcu ,ln file fail "
-fi
-
 # 替换掉旧版的服务与支持
 old_service_bin="/usr/bin/kylin-service-support"
 new_service_bin="/usr/share/kylin-os-manager/kylin-service-support"
diff -Nru kylin-os-manager-2.0.0/debian/kylin-os-manager.postrm kylin-os-manager-2.0.0/debian/kylin-os-manager.postrm
--- kylin-os-manager-2.0.0/debian/kylin-os-manager.postrm	2024-11-12 14:39:16.000000000 +0800
+++ kylin-os-manager-2.0.0/debian/kylin-os-manager.postrm	2025-01-23 11:01:58.000000000 +0800
@@ -1,3 +1,5 @@
+#!/bin/bash
+
 # 删除 postinst 脚本安装的服务与支持
 if [ -f "/usr/bin/kylin-service-support" ]; then
     rm /usr/bin/kylin-service-support
diff -Nru kylin-os-manager-2.0.0/debian/patches/0116-99.patch kylin-os-manager-2.0.0/debian/patches/0116-99.patch
--- kylin-os-manager-2.0.0/debian/patches/0116-99.patch	1970-01-01 08:00:00.000000000 +0800
+++ kylin-os-manager-2.0.0/debian/patches/0116-99.patch	2025-01-23 11:01:58.000000000 +0800
@@ -0,0 +1,57678 @@
+From: snowsi <348240162@qq.com>
+Date: Tue, 14 Jan 2025 07:03:21 +0000
+Subject: =?utf-8?b?ITk5IOS7o+eggeWQiOW5tiBNZXJnZSBwdWxsIHJlcXVlc3QgITk5IGZy?=
+ =?utf-8?b?b20gc25vd3NpL29wZW5reWxpbi9uaWxl?=
+
+---
+ daemons/CMakeLists.txt                             |    1 -
+ daemons/config/CMakeLists.txt                      |    2 +-
+ daemons/config/komd-config.desktop                 |    2 +-
+ daemons/kylin-core-dump-monitor/CMakeLists.txt     |    6 +-
+ .../kylin-core-dump-handler.sh                     |    2 +-
+ daemons/monitor/CMakeLists.txt                     |   71 -
+ daemons/monitor/crash-collect.cpp                  |  337 ----
+ daemons/monitor/crash-collect.h                    |   71 -
+ daemons/monitor/crash-database.cpp                 |  140 --
+ daemons/monitor/crash-database.h                   |   47 -
+ daemons/monitor/crash-info.cpp                     |  212 ---
+ daemons/monitor/crash-info.h                       |   96 -
+ daemons/monitor/crash-monitor.cpp                  |  100 -
+ daemons/monitor/crash-monitor.h                    |   58 -
+ .../data/com.kylin-os-manager-monitor.service      |   13 -
+ daemons/monitor/data/komd.crash.gschema.xml        |   15 -
+ daemons/monitor/main.cpp                           |  105 --
+ daemons/monitor/obtainsysteminformation.cpp        |  306 ---
+ daemons/monitor/obtainsysteminformation.h          |   19 -
+ daemons/monitor/systemmonitor.cpp                  |  325 ----
+ daemons/monitor/systemmonitor.h                    |   91 -
+ daemons/service/CMakeLists.txt                     |    3 +-
+ daemons/service/data/com.kylin-os-manager.conf     |   22 +-
+ daemons/service/data/com.kylin-os-manager.limit    |    2 +
+ .../service/data/com.kylin-os-manager.limit.verify |    2 +-
+ daemons/service/data/com.kylin-os-manager.yaml     |    2 +-
+ .../data/com.kylin.assistant.systemdaemon.limit    |    4 +
+ .../com.kylin.assistant.systemdaemon.limit.verify  |    2 +-
+ .../data/com.kylin.assistant.systemdaemon.yaml     |    2 +-
+ daemons/service/dbus_args.h                        |    6 +-
+ daemons/service/disk_monitor.cpp                   |   85 +-
+ daemons/service/disk_monitor.h                     |    2 +
+ .../drivermanagerservicedbus.cpp                   |   39 +-
+ .../drivermanagerservicedbus.h                     |    4 +
+ .../service/driver-manager-service/getDriver.cpp   |    3 +
+ .../hardwarefinder/cpuinfofinder.cpp               |   68 +-
+ .../hardwarefinder/cpuinfofinder.h                 |    5 +-
+ .../hardwarefinder/diskinfofinder.cpp              |    5 +-
+ .../hardwarefinder/graphiccardfinder.cpp           |    3 +-
+ .../hardwarefinder/networkcardfinder.cpp           |    1 +
+ .../hardwarefinder/pcinfogetter.cpp                |   29 +-
+ .../hardwarefinder/pcinfogetter.h                  |    2 +
+ .../hardwarefinder/printerfinder.cpp               |    4 +
+ .../hardwarefinder/scannerfinder.cpp               |    4 +
+ .../driver-manager-service/hardwareinfo/cpuinfo.h  |    4 +
+ .../driver-manager-service/hardwareinfo/diskinfo.h |    1 +
+ .../hardwareinfo/networkcardinfo.cpp               |    1 +
+ .../hardwareinfo/networkcardinfo.h                 |    1 +
+ .../driver-manager-service/hardwareinfo/pcinfo.h   |    1 +
+ daemons/service/junk_clean_interface.cpp           |   29 +-
+ daemons/service/junk_clean_interface.h             |    3 +
+ daemons/service/main.cpp                           |   10 +-
+ daemons/sessionservice/CMakeLists.txt              |    6 +-
+ .../disk_monitor_exception_popup.cpp               |  265 +++
+ .../sessionservice/disk_monitor_exception_popup.h  |   27 +
+ daemons/sessionservice/main.cpp                    |   41 +-
+ .../sessionservice/printerbackend/CMakeLists.txt   |   92 -
+ .../printerbackend/backend/device_map.cpp          |  348 ----
+ .../printerbackend/backend/device_map.h            |   69 -
+ .../backend/event_notify_monitor.cpp               |  551 ------
+ .../printerbackend/backend/event_notify_monitor.h  |   99 -
+ .../printerbackend/backend/launch_printer.cpp      |  111 --
+ .../printerbackend/backend/launch_printer.h        |   27 -
+ .../printerbackend/cmake/common.cmake              |   51 -
+ .../printerbackend/cmake/printer.cmake             |   26 -
+ .../printerbackend/common/base_info.cpp            |   89 -
+ .../printerbackend/common/base_info.h              |   31 -
+ .../printerbackend/common/common.cpp               |  261 ---
+ .../sessionservice/printerbackend/common/common.h  |   82 -
+ .../common/custom_qstring_converter.cpp            |   20 -
+ .../common/custom_qstring_converter.h              |   17 -
+ .../printerbackend/common/global_variable.h        |   51 -
+ .../printerbackend/common/singleton.h              |   18 -
+ .../sessionservice/printerbackend/common/uri.cpp   |  138 --
+ daemons/sessionservice/printerbackend/common/uri.h |   94 -
+ .../kylin-os-manager-printer-settings.gschema.xml  |   20 -
+ .../device_manager/device_information.cpp          |  403 ----
+ .../device_manager/device_information.h            |   69 -
+ .../device_manager/device_monitor.cpp              |  195 --
+ .../printerbackend/device_manager/device_monitor.h |   41 -
+ .../printerbackend/device_manager/udev_devices.cpp |  447 -----
+ .../printerbackend/device_manager/udev_devices.h   |   22 -
+ .../printerbackend/printer_backend.cpp             |  108 --
+ .../printerbackend/printer_backend.h               |    7 -
+ .../printer_manager/cupsconnection4ppds.cpp        |   40 -
+ .../printer_manager/cupsconnection4ppds.h          |   34 -
+ .../printer_manager/find_and_match_ppds.cpp        |  396 ----
+ .../printer_manager/find_and_match_ppds.h          |  118 --
+ .../printer_manager/findppdsthread.cpp             |  559 ------
+ .../printer_manager/findppdsthread.h               |   72 -
+ .../printer_manager/lpinfo_browser.cpp             |  462 -----
+ .../printer_manager/lpinfo_browser.h               |   30 -
+ .../printer_manager/matchppdsthread.cpp            |  513 -----
+ .../printer_manager/matchppdsthread.h              |   67 -
+ .../printer_manager/package_helper.cpp             |   77 -
+ .../printer_manager/package_helper.h               |   29 -
+ .../printerbackend/printer_manager/ukui_apt.cpp    |  228 ---
+ .../printerbackend/printer_manager/ukui_apt.h      |  108 --
+ .../printer_manager/ukui_printer.cpp               | 1955 --------------------
+ .../printerbackend/printer_manager/ukui_printer.h  |  257 ---
+ .../printer_manager/upload_helper.cpp              |   30 -
+ .../printerbackend/printer_manager/upload_helper.h |   28 -
+ .../sessionservice/printerbackend/python/sync.py   |   87 -
+ .../translations/generate_translations_qm.sh       |   11 -
+ .../translations/kylin-printer_bo_CN.ts            | 1741 -----------------
+ .../translations/kylin-printer_en.ts               | 1717 -----------------
+ .../translations/kylin-printer_kk.ts               | 1741 -----------------
+ .../translations/kylin-printer_ky.ts               | 1741 -----------------
+ .../translations/kylin-printer_mn.ts               | 1739 -----------------
+ .../translations/kylin-printer_ru.ts               | 1741 -----------------
+ .../translations/kylin-printer_ug.ts               | 1741 -----------------
+ .../translations/kylin-printer_zh_CN.ts            | 1838 ------------------
+ .../translations/kylin-printer_zh_HK.ts            | 1743 -----------------
+ .../printerbackend/ui/gsettings_monitor.cpp        |  328 ----
+ .../printerbackend/ui/gsettings_monitor.h          |   80 -
+ .../ui/new_pop_window/pop_window_manager.cpp       |  273 ---
+ .../ui/new_pop_window/pop_window_manager.h         |   39 -
+ .../printerbackend/util/information_collector.cpp  |  109 --
+ .../printerbackend/util/information_collector.h    |   54 -
+ .../printerbackend/util/system_notification.cpp    |   46 -
+ .../printerbackend/util/system_notification.h      |   28 -
+ daemons/sessionservice/service_support_popup.cpp   |   25 +-
+ daemons/sessionservice/service_support_popup.h     |    2 +-
+ daemons/sessionservice/sessionclient.cpp           |  290 +--
+ daemons/sessionservice/sessionclient.h             |   10 +-
+ .../sessionservice/sessionservice-config.desktop   |    2 +-
+ .../kylin-os-manager-session-service_bo_CN.ts      |  108 +-
+ .../kylin-os-manager-session-service_kk.ts         |  108 +-
+ .../kylin-os-manager-session-service_ky.ts         |  108 +-
+ .../kylin-os-manager-session-service_mn.ts         |  108 +-
+ .../kylin-os-manager-session-service_ug.ts         |  108 +-
+ .../kylin-os-manager-session-service_zh_CN.ts      |  110 +-
+ .../kylin-os-manager-session-service_zh_HK.ts      |  108 +-
+ kom/kom-configure.h                                |   21 +-
+ kom/kom-label.cpp                                  |   14 +-
+ kom/kom-utils.cpp                                  |  110 +-
+ kom/kom-utils.h                                    |   31 +-
+ kyasDbus/sessiondaemon/kacmdtool.py                |  260 +--
+ kyasDbus/systemdaemon/kacmdtool.py                 |  260 +--
+ kyasDbus/systemdaemon/kagraphicscardinfo.py        |    8 +-
+ kyasDbus/systemdaemon/kaharddiskinfo.py            |    2 +-
+ kyasDbus/systemdaemon/kamonitorthread.py           |   52 +-
+ kyasDbus/systemdaemon/utils.py                     |   11 +
+ plugins/device-controller/CMakeLists.txt           |    6 +-
+ .../device-controller/src/basiccontentwidget.cpp   |    2 +-
+ .../device-controller/src/driverinstallwidget.cpp  |   13 +
+ .../src/hardwareinfo/baseboardinfo.cpp             |   22 +
+ .../src/hardwareinfo/baseboardinfo.h               |    2 +
+ .../src/hardwareinfo/batteryinfo.cpp               |   22 +
+ .../src/hardwareinfo/batteryinfo.h                 |    2 +
+ .../src/hardwareinfo/bluetoothinfo.cpp             |   83 +-
+ .../src/hardwareinfo/bluetoothinfo.h               |    4 +
+ .../src/hardwareinfo/camerainfo.cpp                |   20 +
+ .../src/hardwareinfo/camerainfo.h                  |    1 +
+ .../device-controller/src/hardwareinfo/cdinfo.cpp  |   22 +
+ .../device-controller/src/hardwareinfo/cdinfo.h    |    1 +
+ .../device-controller/src/hardwareinfo/cpuinfo.cpp |   88 +-
+ .../device-controller/src/hardwareinfo/cpuinfo.h   |    2 +
+ .../src/hardwareinfo/diskinfo.cpp                  |   44 +-
+ .../device-controller/src/hardwareinfo/diskinfo.h  |    3 +
+ .../device-controller/src/hardwareinfo/faninfo.cpp |    8 +
+ .../device-controller/src/hardwareinfo/faninfo.h   |    2 +
+ .../src/hardwareinfo/graphiccardinfo.cpp           |   44 +
+ .../src/hardwareinfo/graphiccardinfo.h             |    2 +
+ .../src/hardwareinfo/keyboardinfo.cpp              |   16 +
+ .../src/hardwareinfo/keyboardinfo.h                |    1 +
+ .../src/hardwareinfo/memoryinfo.cpp                |   28 +
+ .../src/hardwareinfo/memoryinfo.h                  |    2 +
+ .../src/hardwareinfo/monitorinfo.cpp               |   32 +
+ .../src/hardwareinfo/monitorinfo.h                 |    7 +-
+ .../src/hardwareinfo/mouseinfo.cpp                 |   16 +
+ .../device-controller/src/hardwareinfo/mouseinfo.h |    1 +
+ .../src/hardwareinfo/networkcardinfo.cpp           |   93 +-
+ .../src/hardwareinfo/networkcardinfo.h             |   11 +-
+ .../device-controller/src/hardwareinfo/pcinfo.h    |    1 +
+ .../src/hardwareinfo/soundcardinfo.cpp             |   70 +
+ .../src/hardwareinfo/soundcardinfo.h               |    3 +
+ .../device-controller/src/hardwareinfogetter.cpp   |  290 ++-
+ .../device-controller/src/hardwareinfowidget.cpp   |  503 ++++-
+ plugins/device-controller/src/hardwareinfowidget.h |   10 +-
+ .../src/hotplug/devicemonitorthread.cpp            |   21 +
+ .../src/hotplug/devicemonitorthread.h              |    6 +
+ plugins/device-controller/src/hwwidget.cpp         | 1404 ++++++++++++--
+ plugins/device-controller/src/hwwidget.h           |  352 +---
+ .../src/include/hwinfostorage.cpp                  |   13 +
+ .../device-controller/src/include/hwinfostorage.h  |  359 ++++
+ .../kylin-os-manager-device-controller_bo_CN.ts    |  795 ++++----
+ .../kylin-os-manager-device-controller_kk.ts       |  795 ++++----
+ .../kylin-os-manager-device-controller_ky.ts       |  795 ++++----
+ .../kylin-os-manager-device-controller_mn.ts       |  795 ++++----
+ .../kylin-os-manager-device-controller_ug.ts       |  795 ++++----
+ .../kylin-os-manager-device-controller_zh_CN.ts    |  797 ++++----
+ .../kylin-os-manager-device-controller_zh_HK.ts    |  795 ++++----
+ plugins/fault_diagnosis/CMakeLists.txt             |    2 +-
+ plugins/fault_diagnosis/component/text_label.cpp   |   64 +-
+ plugins/fault_diagnosis/component/text_label.h     |   17 +-
+ plugins/fault_diagnosis/component/utils.cpp        |   44 +-
+ plugins/fault_diagnosis/component/utils.h          |   16 +
+ .../fault_diagnosis/diagnoses/complete_machine.cpp |    6 -
+ plugins/fault_diagnosis/diagnosis_core.cpp         |    2 +-
+ plugins/fault_diagnosis/diagnosis_entry_widget.cpp |    8 +-
+ .../fault_diagnosis/diagnosis_subentry_widget.cpp  |    8 +-
+ plugins/fault_diagnosis/fault_diagnosis.cpp        |    4 -
+ plugins/fault_diagnosis/home_page_widget.cpp       |   51 +-
+ plugins/fault_diagnosis/mainwindow.cpp             |   64 +-
+ .../repair_specific_error_widget.cpp               |    4 +
+ .../fault_diagnosis/repair_specific_error_widget.h |    2 +
+ plugins/fault_diagnosis/test/CMakeLists.txt        |    2 +-
+ .../translations/fault-diagnosis_bo_CN.ts          |  222 +--
+ .../translations/fault-diagnosis_kk.ts             |  222 +--
+ .../translations/fault-diagnosis_ky.ts             |  222 +--
+ .../translations/fault-diagnosis_mn.ts             |  222 +--
+ .../translations/fault-diagnosis_ug.ts             |  222 +--
+ .../translations/fault-diagnosis_zh_CN.ts          |  224 +--
+ .../translations/fault-diagnosis_zh_HK.ts          |  222 +--
+ plugins/junk_clean/CMakeLists.txt                  |    2 +-
+ plugins/junk_clean/clean_up_entry_widget.cpp       |   10 +-
+ plugins/junk_clean/junk_entry_widget.cpp           |    2 +-
+ plugins/junk_clean/mainwindow.cpp                  |   78 +-
+ plugins/junk_clean/mainwindow.h                    |    1 -
+ .../junk_clean/translations/junk-clean_bo_CN.ts    |   32 +-
+ plugins/junk_clean/translations/junk-clean_kk.ts   |   32 +-
+ plugins/junk_clean/translations/junk-clean_ky.ts   |   32 +-
+ plugins/junk_clean/translations/junk-clean_mn.ts   |   32 +-
+ plugins/junk_clean/translations/junk-clean_ug.ts   |   32 +-
+ .../junk_clean/translations/junk-clean_zh_CN.ts    |   32 +-
+ .../junk_clean/translations/junk-clean_zh_HK.ts    |   32 +-
+ plugins/service-support/CMakeLists.txt             |    2 +-
+ plugins/tool_box/CMakeLists.txt                    |    2 +-
+ plugins/tool_box/app_item.cpp                      |    2 +-
+ plugins/tool_box/app_launcher/CMakeLists.txt       |    2 +-
+ plugins/tool_box/app_launcher/main.cpp             |   20 +-
+ plugins/tool_box/mainwindow.cpp                    |    2 +
+ plugins/tool_box/tool_box.cpp                      |   14 +-
+ .../kylin-os-manager-tool-box_bo_CN.ts             |   18 +-
+ .../translations/kylin-os-manager-tool-box_de.ts   |   18 +-
+ .../translations/kylin-os-manager-tool-box_es.ts   |   18 +-
+ .../translations/kylin-os-manager-tool-box_fr.ts   |   18 +-
+ .../translations/kylin-os-manager-tool-box_kk.ts   |   18 +-
+ .../translations/kylin-os-manager-tool-box_ky.ts   |   18 +-
+ .../translations/kylin-os-manager-tool-box_mn.ts   |   18 +-
+ .../translations/kylin-os-manager-tool-box_ug.ts   |   18 +-
+ .../kylin-os-manager-tool-box_zh_CN.ts             |   18 +-
+ .../kylin-os-manager-tool-box_zh_HK.ts             |   18 +-
+ src/application/main.cpp                           |    2 +-
+ src/application/mainwindow.cpp                     |   15 +-
+ .../translations/kylin-os-manager_bo_CN.ts         |   11 +-
+ .../translations/kylin-os-manager_de.ts            |   11 +-
+ .../translations/kylin-os-manager_es.ts            |   11 +-
+ .../translations/kylin-os-manager_fr.ts            |   11 +-
+ .../translations/kylin-os-manager_kk.ts            |   11 +-
+ .../translations/kylin-os-manager_ky.ts            |   11 +-
+ .../translations/kylin-os-manager_mn.ts            |   11 +-
+ .../translations/kylin-os-manager_ug.ts            |   11 +-
+ .../translations/kylin-os-manager_zh_CN.ts         |   11 +-
+ .../translations/kylin-os-manager_zh_HK.ts         |   11 +-
+ src/process_manager/CMakeLists.txt                 |   30 -
+ src/process_manager/client_dbus.cpp                |  110 --
+ src/process_manager/client_dbus.h                  |   28 -
+ src/process_manager/conf.cpp                       |   34 -
+ src/process_manager/conf.h                         |   28 -
+ src/process_manager/conf_parser.cpp                |   90 -
+ src/process_manager/conf_parser.h                  |   29 -
+ src/process_manager/daemon.cpp                     |   71 -
+ src/process_manager/daemon.h                       |   30 -
+ .../data/kylin-os-manager-process-manager.desktop  |   18 -
+ src/process_manager/data/process-manager.ini       |    4 -
+ src/process_manager/main.cpp                       |  146 --
+ src/process_manager/process.cpp                    |  117 --
+ src/process_manager/process.h                      |   39 -
+ src/process_manager/service_dbus.cpp               |   64 -
+ src/process_manager/service_dbus.h                 |   38 -
+ src/tray_service/CMakeLists.txt                    |   29 -
+ src/tray_service/action.cpp                        |   76 -
+ src/tray_service/action.h                          |   40 -
+ src/tray_service/client_dbus.cpp                   |  128 --
+ src/tray_service/client_dbus.h                     |   25 -
+ src/tray_service/daemon.cpp                        |   80 -
+ src/tray_service/daemon.h                          |   43 -
+ src/tray_service/example/CMakeLists.txt            |   25 -
+ src/tray_service/example/connector.cpp             |    8 -
+ .../example/interface/kom_tray_interface.cpp       |    5 -
+ .../example/interface/kom_tray_interface.h         |   78 -
+ src/tray_service/example/protocol.cpp              |   57 -
+ src/tray_service/example/protocol.h                |   27 -
+ src/tray_service/main.cpp                          |  134 --
+ src/tray_service/service_dbus.cpp                  |   79 -
+ src/tray_service/service_dbus.h                    |   38 -
+ src/tray_service/tray.cpp                          |   93 -
+ src/tray_service/tray.h                            |   45 -
+ treasure-chest/CMakeLists.txt                      |    3 +-
+ treasure-chest/file-smash/CMakeLists.txt           |    2 +-
+ treasure-chest/file-smash/komt-file-smash.desktop  |    2 +-
+ treasure-chest/file-smash/kylin-file-crush.conf    |    2 +-
+ treasure-chest/file-smash/shreddialog.cpp          |    4 +-
+ .../translations/generate_translations_qm.sh       |    0
+ .../translations/generate_translations_ts.sh       |    0
+ .../translations/kylin-file-crush_bo_CN.qm         |  Bin 2103 -> 1995 bytes
+ .../translations/kylin-file-crush_bo_CN.ts         |   10 +-
+ .../file-smash/translations/kylin-file-crush_de.qm |  Bin 2196 -> 2134 bytes
+ .../file-smash/translations/kylin-file-crush_de.ts |   10 +-
+ .../file-smash/translations/kylin-file-crush_es.qm |  Bin 2034 -> 1972 bytes
+ .../file-smash/translations/kylin-file-crush_es.ts |   10 +-
+ .../file-smash/translations/kylin-file-crush_fr.qm |  Bin 2182 -> 2120 bytes
+ .../file-smash/translations/kylin-file-crush_fr.ts |   10 +-
+ .../file-smash/translations/kylin-file-crush_kk.qm |  Bin 2090 -> 2000 bytes
+ .../file-smash/translations/kylin-file-crush_kk.ts |   10 +-
+ .../file-smash/translations/kylin-file-crush_ky.qm |  Bin 2126 -> 2046 bytes
+ .../file-smash/translations/kylin-file-crush_ky.ts |   10 +-
+ .../file-smash/translations/kylin-file-crush_mn.qm |  Bin 1998 -> 1914 bytes
+ .../file-smash/translations/kylin-file-crush_mn.ts |   10 +-
+ .../file-smash/translations/kylin-file-crush_ug.qm |  Bin 2114 -> 2032 bytes
+ .../file-smash/translations/kylin-file-crush_ug.ts |   10 +-
+ .../translations/kylin-file-crush_zh_CN.qm         |  Bin 2527 -> 2525 bytes
+ .../translations/kylin-file-crush_zh_CN.ts         |   10 +-
+ .../translations/kylin-file-crush_zh_HK.qm         |  Bin 1279 -> 1217 bytes
+ .../translations/kylin-file-crush_zh_HK.ts         |   10 +-
+ .../network-bandwidth-test/CMakeLists.txt          |    2 +-
+ .../network-bandwidth-test/kylin-iperf.conf        |    2 +-
+ .../network-iputils-arping/CMakeLists.txt          |    2 +-
+ .../kylin-iputils-arping.conf                      |    4 +-
+ treasure-chest/network-route-track/CMakeLists.txt  |    2 +-
+ .../network-route-track/kylin-traceroute.conf      |    2 +-
+ treasure-chest/network-telnet/CMakeLists.txt       |    2 +-
+ treasure-chest/network-telnet/kylin-telnet.conf    |    4 +-
+ treasure-chest/network-telnet/mainwindow.cpp       |    2 +-
+ .../translations/komt-network-telnet_zh_CN.ts      |    2 +-
+ treasure-chest/replacement/CMakeLists.txt          |    2 +-
+ treasure-chest/replacement/kylin-replacement.conf  |    2 +-
+ treasure-chest/source-update/CMakeLists.txt        |    2 +-
+ .../source-update/kylin-source-update-tool.conf    |    4 +-
+ treasure-chest/system-cleanup/CMakeLists.txt       |    2 +-
+ treasure-chest/system-cleanup/filemd5.cpp          |  148 +-
+ treasure-chest/system-cleanup/filemd5.h            |   10 +-
+ .../system-cleanup/kylin-system-cleanup.conf       |    4 +-
+ treasure-chest/system-cleanup/main.cpp             |   13 +-
+ treasure-chest/system-cleanup/mainwindow.cpp       |   51 +-
+ treasure-chest/system-cleanup/mainwindow.h         |    6 +-
+ treasure-chest/system-cleanup/scanfilepage.cpp     |   19 +-
+ treasure-chest/system-cleanup/scanfilepage.h       |    1 +
+ .../system-cleanup/scanfileslistpage.cpp           |   82 +-
+ treasure-chest/system-cleanup/scanfileslistpage.h  |   48 +
+ treasure-chest/system-cleanup/tableheaderview.cpp  |   27 +-
+ treasure-chest/system-cleanup/tableheaderview.h    |    4 +-
+ treasure-chest/tcpdump/CMakeLists.txt              |    2 +-
+ treasure-chest/tcpdump/kylin-tcpdump.conf          |    2 +-
+ treasure-chest/win-data-migration/CMakeLists.txt   |    4 +-
+ .../kylin-win-data-migration.conf                  |    4 +-
+ 348 files changed, 9576 insertions(+), 34451 deletions(-)
+ delete mode 100644 daemons/monitor/CMakeLists.txt
+ delete mode 100644 daemons/monitor/crash-collect.cpp
+ delete mode 100644 daemons/monitor/crash-collect.h
+ delete mode 100644 daemons/monitor/crash-database.cpp
+ delete mode 100644 daemons/monitor/crash-database.h
+ delete mode 100644 daemons/monitor/crash-info.cpp
+ delete mode 100644 daemons/monitor/crash-info.h
+ delete mode 100644 daemons/monitor/crash-monitor.cpp
+ delete mode 100644 daemons/monitor/crash-monitor.h
+ delete mode 100644 daemons/monitor/data/com.kylin-os-manager-monitor.service
+ delete mode 100644 daemons/monitor/data/komd.crash.gschema.xml
+ delete mode 100644 daemons/monitor/main.cpp
+ delete mode 100644 daemons/monitor/obtainsysteminformation.cpp
+ delete mode 100644 daemons/monitor/obtainsysteminformation.h
+ delete mode 100644 daemons/monitor/systemmonitor.cpp
+ delete mode 100644 daemons/monitor/systemmonitor.h
+ create mode 100644 daemons/sessionservice/disk_monitor_exception_popup.cpp
+ create mode 100644 daemons/sessionservice/disk_monitor_exception_popup.h
+ delete mode 100644 daemons/sessionservice/printerbackend/CMakeLists.txt
+ delete mode 100644 daemons/sessionservice/printerbackend/backend/device_map.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/backend/device_map.h
+ delete mode 100644 daemons/sessionservice/printerbackend/backend/event_notify_monitor.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/backend/event_notify_monitor.h
+ delete mode 100644 daemons/sessionservice/printerbackend/backend/launch_printer.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/backend/launch_printer.h
+ delete mode 100644 daemons/sessionservice/printerbackend/cmake/common.cmake
+ delete mode 100644 daemons/sessionservice/printerbackend/cmake/printer.cmake
+ delete mode 100644 daemons/sessionservice/printerbackend/common/base_info.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/common/base_info.h
+ delete mode 100644 daemons/sessionservice/printerbackend/common/common.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/common/common.h
+ delete mode 100644 daemons/sessionservice/printerbackend/common/custom_qstring_converter.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/common/custom_qstring_converter.h
+ delete mode 100644 daemons/sessionservice/printerbackend/common/global_variable.h
+ delete mode 100644 daemons/sessionservice/printerbackend/common/singleton.h
+ delete mode 100644 daemons/sessionservice/printerbackend/common/uri.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/common/uri.h
+ delete mode 100644 daemons/sessionservice/printerbackend/data/kylin-os-manager-printer-settings.gschema.xml
+ delete mode 100644 daemons/sessionservice/printerbackend/device_manager/device_information.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/device_manager/device_information.h
+ delete mode 100644 daemons/sessionservice/printerbackend/device_manager/device_monitor.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/device_manager/device_monitor.h
+ delete mode 100644 daemons/sessionservice/printerbackend/device_manager/udev_devices.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/device_manager/udev_devices.h
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_backend.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_backend.h
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/cupsconnection4ppds.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/cupsconnection4ppds.h
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/find_and_match_ppds.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/find_and_match_ppds.h
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/findppdsthread.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/findppdsthread.h
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/lpinfo_browser.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/lpinfo_browser.h
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/matchppdsthread.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/matchppdsthread.h
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/package_helper.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/package_helper.h
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/ukui_apt.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/ukui_apt.h
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/ukui_printer.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/ukui_printer.h
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/upload_helper.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/printer_manager/upload_helper.h
+ delete mode 100755 daemons/sessionservice/printerbackend/python/sync.py
+ delete mode 100644 daemons/sessionservice/printerbackend/translations/generate_translations_qm.sh
+ delete mode 100644 daemons/sessionservice/printerbackend/translations/kylin-printer_bo_CN.ts
+ delete mode 100644 daemons/sessionservice/printerbackend/translations/kylin-printer_en.ts
+ delete mode 100644 daemons/sessionservice/printerbackend/translations/kylin-printer_kk.ts
+ delete mode 100644 daemons/sessionservice/printerbackend/translations/kylin-printer_ky.ts
+ delete mode 100644 daemons/sessionservice/printerbackend/translations/kylin-printer_mn.ts
+ delete mode 100644 daemons/sessionservice/printerbackend/translations/kylin-printer_ru.ts
+ delete mode 100644 daemons/sessionservice/printerbackend/translations/kylin-printer_ug.ts
+ delete mode 100644 daemons/sessionservice/printerbackend/translations/kylin-printer_zh_CN.ts
+ delete mode 100644 daemons/sessionservice/printerbackend/translations/kylin-printer_zh_HK.ts
+ delete mode 100644 daemons/sessionservice/printerbackend/ui/gsettings_monitor.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/ui/gsettings_monitor.h
+ delete mode 100644 daemons/sessionservice/printerbackend/ui/new_pop_window/pop_window_manager.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/ui/new_pop_window/pop_window_manager.h
+ delete mode 100644 daemons/sessionservice/printerbackend/util/information_collector.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/util/information_collector.h
+ delete mode 100644 daemons/sessionservice/printerbackend/util/system_notification.cpp
+ delete mode 100644 daemons/sessionservice/printerbackend/util/system_notification.h
+ create mode 100644 plugins/device-controller/src/include/hwinfostorage.cpp
+ create mode 100644 plugins/device-controller/src/include/hwinfostorage.h
+ delete mode 100644 src/process_manager/CMakeLists.txt
+ delete mode 100644 src/process_manager/client_dbus.cpp
+ delete mode 100644 src/process_manager/client_dbus.h
+ delete mode 100644 src/process_manager/conf.cpp
+ delete mode 100644 src/process_manager/conf.h
+ delete mode 100644 src/process_manager/conf_parser.cpp
+ delete mode 100644 src/process_manager/conf_parser.h
+ delete mode 100644 src/process_manager/daemon.cpp
+ delete mode 100644 src/process_manager/daemon.h
+ delete mode 100644 src/process_manager/data/kylin-os-manager-process-manager.desktop
+ delete mode 100644 src/process_manager/data/process-manager.ini
+ delete mode 100644 src/process_manager/main.cpp
+ delete mode 100644 src/process_manager/process.cpp
+ delete mode 100644 src/process_manager/process.h
+ delete mode 100644 src/process_manager/service_dbus.cpp
+ delete mode 100644 src/process_manager/service_dbus.h
+ delete mode 100644 src/tray_service/CMakeLists.txt
+ delete mode 100644 src/tray_service/action.cpp
+ delete mode 100644 src/tray_service/action.h
+ delete mode 100644 src/tray_service/client_dbus.cpp
+ delete mode 100644 src/tray_service/client_dbus.h
+ delete mode 100644 src/tray_service/daemon.cpp
+ delete mode 100644 src/tray_service/daemon.h
+ delete mode 100644 src/tray_service/example/CMakeLists.txt
+ delete mode 100644 src/tray_service/example/connector.cpp
+ delete mode 100644 src/tray_service/example/interface/kom_tray_interface.cpp
+ delete mode 100644 src/tray_service/example/interface/kom_tray_interface.h
+ delete mode 100644 src/tray_service/example/protocol.cpp
+ delete mode 100644 src/tray_service/example/protocol.h
+ delete mode 100644 src/tray_service/main.cpp
+ delete mode 100644 src/tray_service/service_dbus.cpp
+ delete mode 100644 src/tray_service/service_dbus.h
+ delete mode 100644 src/tray_service/tray.cpp
+ delete mode 100644 src/tray_service/tray.h
+ mode change 100644 => 100755 treasure-chest/file-smash/translations/generate_translations_qm.sh
+ mode change 100644 => 100755 treasure-chest/file-smash/translations/generate_translations_ts.sh
+
+diff --git a/daemons/CMakeLists.txt b/daemons/CMakeLists.txt
+index c1a4247..0430ee2 100644
+--- a/daemons/CMakeLists.txt
++++ b/daemons/CMakeLists.txt
+@@ -4,7 +4,6 @@ set(CMAKE_CXX_STANDARD 17)
+ set(CMAKE_CXX_FLAGS "-Wall -g")
+ 
+ add_subdirectory(config)
+-#add_subdirectory(monitor)
+ add_subdirectory(service)
+ add_subdirectory(sessionservice)
+ add_subdirectory(kylin-core-dump-monitor)
+diff --git a/daemons/config/CMakeLists.txt b/daemons/config/CMakeLists.txt
+index 842db29..551bb6f 100644
+--- a/daemons/config/CMakeLists.txt
++++ b/daemons/config/CMakeLists.txt
+@@ -21,5 +21,5 @@ set(SRCS "${CONFIG_DIR}/main.cpp"
+ target_include_directories(${PROJECT_NAME} PRIVATE ${CONFIG_DIR})
+ target_sources(${PROJECT_NAME} PRIVATE ${SRCS})
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/share/kylin-os-manager/komd-config/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/bin/)
+ install(FILES ${CONFIG_DIR}/komd-config.desktop DESTINATION /etc/xdg/autostart)
+\ No newline at end of file
+diff --git a/daemons/config/komd-config.desktop b/daemons/config/komd-config.desktop
+index 2b2ccab..ad6ac22 100644
+--- a/daemons/config/komd-config.desktop
++++ b/daemons/config/komd-config.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Name=komd-config
+-Exec=/usr/share/kylin-os-manager/komd-config/komd-config
++Exec=/usr/lib/kylin-os-manager/bin/komd-config
+ Terminal=false
+ Type=Application
+ NoDisplay=true
+diff --git a/daemons/kylin-core-dump-monitor/CMakeLists.txt b/daemons/kylin-core-dump-monitor/CMakeLists.txt
+index 06239a3..44ea29e 100644
+--- a/daemons/kylin-core-dump-monitor/CMakeLists.txt
++++ b/daemons/kylin-core-dump-monitor/CMakeLists.txt
+@@ -7,8 +7,8 @@ install(FILES ${CMAKE_CURRENT_LIST_DIR}/kylin-core-dump-handler.sh DESTINATION /
+         PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+ install(FILES ${CMAKE_CURRENT_LIST_DIR}/kylin-core-dump-monitor.sh DESTINATION /usr/share/kylin-os-manager/kylin-core-dump-monitor
+         PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+-install(FILES ${CMAKE_CURRENT_LIST_DIR}/kylin-core-dump-trailblazer.sh DESTINATION /usr/share/kylin-os-manager/kylin-core-dump-monitor
+-        PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
++# install(FILES ${CMAKE_CURRENT_LIST_DIR}/kylin-core-dump-trailblazer.sh DESTINATION /usr/share/kylin-os-manager/kylin-core-dump-monitor
++#         PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+ 
+ install(FILES ${CMAKE_CURRENT_LIST_DIR}/kylin-core-dump-monitor.service DESTINATION /lib/systemd/system/)
+-install(FILES ${CMAKE_CURRENT_LIST_DIR}/kylin-core-dump-trailblazer.service DESTINATION /lib/systemd/system/)
+\ No newline at end of file
++# install(FILES ${CMAKE_CURRENT_LIST_DIR}/kylin-core-dump-trailblazer.service DESTINATION /lib/systemd/system/)
+\ No newline at end of file
+diff --git a/daemons/kylin-core-dump-monitor/kylin-core-dump-handler.sh b/daemons/kylin-core-dump-monitor/kylin-core-dump-handler.sh
+index 8becf87..c250e90 100755
+--- a/daemons/kylin-core-dump-monitor/kylin-core-dump-handler.sh
++++ b/daemons/kylin-core-dump-monitor/kylin-core-dump-handler.sh
+@@ -64,7 +64,7 @@ function is_need_upload() {
+     # 计算时间差
+     local time_diff
+     time_diff=$((cur_timestamp - pre_timestamp))
+-    if [ "${time_diff}" -gt 3600 ]; then
++    if [ "${time_diff}" -gt 86400 ]; then
+         return 0
+     fi
+ 
+diff --git a/daemons/monitor/CMakeLists.txt b/daemons/monitor/CMakeLists.txt
+deleted file mode 100644
+index d98cc0c..0000000
+--- a/daemons/monitor/CMakeLists.txt
++++ /dev/null
+@@ -1,71 +0,0 @@
+-project(kylin-os-manager-monitor)
+-
+-set(MONITOR_DIR ${CMAKE_CURRENT_LIST_DIR})
+-set(CMAKE_AUTOMOC ON)
+-
+-add_executable(${PROJECT_NAME})
+-
+-find_package(PkgConfig REQUIRED)
+-
+-target_compile_options(${PROJECT_NAME} PRIVATE -Wall -g)
+-target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_11)
+-
+-find_package(Qt5 REQUIRED COMPONENTS Core)
+-target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core)
+-
+-find_package(Qt5 REQUIRED COMPONENTS DBus)
+-target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::DBus)
+-
+-find_package(Qt5 REQUIRED COMPONENTS Sql)
+-target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Sql)
+-
+-find_package(Qt5 REQUIRED COMPONENTS Network)
+-target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Network)
+-
+-find_package(PkgConfig)
+-pkg_check_modules(KYSDK_MODULE kysdk-log kysdk-diagnostics)
+-if (${KYSDK_MODULE_FOUND})
+-    target_include_directories(${PROJECT_NAME} PRIVATE ${KYSDK_MODULE_INCLUDE_DIRS})
+-    target_link_directories(${PROJECT_NAME} PRIVATE ${KYSDK_MODULE_LIBRARY_DIRS})
+-    target_link_libraries(${PROJECT_NAME} PRIVATE ${KYSDK_MODULE_LIBRARIES})
+-else()
+-    set(COMPATIBILITY_NAME compatibility)
+-    set(COMPATIBILITY_DIR ${TOP_DIR}/${COMPATIBILITY_NAME})
+-    target_include_directories(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_DIR}/kysdk-log/)
+-    target_include_directories(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_DIR}/kysdk-diagnostics/)
+-    target_link_libraries(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_NAME})
+-endif()
+-
+-pkg_check_modules(QGSETTINGS gsettings-qt)
+-target_include_directories(${PROJECT_NAME} PRIVATE ${QGSETTINGS_INCLUDE_DIRS})
+-target_link_directories(${PROJECT_NAME} PRIVATE ${QGSETTINGS_LIBRARY_DIRS})
+-target_link_libraries(${PROJECT_NAME} PRIVATE ${QGSETTINGS_LIBRARIES})
+-
+-pkg_check_modules(LIBGTOP libgtop-2.0)
+-target_include_directories(${PROJECT_NAME} PRIVATE ${LIBGTOP_INCLUDE_DIRS})
+-target_link_directories(${PROJECT_NAME} PRIVATE ${LIBGTOP_LIBRARY_DIRS})
+-target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBGTOP_LIBRARIES})
+-
+-include_directories(${MONITOR_DIR}/../../kom/)
+-target_link_libraries(${PROJECT_NAME} PRIVATE kom)
+-
+-if (CMAKE_BUILD_TYPE AND (CMAKE_BUILD_TYPE STREQUAL "Debug"))
+-    add_definitions(-DDEBUG_MODE)
+-endif()
+-
+-set(SRCS
+-	"${MONITOR_DIR}/main.cpp"
+-	"${MONITOR_DIR}/crash-collect.cpp"
+-	"${MONITOR_DIR}/crash-info.cpp"
+-	"${MONITOR_DIR}/crash-monitor.cpp"
+-	"${MONITOR_DIR}/crash-database.cpp"
+-	"${MONITOR_DIR}/systemmonitor.cpp"
+-        "${MONITOR_DIR}/obtainsysteminformation.cpp"
+-)
+-
+-target_include_directories(${PROJECT_NAME} PRIVATE ${MONITOR_DIR})
+-target_sources(${PROJECT_NAME} PRIVATE ${SRCS})
+-
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/bin/)
+-install(FILES ${MONITOR_DIR}/data/komd.crash.gschema.xml DESTINATION /usr/share/glib-2.0/schemas/)
+-install(FILES ${MONITOR_DIR}/data/com.kylin-os-manager-monitor.service DESTINATION /lib/systemd/system/)
+diff --git a/daemons/monitor/crash-collect.cpp b/daemons/monitor/crash-collect.cpp
+deleted file mode 100644
+index 0113b65..0000000
+--- a/daemons/monitor/crash-collect.cpp
++++ /dev/null
+@@ -1,337 +0,0 @@
+-/*
+- * kylin-os-manager
+- *
+- * Copyright (C) 2022, KylinSoft 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 of the License, 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 <https://www.gnu.org/licenses/>.
+- */
+-
+-#include <time.h>
+-
+-#include <QSysInfo>
+-#include <QProcess>
+-#include <QStringList>
+-#include <QDebug>
+-#include <QDBusConnection>
+-#include <QDBusPendingCall>
+-#include <QDBusPendingReply>
+-#include <QJsonObject>
+-#include <QJsonDocument>
+-#include <QGSettings>
+-#include <QNetworkInterface>
+-#include <QHostInfo>
+-
+-#include <libkydiagnostics.h>
+-
+-#include "crash-collect.h"
+-#include "crash-database.h"
+-
+-namespace crash
+-{
+-
+-CrashCollect::CrashCollect()
+-	: m_monitor(new CrashMonitor(this))
+-	, m_interface(nullptr)
+-{
+-	// nothing to do
+-}
+-
+-CrashCollect::~CrashCollect()
+-{
+-	// nothing to do
+-}
+-
+-void CrashCollect::on_run()
+-{
+-	connect(m_monitor, &CrashMonitor::crashed, this, &CrashCollect::collectInfo);
+-}
+-
+-void CrashCollect::collectInfo(pid_t pid)
+-{
+-	qInfo() << "start collecting crash information, pid is: " << pid;
+-
+-	CrashInfo crashInfo;
+-	CrashDatabase crashDatabase;
+-
+-	collectInfoByCoredumpctl(pid, crashInfo);
+-
+-	crashInfo.setArch(getMachineArch().toLocal8Bit());
+-
+-	QString packageName = getPackageName(crashInfo.getExecutable());
+-	crashInfo.setPackageName(packageName.toLocal8Bit());
+-	crashInfo.setPackageVersion(getPackageVersion(packageName).toLocal8Bit());
+-
+-	if (!crashDatabase.saveCrashInfo(crashInfo))
+-		qCritical() << "save crash info fail !";
+-
+-	if (!uploadData(crashInfo.toJson()))
+-		qCritical() << "upload crash fail !";
+-}
+-
+-void CrashCollect::collectInfoByCoredumpctl(pid_t pid, CrashInfo &info)
+-{
+-	const QString command = QString("coredumpctl info %1").arg(pid);
+-
+-	QProcess process;
+-	process.start(command);
+-	process.waitForFinished(-1);
+-
+-	QByteArray data = process.readAllStandardOutput().trimmed();
+-	QList<QByteArray> lines = data.split('\n');
+-	for (int i = 0; i < lines.size(); i++) {
+-		QString line = lines.at(i).trimmed();
+-
+-		if (line.contains("Timestamp:")) {
+-			QString timestamp = removeBrackets(line.remove("Timestamp:").trimmed()).trimmed();
+-			info.setTimestamp(timestamp.toLocal8Bit());
+-			continue;
+-		}
+-		if (line.contains("Executable:")) {
+-			QString executable = line.remove("Executable:").trimmed();
+-			info.setExecutable(executable.toLocal8Bit());
+-			continue;
+-		}
+-		if (line.contains("Command Line:")) {
+-			QString commandLine = line.remove("Command Line:").trimmed();
+-			info.setCommandLine(commandLine.toLocal8Bit());
+-			continue;
+-		}
+-		if (line.contains("Signal:")) {
+-			QString signal = removeBrackets(line.remove("Signal:").trimmed()).trimmed();
+-			info.setSignal(signal.toLocal8Bit());
+-			continue;
+-		}
+-		if (line.contains("PID:")) {
+-			QString pid = removeBrackets(line.remove("PID:").trimmed()).trimmed();
+-			info.setPid(pid.toLocal8Bit());
+-			continue;
+-		}
+-		if (line.contains("UID:") && !line.contains("Owner UID:")) {
+-			QString uid = line.remove("UID:").trimmed();
+-			info.setUid(uid.toLocal8Bit());
+-			continue;
+-		}
+-		if (line.contains("GID:")) {
+-			QString gid = line.remove("GID:").trimmed();
+-			info.setGid(gid.toLocal8Bit());
+-			continue;
+-		}
+-		if (line.contains("Hostname:")) {
+-			QString hostname = line.remove("Hostname:").trimmed();
+-			info.setHostname(hostname.toLocal8Bit());
+-			continue;
+-		}
+-		if (line.contains("Message:")) {
+-			QString message = line.remove("Message:").trimmed();
+-			info.setBacktrace(message.toLocal8Bit());
+-			continue;
+-		}
+-		if (line.startsWith("Stack trace")) {
+-			QString stack = line.trimmed();
+-			info.setBacktrace(stack.toLocal8Bit());
+-			continue;
+-		}
+-		if (line.startsWith("#")) {
+-			QString frame = line.trimmed();
+-			info.setBacktrace(frame.toLocal8Bit());
+-			continue;
+-		}
+-	}
+-}
+-
+-QString CrashCollect::getMachineArch(void)
+-{
+-	return QSysInfo::currentCpuArchitecture();
+-}
+-
+-QString CrashCollect::getPackageName(QString file)
+-{
+-	QString command = QString("dpkg -S %1").arg(file);
+-
+-	QProcess process;
+-	process.start(command);
+-	process.waitForFinished(-1);
+-
+-	QByteArray data = process.readAllStandardOutput().trimmed();
+-	if (data.isEmpty())
+-		return "";
+-
+-	return data.split(':').at(0);
+-}
+-
+-QString CrashCollect::getPackageVersion(QString packageName)
+-{
+-	QString command = QString("dpkg -l %1").arg(packageName);
+-
+-	QProcess process;
+-	process.start(command);
+-	process.waitForFinished(-1);
+-
+-	QByteArray data = process.readAllStandardOutput().trimmed();
+-	if (data.isEmpty())
+-		return "";
+-
+-	QList<QByteArray> lines = data.split('\n');
+-	QByteArray line = lines.last();
+-	QList<QByteArray> items = line.split(' ');
+-	items.removeAll(QByteArray());
+-	if (items.size() < 3)
+-		return "";
+-
+-	return items.at(2);
+-}
+-
+-bool CrashCollect::uploadData(QByteArray data)
+-{
+-	if (!QGSettings::isSchemaInstalled("komd.crash.upload")) {
+-		qCritical() << "upload gsettings don't have install !";
+-		return false;
+-	}
+-
+-	bool isBuriedPoint = false;
+-	bool isControlLog = false;
+-	QGSettings upload("komd.crash.upload");
+-	if (upload.keys().contains("buried-point") || upload.keys().contains("buriedPoint"))
+-		isBuriedPoint = upload.get("buried-point").toBool();
+-
+-	if (upload.keys().contains("control-log") || upload.keys().contains("controlLog"))
+-		isControlLog = upload.get("control-log").toBool();
+-
+-	if (isBuriedPoint)
+-		if (!uploadDataByBuriedPoint(data))
+-			return false;
+-
+-	if (isControlLog)
+-		if (!uploadDataByControlLog(data))
+-			return false;
+-
+-	return true;
+-}
+-
+-bool CrashCollect::uploadDataByBuriedPoint(QByteArray &data)
+-{
+-	static char appName[] = "komd-crash";
+-	static char messageType[] = "CrashType";
+-
+-	KBuriedPoint pt[1];
+-	pt[0].key = "CrashInfo";
+-	pt[0].value = data.toBase64().constData();
+-
+-	if (kdk_buried_point(appName, messageType, pt, 1)) {
+-		qCritical() << "kdk buried point fail !";
+-		return false;
+-	} else {
+-		qInfo() << "upload data by buried point success !";
+-	}
+-
+-	return true;
+-}
+-
+-bool CrashCollect::uploadDataByControlLog(QByteArray &data)
+-{
+-	if (m_interface == nullptr) {
+-		m_interface = new QDBusInterface("org.log.sys_transmit",
+-						"/org/log/sys_transmit",
+-						"org.log.transmit",
+-						QDBusConnection::systemBus());
+-		if (m_interface == nullptr || !m_interface->isValid()) {
+-			m_interface = nullptr;
+-			qCritical() << "create dbus interface error !";
+-			return false;
+-		}
+-	}
+-
+-	QJsonObject object;
+-	object.insert("time", getCurrentTime());
+-	object.insert("hostname", getHostName());
+-	object.insert("ip", getHostIp());
+-	object.insert("name", "komd-crash");
+-	object.insert("lv", "debug");
+-	object.insert("message", data.toBase64().constData());
+-
+-	QJsonDocument doc;
+-	doc.setObject(object);
+-	QByteArray log = doc.toJson(QJsonDocument::Compact);
+-
+-	QDBusPendingCall pendCall = m_interface->asyncCall("log_transmit", QString::fromUtf8(log));
+-	QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendCall, this);
+-	connect(watcher, &QDBusPendingCallWatcher::finished, this, &CrashCollect::uploadDataByControlLogPending);
+-
+-	return true;
+-}
+-
+-void CrashCollect::uploadDataByControlLogPending(QDBusPendingCallWatcher *self)
+-{
+-	QDBusPendingReply<QString> reply = *self;
+-	if (reply.isError()) {
+-		qCritical() << "upload data to control log error !";
+-	} else {
+-		QString message = reply.value();
+-		if (message != "log sent")
+-			qCritical() << "upload data by control log error: " << message;
+-		else
+-			qInfo() << "upload data by control log success !";
+-	}
+-
+-	self->deleteLater();
+-}
+-
+-QString CrashCollect::removeBrackets(QString src)
+-{
+-	qsizetype leftBrackets = src.indexOf('(');
+-	if (leftBrackets == -1)
+-		return src;
+-
+-	qsizetype rightBrackets = src.indexOf(')');
+-	if (rightBrackets != -1)
+-		return src.remove(leftBrackets, rightBrackets - leftBrackets + 1);
+-	else
+-		return src.remove(leftBrackets, src.size() - leftBrackets);
+-}
+-
+-QString CrashCollect::getCurrentTime(void)
+-{
+-	time_t time = ::time(NULL);
+-	struct tm buf;
+-	if (::localtime_r(&time, &buf) == NULL)
+-		qCritical() << "get current time error !";
+-
+-	char str[20];
+-	::strftime(str, sizeof(str), "%Y-%m-%d %H:%M:%S", &buf);
+-
+-	return QString(str);
+-}
+-
+-QString CrashCollect::getHostName(void)
+-{
+-	QString hostName = QHostInfo::localHostName();
+-	return hostName.isEmpty() ? "root" : hostName;
+-}
+-
+-QString CrashCollect::getHostIp(void)
+-{
+-	QString currentAddress;
+-	QList<QHostAddress> addrList = QNetworkInterface::allAddresses();
+-	for (int i = 0; i < addrList.size(); i++) {
+-		QHostAddress item = addrList.at(i);
+-		if ((item != QHostAddress::LocalHost) && (item.toIPv4Address())) {
+-			currentAddress = item.toString();
+-			break;
+-		}
+-	}
+-
+-	return currentAddress.isEmpty() ? QHostAddress(QHostAddress::LocalHost).toString() : currentAddress;
+-}
+-
+-}
+diff --git a/daemons/monitor/crash-collect.h b/daemons/monitor/crash-collect.h
+deleted file mode 100644
+index 4b8f0a4..0000000
+--- a/daemons/monitor/crash-collect.h
++++ /dev/null
+@@ -1,71 +0,0 @@
+-/*
+- * kylin-os-manager
+- *
+- * Copyright (C) 2022, KylinSoft 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 of the License, 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 <https://www.gnu.org/licenses/>.
+- */
+-
+-#ifndef CRASH_COLLECT_H
+-#define CRASH_COLLECT_H
+-
+-#include <QObject>
+-#include <QDBusInterface>
+-#include <QDBusPendingCallWatcher>
+-
+-#include "crash-monitor.h"
+-#include "crash-info.h"
+-
+-namespace crash
+-{
+-
+-class CrashCollect : public QObject
+-{
+-	Q_OBJECT
+-
+-public:
+-	CrashCollect();
+-	~CrashCollect();
+-
+-Q_SIGNALS:
+-	void collected(QString path);
+-
+-public Q_SLOTS:
+-	void on_run();
+-
+-private Q_SLOTS:
+-	void collectInfo(pid_t pid);
+-	void uploadDataByControlLogPending(QDBusPendingCallWatcher *self);
+-
+-private:
+-	void collectInfoByCoredumpctl(pid_t pid, CrashInfo &info);
+-	QString getMachineArch(void);
+-	QString getPackageName(QString file);
+-	QString getPackageVersion(QString packageName);
+-
+-	bool uploadData(QByteArray data);
+-	bool uploadDataByBuriedPoint(QByteArray &data);
+-	bool uploadDataByControlLog(QByteArray &data);
+-	QString removeBrackets(QString src);
+-	QString getCurrentTime(void);
+-	QString getHostName(void);
+-	QString getHostIp(void);
+-
+-	CrashMonitor *m_monitor;
+-	QDBusInterface *m_interface;
+-};
+-
+-}
+-
+-#endif
+\ No newline at end of file
+diff --git a/daemons/monitor/crash-database.cpp b/daemons/monitor/crash-database.cpp
+deleted file mode 100644
+index 41f5b47..0000000
+--- a/daemons/monitor/crash-database.cpp
++++ /dev/null
+@@ -1,140 +0,0 @@
+-/*
+- * kylin-os-manager
+- *
+- * Copyright (C) 2022, KylinSoft 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 of the License, 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 <https://www.gnu.org/licenses/>.
+- */
+-
+-#include <QSqlError>
+-#include <QSqlQuery>
+-#include <QStringList>
+-#include <QString>
+-#include <QVariant>
+-#include <QDebug>
+-
+-#include "crash-database.h"
+-
+-namespace crash
+-{
+-
+-static const QString CONN_NAME = "komd-crash-database-conn";
+-static const QString DATABASE_PATH = "/usr/share/kylin-os-manager/komd-crash/komd-crash.db";
+-static const QString TABLE_NAME = "komd_crash_info";
+-
+-CrashDatabase::CrashDatabase()
+-{
+-	if (QSqlDatabase::contains(CONN_NAME)) {
+-		m_conn = QSqlDatabase::database(CONN_NAME);
+-	} else {
+-		m_conn = QSqlDatabase::addDatabase("QSQLITE", CONN_NAME);
+-		m_conn.setDatabaseName(DATABASE_PATH);
+-	}
+-
+-	if (!m_conn.open())
+-		qCritical() << "open database conn fail !";
+-}
+-
+-CrashDatabase::~CrashDatabase()
+-{
+-	m_conn.close();
+-}
+-
+-bool CrashDatabase::saveCrashInfo(CrashInfo &crashInfo)
+-{
+-	if (!m_conn.isValid())
+-		return false;
+-
+-	if (!isTableExist(TABLE_NAME))
+-		if (!createTable())
+-			return false;
+-
+-	QSqlQuery sqlQuery(m_conn);
+-	QString sql = QString("INSERT INTO %1 VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").arg(TABLE_NAME);
+-	sqlQuery.prepare(sql);
+-	sqlQuery.addBindValue(crashInfo.getTimestamp());
+-	sqlQuery.addBindValue(crashInfo.getArch());
+-	sqlQuery.addBindValue(crashInfo.getExecutable());
+-	sqlQuery.addBindValue(crashInfo.getCommandLine());
+-	sqlQuery.addBindValue(crashInfo.getSignal());
+-	sqlQuery.addBindValue(crashInfo.getPackageName());
+-	sqlQuery.addBindValue(crashInfo.getPackageVersion());
+-
+-	QByteArray serialize;
+-	QList<QByteArray> stackFrame = crashInfo.getBacktrace();
+-	int size = stackFrame.size();
+-	for (int i = 0; i < size; i++) {
+-		QByteArray item = stackFrame.at(i);
+-		if (item.startsWith("Stack trace"))
+-			serialize.append('\n');
+-		serialize.append(item).append('\n');
+-	}
+-	sqlQuery.addBindValue(serialize);
+-
+-	sqlQuery.addBindValue(crashInfo.getPid());
+-	sqlQuery.addBindValue(crashInfo.getUid());
+-	sqlQuery.addBindValue(crashInfo.getGid());
+-	sqlQuery.addBindValue(crashInfo.getUserName());
+-	sqlQuery.addBindValue(crashInfo.getHostname());
+-
+-	if (!sqlQuery.exec()) {
+-		qCritical() << "save crash info to database fail !" << sqlQuery.lastError();
+-		return false;
+-	}
+-
+-	return true;
+-}
+-
+-bool CrashDatabase::isTableExist(const QString &tableName)
+-{
+-	if (!m_conn.isValid())
+-		return false;
+-
+-	if (m_conn.tables().contains(tableName))
+-		return true;
+-
+-	return false;
+-}
+-
+-bool CrashDatabase::createTable()
+-{
+-	if (!m_conn.isValid())
+-		return false;
+-
+-	QSqlQuery sqlQuery(m_conn);
+-
+-	QString sql = QString("CREATE TABLE %1 (timestamp TEXT,			\
+-					arch TEXT,				\
+-					executable TEXT,			\
+-					commandLine TEXT,			\
+-					signal TEXT,				\
+-					packageName TEXT,			\
+-					packageVersion TEXT,			\
+-					backtrace TEXT,				\
+-					pid TEXT,				\
+-					uid TEXT,				\
+-					gid TEXT,				\
+-					username TEXT,				\
+-					hostname)").arg(TABLE_NAME);
+-	sqlQuery.prepare(sql);
+-
+-	if (!sqlQuery.exec()) {
+-		qCritical() << "create komd-crash database tabel fail !" << sqlQuery.lastError();
+-		return false;
+-	}
+-
+-	return true;
+-}
+-
+-}
+diff --git a/daemons/monitor/crash-database.h b/daemons/monitor/crash-database.h
+deleted file mode 100644
+index cba19ca..0000000
+--- a/daemons/monitor/crash-database.h
++++ /dev/null
+@@ -1,47 +0,0 @@
+-/*
+- * kylin-os-manager
+- *
+- * Copyright (C) 2022, KylinSoft 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 of the License, 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 <https://www.gnu.org/licenses/>.
+- */
+-
+-#ifndef CRASH_DATABASE_H
+-#define CRASH_DATABASE_H
+-
+-#include <QSqlDatabase>
+-
+-#include "crash-info.h"
+-
+-namespace crash
+-{
+-
+-class CrashDatabase
+-{
+-public:
+-	CrashDatabase();
+-	~CrashDatabase();
+-
+-	bool saveCrashInfo(CrashInfo &crashInfo);
+-
+-private:
+-	bool isTableExist(const QString &tableName);
+-	bool createTable();
+-
+-	QSqlDatabase m_conn;
+-};
+-
+-}
+-
+-#endif
+diff --git a/daemons/monitor/crash-info.cpp b/daemons/monitor/crash-info.cpp
+deleted file mode 100644
+index 763516b..0000000
+--- a/daemons/monitor/crash-info.cpp
++++ /dev/null
+@@ -1,212 +0,0 @@
+-/*
+- * kylin-os-manager
+- *
+- * Copyright (C) 2022, KylinSoft 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 of the License, 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 <https://www.gnu.org/licenses/>.
+- */
+-
+-#include <QJsonDocument>
+-#include <QJsonObject>
+-#include <QJsonArray>
+-#include <QDebug>
+-
+-#include "crash-info.h"
+-
+-namespace crash
+-{
+-
+-QByteArray CrashInfo::getTimestamp(void)
+-{
+-	return m_timestamp;
+-}
+-
+-void CrashInfo::setTimestamp(QByteArray timestamp)
+-{
+-	m_timestamp = timestamp;
+-}
+-
+-QByteArray CrashInfo::getArch(void)
+-{
+-	return m_arch;
+-}
+-
+-void CrashInfo::setArch(QByteArray arch)
+-{
+-	m_arch = arch;
+-}
+-
+-QByteArray CrashInfo::getExecutable(void)
+-{
+-	return m_executable;
+-}
+-
+-void CrashInfo::setExecutable(QByteArray executable)
+-{
+-	m_executable = executable;
+-}
+-
+-QByteArray CrashInfo::getCommandLine(void)
+-{
+-	return m_commandLine;
+-}
+-
+-void CrashInfo::setCommandLine(QByteArray commandLine)
+-{
+-	m_commandLine = commandLine;
+-}
+-
+-QByteArray CrashInfo::getSignal(void)
+-{
+-	return m_signal;
+-}
+-
+-void CrashInfo::setSignal(QByteArray signal)
+-{
+-	m_signal = signal;
+-}
+-
+-QByteArray CrashInfo::getPackageName(void)
+-{
+-	return m_packageName;
+-}
+-
+-void CrashInfo::setPackageName(QByteArray packageName)
+-{
+-	m_packageName = packageName;
+-}
+-
+-QByteArray CrashInfo::getPackageVersion(void)
+-{
+-	return m_packageVersion;
+-}
+-void CrashInfo::setPackageVersion(QByteArray packageVersion)
+-{
+-	m_packageVersion = packageVersion;
+-}
+-
+-QList<QByteArray> CrashInfo::getBacktrace(void)
+-{
+-	return m_backtrace;
+-}
+-
+-void CrashInfo::setBacktrace(QByteArray backtrace)
+-{
+-	m_backtrace << backtrace;
+-}
+-
+-QByteArray CrashInfo::getPid(void)
+-{
+-	return m_pid;
+-}
+-
+-void CrashInfo::setPid(QByteArray pid)
+-{
+-	m_pid = pid;
+-}
+-
+-QByteArray CrashInfo::getUid(void)
+-{
+-	return m_uid;
+-}
+-
+-void CrashInfo::setUid(QByteArray uid)
+-{
+-	m_uid = uid;
+-}
+-
+-QByteArray CrashInfo::getGid(void)
+-{
+-	return m_gid;
+-}
+-
+-void CrashInfo::setGid(QByteArray gid)
+-{
+-	m_gid = gid;
+-}
+-
+-QByteArray CrashInfo::getUserName(void)
+-{
+-	return m_username;
+-}
+-
+-void CrashInfo::setUserName(QByteArray username)
+-{
+-	m_username = username;
+-}
+-
+-QByteArray CrashInfo::getHostname(void)
+-{
+-	return m_hostname;
+-}
+-
+-void CrashInfo::setHostname(QByteArray hostname)
+-{
+-	m_hostname = hostname;
+-}
+-
+-QByteArray CrashInfo::toJson(void)
+-{
+-	QJsonObject object;
+-	object.insert("timestamp", m_timestamp.constData());
+-	object.insert("arch", m_arch.constData());
+-	object.insert("executable", m_executable.constData());
+-	object.insert("commandLine", m_commandLine.constData());
+-	object.insert("signal", m_signal.constData());
+-	object.insert("packageName", m_packageName.constData());
+-	object.insert("packageVersion", m_packageVersion.constData());
+-
+-	QJsonArray stackFrame;
+-	int size = m_backtrace.size();
+-	for (int i = 0; i < size; i++) {
+-		QByteArray item = m_backtrace.at(i);
+-		if (item.startsWith("Stack trace"))
+-			stackFrame << "";
+-		stackFrame << item.constData();
+-	}
+-	object.insert("backtrace", stackFrame);
+-
+-	object.insert("pid", m_pid.constData());
+-	object.insert("uid", m_uid.constData());
+-	object.insert("gid", m_gid.constData());
+-	object.insert("username", m_username.constData());
+-	object.insert("hostname", m_hostname.constData());
+-
+-	QJsonDocument doc;
+-	doc.setObject(object);
+-
+-	return doc.toJson(QJsonDocument::Compact);
+-}
+-
+-void CrashInfo::print(void)
+-{
+-	qDebug() << "********************";
+-	qDebug() << "|" << "key" << "\t\t" << "|" << "\t" << "value" << "|";
+-	qDebug() << "|" << "timestamp" << "\t\t" << "|" << "\t" << m_timestamp << "|";
+-	qDebug() << "|" << "arch" << "\t\t" << "|" << "\t" << m_arch << "|";
+-	qDebug() << "|" << "executable" << "\t\t" << "|" << "\t" << m_executable << "|";
+-	qDebug() << "|" << "command line" << "\t\t" << "|" << "\t" << m_commandLine << "|";
+-	qDebug() << "|" << "signal" << "\t\t" << "|" << "\t" << m_signal << "|";
+-	qDebug() << "|" << "package name" << "\t\t" << "|" << "\t" << m_packageName << "|";
+-	qDebug() << "|" << "package version" << "\t\t" << "|" << "\t" << m_packageVersion << "|";
+-	qDebug() << "|" << "backtrace" << "\t\t" << "|" << "\t" << m_backtrace << "|";
+-	qDebug() << "|" << "pid" << "\t\t" << "|" << "\t" << m_pid << "|";
+-	qDebug() << "|" << "uid" << "\t\t" << "|" << "\t" << m_uid << "|";
+-	qDebug() << "|" << "gid" << "\t\t" << "|" << "\t" << m_gid << "|";
+-	qDebug() << "|" << "username" << "\t\t" << "|" << "\t" << m_username << "|";
+-	qDebug() << "|" << "hostname" << "\t\t" << "|" << "\t" << m_hostname << "|";
+-	qDebug() << "********************";
+-}
+-
+-}
+\ No newline at end of file
+diff --git a/daemons/monitor/crash-info.h b/daemons/monitor/crash-info.h
+deleted file mode 100644
+index d48d4ef..0000000
+--- a/daemons/monitor/crash-info.h
++++ /dev/null
+@@ -1,96 +0,0 @@
+-/*
+- * kylin-os-manager
+- *
+- * Copyright (C) 2022, KylinSoft 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 of the License, 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 <https://www.gnu.org/licenses/>.
+- */
+-
+-#ifndef CRASH_INFO_H
+-#define CRASH_INFO_H
+-
+-#include <unistd.h>
+-#include <QByteArray>
+-
+-namespace crash
+-{
+-
+-class CrashInfo
+-{
+-public:
+-	CrashInfo() = default;
+-	~CrashInfo() = default;
+-
+-	QByteArray getTimestamp(void);
+-	void setTimestamp(QByteArray timestamp);
+-
+-	QByteArray getArch(void);
+-	void setArch(QByteArray arch);
+-
+-	QByteArray getExecutable(void);
+-	void setExecutable(QByteArray executable);
+-
+-	QByteArray getCommandLine(void);
+-	void setCommandLine(QByteArray commandLine);
+-
+-	QByteArray getSignal(void);
+-	void setSignal(QByteArray signal);
+-
+-	QByteArray getPackageName(void);
+-	void setPackageName(QByteArray packageName);
+-
+-	QByteArray getPackageVersion(void);
+-	void setPackageVersion(QByteArray packageVersion);
+-
+-	QList<QByteArray> getBacktrace(void);
+-	void setBacktrace(QByteArray backtrace);
+-
+-	QByteArray getPid(void);
+-	void setPid(QByteArray pid);
+-
+-	QByteArray getUid(void);
+-	void setUid(QByteArray uid);
+-
+-	QByteArray getGid(void);
+-	void setGid(QByteArray gid);
+-
+-	QByteArray getUserName(void);
+-	void setUserName(QByteArray username);
+-
+-	QByteArray getHostname(void);
+-	void setHostname(QByteArray hostname);
+-
+-	void print(void);
+-	QByteArray toJson(void);
+-
+-private:
+-	QByteArray m_timestamp;
+-	QByteArray m_arch;
+-	QByteArray m_executable;
+-	QByteArray m_commandLine;
+-	QByteArray m_signal;
+-	QByteArray m_packageName;
+-	QByteArray m_packageVersion;
+-	QList<QByteArray> m_backtrace;
+-
+-	QByteArray m_pid;
+-	QByteArray m_uid;
+-	QByteArray m_gid;
+-	QByteArray m_username;
+-	QByteArray m_hostname;
+-};
+-
+-}
+-
+-#endif
+diff --git a/daemons/monitor/crash-monitor.cpp b/daemons/monitor/crash-monitor.cpp
+deleted file mode 100644
+index 4ca3005..0000000
+--- a/daemons/monitor/crash-monitor.cpp
++++ /dev/null
+@@ -1,100 +0,0 @@
+-/*
+- * kylin-os-manager
+- *
+- * Copyright (C) 2022, KylinSoft 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 of the License, 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 <https://www.gnu.org/licenses/>.
+- */
+-
+-#include <QDebug>
+-#include <QDir>
+-
+-#include "crash-monitor.h"
+-
+-namespace crash
+-{
+-
+-static QString monitorPath = "/var/lib/systemd/coredump";
+-
+-CrashMonitor::CrashMonitor(QObject *parent)
+-	: QObject(parent)
+-	, m_fileSystemMonitor(new QFileSystemWatcher(this))
+-{
+-	qRegisterMetaType<pid_t>();
+-	m_fileSystemMonitor->addPath(monitorPath);
+-	setMonitor(true);
+-}
+-
+-CrashMonitor::~CrashMonitor()
+-{
+-	/* nothing to do */
+-}
+-
+-void CrashMonitor::setMonitor(bool state)
+-{
+-	if (state) {
+-		m_fileList = listFiles();
+-		connect(m_fileSystemMonitor, &QFileSystemWatcher::directoryChanged, this, &CrashMonitor::getCrashed);
+-	} else {
+-		m_fileList.clear();
+-		disconnect(m_fileSystemMonitor, &QFileSystemWatcher::directoryChanged, this, &CrashMonitor::getCrashed);
+-	}
+-}
+-
+-QList<QString> CrashMonitor::listFiles(void)
+-{
+-	QDir dir(monitorPath);
+-	return dir.entryList();
+-}
+-
+-QList<QString> CrashMonitor::getNewFile(void)
+-{
+-	QDir dir(monitorPath);
+-	QList<QString> currFileList = dir.entryList();
+-
+-	for (int i = 0; i < m_fileList.size(); i++) {
+-		if (currFileList.contains(m_fileList.at(i))) {
+-			currFileList.removeAll(m_fileList.at(i));
+-		}
+-	}
+-
+-	return currFileList;
+-}
+-
+-void CrashMonitor::getCrashed(void)
+-{
+-	/*
+-	* ToDo : Qt 监控到目录下文件变化 , 但此时 coredump 并没有将 core 信息记录到日志中 ,
+-	* 导致执行脚本时查询不到对应的崩溃信息
+-	*/
+-	sleep(3);
+-
+-	QList<QString> newFileList = getNewFile();
+-
+-	/* 刷新文件列表 */
+-	m_fileList = listFiles();
+-
+-	for (int i = 0; i < newFileList.size(); i++) {
+-		QList<QString> itemList = newFileList.at(i).split('.');
+-		if (itemList.size() == 7) {
+-			pid_t pid = itemList.at(4).toUInt();
+-			if (pid != 0) {
+-				qInfo() << "crash detected, pid is: " << pid;
+-				Q_EMIT crashed(pid);
+-			}
+-		}
+-	}
+-}
+-
+-}
+\ No newline at end of file
+diff --git a/daemons/monitor/crash-monitor.h b/daemons/monitor/crash-monitor.h
+deleted file mode 100644
+index 2c6344a..0000000
+--- a/daemons/monitor/crash-monitor.h
++++ /dev/null
+@@ -1,58 +0,0 @@
+-/*
+- * kylin-os-manager
+- *
+- * Copyright (C) 2022, KylinSoft 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 of the License, 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 <https://www.gnu.org/licenses/>.
+- */
+-
+-#ifndef CRASH_MONITOR_H
+-#define CRASH_MONITOR_H
+-
+-#include <unistd.h>
+-
+-#include <QFileSystemWatcher>
+-#include <QString>
+-#include <QList>
+-
+-namespace crash
+-{
+-
+-class CrashMonitor : public QObject
+-{
+-	Q_OBJECT
+-
+-public:
+-	CrashMonitor(QObject *parent = nullptr);
+-	~CrashMonitor();
+-
+-	void setMonitor(bool state);
+-
+-Q_SIGNALS:
+-	void crashed(pid_t pid);
+-
+-private Q_SLOTS:
+-	void getCrashed(void);
+-
+-private:
+-	QList<QString> getNewFile(void);
+-	QList<QString> listFiles(void);
+-
+-	QFileSystemWatcher *m_fileSystemMonitor;
+-	QList<QString> m_fileList;
+-};
+-
+-}
+-
+-#endif
+\ No newline at end of file
+diff --git a/daemons/monitor/data/com.kylin-os-manager-monitor.service b/daemons/monitor/data/com.kylin-os-manager-monitor.service
+deleted file mode 100644
+index 5c1814f..0000000
+--- a/daemons/monitor/data/com.kylin-os-manager-monitor.service
++++ /dev/null
+@@ -1,13 +0,0 @@
+-[Unit]
+-Description=kylin os manager monitor
+-
+-[Service]
+-Type=simple
+-User=root
+-Group=root
+-ExecStart=/usr/bin/kylin-os-manager-monitor
+-Restart=on-failure
+-RestartSec=5
+-
+-[Install]
+-WantedBy=multi-user.target
+diff --git a/daemons/monitor/data/komd.crash.gschema.xml b/daemons/monitor/data/komd.crash.gschema.xml
+deleted file mode 100644
+index 565658a..0000000
+--- a/daemons/monitor/data/komd.crash.gschema.xml
++++ /dev/null
+@@ -1,15 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<schemalist gettext-domain="komd-crash">
+-	<schema id="komd.crash.upload" path="/komd/crash/upload/">
+-		<key type="b" name="buried-point">
+-			<default>false</default>
+-			<summary>upload data by buried point interface</summary>
+-			<description>upload data by buried point interface</description>
+-		</key>
+-		<key type="b" name="control-log">
+-			<default>true</default>
+-			<summary>upload data by control log interface</summary>
+-			<description>upload data by control log interface</description>
+-		</key>
+-	</schema>
+-</schemalist>
+\ No newline at end of file
+diff --git a/daemons/monitor/main.cpp b/daemons/monitor/main.cpp
+deleted file mode 100644
+index f9b5de0..0000000
+--- a/daemons/monitor/main.cpp
++++ /dev/null
+@@ -1,105 +0,0 @@
+-/*
+- * kylin-os-manager
+- *
+- * Copyright (C) 2022, KylinSoft 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 of the License, 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 <https://www.gnu.org/licenses/>.
+- */
+-
+-#include <QCoreApplication>
+-#include <QThread>
+-#include <QDir>
+-#include <QDebug>
+-#include <libkylog.h>
+-#include "crash-collect.h"
+-#include "systemmonitor.h"
+-#include "kom_buriedpoint.h"
+-#include "obtainsysteminformation.h"
+-
+-static void logOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
+-{
+-    QByteArray localMsg = msg.toLocal8Bit();
+-    const char *message = localMsg.constData();
+-    const char *file = context.file ? context.file : "";
+-    const char *func = context.function ? context.function : "";
+-
+-    switch (type) {
+-    case QtDebugMsg:
+-        klog_debug("%s (%s:%u,%s)\n", message, file, context.line, func);
+-        break;
+-    case QtInfoMsg:
+-        klog_info("%s (%s:%u,%s)\n", message, file, context.line, func);
+-        break;
+-    case QtWarningMsg:
+-        klog_warning("%s (%s:%u,%s)\n", message, file, context.line, func);
+-        break;
+-    case QtCriticalMsg:
+-        klog_err("%s (%s:%u,%s)\n", message, file, context.line, func);
+-        break;
+-    case QtFatalMsg:
+-        klog_emerg("%s (%s:%u,%s)\n", message, file, context.line, func);
+-        break;
+-    default:
+-        break;
+-    }
+-}
+-
+-void countPeople()
+-{
+-
+-    QFile file("/etc/machine-id");
+-    if (!file.open(QIODevice::ReadOnly)) {
+-        qDebug() << "打开 /etc/machine-id 失败 !";
+-        return;
+-    }
+-    QString machine = file.readAll();
+-    file.close();
+-    if (machine.isEmpty()) {
+-        qDebug() << "读取 /etc/machine-id 失败 !";
+-        return;
+-    }
+-    kom::BuriedPoint::uploadMessage(kom::BuriedPoint::BuriedPointPage::kMonitorService,
+-                                    kom::BuriedPoint::EventCode::kMonitorMachineId,
+-                                    {{"machineId", machine}});
+-}
+-
+-int main(int argc, char *argv[])
+-{
+-#ifndef DEBUG_MODE
+-    qInstallMessageHandler(logOutput);
+-#endif
+-
+-    QCoreApplication app(argc, argv);
+-
+-    countPeople();             //统计使用率埋点
+-    ObtainSystemInformation(); //采集系统信息
+-
+-    QDir dir("/usr/share/kylin-os-manager/komd-crash/");
+-    if (!dir.exists())
+-        if (!dir.mkpath("/usr/share/kylin-os-manager/komd-crash/"))
+-            qCritical() << "create komd-crash cache dir fail !";
+-
+-    QThread *crashThread = new QThread(&app);
+-    crash::CrashCollect *crashCollect = new crash::CrashCollect;
+-    QObject::connect(crashThread, &QThread::started, crashCollect, &crash::CrashCollect::on_run);
+-    QObject::connect(crashThread, &QThread::finished, crashCollect, &crash::CrashCollect::deleteLater);
+-    crashCollect->moveToThread(crashThread);
+-    crashThread->start();
+-
+-    systemmonitor::SystemMonitor::getInstance();
+-
+-    countPeople();
+-
+-    return app.exec();
+-}
+diff --git a/daemons/monitor/obtainsysteminformation.cpp b/daemons/monitor/obtainsysteminformation.cpp
+deleted file mode 100644
+index 20349b0..0000000
+--- a/daemons/monitor/obtainsysteminformation.cpp
++++ /dev/null
+@@ -1,306 +0,0 @@
+-#include "obtainsysteminformation.h"
+-#include <QProcess>
+-#include <QMap>
+-#include <QFile>
+-#include <QDebug>
+-
+-#define SYSTEM_INFOMATION_FILE_PATH "/etc/kylin-os-manager/systemInformation.txt"
+-
+-ObtainSystemInformation::ObtainSystemInformation()
+-{
+-    start();
+-}
+-
+-void ObtainSystemInformation::start()
+-{
+-    QProcess proc;
+-    QList<SystemInfo> list;
+-    QByteArray tmp;
+-    QString cmd;
+-    int num = 0;
+-    int cycle = 0;
+-
+-    proc.start("export LANGUAGE=en");
+-    proc.waitForFinished();
+-
+-    cmd = "dmidecode -t system |grep Manufacturer";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    tmp = tmp.replace("\n", "");
+-    list.append(SystemInfo("整机制造商", tmp.split(':').last().replace(" ", "")));
+-
+-    cmd = "dmidecode -t system |grep Product";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    tmp = tmp.replace("\n", "");
+-    list.append(SystemInfo("整机型号", tmp.split(':').last().replace(" ", "")));
+-
+-    cmd = "dmidecode -t system |grep Serial";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    tmp = tmp.replace("\n", "");
+-    list.append(SystemInfo("序列号", tmp.split(':').last().replace(" ", "")));
+-
+-    cmd = "python /usr/share/kylin-os-manager/script/architecture.py";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    tmp = tmp.replace("\n", "");
+-    tmp = tmp.replace("'", "");
+-    tmp = tmp.replace("(", "");
+-    tmp = tmp.replace(")", "");
+-    tmp = tmp.replace(",", "");
+-    tmp = tmp.replace(" ", "");
+-    list.append(SystemInfo("系统位数", tmp));
+-
+-    cmd = "python /usr/share/kylin-os-manager/script/machine.py";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    tmp = tmp.replace("\n", "");
+-    tmp = tmp.replace("'", "");
+-    tmp = tmp.replace("(", "");
+-    tmp = tmp.replace(")", "");
+-    tmp = tmp.replace(",", "");
+-    tmp = tmp.replace(" ", "");
+-    list.append(SystemInfo("内核架构", tmp));
+-
+-    cmd = "python /usr/share/kylin-os-manager/script/node.py";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    tmp = tmp.replace("\n", "");
+-    tmp = tmp.replace("'", "");
+-    tmp = tmp.replace("(", "");
+-    tmp = tmp.replace(")", "");
+-    tmp = tmp.replace(",", "");
+-    tmp = tmp.replace(" ", "");
+-    list.append(SystemInfo("主机名", tmp));
+-
+-    cmd = "cat /etc/os-release |grep PRETTY_NAME";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    tmp = tmp.replace("\n", "");
+-    tmp = tmp.replace("\"", "");
+-    tmp = tmp.split('=').last();
+-    list.append(SystemInfo("操作系统版本", tmp));
+-
+-    cmd = "python /usr/share/kylin-os-manager/script/release.py";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    tmp = tmp.replace("\n", "");
+-    tmp = tmp.replace("'", "");
+-    tmp = tmp.replace("(", "");
+-    tmp = tmp.replace(")", "");
+-    tmp = tmp.replace(",", "");
+-    tmp = tmp.replace(" ", "");
+-    list.append(SystemInfo("内核版本", tmp));
+-
+-    cmd = "export LANGUAGE=en;lscpu | grep 'Model name:'";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    tmp = tmp.replace("\n", "");
+-    tmp = tmp.replace("Model name:", "");
+-    if (!tmp.isEmpty()) {
+-        while (tmp.at(0) == ' ') {
+-            tmp = tmp.mid(1);
+-        }
+-    }
+-    list.append(SystemInfo("处理器", tmp));
+-
+-    cmd = "dmidecode -t memory";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    QString mem;
+-    num = 0;
+-    QString memSize = "";
+-    QString memType = "";
+-    QString memManufacturer = "";
+-    for (QString str : QString(tmp).split("\n")) {
+-        if (cycle == 0 && str.contains("Memory Device")) {
+-            cycle = 1;
+-            num++;
+-            if (num > 1) {
+-                mem += "  |  ";
+-            }
+-        }
+-        if (cycle == 1 && str.contains("Size:")) {
+-            memSize = str.split("Size:").last();
+-            memSize.replace("\n", "");
+-            memSize.replace(" ", "");
+-            if (memSize.contains("MB")) {
+-                memSize.chop(2);
+-                memSize = QString::number(memSize.toInt() / 1024) + "GB";
+-            }
+-        }
+-        if (cycle == 1 && str.contains("Manufacturer:")) {
+-            memManufacturer = str.split("Manufacturer:").last();
+-        }
+-        if (cycle == 1 && str.contains("Type:")) {
+-            memType = str.split("Type:").last();
+-        }
+-        if (cycle == 1 && str.contains("Configured Memory Speed:")) {
+-            cycle = 0;
+-            mem += memSize + memManufacturer + memType + str.split("Configured Memory Speed:").last();
+-        }
+-    }
+-    list.append(SystemInfo("内存", mem));
+-
+-    cmd = "dmidecode -t baseboard |grep 'Product Name:'";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    tmp = tmp.replace("\n", "");
+-    list.append(SystemInfo("主板", tmp.split(':').last().replace(" ", "")));
+-
+-    cmd = "lshw -C disk";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    QString disk;
+-    QString diskOne = "";
+-    num = 0;
+-    cycle = 0;
+-    for (QString str : QString(tmp).split("\n")) {
+-        if (cycle == 0 && str.contains("*-disk")) {
+-            cycle = 1;
+-            num++;
+-            if (num > 1) {
+-                disk += "  |  ";
+-            }
+-        }
+-        if (cycle == 1 && str.contains("product:")) {
+-            cycle = 2;
+-            diskOne = str.split("product:").last().simplified();
+-        }
+-        if (cycle == 2 && str.contains("size:")) {
+-            cycle = 0;
+-            QString deviceSize = str.split("(").last();
+-            if (!deviceSize.isEmpty()) {
+-                diskOne += "(" + deviceSize;
+-                disk += diskOne;
+-            }
+-        }
+-    }
+-    list.append(SystemInfo("硬盘", disk));
+-
+-    cmd = "lshw -C display |grep 'product:'";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    QString dispaly;
+-    num = 0;
+-    for (QString byt : QString(tmp).split('\n')) {
+-        if (byt.isEmpty()) {
+-            continue;
+-        }
+-        num++;
+-        if (num > 1) {
+-            dispaly += "  |  ";
+-        }
+-        dispaly += byt.split("product:").last().simplified();
+-    }
+-    list.append(SystemInfo("显卡", dispaly));
+-
+-    cmd = "hwinfo --monitor |grep Model:";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    QString monitor;
+-    num = 0;
+-    for (QString byt : QString(tmp).split('\n')) {
+-        if (byt.isEmpty()) {
+-            continue;
+-        }
+-        num++;
+-        if (num > 1) {
+-            monitor += "  |  ";
+-        }
+-        monitor += byt.split("Model:").last().simplified();
+-    }
+-    monitor = monitor.replace("\"", "");
+-    list.append(SystemInfo("显示器", monitor));
+-
+-    cmd = "lshw -C network";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    QString net;
+-    QString netProduct;
+-    num = 0;
+-    cycle = 0;
+-    for (QString str : QString(tmp).split("\n")) {
+-        if (cycle == 0 && str.contains("*-network")) {
+-            cycle = 1;
+-            num++;
+-            netProduct = "";
+-            if (num > 1) {
+-                net += "  |  ";
+-            }
+-        }
+-        if (cycle == 1 && str.contains("product:")) {
+-            netProduct = str.split("product:").last().simplified();
+-        }
+-        if (cycle == 1 && str.contains("logical name:")) {
+-            cycle = 0;
+-            net += str.split("logical name:").last().simplified();
+-            if (!netProduct.isEmpty()) {
+-                net += "(" + netProduct + ")";
+-            }
+-        }
+-    }
+-    list.append(SystemInfo("网卡", net));
+-
+-    cmd = "hwinfo --sound |grep Device:";
+-    proc.start("bash -c \"" + cmd + "\"");
+-    proc.waitForFinished();
+-    tmp = proc.readAllStandardOutput();
+-    QString audio;
+-    num = 0;
+-    for (QString byt : QString(tmp).split('\n')) {
+-        if (byt.isEmpty() || !byt.contains("\"")) {
+-            continue;
+-        }
+-        num++;
+-        if (num > 1) {
+-            audio += "  |  ";
+-        }
+-        QStringList tmpList = byt.split("\"");
+-        tmpList.removeAll("");
+-        audio += tmpList.last();
+-    }
+-    list.append(SystemInfo("声卡", audio));
+-
+-    save(list);
+-}
+-
+-void ObtainSystemInformation::save(QList<SystemInfo> list)
+-{
+-    if (list.isEmpty()) {
+-        qDebug() << "ObtainSystemInformation:整机信息为空";
+-        return;
+-    }
+-    QFile file(SYSTEM_INFOMATION_FILE_PATH);
+-    if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) {
+-        qDebug() << "ObtainSystemInformation:打开文件失败";
+-        return;
+-    }
+-    qDebug() << "ObtainSystemInformation:数据行数 " << list.length();
+-    for (SystemInfo info : list) {
+-        QString left = info.first;
+-        //        if (left.length() < 4) {
+-        //            left += "\t";
+-        //        }
+-        QString w = left + "\t" + info.second + "\n";
+-        file.write(w.toLocal8Bit());
+-    }
+-    qDebug() << "ObtainSystemInformation:写入完成";
+-    file.close();
+-}
+diff --git a/daemons/monitor/obtainsysteminformation.h b/daemons/monitor/obtainsysteminformation.h
+deleted file mode 100644
+index 580bf8e..0000000
+--- a/daemons/monitor/obtainsysteminformation.h
++++ /dev/null
+@@ -1,19 +0,0 @@
+-#ifndef OBTAINSYSTEMINFORMATION_H
+-#define OBTAINSYSTEMINFORMATION_H
+-
+-#include <QObject>
+-
+-typedef QPair<QString, QString> SystemInfo;
+-
+-class ObtainSystemInformation : public QObject
+-{
+-    Q_OBJECT
+-public:
+-    ObtainSystemInformation();
+-
+-private slots:
+-    void start();
+-    void save(QList<SystemInfo> list);
+-};
+-
+-#endif // OBTAINSYSTEMINFORMATION_H
+diff --git a/daemons/monitor/systemmonitor.cpp b/daemons/monitor/systemmonitor.cpp
+deleted file mode 100644
+index 569c701..0000000
+--- a/daemons/monitor/systemmonitor.cpp
++++ /dev/null
+@@ -1,325 +0,0 @@
+-#include <unistd.h>
+-#include <fcntl.h>
+-#include <glibtop.h>
+-#include <glibtop/mem.h>
+-#include <glibtop/swap.h>
+-#include <glibtop/proctime.h>
+-#include <glibtop/proclist.h>
+-#include <glibtop/procmem.h>
+-#include <glibtop/procargs.h>
+-#include <glibtop/procuid.h>
+-#include <glibtop/procstate.h>
+-#include <glibtop/sysinfo.h>
+-#include <QDebug>
+-#include <QFile>
+-#include <QDir>
+-#include <QDateTime>
+-#include <QStandardPaths>
+-#include <QTimer>
+-#include "systemmonitor.h"
+-
+-#ifndef DEBUG_MODE
+-QString OUTPUT_FILE_PATH = "/var/log/kylin-os-manager/systemMonitor/";
+-#else
+-QString OUTPUT_FILE_PATH = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/";
+-#endif
+-
+-using namespace systemmonitor;
+-
+-SystemMonitor *SystemMonitor::m_systemMonitor = nullptr;
+-SystemMonitor *SystemMonitor::getInstance()
+-{
+-    if (m_systemMonitor == nullptr) {
+-        m_systemMonitor = new SystemMonitor();
+-    }
+-    return m_systemMonitor;
+-}
+-
+-QString SystemMonitor::getConf() const
+-{
+-    QString str;
+-    str += QString(CONFIG_DAEMON_SYSTEM_MONITOR_TIMER) + ":" + QString::number(*m_timer);
+-    str += "\n" + QString(CONFIG_DAEMON_SYSTEM_MONITOR_CPU) + ":" + QString::number(*m_cpuThreshold);
+-    str += "\n" + QString(CONFIG_DAEMON_SYSTEM_MONITOR_MEMORY) + ":" + QString::number(*m_memoryThreshold);
+-    return str;
+-}
+-
+-void SystemMonitor::setTimer(int t)
+-{
+-    if (t < 1) {
+-        return;
+-    }
+-    *m_timer = t;
+-    m_setting->setValue(CONFIG_DAEMON_SYSTEM_MONITOR, CONFIG_DAEMON_SYSTEM_MONITOR_TIMER, t);
+-}
+-
+-void SystemMonitor::setCpuThreshold(int c)
+-{
+-    if (c < 1) {
+-        return;
+-    }
+-    *m_cpuThreshold = c;
+-    m_setting->setValue(CONFIG_DAEMON_SYSTEM_MONITOR, CONFIG_DAEMON_SYSTEM_MONITOR_CPU, c);
+-}
+-
+-void SystemMonitor::setMemoryThreshold(int m)
+-{
+-    if (m < 1) {
+-        return;
+-    }
+-    *m_memoryThreshold = m;
+-    m_setting->setValue(CONFIG_DAEMON_SYSTEM_MONITOR, CONFIG_DAEMON_SYSTEM_MONITOR_MEMORY, m);
+-}
+-
+-void SystemMonitor::outputChange(bool b)
+-{
+-    m_setting->setValue(CONFIG_DAEMON_SYSTEM_MONITOR, CONFIG_DAEMON_SYSTEM_MONITOR_OUTPUT, b);
+-}
+-
+-SystemMonitor::SystemMonitor()
+-{
+-
+-    m_setting = new kom::Configure();
+-    m_timer = new int(0);
+-    m_cpuThreshold = new int(0);
+-    m_memoryThreshold = new int(0);
+-    *m_timer = m_setting->value(CONFIG_DAEMON_SYSTEM_MONITOR, CONFIG_DAEMON_SYSTEM_MONITOR_TIMER).toInt();
+-    if (*m_timer < 1) {
+-        *m_timer = 120;
+-    }
+-    *m_cpuThreshold = m_setting->value(CONFIG_DAEMON_SYSTEM_MONITOR, CONFIG_DAEMON_SYSTEM_MONITOR_CPU).toInt();
+-    if (*m_cpuThreshold < 1) {
+-        *m_cpuThreshold = 80;
+-    }
+-    *m_memoryThreshold = m_setting->value(CONFIG_DAEMON_SYSTEM_MONITOR, CONFIG_DAEMON_SYSTEM_MONITOR_MEMORY).toInt();
+-    if (*m_memoryThreshold < 1) {
+-        *m_memoryThreshold = 80;
+-    }
+-    m_output = m_setting->value(CONFIG_DAEMON_SYSTEM_MONITOR, CONFIG_DAEMON_SYSTEM_MONITOR_OUTPUT).toBool();
+-    Conf c(m_timer, m_cpuThreshold, m_memoryThreshold, m_output);
+-    m_monitor = new Monitor(c);
+-    connect(m_monitor, &Monitor::outputChange, this, &SystemMonitor::outputChange);
+-    m_monitor->start();
+-}
+-
+-Monitor::Monitor(Conf c)
+-{
+-    if (!QDir().mkpath(OUTPUT_FILE_PATH)) {
+-        qDebug() << "creat path error:" << OUTPUT_FILE_PATH;
+-    }
+-    glibtop_init();
+-    m_timer = c.timer;
+-    m_cpuThreshold = c.cpuThreshold;
+-    m_memoryThreshold = c.memoryThreshold;
+-    m_output = c.output;
+-    m_cpunum = getCpuCount();
+-}
+-
+-void Monitor::holdOn()
+-{
+-    sleep(1);
+-}
+-
+-bool Monitor::PassDetection()
+-{
+-    //系统内存占用情况
+-    glibtop_mem memTotal;
+-    glibtop_get_mem(&memTotal);
+-    m_memProportion = double(memTotal.used) / double(memTotal.total) * 100.0;
+-    //系统cpu占用情况
+-    glibtop_cpu cpuTotalLast;
+-    glibtop_get_cpu(&cpuTotalLast);
+-    holdOn();
+-    glibtop_get_cpu(&m_cpuTotal);
+-    double cpuProportion =
+-        (1.0 - double(m_cpuTotal.idle - cpuTotalLast.idle) / double(m_cpuTotal.total - cpuTotalLast.total)) * 100;
+-    qDebug() << "men:" << m_memProportion << " cpu:" << cpuProportion;
+-    //未达到阈值则等待下一次循环
+-    if (m_memProportion < *m_memoryThreshold && cpuProportion < *m_cpuThreshold) {
+-        return true;
+-    }
+-#ifdef DEBUG_MODE
+-    qDebug() << "检测到异常!";
+-#endif
+-    return false;
+-}
+-
+-void Monitor::getProcInfo(MonitorInfoList *monitorInfoList, QMap<pid_t, quint64> *mapCpuTimes, pid_t pidCur,
+-                          quint64 totalDifference)
+-{
+-    MonitorInfo info;
+-    info.mypid = pidCur;
+-    //获取进程状态
+-    glibtop_proc_state gpstate;
+-    glibtop_get_proc_state(&gpstate, pidCur);
+-    info.processor = gpstate.processor;
+-    info.state = gpstate.state;
+-    info.cmd = gpstate.cmd;
+-    //            //获取进程参数
+-    //            glibtop_proc_args arg;
+-    //            char **args = glibtop_get_proc_argv(&arg, pidCur, 0);
+-    //            if (args) {
+-    //                if (arg.size > 0) {
+-    //                    info.cmd = args[0];
+-    //                }
+-    //                g_strfreev(args);
+-    //                args = NULL;
+-    //            }
+-    //获取进程信息
+-    glibtop_proc_uid gpuid;
+-    glibtop_get_proc_uid(&gpuid, pidCur);
+-    info.ppid = gpuid.ppid;
+-    info.gid = gpuid.gid;
+-    info.nice = gpuid.nice;
+-    //获取进程内存占用
+-    glibtop_proc_mem gpmem;
+-    glibtop_get_proc_mem(&gpmem, pidCur);
+-    info.memory = gpmem.resident;
+-    //获取进程时间
+-    glibtop_proc_time proctime;
+-    glibtop_get_proc_time(&proctime, pidCur);
+-    info.start_time = proctime.start_time;
+-    //获取进程cpu占用
+-    quint64 lluProcessTime = proctime.stime + proctime.utime;
+-    quint64 lastProcessTime = mapCpuTimes->value(pidCur);
+-    quint64 difference = lluProcessTime - lastProcessTime;
+-    double cpu_scale = 100 * m_cpunum;
+-    double sPcpu = (double)difference * cpu_scale / double(totalDifference);
+-    sPcpu = MIN(sPcpu, cpu_scale);
+-    info.cpu = sPcpu;
+-    //放入队列
+-    monitorInfoList->append(info);
+-}
+-
+-void Monitor::run()
+-{
+-    //系统内存占用情况
+-    glibtop_mem memTotal;
+-    glibtop_get_mem(&memTotal);
+-    m_memTotal = QString::number(memTotal.total / 1024 / 1024) + "M";
+-
+-    QTimer timer;
+-    timer.setInterval(0);
+-    connect(&timer, &QTimer::timeout, [&]() {
+-        timer.setInterval(*m_timer * 1000);
+-
+-        if (PassDetection()) {
+-            return;
+-        }
+-
+-        QMap<pid_t, quint64> mapCpuTimes;
+-        //获取pid列表
+-        glibtop_proclist proclist;
+-        pid_t *pid_list = glibtop_get_proclist(&proclist, 0, 0);
+-        std::sort(pid_list, pid_list + proclist.number);
+-        //获取cpu占用基础值(对比用)
+-        for (quint64 i = 0; i < proclist.number; ++i) {
+-            pid_t pidCur = pid_list[i];
+-            glibtop_proc_time proctime;
+-            glibtop_get_proc_time(&proctime, pidCur);
+-            quint64 lluProcessTime = proctime.stime + proctime.utime;
+-            mapCpuTimes[pidCur] = lluProcessTime;
+-        }
+-        holdOn();
+-        //系统cpu占用情况
+-        glibtop_cpu cpuTotalLast = m_cpuTotal;
+-        glibtop_get_cpu(&m_cpuTotal);
+-        quint64 totalDifference = MAX(m_cpuTotal.total - cpuTotalLast.total, 1);
+-        double cpuProportion = (1.0 - double(m_cpuTotal.idle - cpuTotalLast.idle) / totalDifference) * 100;
+-        //获取各进程信息
+-        MonitorInfoList monitorInfoList;
+-        for (quint64 i = 0; i < proclist.number; ++i) {
+-            pid_t pidCur = pid_list[i];
+-            getProcInfo(&monitorInfoList, &mapCpuTimes, pidCur, totalDifference);
+-        }
+-        g_free(pid_list);
+-        saveToFile(cpuProportion, m_memProportion, monitorInfoList);
+-    });
+-    timer.start();
+-
+-    exec();
+-}
+-
+-int Monitor::getCpuCount()
+-{
+-    const glibtop_sysinfo *info = glibtop_get_sysinfo();
+-    int ncpu = info->ncpu;
+-    if (ncpu < 1) {
+-        qDebug() << "获取cpu个数失败!";
+-        ncpu = 1;
+-    }
+-    return ncpu;
+-}
+-
+-void Monitor::saveToFile(int cpuInt, int memInt, const MonitorInfoList &list)
+-{
+-    QString fileName;
+-    QString fileName1 = QString(OUTPUT_FILE_PATH) + "log.1";
+-    QString fileName2 = QString(OUTPUT_FILE_PATH) + "log.2";
+-    if (m_output) {
+-        fileName = fileName2;
+-    } else {
+-        fileName = fileName1;
+-    }
+-    QIODevice::OpenModeFlag flag = QIODevice::Append;
+-    if (QFileInfo(fileName).size() > 1024 * 1024) {
+-        m_output = !m_output;
+-        if (m_output) {
+-            fileName = fileName2;
+-        } else {
+-            fileName = fileName1;
+-        }
+-        flag = QIODevice::Truncate;
+-        emit outputChange(m_output);
+-    };
+-    QString nowTime = QDateTime::currentDateTime().toString("yyyy-MM-dd.hh:mm:ss");
+-    QFile file(fileName);
+-    if (!file.open(QIODevice::WriteOnly | flag)) {
+-        qDebug() << "打开文件失败:" << fileName << nowTime;
+-        return;
+-    }
+-    QByteArray interlayer = " | ";
+-    QByteArray arr;
+-#ifdef DEBUG_MODE
+-    qDebug() << "写入文件:" << fileName << nowTime;
+-#endif
+-    if (list.isEmpty()) {
+-        arr.append(nowTime + interlayer + "cpu:" + QByteArray::number(cpuInt) + "%  mem:" + QByteArray::number(memInt)
+-                   + "%\n");
+-        file.write(arr);
+-        file.close();
+-        return;
+-    }
+-    arr = "===================" + nowTime.toLocal8Bit() + "===================\n";
+-
+-    arr.append("cpuNum:" + QString::number(int(m_cpunum)) + "  cpu:" + QByteArray::number(cpuInt)
+-               + "%     memTotal:" + m_memTotal + "  mem:" + QByteArray::number(memInt) + "%\n");
+-    arr.append("_________________________________________________________\n");
+-    arr.append(format("PID") + interlayer + format("PPID") + interlayer + format("CPU") + interlayer + format("RES")
+-               + interlayer + format("CMD") + "\n");
+-    for (const MonitorInfo &info : list) {
+-        unsigned cpuIntTmp = info.cpu;
+-        unsigned memIntTmp = info.memory / 1024 / 1024;
+-        if (cpuIntTmp == 0 && memIntTmp == 0) {
+-            continue;
+-        }
+-        arr.append(format(QByteArray::number(info.mypid)));
+-        arr.append(interlayer + format(QByteArray::number(info.ppid)));
+-        arr.append(interlayer + format(QByteArray::number(cpuIntTmp) + "%"));
+-        arr.append(interlayer + format(QByteArray::number(memIntTmp) + "M"));
+-        arr.append(interlayer + info.cmd);
+-        arr.append("\n");
+-    }
+-    arr.append("_________________________________________________________\n");
+-    file.write(arr);
+-    file.close();
+-}
+-
+-QString Monitor::format(const QString &str, int f)
+-{
+-    QString tmp = str;
+-    while (tmp.length() < f) {
+-        tmp += " ";
+-    }
+-    return tmp;
+-}
+diff --git a/daemons/monitor/systemmonitor.h b/daemons/monitor/systemmonitor.h
+deleted file mode 100644
+index d0ccc0a..0000000
+--- a/daemons/monitor/systemmonitor.h
++++ /dev/null
+@@ -1,91 +0,0 @@
+-#ifndef SYSTEMMONITOR_H
+-#define SYSTEMMONITOR_H
+-
+-#include <QObject>
+-#include <QThread>
+-#include <QDBusConnection>
+-#include <glibtop/cpu.h>
+-#include "kom-configure.h"
+-namespace systemmonitor
+-{
+-
+-struct Conf
+-{
+-    Conf(int *t, int *c, int *m, bool o) : timer(t), cpuThreshold(c), memoryThreshold(m), output(o) {}
+-    int *timer;
+-    int *cpuThreshold;
+-    int *memoryThreshold;
+-    bool output;
+-};
+-
+-class MonitorConf
+-{
+-protected:
+-    int *m_timer = nullptr;
+-    int *m_cpuThreshold = nullptr;
+-    int *m_memoryThreshold = nullptr;
+-    bool m_output;
+-};
+-
+-struct MonitorInfo
+-{
+-    QByteArray cmd;
+-    pid_t mypid;
+-    double cpu;
+-    quint64 memory;
+-    unsigned state;     // process state
+-    pid_t ppid;         // parent process
+-    pid_t gid;          // process group id
+-    quint64 start_time; // start time since system boot in clock ticks
+-    quint64 processor;  // cpu number
+-    quint64 nthreads;   // number of threads
+-    int nice;           // process nice
+-};
+-typedef QList<MonitorInfo> MonitorInfoList;
+-
+-
+-class Monitor : public QThread, public MonitorConf
+-{
+-    Q_OBJECT
+-signals:
+-    void outputChange(bool);
+-
+-public:
+-    Monitor(Conf c);
+-    void run();
+-
+-private:
+-    int getCpuCount();
+-    void holdOn();
+-    void saveToFile(int cpuInt, int memInt, const MonitorInfoList &list = MonitorInfoList());
+-    QString format(const QString &str, int f = 7);
+-    bool PassDetection();
+-    void getProcInfo(MonitorInfoList *monitorInfoList, QMap<pid_t, quint64> *mapCpuTimes, pid_t pidCur, quint64 totalDifference);
+-    glibtop_cpu m_cpuTotal;
+-    double m_cpunum;
+-    double m_memProportion;
+-    QString m_memTotal;
+-};
+-
+-class SystemMonitor : public QObject, public MonitorConf
+-{
+-    Q_OBJECT
+-public:
+-    static SystemMonitor *getInstance();
+-
+-public slots:
+-    QString getConf() const;
+-    void setTimer(int t);
+-    void setCpuThreshold(int c);
+-    void setMemoryThreshold(int m);
+-private slots:
+-    void outputChange(bool b);
+-
+-private:
+-    SystemMonitor();
+-    static SystemMonitor *m_systemMonitor;
+-    Monitor *m_monitor = nullptr;
+-    kom::Configure *m_setting = nullptr;
+-};
+-} // namespace systemmonitor
+-#endif // SYSTEMMONITOR_H
+diff --git a/daemons/service/CMakeLists.txt b/daemons/service/CMakeLists.txt
+index eaf47e7..c5ab436 100644
+--- a/daemons/service/CMakeLists.txt
++++ b/daemons/service/CMakeLists.txt
+@@ -162,7 +162,8 @@ endfunction()
+ 
+ find_kysdk_package(${PROJECT_NAME} kysdk-log)
+ find_kysdk_package(${PROJECT_NAME} kysdk-diagnostics)
+-#find_kysdk_package(${PROJECT_NAME} kysdk-devicesec)
++# find_kysdk_package(${PROJECT_NAME} kysdk-devicesec)
++find_kysdk_package(${PROJECT_NAME} kysdk-system)
+ 
+ install(TARGETS ${PROJECT_NAME} DESTINATION /usr/bin/)
+ install(FILES ${SERVICE_DIR}/data/com.kylin-os-manager.service DESTINATION /lib/systemd/system/)
+diff --git a/daemons/service/data/com.kylin-os-manager.conf b/daemons/service/data/com.kylin-os-manager.conf
+index 244248b..2f45e06 100644
+--- a/daemons/service/data/com.kylin-os-manager.conf
++++ b/daemons/service/data/com.kylin-os-manager.conf
+@@ -9,19 +9,25 @@
+         <allow own="com.kylin-os-manager"/>
+         <allow send_interface="tool.tool"/>
+         <allow send_interface="systemmonitor.systemmonitor"/>
++        <allow send_interface="com.KylinOsManager.JunkClean"/>
++        <allow send_interface="com.KylinOsManager.ToolBox"/>
+     </policy>
+-    
++
+     <!-- Allow anyone to invoke methods on the interfaces -->
+     <policy context="default">
+-    <allow send_destination="com.kylin-os-manager"
+-           send_interface="tool.tool"/>
++        <allow send_destination="com.kylin-os-manager"
++               send_interface="tool.tool"/>
+ 	    <allow send_destination="com.kylin-os-manager"
+-           send_interface="systemmonitor.systemmonitor"/>
++               send_interface="systemmonitor.systemmonitor"/>
++        <allow send_destination="com.kylin-os-manager"
++               send_interface="driverinfo.tool"/>
++        <allow send_destination="com.kylin-os-manager"
++               send_interface="com.KylinOsManager.JunkClean"/>
++        <allow send_destination="com.kylin-os-manager"
++               send_interface="com.KylinOsManager.ToolBox"/>
+         <allow send_destination="com.kylin-os-manager"
+-           send_interface="org.freedesktop.DBus.Introspectable"/>
++               send_interface="org.freedesktop.DBus.Introspectable"/>
+         <allow send_destination="com.kylin-os-manager"
+-           send_interface="org.freedesktop.DBus.Properties"/>
+-       <allow send_destination="com.kylin-os-manager"
+-          send_interface="driverinfo.tool"/>
++               send_interface="org.freedesktop.DBus.Properties"/>
+     </policy>
+ </busconfig>
+diff --git a/daemons/service/data/com.kylin-os-manager.limit b/daemons/service/data/com.kylin-os-manager.limit
+index 0156afe..52a8598 100644
+--- a/daemons/service/data/com.kylin-os-manager.limit
++++ b/daemons/service/data/com.kylin-os-manager.limit
+@@ -2,3 +2,5 @@
+ key1 = /usr/bin/kylin-os-manager
+ key2 = /usr/bin/hedron-client
+ key3 = /usr/share/kylin-os-manager/treasure-chest/kylin-source-update-tool/kylin-source-update-tool
++key4 = /usr/bin/kylin-software-center-plugin-synchrodata
++key5 = /usr/bin/kylin-software-center-plugin-expand
+\ No newline at end of file
+diff --git a/daemons/service/data/com.kylin-os-manager.limit.verify b/daemons/service/data/com.kylin-os-manager.limit.verify
+index f79b09a..a13013a 100644
+--- a/daemons/service/data/com.kylin-os-manager.limit.verify
++++ b/daemons/service/data/com.kylin-os-manager.limit.verify
+@@ -1 +1 @@
+-51029945c3b4bd482af6d48eba5cec18d40767f6
+\ No newline at end of file
++9ccfe9998c3cdf64a676f4a1268ecff8ac218a3e
+diff --git a/daemons/service/data/com.kylin-os-manager.yaml b/daemons/service/data/com.kylin-os-manager.yaml
+index 989a165..1397b6f 100644
+--- a/daemons/service/data/com.kylin-os-manager.yaml
++++ b/daemons/service/data/com.kylin-os-manager.yaml
+@@ -5,4 +5,4 @@ com:kylin-os-manager:
+       _default: false
+     whitelist:
+       _type: as
+-      _default: '["/usr/bin/kylin-os-manager","/usr/bin/hedron-client","/usr/share/kylin-os-manager/treasure-chest/kylin-source-update-tool/kylin-source-update-tool"]'
++      _default: '["/usr/bin/kylin-os-manager","/usr/bin/hedron-client","/usr/share/kylin-os-manager/treasure-chest/kylin-source-update-tool/kylin-source-update-tool","/usr/bin/kylin-software-center-plugin-synchrodata","/usr/bin/kylin-software-center-plugin-expand"]'
+diff --git a/daemons/service/data/com.kylin.assistant.systemdaemon.limit b/daemons/service/data/com.kylin.assistant.systemdaemon.limit
+index cacbf09..3bccf10 100644
+--- a/daemons/service/data/com.kylin.assistant.systemdaemon.limit
++++ b/daemons/service/data/com.kylin.assistant.systemdaemon.limit
+@@ -2,3 +2,7 @@
+ key1 = /usr/bin/kylin-os-manager
+ key2 = /usr/bin/hedron-client
+ key3 = /usr/bin/kylin-os-manager-daemon
++key4 = /usr/bin/kylin-id
++key5 = /usr/bin/kylinid-dbus
++key6 = /usr/bin/ukui-control-center
++key7 = /opt/KylinPvt/bin/HTMLReport/export_report_word.py
+\ No newline at end of file
+diff --git a/daemons/service/data/com.kylin.assistant.systemdaemon.limit.verify b/daemons/service/data/com.kylin.assistant.systemdaemon.limit.verify
+index b2de20e..3ca4c78 100644
+--- a/daemons/service/data/com.kylin.assistant.systemdaemon.limit.verify
++++ b/daemons/service/data/com.kylin.assistant.systemdaemon.limit.verify
+@@ -1 +1 @@
+-f03b1004e4524035ab98698e30b302cd7e4ead9a
++ce164e3aa24d8edeac8ab923abfd411dd363cf9b
+diff --git a/daemons/service/data/com.kylin.assistant.systemdaemon.yaml b/daemons/service/data/com.kylin.assistant.systemdaemon.yaml
+index 5fca9f3..bfda53b 100644
+--- a/daemons/service/data/com.kylin.assistant.systemdaemon.yaml
++++ b/daemons/service/data/com.kylin.assistant.systemdaemon.yaml
+@@ -5,4 +5,4 @@ com:kylin:assistant:systemdaemon:
+       _default: false
+     whitelist:
+       _type: as
+-      _default: '["/usr/bin/kylin-os-manager","/usr/bin/hedron-client","/usr/bin/kylin-os-manager-daemon"]'
++      _default: '["/usr/bin/kylin-os-manager","/usr/bin/hedron-client","/usr/bin/kylin-os-manager-daemon","/usr/bin/kylin-id","/usr/bin/kylinid-dbus","/usr/bin/ukui-control-center", "/opt/KylinPvt/bin/HTMLReport/export_report_word.py"]'
+diff --git a/daemons/service/dbus_args.h b/daemons/service/dbus_args.h
+index 33a38b5..c713e4c 100644
+--- a/daemons/service/dbus_args.h
++++ b/daemons/service/dbus_args.h
+@@ -8,15 +8,15 @@ const QString DBUS_SERVICENAME = QString("com.kylin-os-manager");
+ //工具
+ const QString DBUS_PARH_TOOL = QString("/tool");
+ const QString DBUS_INTERFACE_TOOL = QString("tool.tool");
+-//系统监控
+-const QString DBUS_PARH_SYSTEM_MONITOR = QString("/systemmonitor");
+-const QString DBUS_INTERFACE_SYSTEM_MONITOR = QString("systemmonitor.systemmonitor");
+ //驱动信息获取接口
+ const QString DBUS_DRIVER_INFO_TOOL = QString("/driverinfo");
+ const QString DBUS_DRIVER_INFO_INTERFACE_TOOL = QString("driverinfo.tool");
+ //热插拔
+ const QString DBUS_USB_HOT_INFO_TOOL = QString("/usbhot");
+ const QString DBUS_USB_HOT_INFO_INTERFACE_TOOL = QString("usbhot.tool");
++//系统监控
++const QString DBUS_PARH_SYSTEM_MONITOR = QString("/systemmonitor");
++const QString DBUS_INTERFACE_SYSTEM_MONITOR = QString("systemmonitor.systemmonitor");
+ //数据迁移(rsync)
+ const QString DBUS_PARH_DATA_MIGRATION = QString("/datamigration");
+ const QString DBUS_INTERFACE_DATA_MIGRATION = QString("datamigration.datamigration");
+diff --git a/daemons/service/disk_monitor.cpp b/daemons/service/disk_monitor.cpp
+index f24ad01..06eae38 100644
+--- a/daemons/service/disk_monitor.cpp
++++ b/daemons/service/disk_monitor.cpp
+@@ -59,20 +59,6 @@ void DiskMonitor::on_LogFileSizeCheck() {
+         ScanFile(QDir(user_path));
+     }
+ 
+-    // 计算总大小
+-#ifdef ICBC_ENVIRONMENT
+-    quint64 total_size{0};
+-    for (auto iter = log_file_size_.cbegin(); iter != log_file_size_.cend(); iter++) {
+-        total_size += iter.key();
+-    }
+-    auto journal_dir_size = DirSize(QDir("/var/log/journal"));
+-    total_size += journal_dir_size;
+-    if (total_size > LOG_FILE_TOTAL_SIZE_TOPLIMIT) {
+-        EmitLogFileTotalSizeToplimit();
+-        return;
+-    }
+-#endif
+-
+     QList<QString> exception_files;
+     for (auto iter = log_file_size_.cbegin(); iter != log_file_size_.cend(); iter++) {
+         if (iter.key() > LOG_FILE_SIZE_TOPLIMIT) {
+@@ -319,9 +305,7 @@ void DiskMonitor::GenerateSizeExceptionFilesConf(const QList<QString> &exception
+     if (!file.setPermissions(QFileDevice::Permission::ReadOwner |
+                              QFileDevice::Permission::WriteOwner |
+                              QFileDevice::Permission::ReadGroup |
+-                             QFileDevice::Permission::WriteGroup |
+-                             QFileDevice::Permission::ReadOther |
+-                             QFileDevice::Permission::WriteOther))
++                             QFileDevice::Permission::ReadOther))
+     {
+         qWarning() << "Disk monitor set size exception files conf permission fail";
+     }
+@@ -496,4 +480,71 @@ void DiskMonitor::UpdateDiskCapacityExceptionCount() {
+     modify_file.close();
+ }
+ 
++void DiskMonitor::RecordCleanedFiles(QList<QString> cleaned_files) {
++    // 读取配置文件
++    QFile file(SIZE_EXCEPTION_FILES_CONFIG_PATH);
++    if (!file.open(QIODevice::ReadOnly)) {
++        qCritical() << "Disk monitor record cleaned files open conf file fail";
++        return;
++    }
++    const auto data = file.readAll();
++    file.close();
++
++    // 反序列化
++    const auto doc = QJsonDocument::fromJson(data);
++    if (doc.isNull()) {
++        qCritical() << "Disk monitor record cleaned files unmarshal conf fail";
++        return;
++    }
++    if (!doc.isObject()) {
++        qCritical() << "Disk monitor record cleaned files conf file format error";
++        return;
++    }
++
++    auto root = doc.object();
++    if (!root.contains("date") ||
++        !root.contains("exception_files"))
++    {
++        qCritical() << "Disk monitor record cleaned files conf file field miss";
++        return;
++    }
++
++    // 判断配置文件中记录的是否为当日的数据
++    const auto date = QDate::fromString(root.value("date").toString(), "yyyy-MM-dd");
++    const auto current_date = QDate::currentDate();
++    if (date != current_date) {
++        return;
++    }
++
++    if (!root.value("exception_files").isObject()) {
++        qCritical() << "Disk monitor record cleaned files conf file execption_files field format error";
++        return;
++    }
++
++    // 更新数据
++    auto exception_files_obj = root.value("exception_files").toObject();
++    for (const auto &junk: cleaned_files) {
++        if (exception_files_obj.contains(junk)) {
++            exception_files_obj[junk] = true;
++        }
++    }
++
++    // 写入文件
++    root["exception_files"] = exception_files_obj;
++    QJsonDocument modify_doc;
++    modify_doc.setObject(root);
++    const auto modify_data = modify_doc.toJson();
++
++    QFile modify_file(SIZE_EXCEPTION_FILES_CONFIG_PATH);
++    if (!modify_file.open(QIODevice::WriteOnly)) {
++        qCritical() << "Disk monitor record cleaned files write conf file open fail";
++        return;
++    }
++    const auto size = modify_file.write(modify_data);
++    if (size != modify_data.size()) {
++        qWarning() << "Disk monitor record cleaned files write conf file incomplete";
++    }
++    modify_file.close();
++}
++
+ }
+diff --git a/daemons/service/disk_monitor.h b/daemons/service/disk_monitor.h
+index ff12732..e5720a1 100644
+--- a/daemons/service/disk_monitor.h
++++ b/daemons/service/disk_monitor.h
+@@ -3,6 +3,7 @@
+ #include <QString>
+ #include <QDir>
+ #include <QTimer>
++#include <QList>
+ 
+ /*
+  * signal: LogFileTotalSizeToplimit
+@@ -18,6 +19,7 @@ class DiskMonitor: public QObject {
+ public:
+     DiskMonitor(QObject *parent = nullptr);
+     ~DiskMonitor();
++    static void RecordCleanedFiles(QList<QString> cleaned_files);
+ 
+ public Q_SLOTS:
+     void on_Run();
+diff --git a/daemons/service/driver-manager-service/drivermanagerservicedbus.cpp b/daemons/service/driver-manager-service/drivermanagerservicedbus.cpp
+index aa6cbbb..44e48ec 100755
+--- a/daemons/service/driver-manager-service/drivermanagerservicedbus.cpp
++++ b/daemons/service/driver-manager-service/drivermanagerservicedbus.cpp
+@@ -5,7 +5,7 @@
+ #include <QFileInfo>
+ #include "../dbus_args.h"
+ #include "include/globalsignal.h"
+-//#include <libkydevicesec_netcard.h>
++// #include <libkydevicesec_netcard.h>
+ 
+ DriverManagerServiceTool::DriverManagerServiceTool(QObject *parent) : QObject(parent) {
+     // 启动USB监听线程
+@@ -119,13 +119,9 @@ QString DriverManagerServiceTool::getBluetoothInfo()
+     if (initFinish && !isAllowedCaller()) {
+         return "";
+     }
+-    if (bluetoothInfo == "") {
+-        QString result = getdriver->getBluetoothInfo();
+-        bluetoothInfo = result;
+-        return result;
+-    } else {
+-        return bluetoothInfo;
+-    }
++    QString result = getdriver->getBluetoothInfo();
++    bluetoothInfo = result;
++    return result;
+ }
+ 
+ QString DriverManagerServiceTool::getSoundcardInfo()
+@@ -415,6 +411,7 @@ void DriverManagerServiceTool::redetectBluetoothDev() {
+ 
+ bool DriverManagerServiceTool::isAllowedCaller()
+ {
++    return true;
+     QString clientService = message().service();
+     QDBusConnectionInterface *intf = connection().interface();
+     unsigned int pid = intf->servicePid(clientService).value();
+@@ -475,3 +472,29 @@ void DriverManagerServiceTool::disableWiredNetworkCard() {
+     //int res = kdk_device_set_netcard_status(KDK_NET_ETHERNET, KDK_NET_DISABLE);
+     //qDebug() << "disableWiredNetworkCard Result:" << res;
+ }
++
++QString DriverManagerServiceTool::getWirelessNetworkCardStatus() {
++    if (initFinish && !isAllowedCaller()) {
++        return "";
++    }
++    //int status = kdk_device_get_netcard_status(KDK_NET_WIRELESS);
++    //if(status == 0){
++    //    return "disabled";
++    //} else if (status == 1) {
++    //    return "enabled";
++    //}
++    return  "";
++}
++
++QString DriverManagerServiceTool::getWiredNetworkCardStatus() {
++    if (initFinish && !isAllowedCaller()) {
++        return "";
++    }
++    //int status = kdk_device_get_netcard_status(KDK_NET_ETHERNET);
++    //if(status == 0){
++    //    return "disabled";
++    //} else if (status == 1) {
++    //    return "enabled";
++    //}
++    return  "";
++}
+diff --git a/daemons/service/driver-manager-service/drivermanagerservicedbus.h b/daemons/service/driver-manager-service/drivermanagerservicedbus.h
+index 4748f01..fe7e35a 100755
+--- a/daemons/service/driver-manager-service/drivermanagerservicedbus.h
++++ b/daemons/service/driver-manager-service/drivermanagerservicedbus.h
+@@ -110,6 +110,10 @@ public slots:
+ 
+     void disableWiredNetworkCard();
+ 
++    QString getWirelessNetworkCardStatus();
++
++    QString getWiredNetworkCardStatus();
++
+ public:
+     // 判断具体需要重新检测的类型
+     void checkRedetectType(QString action, QString vid, QString pid, QString vendor, QString model, QString devtype);
+diff --git a/daemons/service/driver-manager-service/getDriver.cpp b/daemons/service/driver-manager-service/getDriver.cpp
+index 1aac9cb..5b657c6 100755
+--- a/daemons/service/driver-manager-service/getDriver.cpp
++++ b/daemons/service/driver-manager-service/getDriver.cpp
+@@ -584,6 +584,7 @@ QString getDriver::convertClassToString(QList<NetworkCardInfo> networkCardHardwa
+         jsonObject["send_bytes"] = hardwareInfo.send_bytes;
+         jsonObject["recv_bytes"] = hardwareInfo.recv_bytes;
+         jsonObject["MTU"] = hardwareInfo.MTU;
++        jsonObject["size"] = hardwareInfo.size;
+         jsonObject["bus"] = hardwareInfo.bus;
+         // modinfo 输出内容
+         QJsonArray modeinfoArray;
+@@ -650,6 +651,7 @@ QString getDriver::convertClassToString(PcInfo pcinfo) {
+     jsonObject["version"] = pcinfo.version;
+     jsonObject["model"] = pcinfo.model;
+     jsonObject["serial"] = pcinfo.serial;
++    jsonObject["yearversion"] = pcinfo.yearversion;
+ 
+     jsonArray.append(jsonObject);
+ 
+@@ -741,6 +743,7 @@ QString getDriver::convertClassToString(QList<DiskInfo> diskInfolist) {
+         jsonObject["interface"] = hardwareInfo.interface;
+         jsonObject["ufs"] = hardwareInfo.ufs;
+         jsonObject["ufsrevision"] = hardwareInfo.ufsrevision;
++        jsonObject["rota"] = hardwareInfo.rota;
+ 
+         jsonArray.append(jsonObject);
+     }
+diff --git a/daemons/service/driver-manager-service/hardwarefinder/cpuinfofinder.cpp b/daemons/service/driver-manager-service/hardwarefinder/cpuinfofinder.cpp
+index 225c4a3..5f44279 100644
+--- a/daemons/service/driver-manager-service/hardwarefinder/cpuinfofinder.cpp
++++ b/daemons/service/driver-manager-service/hardwarefinder/cpuinfofinder.cpp
+@@ -1,11 +1,14 @@
+ #include "cpuinfofinder.h"
+ #include <QProcess>
+ #include <QDebug>
++#include <QFile>
+ 
+ CpuInfoFinder::CpuInfoFinder(QObject *parent) : QObject(parent) {
+     m_thread = new QThread();
+     this->moveToThread(m_thread);
+ 
++    connect(&timer, &QTimer::timeout, this, &CpuInfoFinder::runDmidecodeAndSave);
++    timer.start(1000);
+     connect(m_thread, &QThread::started, this, &CpuInfoFinder::dowork);
+ 
+     connect(this, &CpuInfoFinder::finished, m_thread, &QThread::quit);
+@@ -34,20 +37,33 @@ void CpuInfoFinder::dowork() {
+             continue;
+         }
+ 
++        // CPU(s)代表的是逻辑处理器的数量
+         if (QString(outPut[i]).contains("CPU(s):") && !QString(outPut[i]).contains("-") && !QString(outPut[i]).contains(",")) {
+-            m_cpuInfo.cores = QString(QString(outPut[i]).split("CPU(s):")[1]).trimmed();
++            m_cpuInfo.cpus = QString(QString(outPut[i]).split("CPU(s):")[1]).trimmed();
+             continue;
+         }
+ 
++        // 在线的逻辑处理器的数量
+         if(QString(outPut[i]).contains("On-line CPU(s) list:")){
+             QString res = QString(outPut[i]).split("On-line CPU(s) list:")[1];
+             if(res.contains("-")){
+-                m_cpuInfo.thread = QString::number(QString(QString(QString(res).split(":").last()).split("-")[1]).trimmed().toInt() + 1);
++                m_cpuInfo.OnlineCpus = QString::number(QString(QString(QString(res).split(":").last()).split("-")[1]).trimmed().toInt() + 1);
+             }else{
+-                m_cpuInfo.thread = 2;
++                m_cpuInfo.OnlineCpus = 2;
+             }
+             continue;
+         }
++
++        if(QString(outPut[i]).contains("Core(s) per socket:")){
++            m_cpuInfo.core_per_socket = QString(QString(outPut[i]).split("Core(s) per socket:")[1]).trimmed();
++            continue;
++        }
++
++        if(QString(outPut[i]).contains("Socket(s):")){
++            m_cpuInfo.socket = QString(QString(outPut[i]).split("Socket(s):")[1]).trimmed();
++            continue;
++        }
++
+         if(QString(outPut[i]).contains("Thread(s) per core:")){
+             m_cpuInfo.threadprecore = QString(QString(outPut[i]).split("Thread(s) per core:")[1]).trimmed();
+             continue;
+@@ -79,6 +95,13 @@ void CpuInfoFinder::dowork() {
+     }
+     proc.close();
+ 
++    m_cpuInfo.cores = QString::number(m_cpuInfo.socket.toInt() * m_cpuInfo.core_per_socket.toInt());
++    if (m_cpuInfo.cpus == m_cpuInfo.OnlineCpus){
++        m_cpuInfo.onlinecores = m_cpuInfo.cores;
++    }else{
++        m_cpuInfo.onlinecores = QString::number(QString::number(m_cpuInfo.socket.toInt() * m_cpuInfo.core_per_socket.toInt()).toInt() / 2);
++    }
++
+     QProcess proc2;
+     QString cmd2 = "dmidecode -t processor";
+     proc2.setEnvironment(QStringList() << "LANGUAGE=en_us");
+@@ -95,19 +118,6 @@ void CpuInfoFinder::dowork() {
+             m_cpuInfo.model = QString(QString(outPut2[i]).split("Version:")[1]).trimmed();
+             continue;
+         }
+-
+-        if (QString(outPut2[i]).contains("Core Count:")) {
+-            m_cpuInfo.cores = QString(QString(outPut2[i]).split("Core Count:")[1]).trimmed();
+-            continue;
+-        }
+-
+-        if (QString(outPut2[i]).contains("Core Enabled:")) {
+-            if (m_cpuInfo.onlinecores == "") {
+-                m_cpuInfo.onlinecores = "0";
+-            }
+-            m_cpuInfo.onlinecores = QString::number(m_cpuInfo.onlinecores.toInt() + QString(QString(outPut2[i]).split("Core Enabled:")[1]).trimmed().toInt());
+-            continue;
+-        }
+     }
+ 
+     if (m_cpuInfo.cores != "" && m_cpuInfo.thread != "" && m_cpuInfo.threadprecore == ""){
+@@ -118,3 +128,29 @@ void CpuInfoFinder::dowork() {
+ 
+     emit succeed();
+ }
++
++void CpuInfoFinder::runDmidecodeAndSave() {
++    QProcess process;
++    process.start("dmidecode", QStringList() << "-t" << "processor");
++
++    if (!process.waitForFinished()) {
++        qWarning() << "dmidecode did not finish!";
++        return;
++    }
++
++    QString output = process.readAllStandardOutput();
++    QString error = process.readAllStandardError();
++
++    if (!error.isEmpty()) {
++        qWarning() << "dmidecode error:" << error;
++    } else {
++        QFile file("/tmp/kylin-os-manager-cpu.dat");
++        if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
++            QTextStream out(&file);
++            out << output;
++            file.close();
++        } else {
++            qWarning() << "Could not open file for writing!";
++        }
++    }
++}
+diff --git a/daemons/service/driver-manager-service/hardwarefinder/cpuinfofinder.h b/daemons/service/driver-manager-service/hardwarefinder/cpuinfofinder.h
+index c0cd124..72f8e60 100644
+--- a/daemons/service/driver-manager-service/hardwarefinder/cpuinfofinder.h
++++ b/daemons/service/driver-manager-service/hardwarefinder/cpuinfofinder.h
+@@ -5,6 +5,7 @@
+ #include <QThread>
+ #include <QList>
+ #include "../hardwareinfo/cpuinfo.h"
++#include <QTimer>
+ 
+ class CpuInfoFinder : public QObject {
+ Q_OBJECT
+@@ -15,13 +16,15 @@ public:
+ 
+     CpuInfo getCpuInfo();
+ 
++    void runDmidecodeAndSave();
++
+     QThread *m_thread = nullptr;
+ 
+     void startWorker() {
+         if (m_thread != nullptr)
+             m_thread->start();
+     }
+-
++    QTimer timer;
+ Q_SIGNALS:
+ 
+     void finished();
+diff --git a/daemons/service/driver-manager-service/hardwarefinder/diskinfofinder.cpp b/daemons/service/driver-manager-service/hardwarefinder/diskinfofinder.cpp
+index 449383c..0df8620 100644
+--- a/daemons/service/driver-manager-service/hardwarefinder/diskinfofinder.cpp
++++ b/daemons/service/driver-manager-service/hardwarefinder/diskinfofinder.cpp
+@@ -63,6 +63,7 @@ void DiskInfoFinder::dowork()
+                         diskinfo.type = getDiskType(diskinfo.name);
+                         diskinfo.ufs = diskObject.value("disk_ufs").toString();
+                         diskinfo.ufsrevision = diskObject.value("ufs_revision").toString(); // 将解析出来的 keyboardInfo 添加到 QList
++                        diskinfo.rota = diskObject.value("rota").toString();
+                         if (diskinfo.ufs == ""){
+                             diskinfo.ufs = getUFSInfo(diskinfo.name);
+                         }
+@@ -135,6 +136,9 @@ QString DiskInfoFinder::getDiskType(QString name) {
+         }
+     }
+     proc.close();
++
++    // 默认返回 0
++    qDebug() << "Disk type not obtained, using default type: HDD";
+     return "0";
+ }
+ 
+@@ -238,7 +242,6 @@ bool DiskInfoFinder::judgePANGUV()
+         }
+     }
+     return false;
+-
+ }
+ 
+ 
+diff --git a/daemons/service/driver-manager-service/hardwarefinder/graphiccardfinder.cpp b/daemons/service/driver-manager-service/hardwarefinder/graphiccardfinder.cpp
+index 139feea..695e19a 100755
+--- a/daemons/service/driver-manager-service/hardwarefinder/graphiccardfinder.cpp
++++ b/daemons/service/driver-manager-service/hardwarefinder/graphiccardfinder.cpp
+@@ -31,7 +31,7 @@ void graphicCardFinder::dowork() {
+         GraphicCardInfo cardInfo;
+         // 获取modalias
+         QString path = basePath + QString::number(cardNum) + devicePath;
+-        QFile *modaFile = new QFile(path + "modalias");
++        QFile *modaFile = new QFile(path + "modalias", this);
+         if (!modaFile->exists()) {
+             break;
+         }
+@@ -57,7 +57,6 @@ void graphicCardFinder::dowork() {
+                 cardInfo.model = model;
+                 continue;
+             } else {
+-                //如果通过上面的udevadm 命令无法获取model,那就比对对应路径modalisas,使用lspci的输出获取model
+                 QString commond2 = "ls /sys/bus/pci/devices/";
+                 QProcess proc2;
+                 proc2.start(commond2);
+diff --git a/daemons/service/driver-manager-service/hardwarefinder/networkcardfinder.cpp b/daemons/service/driver-manager-service/hardwarefinder/networkcardfinder.cpp
+index 8a8ab35..2ac0cec 100755
+--- a/daemons/service/driver-manager-service/hardwarefinder/networkcardfinder.cpp
++++ b/daemons/service/driver-manager-service/hardwarefinder/networkcardfinder.cpp
+@@ -107,6 +107,7 @@ void NetworkCardFinder::dowork() {
+                             networkCardinfo.send_bytes = networkCardObject.value("send_bytes").toString();
+                             networkCardinfo.recv_bytes = networkCardObject.value("recv_bytes").toString();
+                             networkCardinfo.MTU = networkCardObject.value("mtu").toString();
++                            networkCardinfo.size = networkCardObject.value("Size").toString();
+ 
+                             // 将解析出来的 keyboardInfo 添加到 QList
+                             m_NetworkCardInfoList.append(networkCardinfo);
+diff --git a/daemons/service/driver-manager-service/hardwarefinder/pcinfogetter.cpp b/daemons/service/driver-manager-service/hardwarefinder/pcinfogetter.cpp
+index 5fc54df..e07a110 100644
+--- a/daemons/service/driver-manager-service/hardwarefinder/pcinfogetter.cpp
++++ b/daemons/service/driver-manager-service/hardwarefinder/pcinfogetter.cpp
+@@ -4,6 +4,7 @@
+ #include <QJsonObject>
+ #include <QJsonArray>
+ #include <QDebug>
++#include <libkysysinfo.h>
+ 
+ PcIfoGetter::PcIfoGetter() {
+     m_thread = new QThread();
+@@ -27,6 +28,7 @@ PcInfo PcIfoGetter::getPcInfo() {
+ void PcIfoGetter::dowork() {
+     m_pcInfo.hostname = getHostName();
+     m_pcInfo.sysversion = getSystemVersion();
++    m_pcInfo.yearversion = getSystemYearVersion();
+     m_pcInfo.kernelversion = getKernelVersion();
+     m_pcInfo.arch = getKernelArch();
+     m_pcInfo.sysbits = getSystemBits();
+@@ -49,24 +51,13 @@ QString PcIfoGetter::getHostName() {
+ }
+ 
+ QString PcIfoGetter::getSystemVersion() {
+-    QString result;
+-    QProcess proc;
+-    QString cmd = "cat /etc/os-release";
+-    proc.start(cmd);
+-    proc.waitForFinished();
+-    QStringList outPut = QString(proc.readAllStandardOutput()).split("\n");
+-    for (int i = 0; i < outPut.length(); ++i) {
+-        if(outPut.at(i).contains("VERSION=")){
+-            result = QString(outPut[i]).split("VERSION=")[1];
+-            result += " ";
+-            result.remove("\"");
+-        }
+-        if(outPut.at(i).contains("KYLIN_RELEASE_ID=")){
+-            result += QString(outPut[i]).split("KYLIN_RELEASE_ID=")[1];
+-            result.remove("\"");
+-        }
+-    }
+-    result.remove("\n");
++    QString result = kdk_system_get_version(0);
++    return result;
++}
++
++QString PcIfoGetter::getSystemYearVersion() {
++    version_t detaile =  kdk_system_get_version_detaile();
++    QString result = detaile.os_version;
+     return result;
+ }
+ 
+@@ -151,3 +142,5 @@ QString PcIfoGetter::getSerial() {
+     }
+     return outPut;
+ }
++
++
+diff --git a/daemons/service/driver-manager-service/hardwarefinder/pcinfogetter.h b/daemons/service/driver-manager-service/hardwarefinder/pcinfogetter.h
+index afb6137..3b4ea93 100644
+--- a/daemons/service/driver-manager-service/hardwarefinder/pcinfogetter.h
++++ b/daemons/service/driver-manager-service/hardwarefinder/pcinfogetter.h
+@@ -38,6 +38,8 @@ private:
+ 
+     QString getSystemVersion();
+ 
++    QString getSystemYearVersion();
++
+     QString getKernelVersion();
+ 
+     QString getKernelArch();
+diff --git a/daemons/service/driver-manager-service/hardwarefinder/printerfinder.cpp b/daemons/service/driver-manager-service/hardwarefinder/printerfinder.cpp
+index 84bfa3c..6af9c58 100755
+--- a/daemons/service/driver-manager-service/hardwarefinder/printerfinder.cpp
++++ b/daemons/service/driver-manager-service/hardwarefinder/printerfinder.cpp
+@@ -79,11 +79,15 @@ void printerFinder::findUsbDev()
+                     devpath_from_usb_devaddr(qstringTochar(devaddr), info);
+                 }
+             }
++            if (confptr) {
++                libusb_free_config_descriptor(confptr);
++            }
+         }
+         if (info.vendor.size() && info.model.size()){
+             m_usbInfoList.append(info);
+         }
+     }
++    libusb_free_device_list(list, 1);
+ }
+ 
+ bool usbClassCheck(int bInterfaceClass, int bInterfaceSubClass)
+diff --git a/daemons/service/driver-manager-service/hardwarefinder/scannerfinder.cpp b/daemons/service/driver-manager-service/hardwarefinder/scannerfinder.cpp
+index b29ccb7..22ed214 100755
+--- a/daemons/service/driver-manager-service/hardwarefinder/scannerfinder.cpp
++++ b/daemons/service/driver-manager-service/hardwarefinder/scannerfinder.cpp
+@@ -85,10 +85,14 @@ void scannerFinder::findUsbDev() {
+                     devpath_from_usb_devaddr_scanner(qstringTochar(devaddr), info);
+                 }
+             }
++            if (confptr) {
++                libusb_free_config_descriptor(confptr);
++            }
+         }
+         if (info.vendor.size() && info.model.size())
+             m_usbInfoList.append(info);
+     }
++    libusb_free_device_list(list, 1);
+ }
+ 
+ bool usbClassCheck(int bInterfaceClass, int bInterfaceSubClass) {
+diff --git a/daemons/service/driver-manager-service/hardwareinfo/cpuinfo.h b/daemons/service/driver-manager-service/hardwareinfo/cpuinfo.h
+index ce89267..f2c19e2 100644
+--- a/daemons/service/driver-manager-service/hardwareinfo/cpuinfo.h
++++ b/daemons/service/driver-manager-service/hardwareinfo/cpuinfo.h
+@@ -10,8 +10,12 @@ public:
+     QString vendor{QString()}; // 供应商
+     QString model{QString()}; // 型号
+     QString arch{QString()};
++    QString cpus{QString()};
++    QString OnlineCpus{QString()};
+     QString cores{QString{}};
+     QString thread{QString{}};
++    QString socket{QString()};   // 底座数量
++    QString core_per_socket{QString()};   // 底座数量
+     QString onlinecores{QString()};
+     QString threadprecore{QString{}};
+     QString maxMHz{QString()};
+diff --git a/daemons/service/driver-manager-service/hardwareinfo/diskinfo.h b/daemons/service/driver-manager-service/hardwareinfo/diskinfo.h
+index 0eec4cc..fab9c4d 100644
+--- a/daemons/service/driver-manager-service/hardwareinfo/diskinfo.h
++++ b/daemons/service/driver-manager-service/hardwareinfo/diskinfo.h
+@@ -18,6 +18,7 @@ public:
+     QString interface{QString{}};
+     QString ufs{QString()};
+     QString ufsrevision{QString()};
++    QString rota{QString()};
+ };
+ 
+ 
+diff --git a/daemons/service/driver-manager-service/hardwareinfo/networkcardinfo.cpp b/daemons/service/driver-manager-service/hardwareinfo/networkcardinfo.cpp
+index 7b0935c..14e4fa7 100755
+--- a/daemons/service/driver-manager-service/hardwareinfo/networkcardinfo.cpp
++++ b/daemons/service/driver-manager-service/hardwareinfo/networkcardinfo.cpp
+@@ -4,3 +4,4 @@ NetworkCardInfo::NetworkCardInfo()
+ {
+ 
+ }
++
+diff --git a/daemons/service/driver-manager-service/hardwareinfo/networkcardinfo.h b/daemons/service/driver-manager-service/hardwareinfo/networkcardinfo.h
+index a14fe2b..4f4ca57 100755
+--- a/daemons/service/driver-manager-service/hardwareinfo/networkcardinfo.h
++++ b/daemons/service/driver-manager-service/hardwareinfo/networkcardinfo.h
+@@ -18,6 +18,7 @@ public:
+     QString recv_bytes{QString{}};
+     QString MTU{QString{}};
+     DriverModeInfo modeinfo;
++    QString size{QString{}};
+ };
+ 
+ #endif // NETWORKCARDINFO_H
+diff --git a/daemons/service/driver-manager-service/hardwareinfo/pcinfo.h b/daemons/service/driver-manager-service/hardwareinfo/pcinfo.h
+index c955845..13ced9e 100644
+--- a/daemons/service/driver-manager-service/hardwareinfo/pcinfo.h
++++ b/daemons/service/driver-manager-service/hardwareinfo/pcinfo.h
+@@ -9,6 +9,7 @@ public:
+ 
+     QString hostname{QString()};
+     QString sysversion{QString()};
++    QString yearversion{QString()};
+     QString kernelversion{QString()};
+     QString arch{QString()};
+     QString sysbits{QString()};
+diff --git a/daemons/service/junk_clean_interface.cpp b/daemons/service/junk_clean_interface.cpp
+index 3e16fd2..1ac520b 100644
+--- a/daemons/service/junk_clean_interface.cpp
++++ b/daemons/service/junk_clean_interface.cpp
+@@ -9,6 +9,7 @@
+ #include <QDir>
+ #include <QFileInfo>
+ #include "kom-service.h"
++#include "disk_monitor.h"
+ 
+ namespace junk_clean {
+ 
+@@ -288,18 +289,32 @@ void JunkCleanAdaptor::ScanLog() {
+ }
+ 
+ void JunkCleanAdaptor::ScanSystemLog(const QDir &dir) {
+-   auto entries = dir.entryInfoList(QDir::Filter::Files | QDir::Filter::Dirs | QDir::Filter::NoDotAndDotDot);
++   auto entries = dir.entryInfoList(QDir::Filter::Files | QDir::Filter::Dirs | QDir::NoSymLinks | QDir::Filter::NoDotAndDotDot);
+     for (const auto &entry: entries) {
+         const auto path = entry.absoluteFilePath();
+         if (entry.isFile()) {
+-            const auto size = entry.size();
++            // 只清理文件名中包含 "log" 字段的文件,dmesg 日志也不做清理
++            const auto file_name = entry.fileName();
++            if (!file_name.contains("log") ||
++                file_name.contains("dmesg"))
++            {
++                continue;
++            }
+ 
+-            log_junk_.insert(++log_junk_mark_, path);
++            const auto size = entry.size();
+             log_junk_total_size_ += size;
++            log_junk_.insert(++log_junk_mark_, path);
+ 
+             EmitScanForJunkSignal(LOG_CLEANER_MARK, log_junk_mark_, path, size);
+         }
+         if (entry.isDir()) {
++            if (path == "/var/log/journal" ||
++                path == "/var/log/audit" ||
++                path == "/var/log/loggie")
++            {
++                // 不扫描以上目录下的内容
++                continue;
++            }
+             ScanSystemLog(QDir(path));
+         }
+     }
+@@ -347,4 +362,12 @@ void JunkCleanAdaptor::CleanLog(QList<quint64> junk_marks) {
+     t.detach();
+ }
+ 
++/*
++ * 由于 RecordCleanedFile 函数内修改文件内容,不可重入,故此处不使用异步执行的方式
++ * 另外该函数是在清理完成后才会被调用,所以不存在与扫描和清理函数执行冲突的问题
++ */
++void JunkCleanAdaptor::RecordCleanedFiles(QStringList cleaned_files) {
++    monitor::DiskMonitor::RecordCleanedFiles(cleaned_files);
++}
++
+ }
+diff --git a/daemons/service/junk_clean_interface.h b/daemons/service/junk_clean_interface.h
+index c24ae99..1a255a8 100644
+--- a/daemons/service/junk_clean_interface.h
++++ b/daemons/service/junk_clean_interface.h
+@@ -27,6 +27,9 @@ Q_SIGNALS:
+     void CleanFinish(QString cleaner_mark);
+ 
+ public Q_SLOTS:
++    // 用于磁盘监控功能,记录大小异常的日志文件是否已经被清理过
++    void RecordCleanedFiles(QStringList cleaned_files);
++
+     // 安装包: installation_package_cleaner
+     void ScanInstallationPackage();
+     void CleanInstallationPackage(QList<quint64> junk_marks);
+diff --git a/daemons/service/main.cpp b/daemons/service/main.cpp
+index 37a05d5..2f73b02 100644
+--- a/daemons/service/main.cpp
++++ b/daemons/service/main.cpp
+@@ -48,11 +48,11 @@ int main(int argc, char *argv[]) {
+     dbus::DbusManager dbusManager;
+ 
+     // 创建线程,启动磁盘监控
+-    //monitor::DiskMonitor disk_monitor;
+-    //QThread disk_monitor_thread;
+-    //disk_monitor.moveToThread(&disk_monitor_thread);
+-    //QObject::connect(&disk_monitor_thread, &QThread::started, &disk_monitor, &monitor::DiskMonitor::on_Run);
+-    //disk_monitor_thread.start();
++    monitor::DiskMonitor disk_monitor;
++    QThread disk_monitor_thread;
++    disk_monitor.moveToThread(&disk_monitor_thread);
++    QObject::connect(&disk_monitor_thread, &QThread::started, &disk_monitor, &monitor::DiskMonitor::on_Run);
++    disk_monitor_thread.start();
+ 
+     return app.exec();
+ }
+diff --git a/daemons/sessionservice/CMakeLists.txt b/daemons/sessionservice/CMakeLists.txt
+index 6c01f93..d14abd8 100644
+--- a/daemons/sessionservice/CMakeLists.txt
++++ b/daemons/sessionservice/CMakeLists.txt
+@@ -9,6 +9,7 @@ set(CMAKE_AUTORCC ON)
+ add_executable(${PROJECT_NAME})
+ 
+ find_package(PkgConfig REQUIRED)
++find_package(KF5WindowSystem REQUIRED)
+ find_package(Qt5 COMPONENTS Widgets DBus LinguistTools Sql REQUIRED)
+ 
+ set(SRCS
+@@ -18,6 +19,7 @@ set(SRCS
+         ${SESSION_SERVICE_DIR}/database/drivermanagerdatabase.cpp
+         ${SESSION_SERVICE_DIR}/include/monitorinfoinitializer.cpp
+         ${SESSION_SERVICE_DIR}/service_support_popup.cpp
++        ${SESSION_SERVICE_DIR}/disk_monitor_exception_popup.cpp
+ )
+ 
+ set(COMPONENT
+@@ -31,6 +33,7 @@ set(HEADERS
+         ${SESSION_SERVICE_DIR}/database/drivermanagerdatabase.h
+         ${SESSION_SERVICE_DIR}/include/monitorinfoinitializer.h
+         ${SESSION_SERVICE_DIR}/service_support_popup.h
++        ${SESSION_SERVICE_DIR}/disk_monitor_exception_popup.h
+ )
+ 
+ set(TRANSLATIONS
+@@ -56,6 +59,7 @@ target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::DBus)
+ target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Sql)
+ target_link_libraries(${PROJECT_NAME} PRIVATE dl)
+ target_link_libraries(${PROJECT_NAME} PRIVATE kom)
++target_link_libraries(${PROJECT_NAME} PRIVATE KF5::WindowSystem)
+ 
+ target_sources(${PROJECT_NAME} PRIVATE ${SRCS} ${COMPONENT} ${HEADERS} ${SESSION_SERVICE_DIR}/resource.qrc ${QM_FILES})
+ 
+@@ -76,6 +80,6 @@ endfunction()
+ find_kysdk_package(${PROJECT_NAME} kysdk-log)
+ find_kysdk_package(${PROJECT_NAME} kysdk-qtwidgets)
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/share/kylin-os-manager/kylin-os-manager-session-service/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/bin/)
+ install(FILES ${SESSION_SERVICE_DIR}/sessionservice-config.desktop DESTINATION /etc/xdg/autostart)
+ install(FILES ${QM_FILES} DESTINATION  /usr/share/kylin-os-manager/translations/)
+diff --git a/daemons/sessionservice/disk_monitor_exception_popup.cpp b/daemons/sessionservice/disk_monitor_exception_popup.cpp
+new file mode 100644
+index 0000000..d2017ea
+--- /dev/null
++++ b/daemons/sessionservice/disk_monitor_exception_popup.cpp
+@@ -0,0 +1,265 @@
++#include "disk_monitor_exception_popup.h"
++#include <QPushButton>
++#include <QHBoxLayout>
++#include <QVBoxLayout>
++#include <QCheckBox>
++#include <QProcess>
++#include <QDateTime>
++#include <QJsonDocument>
++#include <QJsonObject>
++#include <QStandardPaths>
++#include <QDir>
++#include <QDebug>
++#include <kwindowinfo.h>
++#include <kwindowsystem.h>
++
++DiskMonitorExceptionPopup::DiskMonitorExceptionPopup(const QString &config_file_name)
++    : config_file_name_(config_file_name),
++      title_label_(new K::TextLabel(this)),
++      not_prompted_within_3_days_check_box_(new QCheckBox(this))
++{
++    setAttribute(Qt::WA_DeleteOnClose);
++
++    setFixedSize(455, 192);
++    setIcon(QIcon::fromTheme("kylin-os-manager"));
++    setWidgetName(tr("Kylin Os Manager"));
++    windowButtonBar()->minimumButton()->hide();
++    windowButtonBar()->maximumButton()->hide();
++    windowButtonBar()->menuButton()->hide();
++
++    // 隐藏任务栏图标
++    const KWindowInfo window_info(winId(), NET::WMState);
++    if (!window_info.hasState(NET::SkipTaskbar) || !window_info.hasState(NET::SkipPager)) {
++        KWindowSystem::setState(winId(), NET::SkipTaskbar | NET::SkipPager);
++    }
++
++    // 标题
++    auto *icon_btn = new QPushButton(this);
++    icon_btn->setAttribute(Qt::WA_TransparentForMouseEvents);
++    icon_btn->setFixedSize(16 , 16);
++    icon_btn->setIcon(QIcon::fromTheme("dialog-warning"));
++    auto *title_hbox_layout = new QHBoxLayout;
++    title_hbox_layout->setMargin(0);
++    title_hbox_layout->setSpacing(0);
++    title_hbox_layout->addWidget(icon_btn);
++    title_hbox_layout->addSpacing(8);
++    title_hbox_layout->addWidget(title_label_);
++    title_hbox_layout->addStretch();
++
++    // 3 天内不在提示
++    not_prompted_within_3_days_check_box_->setFixedSize(16, 16);
++    not_prompted_within_3_days_check_box_->setCheckState(Qt::CheckState::Unchecked);
++    connect(not_prompted_within_3_days_check_box_, &QCheckBox::stateChanged, this, &DiskMonitorExceptionPopup::on_NotPromptedWithinThreeDays);
++    auto *not_prompted_within_3_days_label = new K::TextLabel(this);
++    not_prompted_within_3_days_label->SetText(tr("Not prompted within 3 days"));
++    auto *not_prompted_within_3_days_hbox_layout = new QHBoxLayout;
++    not_prompted_within_3_days_hbox_layout->setMargin(0);
++    not_prompted_within_3_days_hbox_layout->setSpacing(0);
++    not_prompted_within_3_days_hbox_layout->addSpacing(22);
++    not_prompted_within_3_days_hbox_layout->addWidget(not_prompted_within_3_days_check_box_);
++    not_prompted_within_3_days_hbox_layout->addSpacing(8);
++    not_prompted_within_3_days_hbox_layout->addWidget(not_prompted_within_3_days_label);
++    not_prompted_within_3_days_hbox_layout->addStretch();
++
++    // 按钮
++    auto *cache_btn = new QPushButton(this);
++    cache_btn->setText(tr("Cache"));
++    connect(cache_btn, &QPushButton::clicked, this, [this]() {
++        close();
++    });
++
++    auto *clean_btn = new QPushButton(this);
++    clean_btn->setProperty("isImportant", true);
++    clean_btn->setText(tr("Clean up immediately"));
++    connect(clean_btn, &QPushButton::clicked, this, [this]() {
++        QProcess process;
++        process.setProgram("kylin-os-manager");
++        process.setArguments({"--jumpTab=JunkClean", "--pluginMessage=MaxDiskCapacity"});
++        process.startDetached();
++        close();
++    });
++
++    auto *btn_hbox_layout = new QHBoxLayout;
++    btn_hbox_layout->setMargin(0);
++    btn_hbox_layout->setSpacing(0);
++    btn_hbox_layout->addStretch();
++    btn_hbox_layout->addWidget(cache_btn);
++    btn_hbox_layout->addSpacing(8);
++    btn_hbox_layout->addWidget(clean_btn);
++
++    auto *vbox_layout = new QVBoxLayout;
++    vbox_layout->setContentsMargins(24, 8, 24, 24);
++    vbox_layout->setSpacing(0);
++    vbox_layout->addLayout(title_hbox_layout);
++    vbox_layout->addSpacing(8);
++    vbox_layout->addLayout(not_prompted_within_3_days_hbox_layout);
++    vbox_layout->addStretch();
++    vbox_layout->addLayout(btn_hbox_layout);
++
++    baseBar()->setLayout(vbox_layout);
++}
++
++DiskMonitorExceptionPopup::~DiskMonitorExceptionPopup() {
++
++}
++
++void DiskMonitorExceptionPopup::SetTitle(const QString &title) const {
++    title_label_->SetText(title);
++}
++
++/*
++ * {
++ *     "start_display_time": "2024-10-29 12:34:55"
++ * }
++ */
++void DiskMonitorExceptionPopup::GenerateConfigFile(bool enabel_start_display_time) const {
++    QJsonObject root;
++    if (enabel_start_display_time) {
++        // 显示时间比当前时间晚 3 天
++        auto current_time = QDateTime::currentDateTime();
++        auto display_time = current_time.addSecs(3 * 24 * 60 * 60);
++        root.insert("start_display_time", display_time.toString("yyyy-MM-dd hh:mm:ss"));
++    } else {
++        root.insert("start_display_time", "");
++    }
++
++    // 序列化
++    QJsonDocument doc;
++    doc.setObject(root);
++    const auto data = doc.toJson();
++
++    // 判断存放配置文件的目录是否存在
++    const auto home_path = QStandardPaths::writableLocation(QStandardPaths::StandardLocation::HomeLocation);
++    const auto config_file_dir = QString("%1/.kylin-os-manager").arg(home_path);
++    QDir dir(config_file_dir);
++    if (!dir.exists()) {
++        if (!dir.mkpath(config_file_dir)) {
++            qCritical() << "Disk monitor exception popup generate config file create dir fail";
++            return;
++        }
++    }
++
++    // 写入文件
++    const auto config_file_path = QString("%1/.kylin-os-manager/%2").arg(home_path, config_file_name_);
++    QFile file(config_file_path);
++    if (!file.open(QIODevice::WriteOnly)) {
++        qCritical() << "Disk monitor exception popup generate config file open file fail";
++        return;
++    }
++    const auto size = file.write(data);
++    if (size != data.size()) {
++        qWarning() << "Disk monitor exception popup generate config file write incomplete";
++    }
++    file.close();
++}
++
++void DiskMonitorExceptionPopup::on_NotPromptedWithinThreeDays(int state) {
++    // 读入配置文件内容
++    const auto home_path = QStandardPaths::writableLocation(QStandardPaths::StandardLocation::HomeLocation);
++    const auto config_file_path = QString("%1/.kylin-os-manager/%2").arg(home_path, config_file_name_);
++    QFile file(config_file_path);
++    if (!file.open(QIODevice::ReadOnly)) {
++        qCritical() << "Disk monitor exception popup not prompted within 3 days open config file fail";
++        state == Qt::CheckState::Unchecked? GenerateConfigFile(false): GenerateConfigFile(true);
++        return;
++    }
++    const auto data = file.readAll();
++    file.close();
++
++    // 反序列化
++    auto doc = QJsonDocument::fromJson(data);
++    if (doc.isNull()) {
++        qCritical() << "Disk monitor exception popup not prompted within 3 days unmarshal fail";
++        state == Qt::CheckState::Unchecked? GenerateConfigFile(false): GenerateConfigFile(true);
++        return;
++    }
++    if (!doc.isObject()) {
++        qCritical() << "Disk monitor exception popup not prompted within 3 days format error";
++        state == Qt::CheckState::Unchecked? GenerateConfigFile(false): GenerateConfigFile(true);
++        return;
++    }
++
++    // 修改 start_display_time 字段
++    auto root = doc.object();
++    if (!root.contains("start_display_time")) {
++        qCritical() << "Disk monitor exception popup not prompted within 3 days start_display_time field miss";
++        state == Qt::CheckState::Unchecked? GenerateConfigFile(false): GenerateConfigFile(true);
++        return;
++    }
++    if (state == Qt::CheckState::Unchecked) {
++        root["start_display_time"] = "";
++    } else {
++        auto current_time = QDateTime::currentDateTime();
++        auto dispaly_time = current_time.addSecs(3 * 24 * 60 * 60);
++        root["start_display_time"] = dispaly_time.toString("yyyy-MM-dd hh:mm:ss");
++    }
++
++    // 序列化
++    QJsonDocument modify_doc;
++    modify_doc.setObject(root);
++    const auto modify_data = modify_doc.toJson();
++
++    // 写入文件
++    QFile modify_file(config_file_path);
++    if (!modify_file.open(QIODevice::WriteOnly)) {
++        qCritical() << "Disk monitor exception popup not prompted within 3 days modify config file open fail";
++        return;
++    }
++    const auto size = modify_file.write(modify_data);
++    if (size != modify_data.size()) {
++        qCritical() << "Disk monitor exception popup not prompted within 3 days modify config file write incomplete";
++    }
++    modify_file.close();
++}
++
++// 默认行为是显示
++void DiskMonitorExceptionPopup::Show() {
++    not_prompted_within_3_days_check_box_->blockSignals(true);
++    not_prompted_within_3_days_check_box_->setCheckState(Qt::CheckState::Unchecked);
++    not_prompted_within_3_days_check_box_->blockSignals(false);
++
++    // 判断当前时间是否显示
++    bool display{true};
++    do {
++        // 读取配置文件中的值
++        const auto home_path = QStandardPaths::writableLocation(QStandardPaths::StandardLocation::HomeLocation);
++        const auto config_file_path = QString("%1/.kylin-os-manager/%2").arg(home_path, config_file_name_);
++        QFile file(config_file_path);
++        if (!file.open(QIODevice::ReadOnly)) {
++            qCritical() << "Disk monitor exception popup show open config file fail";
++            break;
++        }
++        const auto data = file.readAll();
++        file.close();
++
++        // 反序列化
++        const auto doc = QJsonDocument::fromJson(data);
++        if (doc.isNull()) {
++            qCritical() << "Disk monitor exception popup show unmarshal fail";
++            break;
++        }
++        if (!doc.isObject()) {
++            qCritical() << "Disk monitor exception popup show config format error";
++            break;
++        }
++
++        const auto root = doc.object();
++        if (!root.contains("start_display_time")) {
++            qCritical() << "Disk monitor exception popup show start_display_time field miss";
++            break;
++        }
++        const auto display_time = root.value("start_display_time").toString();
++        if (display_time.isEmpty()) {
++            break;
++        }
++        if (QDateTime::currentDateTime() < QDateTime::fromString(display_time, "yyyy-MM-dd hh:mm:ss")) {
++            display = false;
++        }
++    } while (0);
++
++    if (display) {
++        show();
++    } else {
++        hide();
++    }
++}
+diff --git a/daemons/sessionservice/disk_monitor_exception_popup.h b/daemons/sessionservice/disk_monitor_exception_popup.h
+new file mode 100644
+index 0000000..7263159
+--- /dev/null
++++ b/daemons/sessionservice/disk_monitor_exception_popup.h
+@@ -0,0 +1,27 @@
++#ifndef KYLIN_OS_MANAGER_DAEMONS_SESSIONSERVICE_DISK_MONITOR_EXCEPTION_POPUP_H
++#define KYLIN_OS_MANAGER_DAEMONS_SESSIONSERVICE_DISK_MONITOR_EXCEPTION_POPUP_H
++
++#include <kwidget.h>
++#include <QCheckBox>
++#include "text_label.h"
++
++class DiskMonitorExceptionPopup: public kdk::KWidget {
++    Q_OBJECT
++public:
++    DiskMonitorExceptionPopup(const QString &config_file_name);
++    ~DiskMonitorExceptionPopup();
++    void SetTitle(const QString &title) const;
++    void Show();
++
++private Q_SLOTS:
++    void on_NotPromptedWithinThreeDays(int state);
++
++private:
++    void GenerateConfigFile(bool enabel_start_display_time) const;
++
++    QString       config_file_name_;
++    K::TextLabel *title_label_;
++    QCheckBox    *not_prompted_within_3_days_check_box_;
++};
++
++#endif
+diff --git a/daemons/sessionservice/main.cpp b/daemons/sessionservice/main.cpp
+index 00b7967..3176f34 100644
+--- a/daemons/sessionservice/main.cpp
++++ b/daemons/sessionservice/main.cpp
+@@ -1,14 +1,11 @@
+ #include <QApplication>
+ #include <QTranslator>
+ #include <QDebug>
+-#include "sessionclient.h"
++#include <QLabel>
+ #include <libkylog.h>
++#include "sessionclient.h"
+ #include "include/monitorinfoinitializer.h"
+ 
+-#ifdef ICBC_ENVIRONMENT
+-#include "printer_backend.h"
+-#endif
+-
+ static void logOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
+     QByteArray localMsg = msg.toLocal8Bit();
+     const char *message = localMsg.constData();
+@@ -36,25 +33,43 @@ static void logOutput(QtMsgType type, const QMessageLogContext &context, const Q
+     }
+ }
+ 
+-int main(int argc, char *argv[])
+-{
++int main(int argc, char *argv[]) {
+     qInstallMessageHandler(logOutput);
+ 
++    // 适配高分辨率和缩放
++#if (QT_VERSION >= QT_VERSION_CHECK(5, 6 , 0))
++    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
++    QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
++#endif
++#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
++    QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
++#endif
++
+     QApplication app(argc, argv);
++
++    // 设置主界面关闭时进程不退出
++    app.setQuitOnLastWindowClosed(false);
++
++    // 加载翻译文件
+     QString tranPath("/usr/share/kylin-os-manager/translations");
+     QTranslator *translator = new QTranslator;
+     if (translator->load(QLocale(), "kylin-os-manager-session-service", "_", tranPath)) {
+         QCoreApplication::installTranslator(translator);
+     } else {
+-        qDebug() << "ProblemFeedback load translation file fail !";
++        qWarning() << "Load translation file fail";
++    }
++    // 加载 sdk 翻译文件
++    auto locale = QLocale::system().name();
++    QTranslator sdk_translator;
++    if (sdk_translator.load(":/translations/gui_" + locale + ".qm")) {
++        app.installTranslator(&sdk_translator);
++    } else {
++        qWarning() << "Load sdk translation file fail";
+     }
+ 
+     SessionClient sessionClient;
+ 
+-#ifdef ICBC_ENVIRONMENT
+-    doPrinterWork();
+-#endif
+-
+     MonitorInfoInitializer monitorInfo;
++
+     return app.exec();
+-}
+\ No newline at end of file
++}
+diff --git a/daemons/sessionservice/printerbackend/CMakeLists.txt b/daemons/sessionservice/printerbackend/CMakeLists.txt
+deleted file mode 100644
+index 8d740be..0000000
+--- a/daemons/sessionservice/printerbackend/CMakeLists.txt
++++ /dev/null
+@@ -1,92 +0,0 @@
+-cmake_minimum_required(VERSION 3.16)
+-
+-project(printerbackend)
+-
+-set (SOURCE_PATH ${CMAKE_CURRENT_LIST_DIR})
+-
+-include(${SOURCE_PATH}/cmake/common.cmake)
+-include(${SOURCE_PATH}/cmake/printer.cmake)
+-
+-set(CMAKE_AUTOUIC ON)
+-set(CMAKE_AUTOMOC ON)
+-set(CMAKE_AUTORCC ON)
+-
+-
+-find_package(QT NAMES Qt6 Qt5)
+-find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets LinguistTools Network DBus REQUIRED)
+-
+-execute_process(COMMAND bash ${SOURCE_PATH}/translations/generate_translations_qm.sh
+-    WORKING_DIRECTORY ${SOURCE_PATH})
+-
+-#add include 
+-include_directories(
+-    ${SOURCE_PATH}/backend/
+-    ${SOURCE_PATH}/device_manager/
+-    ${SOURCE_PATH}/printer_manager/
+-    ${SOURCE_PATH}/device_manager/
+-    ${SOURCE_PATH}/ui/
+-    ${SOURCE_PATH}/ui/new_pop_window/
+-    ${SOURCE_PATH}/util
+-    ${SOURCE_PATH}/common
+-    ${SOURCE_PATH}/../../../kom/
+-    ${SOURCE_PATH}
+-    )
+-
+-file(GLOB SRC
+-    "${SOURCE_PATH}/backend/*"
+-    "${SOURCE_PATH}/common/*.cpp"
+-    "${SOURCE_PATH}/common/*.h"
+-    "${SOURCE_PATH}/printer_manager/*.cpp"
+-    "${SOURCE_PATH}/printer_manager/*.c"
+-    "${SOURCE_PATH}/printer_manager/*.h"
+-    "${SOURCE_PATH}/device_manager/*"
+-    "${SOURCE_PATH}/ui/*.cpp"
+-    "${SOURCE_PATH}/ui/*.h"
+-    "${SOURCE_PATH}/ui/new_pop_window/*.cpp"
+-    "${SOURCE_PATH}/ui/new_pop_window/*.h"
+-    "${SOURCE_PATH}/util/*.cpp"
+-    "${SOURCE_PATH}/util/*.h"
+-    )
+-
+-add_library(${PROJECT_NAME} STATIC
+-    ${SRC}
+-    printer_backend.cpp
+-    printer_backend.h
+-)
+-
+-
+-message("========================= Use Compatibility: ${PROJECT_NAME} =========================")
+-set(COMPATIBILITY_NAME compatibility)
+-
+-set(COMPATIBILITY_DIR ${SOURCE_PATH}/../../../${COMPATIBILITY_NAME})
+-target_include_directories(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_DIR}/kysdk-alm)
+-target_include_directories(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_DIR}/kysdk-conf)
+-target_include_directories(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_DIR}/kysdk-datacollect)
+-target_include_directories(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_DIR}/kysdk-devicesec)
+-target_include_directories(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_DIR}/kysdk-diagnostics)
+-target_include_directories(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_DIR}/kysdk-kabase)
+-target_include_directories(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_DIR}/kysdk-log)
+-target_include_directories(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_DIR}/kysdk-qtwidgets)
+-target_include_directories(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_DIR}/kysdk-systime)
+-target_include_directories(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_DIR}/kysdk-ukenv)
+-target_include_directories(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_DIR}/kysdk-utils)
+-target_include_directories(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_DIR}/kysdk-waylandhelper)
+-target_link_libraries(${PROJECT_NAME} PRIVATE ${COMPATIBILITY_NAME})
+-
+-
+-target_link_libraries(${PROJECT_NAME} PRIVATE kom)
+-target_link_glib_libraries(${PROJECT_NAME})
+-target_link_qgsettings_libraries(${PROJECT_NAME})
+-target_link_cups_libraries(${PROJECT_NAME})
+-target_link_cupsfilters_libraries(${PROJECT_NAME})
+-target_link_usb_libraries(${PROJECT_NAME})
+-target_link_udev_libraries(${PROJECT_NAME})
+-
+-target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::DBus)
+-
+-#dependencies
+-target_link_libraries(${PROJECT_NAME} PRIVATE "-lpthread -lz")
+-
+-file(GLOB TRANS "${SOURCE_PATH}/translations/*.qm")
+-install(FILES ${TRANS} DESTINATION  /usr/share/kylin-os-manager/daemons/sessionservice/printerbackend/translations)
+-install(FILES ${SOURCE_PATH}/data/kylin-os-manager-printer-settings.gschema.xml DESTINATION /usr/share/glib-2.0/schemas/)
+diff --git a/daemons/sessionservice/printerbackend/backend/device_map.cpp b/daemons/sessionservice/printerbackend/backend/device_map.cpp
+deleted file mode 100644
+index 9c53d24..0000000
+--- a/daemons/sessionservice/printerbackend/backend/device_map.cpp
++++ /dev/null
+@@ -1,348 +0,0 @@
+-#include "device_map.h"
+-
+-#include <QJsonParseError>
+-#include <QJsonDocument>
+-#include <QJsonObject>
+-#include <QJsonArray>
+-
+-#include "ukui_printer.h"
+-#include "udev_devices.h"
+-#include "common.h"
+-#include "system_notification.h"
+-#include "event_notify_monitor.h"
+-#include "global_variable.h"
+-#include "gsettings_monitor.h"
+-#include "lpinfo_browser.h"
+-
+-QJsonArray qStringListToQJsonArray(const QStringList &list)
+-{
+-    return QJsonArray::fromStringList(list);
+-}
+-
+-QStringList qJsonArrayToQStringList(const QJsonArray &array)
+-{
+-    QStringList list;
+-    for (auto i : array) {
+-        if (i.isString()) {
+-            list.append(i.toString());
+-        }
+-    }
+-    return list;
+-}
+-
+-DeviceMap::DeviceMap(/* args */)
+-{
+-    if(!GsettingsMonitor::getInstance()->gsettingsCheck()) {
+-        qDebug() << "GSettings init failed!";
+-        exit(0);
+-    }
+-
+-    connect(EventNotifyMonitor::getInstance(), &EventNotifyMonitor::rhPrinterRemoved,
+-            this , &DeviceMap::doPrinterRemove);
+-    connect(EventNotifyMonitor::getInstance(), &EventNotifyMonitor::rhPrinterAdded,
+-            this , &DeviceMap::doPrinterAdd);
+-
+-
+-    m_devMp.clear();
+-    // 开机启动重新扫一遍设备 更新gsetting
+-    generateMap();
+-    jsonWrite();
+-    // checkPathAdd("/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.4");
+-}
+-
+-DeviceMap::~DeviceMap()
+-{
+-
+-}
+-
+-bool DeviceMap::updateDevMpFromPrinterName(const QString &printerName)
+-{
+-    bool res = false;
+-    QList<UkuiUsbPrinter> printers;
+-    UkuiPrinterManager::getInstance().enumPrinters(printers);
+-    for (const auto& prt : printers) {
+-        if (printerName.isEmpty() == false && printerName != prt.name) {
+-            continue;
+-        }
+-
+-
+-        for (auto it = m_devMp.begin(); it != m_devMp.end(); it++) {
+-            if (it.key() == prt.device_uri) {
+-                if(it.value().printerNames.contains(prt.name) == false) {
+-                    res = true;
+-                    it.value().printerNames.append(prt.name);
+-                }
+-                break;
+-            }
+-        }
+-        break;
+-    }
+-    return res;
+-}
+-
+-bool DeviceMap::generateMap()
+-{
+-    QStringList paths = list_printers_dev_path();
+-    QStringList uris;
+-    for (const auto& path : paths) {
+-        DevInfo info;
+-        info.path = path;
+-        info.deviceId = get_device_id_from_path(path);
+-        if (info.deviceId.isEmpty()) {
+-            continue;
+-        }
+-        auto mp = LpinfoBrowser::findDirectPrinter();
+-        for (auto dev : mp) {
+-            if (dev.ieee1284ID == info.deviceId) {
+-                info.uri = dev.uri;
+-            }
+-        }
+-        if (!info.uri.isEmpty()) {
+-            m_devMp.insert(info.uri, info);
+-        }
+-    }
+-
+-    updateDevMpFromPrinterName();
+-    return true;
+-}
+-
+-void DeviceMap::getJsonVerison(const QJsonObject &jsonObject)
+-{
+-    for (auto it = jsonObject.begin(); it != jsonObject.end(); it++) {
+-        if (it.key().isEmpty()) {
+-            continue;
+-        }
+-        if (it.key() == "version" && it.value().isString()) {
+-            m_jsonVersion = it.value().toString();
+-            break;
+-        }
+-    }
+-    return ;
+-}
+-
+-bool DeviceMap::jsonReadFromOldGsettings(const QJsonObject &jsonObject)
+-{
+-    this->m_devMp.clear();
+-    for (auto it = jsonObject.begin(); it != jsonObject.end(); it++) {
+-        if (!it.value().isObject() || it.key().isEmpty())
+-            continue;
+-        QJsonObject subObj = it.value().toObject();
+-        DevInfo info;
+-        if (subObj.contains("path") && subObj.value("path").isString()
+-         && subObj.contains("uri")  && subObj.value("uri").isString()
+-         && subObj.contains("deviceId") && subObj.value("deviceId").isString()) {
+-            info.path = subObj.value("path").toString();
+-            info.uri  = subObj.value("uri").toString();
+-            info.deviceId  = subObj.value("deviceId").toString();
+-            info.printerNames.append(it.key());
+-        }
+-        else {
+-            continue;
+-        }
+-        if (m_devMp.contains(info.uri)) {
+-            m_devMp[info.uri].printerNames.append(info.printerNames);
+-        }
+-        else {
+-            this->m_devMp.insert(info.uri, info);
+-        }
+-    }
+-
+-    if (this->m_devMp.isEmpty()) {
+-        return false;
+-    }
+-    return true;
+-}
+-
+-bool DeviceMap::jsonRead()
+-{
+-    QByteArray s = GsettingsMonitor::getInstance()->printerDevicesGet();
+-
+-    QJsonParseError jsonParserError;
+-    QJsonDocument jsonDocument = QJsonDocument::fromJson(s, &jsonParserError);
+-
+-    if (jsonDocument.isNull() || jsonParserError.error != QJsonParseError::NoError) {
+-        qDebug () << "json解析失败";
+-        return false;
+-    }
+-    if (!jsonDocument.isObject()) {
+-        return false;
+-    }
+-    QJsonObject jsonObject = jsonDocument.object();
+-    qDebug() << jsonObject;
+-    if (jsonObject.size() == 0) {
+-        qDebug() << "json is empty!";
+-        return false;
+-    }
+-
+-    getJsonVerison(jsonObject);
+-    if (m_jsonVersion.isEmpty()) {
+-        return jsonReadFromOldGsettings(jsonObject);
+-    }
+-
+-    this->m_devMp.clear();
+-
+-    for (auto it = jsonObject.begin(); it != jsonObject.end(); it++) {
+-        if (!it.value().isObject() || it.key().isEmpty())
+-            continue;
+-        if (it.key() == "uris" && it.value().isObject()) {
+-            updateDevMpFromJson(it.value().toObject());
+-        }
+-    }
+-
+-    if (this->m_devMp.isEmpty()) {
+-        return false;
+-    }
+-    return true;
+-}
+-
+-void DeviceMap::updateDevMpFromJson(const QJsonObject &jsonObject)
+-{
+-    for (auto it = jsonObject.begin(); it != jsonObject.end(); it++) {
+-        if (!it.value().isObject() || it.key().isEmpty())
+-            continue;
+-        QJsonObject subObj = it.value().toObject();
+-        DevInfo info;
+-        info.uri = it.key();
+-        if (subObj.contains("path") && subObj.value("path").isString()) {
+-            info.path = subObj.value("path").toString();
+-        }
+-        if (subObj.contains("deviceId") && subObj.value("deviceId").isString()) {
+-            info.deviceId = subObj.value("deviceId").toString();
+-        }
+-        if (subObj.contains("printers") && subObj.value("printers").isArray()) {
+-            info.printerNames = qJsonArrayToQStringList(subObj.value("printers").toArray());
+-        }
+-        this->m_devMp.insert(info.uri, info);
+-    }
+-}
+-
+-QJsonObject DeviceMap::writeDevInfoToJson(const DevInfo &info)
+-{
+-    QJsonObject jsonObject;
+-    jsonObject.insert("deviceId", info.deviceId);
+-    jsonObject.insert("path", info.path);
+-    jsonObject.insert("printers",qStringListToQJsonArray(info.printerNames));
+-    return jsonObject;
+-}
+-
+-int DeviceMap::jsonWrite()
+-{
+-    QJsonObject jsonObject;
+-    jsonObject.insert("version", "0.0.1");
+-    QJsonObject subObj;
+-    QMap<QString,DevInfo>::iterator it;
+-    for (it = this->m_devMp.begin(); it != this->m_devMp.end(); it++) {
+-        subObj.insert(it.key(), writeDevInfoToJson(it.value()));
+-    }
+-    jsonObject.insert("uris", subObj);
+-
+-    QJsonDocument jsonDoc;
+-    jsonDoc.setObject(jsonObject);
+-
+-    GsettingsMonitor::getInstance()->printerDevicesSet(jsonDoc.toJson());
+-    return jsonObject.size();
+-}
+-
+-bool DeviceMap::checkPathAdd(const QString &path)
+-{
+-    return checkPath("add", path);
+-}
+-
+-bool DeviceMap::checkPathRemove(const QString &path)
+-{
+-    return checkPath("remove", path);
+-}
+-
+-bool DeviceMap::checkPath(const QString &handle, const QString &path)
+-{
+-    if (handle.isEmpty() || path.isEmpty())
+-        return false;
+-    jsonRead();
+-    QStringList prts;
+-    QMap<QString,DevInfo>::iterator it;
+-
+-    bool configNeedUpdate = false;
+-    // 插入usb的时候需要使用device_id检测
+-    // 拔出usb的时候使用path检测
+-    if (handle == "add") {
+-        QString deviceId = get_device_id_from_path(path);
+-        if (deviceId.isEmpty()) {
+-            return false;
+-        }
+-
+-        for (it = this->m_devMp.begin(); it != this->m_devMp.end(); it++) {
+-            if (it.value().deviceId == deviceId) {
+-                prts.append(it.value().printerNames);
+-                if (it.value().path != path) {
+-                    configNeedUpdate = true;
+-                    it.value().path = path;
+-                }
+-            }
+-        }
+-    } else if (handle == "remove") {
+-        for (it = this->m_devMp.begin(); it != this->m_devMp.end(); it++) {
+-            if (it.value().path == path) {
+-                prts.append(it.value().printerNames);
+-                it.value().path.clear();
+-                configNeedUpdate = true;
+-            }
+-        }
+-    }
+-
+-    if (configNeedUpdate) {
+-        jsonWrite();
+-    }
+-
+-    QString msg;
+-    int prtsCnt = prts.size();
+-    if (prtsCnt == 0)
+-        return false;
+-    if (prtsCnt == 1)
+-        msg = tr("Printer");
+-    else if (prtsCnt > 1)
+-        msg = tr("Printers");
+-    if (handle == "add")
+-        msg += QString(" ") + tr("plug-in:") + QString(" ") + prts.join(',');
+-    else if (handle == "remove")
+-        msg += QString(" ") + tr("unplugged:") + QString(" ") + prts.join(',');
+-
+-    SystemNotification().sendMessage(msg);
+-    return true;
+-}
+-
+-void DeviceMap::doPrinterRemove(const QString &prtName)
+-{
+-    jsonRead();
+-    for (auto it = m_devMp.begin(); it != m_devMp.end();) {
+-        it.value().printerNames.removeAll(prtName);
+-        if (it.value().path.isEmpty() && it.value().printerNames.isEmpty()) {
+-            it = m_devMp.erase(it);
+-        } else {
+-            it++;
+-        }
+-    }
+-
+-    jsonWrite();
+-    return ;
+-}
+-
+-void DeviceMap::doPrinterAdd(const QString &prtName)
+-{
+-    m_devMp.clear();
+-    generateMap();
+-    jsonWrite();
+-    return ;
+-}
+-
+-DeviceMap *DeviceMap::getInstance()
+-{
+-    static DeviceMap *instance = nullptr;
+-    static QThread *thread;
+-    if (nullptr == instance) {
+-        instance = new DeviceMap();
+-        thread = new QThread();
+-        instance->moveToThread(thread);
+-        thread->start();
+-    }
+-    return instance;
+-}
+diff --git a/daemons/sessionservice/printerbackend/backend/device_map.h b/daemons/sessionservice/printerbackend/backend/device_map.h
+deleted file mode 100644
+index bcd8eb4..0000000
+--- a/daemons/sessionservice/printerbackend/backend/device_map.h
++++ /dev/null
+@@ -1,69 +0,0 @@
+-#ifndef DEVICE_MAP_H
+-#define DEVICE_MAP_H
+-
+-#include <QString>
+-#include <QStringList>
+-#include <QMap>
+-#include <QObject>
+-
+-// old json format:
+-// {
+-//     "HP-LaserJet-M506": {
+-//         "deviceId": "MFG:Hewlett-Packard;CMD:PJL,PCLXL,PCL,PDF,POSTSCRIPT;CID:HPLJPDLV1;MDL:HP LaserJet M506;CLS:PRINTER;DES:HP LaserJet M506;MCT:PR;MCL:EN;MCV:2.3;",
+-//         "path": "/devices/pci0000:00/0000:00:14.0/usb1/1-6",
+-//         "uri": "usb://HP/LaserJet%20M506?serial=PHC8LC5BFW"
+-//     }
+-// }
+-
+-
+-// new json format:
+-// {
+-//     "version": "0.0.1",
+-//     "uris": {
+-//         "usb://HP/LaserJet%20M506?serial=PHC8LC5BFW": {
+-//             "deviceId": "MFG:Hewlett-Packard;CMD:PJL,PCLXL,PCL,PDF,POSTSCRIPT;CID:HPLJPDLV1;MDL:HP LaserJet M506;CLS:PRINTER;DES:HP LaserJet M506;MCT:PR;MCL:EN;MCV:2.3;",
+-//             "path": "/devices/pci0000:00/0000:00:14.0/usb1/1-6",
+-//             "printers": {
+-//                 "HP-LaserJet-M506",
+-//             }
+-//         }
+-//     }
+-// }
+-
+-class DeviceMap : public QObject
+-{
+-    Q_OBJECT
+-private:
+-    struct DevInfo
+-    {
+-        QStringList printerNames;
+-        QString path;
+-        QString uri;
+-        QString deviceId;
+-    };
+-
+-    QString m_jsonVersion{QString()};
+-    QMap<QString, DevInfo> m_devMp;
+-    bool generateMap();
+-    void getJsonVerison(const QJsonObject &jsonObject);
+-    bool jsonRead();
+-    bool jsonReadFromOldGsettings(const QJsonObject &jsonObject);
+-    void updateDevMpFromJson(const QJsonObject &jsonObject);
+-    QStringList getPrinterNameListFromJson(const QJsonObject &jsonObject);
+-    int jsonWrite();
+-    QJsonObject writeDevInfoToJson(const DevInfo &info);
+-    bool updateDevMpFromPrinterName(const QString &printerName = QString());
+-    DeviceMap(/* args */);
+-    
+-public:
+-    static DeviceMap *getInstance();
+-    bool checkPathAdd(const QString &path);
+-    bool checkPathRemove(const QString &path);
+-    bool checkPath(const QString &handle, const QString &path);
+-    ~DeviceMap();
+-public slots:
+-    void doPrinterRemove(const QString &prtName);
+-    void doPrinterAdd(const QString &prtName);
+-};
+-
+-#endif // DEVICE_MAP_H
+diff --git a/daemons/sessionservice/printerbackend/backend/event_notify_monitor.cpp b/daemons/sessionservice/printerbackend/backend/event_notify_monitor.cpp
+deleted file mode 100644
+index a209772..0000000
+--- a/daemons/sessionservice/printerbackend/backend/event_notify_monitor.cpp
++++ /dev/null
+@@ -1,551 +0,0 @@
+-#include <QDBusConnection>
+-#include "event_notify_monitor.h"
+-
+-static const char * const events[] = {
+-//    "job-created",
+-    "job-completed",
+-    "job-state-changed",
+-//    "job-state",
+-    "printer-added",
+-    "printer-deleted",
+-    "printer-state-changed"
+-};
+-
+-static const int events_num = sizeof(events) / sizeof(char *);
+-
+-const int SUBSCRIP_DURATION = 24*60*60;
+-
+-EventNotifyMonitor::EventNotifyMonitor()
+-    :m_subSequenceNum(1)
+-{
+-    m_cupsConnection = new CupsConnection4PPDs();
+-    m_requestHttp = m_cupsConnection->getCupsConnection();
+-    m_intervalDuration = new QTimer(this);
+-    m_intervalDuration->setTimerType(Qt::PreciseTimer);
+-    m_intervalDuration->setInterval((SUBSCRIP_DURATION - 100) * 1000);
+-    connect(m_intervalDuration,&QTimer::timeout, this, &EventNotifyMonitor::renewSubscription, Qt::UniqueConnection);
+-    m_subId = this->creatSubScription();
+-    m_intervalDuration->start();
+-}
+-EventNotifyMonitor::~EventNotifyMonitor()
+-{
+-    if (m_cupsConnection)
+-    {
+-        delete m_cupsConnection;
+-        m_cupsConnection = nullptr;
+-    }
+-    if (m_interval5)
+-    {
+-        m_interval5->stop();
+-    }
+-    if (m_intervalDuration)
+-    {
+-        m_intervalDuration->stop();
+-    }
+-    cancelSubscription();
+-}
+-EventNotifyMonitor *EventNotifyMonitor::getInstance()
+-{
+-    static EventNotifyMonitor *instance = nullptr;
+-    static QThread *thread;
+-    if (nullptr == instance) {
+-        instance = new EventNotifyMonitor();
+-        thread = new QThread();
+-        instance->moveToThread(thread);
+-        connect(instance, &EventNotifyMonitor::start,
+-                instance, &EventNotifyMonitor::detectStart);
+-
+-        thread->start();
+-    }
+-    return instance;
+-}
+-
+-void EventNotifyMonitor::detectStart()
+-{
+-    QDBusConnection::systemBus().connect("", "/com/redhat/PrinterSpooler", "com.redhat.PrinterSpooler", "PrinterAdded",    this, SIGNAL(rhPrinterAdded(QString)));
+-    QDBusConnection::systemBus().connect("", "/com/redhat/PrinterSpooler", "com.redhat.PrinterSpooler", "QueueChanged",    this, SIGNAL(rhQueueChanged(QString)));
+-    QDBusConnection::systemBus().connect("", "/com/redhat/PrinterSpooler", "com.redhat.PrinterSpooler", "PrinterRemoved",  this, SIGNAL(rhPrinterRemoved(QString)));
+-    QDBusConnection::systemBus().connect("", "/com/redhat/PrinterSpooler", "com.redhat.PrinterSpooler", "JobQueuedLocal",  this, SIGNAL(rhJobQueuedLocal(QString,uint,QString)));
+-    QDBusConnection::systemBus().connect("", "/com/redhat/PrinterSpooler", "com.redhat.PrinterSpooler", "JobStartedLocal", this, SIGNAL(rhJobStartedLocal(QString,uint,QString)));
+-
+-
+-    connect(this, &EventNotifyMonitor::rhPrinterAdded, this, &EventNotifyMonitor::insertUpdatePrinterName);
+-    connect(this, &EventNotifyMonitor::rhPrinterRemoved, this, &EventNotifyMonitor::insertUpdatePrinterName);
+-    connect(this, &EventNotifyMonitor::rhQueueChanged, this, &EventNotifyMonitor::insertUpdatePrinterName);
+-
+-    m_interval5 = new QTimer(this);
+-    m_interval5->setInterval(1*1000);
+-    connect(m_interval5, &QTimer::timeout, this, &EventNotifyMonitor::getAndSendNotify);
+-    m_interval5->start();
+-}
+-void EventNotifyMonitor::getAndSendNotify()
+-{
+-    auto res = this->getNotifications();
+-
+-    int notifySize = res.size();
+-    for (int i = 0 ; i < notifySize; ++i)
+-    {
+-        if (m_subSequenceNum <= res[i].notifySequenceNum)
+-        {
+-            qDebug() << "获取到通知!";
+-            auto notify = res[i];
+-            m_subSequenceNum = notify.notifySequenceNum + 1;
+-            qDebug() << "当前顺序号为:" << m_subSequenceNum;
+-
+-            QStringList notifyInfo;
+-            bool needNotifyFlag = notifyStructAnalysis(notify, notifyInfo);
+-
+-            if(needNotifyFlag)
+-            {
+-                emit getNotify(notifyInfo);
+-            }
+-
+-        }
+-        else
+-        {
+-            continue;
+-        }
+-    }
+-    return;
+-}
+-int EventNotifyMonitor::creatSubScription()
+-{
+-    qDebug() << "create subscription!";
+-    ipp_t *request = nullptr;
+-    ipp_t *answer = nullptr;
+-    ipp_attribute_t *attr = nullptr;
+-
+-    request = ippNewRequest (IPP_CREATE_PRINTER_SUBSCRIPTION);
+-    /*
+-     * The "printer-uri" attribute which defines the target for this operation
+-     */
+-    ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "/");
+-    /*
+-     * The credibility of authentication depends on the mechanism that
+-     * the Printer uses to obtain the user's name.
+-     */
+-    ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
+-    /*
+-     * Subscribed Event - an Event that the Subscribing Client expresses
+-     * interest in by making it a value of the "notify-events" attribute on
+-     *  a Subscription Object.
+-     */
+-    ippAddStrings (request, IPP_TAG_SUBSCRIPTION, IPP_TAG_KEYWORD, "notify-events", events_num, NULL, events);
+-    /*
+-     * This attribute's value is a type2 keyword indicating which
+-     * Pull Delivery Method is to be used.
+-     * "notify-recipient-uri" is for Push Delivery Methods only.
+-     * "notify-pull-method" is for Pull Delivery Methods only.
+-     */
+-    ippAddString (request, IPP_TAG_SUBSCRIPTION, IPP_TAG_KEYWORD, "notify-pull-method", NULL, "ippget");
+-    /*
+-     * The requested lease time in seconds for the Subscription Object
+-     */
+-    ippAddInteger (request, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-lease-duration", SUBSCRIP_DURATION);
+-    
+-    ippAddString (request, IPP_TAG_SUBSCRIPTION, IPP_TAG_URI, "notify-recipient-uri", NULL, "dbus://");
+-
+-    answer = cupsDoRequest (m_requestHttp, request, "/");
+-
+-    if (answer != NULL && ippGetStatusCode (answer) <= IPP_OK_CONFLICT) {
+-        if ((attr = ippFindAttribute (answer, "notify-subscription-id", IPP_TAG_INTEGER)) == NULL)
+-        {
+-            qDebug() << "No notify-subscription-id in response!\n";//这里应该错误退出
+-            exit(0);
+-        }
+-        else
+-        {
+-            qDebug() << "create subscription successed!";
+-            this->m_subId = ippGetInteger (attr, 0);//这个subID是订阅关联值,关键。
+-            qDebug() << "当前订阅ID为:" << this->m_subId;
+-        }
+-    }
+-
+-    if (answer)
+-    {
+-        ippDelete (answer);
+-    }
+-
+-    return m_subId;
+-}
+-
+-int EventNotifyMonitor::renewSubscription()
+-{
+-    ipp_t *request = nullptr, *answer = nullptr;
+-    ipp_attribute_t *attr = nullptr;
+-
+-    request = ippNewRequest (IPP_RENEW_SUBSCRIPTION);
+-    qDebug() << "renew subscription!";
+-
+-    ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "/");
+-
+-    ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
+-
+-    ippAddInteger (request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "notify-subscription-id", m_subId);
+-
+-    ippAddInteger (request, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-lease-duration", SUBSCRIP_DURATION);
+-
+-    answer = cupsDoRequest (m_requestHttp, request, "/");
+-
+-    if (answer != NULL && ippGetStatusCode (answer) == IPP_OK)
+-    {
+-        qDebug() << "renew subscription successed!";
+-        this->m_subId = ippGetInteger (attr, 0);//这个subID是订阅关联值,关键。
+-    }
+-    else
+-    {
+-        qDebug() << "renew subscription failed!";
+-        cancelSubscription();
+-        this->m_subId = creatSubScription();
+-        this->m_subSequenceNum = 1;
+-    }
+-
+-    if (answer)
+-    {
+-        ippDelete (answer);
+-    }
+-    return m_subId;
+-}
+-
+-void EventNotifyMonitor::cancelSubscription()
+-{
+-    ipp_t *request = nullptr, *answer = nullptr;
+-
+-    request = ippNewRequest (IPP_RENEW_SUBSCRIPTION);
+-    qDebug() << "cancel subscription!";
+-
+-    ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "/");
+-
+-    ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
+-
+-    ippAddInteger (request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "notify-subscription-id", m_subId);
+-
+-    answer = cupsDoRequest (m_requestHttp, request, "/");
+-
+-    if (answer)
+-    {
+-        ippDelete (answer);
+-    }
+-    return ;
+-}
+-
+-notifyVector EventNotifyMonitor::getNotifications()
+-{
+-    ipp_t *request = nullptr, *answer = nullptr;
+-    ipp_attribute_t *attr = nullptr;
+-
+-    request = ippNewRequest(IPP_GET_NOTIFICATIONS);
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", nullptr, "/");
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", nullptr, cupsUser());
+-    ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "notify-subscription-ids", m_subId);
+-    ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "notify-sequence-numbers", m_subSequenceNum);
+-    ippAddBoolean (request, IPP_TAG_EVENT_NOTIFICATION, "notify-wait", false);
+-    //Event Notification Attributes Group
+-    answer = cupsDoRequest(this->m_requestHttp, request, "/");
+-
+-    if(!answer)
+-    {
+-        qDebug() << ("cupsDoRequest请求失败!\n");
+-    }
+-    /* the Printer MUST reject the operation and return:
+-     * 'client-error-forbidden'
+-     * 'client-error-not-authenticated'
+-     * 'client-error-not-authorized'
+-     *  status code as appropriate.
+-     */
+-    if(ippFindAttribute(answer,"client-error-forbidden",IPP_TAG_INTEGER) != NULL)
+-    {
+-        qDebug() << ("CLIENT被拒绝!\n");
+-    }
+-    else if(ippFindAttribute(answer,"client-error-not-authenticated",IPP_TAG_INTEGER) != NULL)
+-    {
+-        qDebug() << ("CLIENT被拒绝!\n");
+-    }
+-    else if(ippFindAttribute(answer,"client-error-not-authorized",IPP_TAG_INTEGER) != NULL)
+-    {
+-        qDebug() << ("CLIENT被拒绝!\n");
+-    }
+-    else if(ippFindAttribute(answer,"client-error-not-found",IPP_TAG_INTEGER) != NULL)
+-    {
+-        qDebug() << ("CLIENT被拒绝!\n");
+-    }
+-    else if(ippFindAttribute(answer,"server-error-busy",IPP_TAG_INTEGER) != NULL)
+-    {
+-        qDebug() << ("CLIENT被拒绝!\n");
+-    }
+-    notifyVector eventVector = {};
+-    NotifyStruct event = {};
+-
+-    bool getNotificationsFlag = false;
+-    for (attr = ippFirstAttribute(answer); attr; attr = ippNextAttribute(answer))
+-    {
+-        if (ippGetGroupTag(attr) == IPP_TAG_EVENT_NOTIFICATION)
+-        {
+-            getNotificationsFlag = true;
+-            break;
+-        }
+-    }
+-    if (getNotificationsFlag)
+-    {
+-        for (attr = ippFirstAttribute(answer); attr != NULL; attr = ippNextAttribute (answer))
+-        {
+-            if (ippGetGroupTag(attr) == IPP_TAG_ZERO)
+-            {
+-                //End of Event;
+-                if (event.isVaild())
+-                {
+-                    qDebug() << ("获取到event_notification\n");
+-                    qDebug() << "subsequenceID is :" << event.subsequenceId;
+-                    eventVector.push_back(event);
+-
+-                    event.clear();
+-                    break;
+-                }
+-                else
+-                {
+-                    continue;
+-                }
+-
+-            }
+-            if (ippGetGroupTag(attr) == IPP_TAG_EVENT_NOTIFICATION)
+-            {
+-                auto AttrName = ippGetName(attr);
+-                qDebug() << "AttrName is : " << AttrName ;
+-                if (!QString::compare(AttrName, ""))
+-                {
+-                    qDebug() << "AttrName is : " << AttrName ;
+-                    qDebug() << "subscribedEvent is : " << event.subscribedEvent;
+-                }
+-                else if (!QString::compare(AttrName, "notify-charset"))
+-                {
+-                    event.charset = ippGetString (attr, 0, NULL);
+-                    qDebug() << "event.charset is " << event.charset ;
+-                }
+-                else if (!QString::compare(AttrName, "notify-natural-language"))
+-                {
+-                    event.lan = ippGetString (attr, 0, NULL);
+-                    qDebug() << "event.lan is " << event.lan ;
+-                }
+-                else if (!QString::compare(AttrName, "notify-subscription-id"))
+-                {
+-                    event.subsequenceId = ippGetInteger(attr, 0);
+-                    qDebug() << "event.subsequenceId is " << event.subsequenceId ;
+-                }
+-                else if (!QString::compare(AttrName, "notify-sequence-number"))
+-                {
+-                    event.notifySequenceNum = ippGetInteger(attr, 0);
+-                    qDebug() << "event.notifySequenceNum is " << event.notifySequenceNum ;
+-                }
+-                else if (!QString::compare(AttrName, "job-state"))
+-                {
+-                    event.jobState = ippGetInteger(attr, 0);
+-                    qDebug() << "event.jobState is " << event.jobState ;
+-                }
+-                else if (!QString::compare(AttrName, "job-name"))
+-                {
+-                    event.jobName = ippGetString (attr, 0, NULL);
+-                    qDebug() << "event.jobName is " << event.jobName ;
+-                }
+-                else if (!QString::compare(AttrName, "notify-subscribed-event"))
+-                {
+-                    event.subscribedEvent = ippGetString (attr, 0, NULL);
+-                    qDebug() << "event.subscribedEvent is " << event.subscribedEvent ;
+-                }
+-                else if (!QString::compare(AttrName, "printer-up-time"))
+-                {
+-                    qDebug() << "printer-up-time" << ippGetInteger(attr, 0);
+-                    continue;
+-                }
+-                else if (!QString::compare(AttrName, "notify-text"))
+-                {
+-                    event.notifyText = ippGetString (attr, 0, NULL);
+-                    qDebug() << "event.notifyText is " << event.notifyText ;
+-                }
+-                else if (!QString::compare(AttrName, "notify-printer-uri"))
+-                {
+-                    qDebug() << "notify-printer-uri : " << ippGetString (attr, 0, NULL);
+-                    continue;
+-                }
+-                else if (!QString::compare(AttrName, "printer-name"))
+-                {
+-                    event.printerName = ippGetString (attr, 0, NULL);
+-                    qDebug() << "event.printerName is " << event.printerName ;
+-                }
+-                else if (!QString::compare(AttrName, "printer-state"))
+-                {
+-                    event.printerState = ippGetInteger(attr, 0);
+-                    qDebug() << "event.printerState is " << event.printerState ;
+-                }
+-                else if (!QString::compare(AttrName, "printer-state-reasons"))
+-                {
+-                    event.printerStateChangedReason = ippGetString (attr, 0, NULL);
+-                    qDebug() << "printer-state-reasons : " << ippGetString (attr, 0, NULL);
+-                }
+-                else if (!QString::compare(AttrName, "printer-is-accepting-jobs"))
+-                {
+-                    qDebug() << "printer-is-accepting-jobs" << ippGetBoolean(attr, 0);
+-                    event.isAcceptingJobs = ippGetBoolean(attr, 0);
+-                    continue;
+-                }
+-                else if (!QString::compare(AttrName, "printer-is-accepting-jobs"))
+-                {
+-                    qDebug() << "printer-is-accepting-jobs" << ippGetInteger(attr, 0);
+-                    continue;
+-                }
+-                else
+-                {
+-                    qDebug() << "AttrName is :" << AttrName << "And continue!" ;
+-                    continue;
+-                }
+-            }
+-            else
+-            {
+-                continue;
+-            }
+-        }
+-    }
+-    if (event.isVaild())
+-    {
+-        qDebug() << ("获取到event_notification\n");
+-        qDebug() << "subsequenceID is :" << event.subsequenceId;
+-        eventVector.push_back(event);
+-
+-        event.clear();
+-    }
+-    ippDelete(answer);
+-    return eventVector;
+-}
+-
+-bool EventNotifyMonitor::notifyStructAnalysis(const NotifyStruct& curNotify, QStringList &outputInfo)
+-{
+-    QString title;
+-    QString content;
+-    bool needNotifyFlag = false;
+-    auto curSubscribedEvent = curNotify.subscribedEvent;
+-    auto curNotifyText = curNotify.notifyText;
+-    auto curPrinterName = curNotify.printerName;
+-    auto curJobName = curNotify.jobName;
+-    auto curReason = curNotify.printerStateChangedReason;
+-
+-    title = tr("Printer ") + curPrinterName;
+-
+-    if (!QString::compare(curSubscribedEvent, "job-state-changed"))
+-    {
+-        content = curJobName;
+-        content += " " + curNotifyText;
+-        if (!QString::compare((curNotifyText), "Now accepting jobs."))
+-        {
+-            needNotifyFlag = false;
+-        }
+-        else if (!QString::compare((curNotifyText), "Retrying job on same printer."))
+-        {
+-            needNotifyFlag = false;
+-        }
+-        else
+-        {
+-            needNotifyFlag = true;
+-        }
+-
+-    }
+-    else if (!QString::compare(curSubscribedEvent, "job-created"))
+-    {
+-        if ((curNotifyText).contains("Job created."))
+-        {
+-            content = tr("Job:");
+-            content += curJobName;
+-            content += tr("created!");
+-        }
+-        else
+-        {
+-            content = curJobName;
+-            content += " " + curNotifyText;
+-        }
+-        needNotifyFlag = true;
+-    }
+-    else if (!QString::compare(curSubscribedEvent, "job-completed"))
+-    {
+-        if ((curNotifyText).contains("Job completed."))
+-        {
+-            content = tr("Job:");
+-            content += curJobName;
+-            content += tr("completed!");
+-        }
+-        else
+-        {
+-            content = curJobName;
+-            content += " " + curNotifyText;
+-        }
+-        needNotifyFlag = true;
+-    }
+-    else if (!QString::compare(curSubscribedEvent, "printer-state-changed"))
+-    {
+-        title = tr("Printer ") + curPrinterName;
+-        if (!QString::compare((curNotifyText), "Now accepting jobs."))
+-        {
+-            needNotifyFlag = false;
+-        }
+-        else if ((curNotifyText).contains("state changed to idle"))
+-        {
+-            needNotifyFlag = false;
+-        }
+-        else if ((curNotifyText).contains("state changed to processing"))
+-        {
+-            needNotifyFlag = false;
+-        }
+-        else
+-        {
+-            if ((curReason).contains("state changed to idle"))
+-            {
+-                needNotifyFlag = false;
+-            }
+-            else if ((curReason).contains("toner-low-report"))
+-            {
+-                needNotifyFlag = false;
+-            }
+-            else if ((curReason).contains("toner-empty-error"))
+-            {
+-                needNotifyFlag = false;
+-            }
+-            else if ((curReason).contains("toner-empty-warning"))
+-            {
+-                needNotifyFlag = false;
+-            }
+-            else if ((curReason).contains("Retrying job on same printer"))
+-            {
+-                needNotifyFlag = false;
+-            }
+-            else if(!QString::compare((curReason), "none"))
+-            {
+-                needNotifyFlag = false;
+-            }
+-            else
+-            {
+-                content = curJobName;
+-                content += " " + curNotifyText;
+-                needNotifyFlag = true;
+-            }
+-        }
+-    }
+-    else if (!QString::compare(curSubscribedEvent, "printer-stopped"))
+-    {
+-        needNotifyFlag = false;
+-    }
+-    else if (!QString::compare(curSubscribedEvent, "printer-deleted"))
+-    {
+-        needNotifyFlag = false;
+-    }
+-    else if (!QString::compare(curSubscribedEvent, "printer-added"))
+-    {
+-        needNotifyFlag = false;
+-    }
+-
+-    outputInfo.push_back(title);
+-    outputInfo.push_back(content);
+-    return needNotifyFlag;
+-}
+-
+-
+-void  EventNotifyMonitor::insertUpdatePrinterName(const QString &printerName)
+-{
+-    // qDebug() << printerName;
+-}
+\ No newline at end of file
+diff --git a/daemons/sessionservice/printerbackend/backend/event_notify_monitor.h b/daemons/sessionservice/printerbackend/backend/event_notify_monitor.h
+deleted file mode 100644
+index b245bcd..0000000
+--- a/daemons/sessionservice/printerbackend/backend/event_notify_monitor.h
++++ /dev/null
+@@ -1,99 +0,0 @@
+-#ifndef EVENT_NOTIFY_MONITOR_H
+-#define EVENT_NOTIFY_MONITOR_H
+-
+-#include <QObject>
+-#include <QThread>
+-#include <QTimer>
+-#include "cupsconnection4ppds.h"
+-struct NotifyStruct
+-{
+-    NotifyStruct()
+-    {
+-        clear();
+-    }
+-    bool isVaildFlag = false;
+-    QString charset;
+-    QString lan;
+-    QString jobName;
+-    int jobState;
+-    int notifySequenceNum;
+-    QString subscribedEvent;
+-    QString notifyText;
+-    int printerisAcceptingJob;
+-    QString printerName;
+-    int printerState;
+-    QString printerStateChangedReason;
+-    int subsequenceId;
+-    int subId;
+-    bool isAcceptingJobs;
+-    void clear()
+-    {
+-        isVaildFlag = false;
+-        charset = "";
+-        lan = "";
+-        jobName = "";
+-        jobState = INT_MIN;
+-        notifySequenceNum = INT_MIN;
+-        subscribedEvent = "";
+-        notifyText = "";
+-        printerisAcceptingJob = INT_MIN;
+-        printerName = "";
+-        printerState = INT_MIN;
+-        isAcceptingJobs = false;
+-        printerStateChangedReason = "";
+-    }
+-    bool isVaild()
+-    {
+-        if (
+-            notifySequenceNum == INT_MIN ||
+-            subscribedEvent == "" ||
+-            notifyText == "" ||
+-            printerName == "" ||
+-            printerState == INT_MIN)
+-        {
+-            isVaildFlag = false;
+-            return isVaildFlag;
+-        }
+-        else
+-        {
+-            isVaildFlag = true;
+-            return isVaildFlag;
+-        }
+-    }
+-};
+-using notifyVector = std::vector<NotifyStruct>;
+-
+-class EventNotifyMonitor : public QThread
+-{
+-    Q_OBJECT
+-public:
+-    static EventNotifyMonitor *getInstance();
+-    ~EventNotifyMonitor();
+-    int creatSubScription();
+-    notifyVector getNotifications();
+-private:
+-    int m_subId;
+-    int m_subSequenceNum;
+-private:
+-    EventNotifyMonitor();
+-    bool notifyStructAnalysis(const NotifyStruct& curNotify, QStringList &outputInfo);
+-    void cancelSubscription();
+-    CupsConnection4PPDs *m_cupsConnection;
+-    http_t *m_requestHttp;
+-    QTimer *m_interval5;
+-    QTimer *m_intervalDuration;
+-
+-signals:
+-    void start();
+-    void getNotify(QStringList);
+-    void rhPrinterAdded(const QString &queueName);
+-    void rhPrinterRemoved(const QString &queueName);
+-    void rhQueueChanged(const QString &queueName);
+-private slots:
+-    void detectStart();
+-    void getAndSendNotify();
+-    int renewSubscription();
+-    void insertUpdatePrinterName(const QString &printerName);
+-};
+-
+-#endif // EVENT_NOTIFY_MONITOR_H
+diff --git a/daemons/sessionservice/printerbackend/backend/launch_printer.cpp b/daemons/sessionservice/printerbackend/backend/launch_printer.cpp
+deleted file mode 100644
+index f413a51..0000000
+--- a/daemons/sessionservice/printerbackend/backend/launch_printer.cpp
++++ /dev/null
+@@ -1,111 +0,0 @@
+-#include <QString>
+-#include <QStringList>
+-#include <QDataStream>
+-#include <QDBusConnection>
+-
+-#include "launch_printer.h"
+-#include "device_monitor.h"
+-#include "common.h"
+-#include "device_map.h"
+-#include "global_variable.h"
+-#include "system_notification.h"
+-#include "ukui_printer.h"
+-#include "lpinfo_browser.h"
+-#include "pop_window_manager.h"
+-#include "upload_helper.h"
+-
+-LaunchPrinter::LaunchPrinter(/* args */)
+-{
+-
+-}
+-
+-LaunchPrinter::~LaunchPrinter()
+-{
+-
+-}
+-
+-void LaunchPrinter::add(const QString &path)
+-{
+-    // "/devices/pci0000:00/0000:00:14.0/usb1/1-6"
+-    qDebug() << APP_PATH<<"add" << path;
+-    DeviceMap::getInstance()->checkPathAdd(path);
+-}
+-
+-void LaunchPrinter::remove(const QString &path)
+-{
+-    qDebug() <<  APP_PATH<<"remove" << path;
+-    DeviceMap::getInstance()->checkPathRemove(path);
+-}
+-
+-void LaunchPrinter::add_uri(const QString &path)
+-{
+-    qDebug() <<  APP_PATH<<"add_uri" << path;
+-}
+-
+-void LaunchPrinter::findPrePrinter()
+-{
+-    QList<UkuiUsbPrinter> printers;
+-    UkuiPrinterManager::getInstance().enumUsbPrinters(printers);
+-    QMap<QString, DeviceInformation> devicelist = LpinfoBrowser::getInstance()->findDirectPrinter();
+-
+-    // 如果之前安装过了, 就忽略
+-    for (const auto & device : devicelist) {
+-        if (device.deviceType == DeviceType::USB) {
+-            if (UkuiPrinterManager::getInstance().printerIsInstalled(device.uri, false, printers) == false)
+-                add_uri(device.uri);
+-        }
+-    }
+-}
+-
+-LaunchPrinter *LaunchPrinter::getInstance()
+-{
+-    static LaunchPrinter *instance = nullptr;
+-    static QThread *thread;
+-    if (nullptr == instance) {
+-        instance = new LaunchPrinter();
+-        thread = new QThread();
+-        thread->setObjectName("LaunchPrinter");
+-        instance->moveToThread(thread);
+-        QDBusConnection::sessionBus().connect("org.freedesktop.Notifications",
+-                                              "/org/freedesktop/Notifications",
+-                                              "org.freedesktop.Notifications", "ActionInvoked", instance,
+-                                              SLOT(actionInvokeSlot(quint32, QString)));
+-        thread->start();
+-    }
+-    return instance;
+-}
+-
+-void LaunchPrinter::actionInvokeSlot(quint32 id, QString actionkey)
+-{
+-    // kylin-printer-add-printer:syspath
+-    if (actionkey.contains("kylin-printer-add-printer:")) {
+-        qDebug() << actionkey;
+-        actionkey.remove("kylin-printer-add-printer:");
+-        PopWindowManager::getInstance()->installPrinter(actionkey);
+-    }
+-    // kylin-printer-print-test-page:deviceinfomation
+-    else if(actionkey.contains("kylin-printer-print-test-page:")) {
+-        qDebug() << actionkey;
+-        actionkey.remove("kylin-printer-print-test-page:");
+-        DeviceInformation info = unserializeDeviceInformation(actionkey);
+-        UkuiPrinterManager::getInstance().printTestPage(info.displayName);
+-        SystemNotification().sendMessage(tr("Is the test page printed successfully?"), tr("%1 print result confirmation").arg(info.displayName), -1,
+-                                         QStringList() << QString("kylin-printer-print-test-page-successfully:%1").arg(actionkey)
+-                                                       << tr("Yes")
+-                                                       << QString("kylin-printer-print-test-page-failed:%1").arg(actionkey)
+-                                                       << tr("No"));
+-    }
+-    // kylin-printer-print-test-page-successfully:deviceinfomation
+-    else if (actionkey.contains("kylin-printer-print-test-page-successfully:")) {
+-        qDebug() << actionkey;
+-        actionkey.remove("kylin-printer-print-test-page-successfully:");
+-        DeviceInformation info = unserializeDeviceInformation(actionkey);
+-        UploadHelper *u = new UploadHelper(info, 1);
+-        u->startWorker();
+-    }
+-    // kylin-printer-print-test-page-failed:deviceinfomation
+-    else if (actionkey.contains("kylin-printer-print-test-page-failed:")) {
+-        qDebug() << actionkey;
+-    }
+-
+-}
+diff --git a/daemons/sessionservice/printerbackend/backend/launch_printer.h b/daemons/sessionservice/printerbackend/backend/launch_printer.h
+deleted file mode 100644
+index 353cc3f..0000000
+--- a/daemons/sessionservice/printerbackend/backend/launch_printer.h
++++ /dev/null
+@@ -1,27 +0,0 @@
+-#ifndef LAUNCH_PRINTER_H
+-#define LAUNCH_PRINTER_H
+-
+-#include <QObject>
+-#include <QThread>
+-#include <QString>
+-
+-
+-class LaunchPrinter : public QObject
+-{
+-    Q_OBJECT
+-private:
+-    LaunchPrinter(/* args */);
+-private slots:
+-    void actionInvokeSlot(quint32 id, QString actionkey);
+-public:
+-    static LaunchPrinter *getInstance();
+-    ~LaunchPrinter();
+-    void add (const QString &);
+-    void remove (const QString &);
+-    void add_uri (const QString &);
+-    void findPrePrinter();
+-};
+-
+-
+-
+-#endif // LAUNCH_PRINTER_H
+diff --git a/daemons/sessionservice/printerbackend/cmake/common.cmake b/daemons/sessionservice/printerbackend/cmake/common.cmake
+deleted file mode 100644
+index 0ac263e..0000000
+--- a/daemons/sessionservice/printerbackend/cmake/common.cmake
++++ /dev/null
+@@ -1,51 +0,0 @@
+-function(find_kysdk_package prj_name kysdk_package_name)
+-    pkg_check_modules(${kysdk_package_name}_PKG ${kysdk_package_name})
+-    target_include_directories(${prj_name} PRIVATE ${${kysdk_package_name}_PKG_INCLUDE_DIRS})
+-    target_link_directories(${prj_name} PRIVATE ${${kysdk_package_name}_PKG_LIBRARY_DIRS})
+-    target_link_libraries(${prj_name} ${${kysdk_package_name}_PKG_LIBRARIES})
+-endfunction()
+-
+-
+-function(target_link_kysdk_libraries prj_name)
+-    find_package(PkgConfig REQUIRED)
+-
+-    find_kysdk_package(${prj_name} kysdk-qtwidgets)
+-    find_kysdk_package(${prj_name} kysdk-datacollect)
+-    find_kysdk_package(${prj_name} kysdk-log)
+-    find_kysdk_package(${prj_name} kysdk-utils)
+-    find_kysdk_package(${prj_name} kysdk-config)
+-    find_kysdk_package(${prj_name} kysdk-waylandhelper)
+-    find_kysdk_package(${prj_name} kysdk-alm)
+-    find_kysdk_package(${prj_name} kysdk-sysinfo)
+-    find_kysdk_package(${prj_name} kysdk-systime)
+-endfunction()
+-
+-function(target_link_glib_libraries prj_name)
+-    find_package(PkgConfig REQUIRED)
+-    pkg_search_module(GLIB REQUIRED glib-2.0)
+-    include_directories(${GLIB_INCLUDE_DIRS})
+-    target_link_libraries(${prj_name} PRIVATE "-lglib-2.0")
+-endfunction()
+-
+-function(target_link_qgsettings_libraries prj_name)
+-    find_package(PkgConfig REQUIRED)
+-    pkg_check_modules(QGSETTINGS REQUIRED IMPORTED_TARGET gsettings-qt)
+-    target_link_libraries(${prj_name} PRIVATE PkgConfig::QGSETTINGS)
+-endfunction()
+-
+-function(target_link_X11_libraries prj_name)
+-    target_link_libraries(${prj_name} -lX11)
+-endfunction()
+-
+-function(target_link_KWindowSystem_libraries prj_name)
+-    find_package(KF5WindowSystem REQUIRED)
+-    target_link_libraries(${prj_name} KF5::WindowSystem)
+-endfunction()
+-
+-function(target_link_smbclient_libraries prj_name)
+-    find_package(PkgConfig REQUIRED)
+-    pkg_check_modules(SMBCLIENT_PKG smbclient)
+-    target_include_directories(${prj_name} PRIVATE ${SMBCLIENT_PKG_INCLUDE_DIRS})
+-    target_link_directories(${prj_name} PRIVATE ${SMBCLIENT_PKG_LIBRARY_DIRS})
+-    target_link_libraries(${prj_name} ${SMBCLIENT_PKG_LIBRARIES})
+-endfunction()
+diff --git a/daemons/sessionservice/printerbackend/cmake/printer.cmake b/daemons/sessionservice/printerbackend/cmake/printer.cmake
+deleted file mode 100644
+index c365aff..0000000
+--- a/daemons/sessionservice/printerbackend/cmake/printer.cmake
++++ /dev/null
+@@ -1,26 +0,0 @@
+-function(target_link_snmp_libraries prj_name)
+-    find_library(NETSNMPAGENT "netsnmpagent")
+-    find_library(NETSNMPMIBS "netsnmpmibs")
+-    find_library(NETSNMP "netsnmp")
+-    target_link_libraries(${prj_name} ${NETSNMPAGENT} ${NETSNMPMIBS} ${NETSNMP})
+-endfunction()
+-
+-function(target_link_cups_libraries prj_name)
+-    target_link_libraries(${prj_name} PRIVATE "-lcups")
+-endfunction()
+-
+-function(target_link_cupsfilters_libraries prj_name)
+-    target_link_libraries(${prj_name} PRIVATE "-lcupsfilters")
+-endfunction()
+-
+-function(target_link_avahi_libraries prj_name)
+-    target_link_libraries(${prj_name} PRIVATE "-lavahi-common -lavahi-client")
+-endfunction()
+-
+-function(target_link_usb_libraries prj_name)
+-    target_link_libraries(${prj_name} PRIVATE "-lusb-1.0")
+-endfunction()
+-
+-function(target_link_udev_libraries prj_name)
+-    target_link_libraries(${prj_name} PRIVATE "-ludev")
+-endfunction()
+\ No newline at end of file
+diff --git a/daemons/sessionservice/printerbackend/common/base_info.cpp b/daemons/sessionservice/printerbackend/common/base_info.cpp
+deleted file mode 100644
+index 14195b1..0000000
+--- a/daemons/sessionservice/printerbackend/common/base_info.cpp
++++ /dev/null
+@@ -1,89 +0,0 @@
+-#include "base_info.h"
+-#include "common.h"
+-#include <QProcess>
+-#include <QDebug>
+-
+-BaseInfo::BaseInfo()
+-{
+-    init();
+-}
+-
+-BaseInfo::~BaseInfo()
+-{
+-
+-}
+-
+-void BaseInfo::setSystemVersion()
+-{
+-    m_systemVersion = "V10SP1";
+-
+-    // QProcess proc;
+-    // QString cmd = "lscpu";
+-    // proc.setEnvironment(QStringList() << "LANGUAGE=en_us");
+-    // proc.start(cmd);
+-    // proc.waitForFinished();
+-    // QString model;
+-    // QStringList outPut = QString(proc.readAllStandardOutput()).split("\n");
+-    // for (int i = 0; i < outPut.length(); ++i) {
+-    //     if (QString(outPut[ i ]).contains("Model name:")) {
+-    //         model = QString(QString(outPut[ i ]).split("Model name:")[ 1 ]).trimmed();
+-    //         break ;
+-    //     }
+-    // }
+-    // if (model.isEmpty()) {
+-    //     return ;
+-    // }
+-
+-    // if (!model.contains("kirin", Qt::CaseInsensitive) && model.contains("huawei", Qt::CaseInsensitive) && !model.contains("pangu", Qt::CaseInsensitive)) {
+-    //     return ;
+-    // }
+-
+-    // if (model.contains("pangux", Qt::CaseInsensitive) || model.contains("9000C", Qt::CaseInsensitive)) {
+-    //     m_systemVersion = "9000c";
+-    //     return;
+-    // }
+-
+-    // if (model.contains("m900", Qt::CaseInsensitive)) {
+-    //     m_systemVersion = "m900";
+-    //     return;
+-    // }
+-
+-    // if (model.contains("9006c", Qt::CaseInsensitive)) {
+-    //     m_systemVersion = "9006c";
+-    //     return;
+-    // }
+-
+-    // if (model.contains("990", Qt::CaseInsensitive)) {
+-    //     m_systemVersion = "990";
+-    //     return;
+-    // }
+-}
+-
+-void BaseInfo::init()
+-{
+-    m_appDisplayName = tr("Printer");
+-    m_debianArchitecture = getRetFromCommand(QStringList{"dpkg", "--print-architecture"});
+-    m_serverAddress = "api.kylinos.cn";
+-    setSystemVersion();
+-    qDebug() << "systemVersion is: " << m_systemVersion;
+-}
+-
+-QString BaseInfo::getAppDisplayName()
+-{
+-    return m_appDisplayName;
+-}
+-
+-QString BaseInfo::getDebianArchitecture()
+-{
+-    return m_debianArchitecture;
+-}
+-
+-QString BaseInfo::getServerAddress()
+-{
+-    return m_serverAddress;
+-}
+-
+-QString BaseInfo::getSystemVersion()
+-{
+-    return m_systemVersion;
+-}
+diff --git a/daemons/sessionservice/printerbackend/common/base_info.h b/daemons/sessionservice/printerbackend/common/base_info.h
+deleted file mode 100644
+index cd03b5d..0000000
+--- a/daemons/sessionservice/printerbackend/common/base_info.h
++++ /dev/null
+@@ -1,31 +0,0 @@
+-#ifndef BASEINFO_H
+-#define BASEINFO_H
+-
+-#include <QObject>
+-#include <QString>
+-#include "singleton.h"
+-
+-class BaseInfo : public QObject,
+-                 public Singleton<BaseInfo>
+-{
+-    Q_OBJECT
+-    friend class Singleton<BaseInfo>;
+-private:
+-    BaseInfo();
+-    ~BaseInfo() override;
+-
+-    void init();
+-    void setSystemVersion();
+-public:
+-    QString getAppDisplayName();
+-    QString getDebianArchitecture();
+-    QString getServerAddress();
+-    QString getSystemVersion();
+-private:
+-    QString m_appDisplayName;
+-    QString m_debianArchitecture;
+-    QString m_serverAddress;
+-    QString m_systemVersion;
+-};
+-
+-#endif  // BASEINFO_H
+diff --git a/daemons/sessionservice/printerbackend/common/common.cpp b/daemons/sessionservice/printerbackend/common/common.cpp
+deleted file mode 100644
+index 244b525..0000000
+--- a/daemons/sessionservice/printerbackend/common/common.cpp
++++ /dev/null
+@@ -1,261 +0,0 @@
+-#include <unistd.h>
+-#include <pwd.h>
+-#include <grp.h>
+-
+-#include <QStringList>
+-#include <QDebug>
+-#include <QProcess>
+-#include <QByteArray>
+-#include <QUrl>
+-#include <QEventLoop>
+-#include <QTimer>
+-#include "common.h"
+-#include "custom_qstring_converter.h"
+-
+-CheckRes checkCommand(const QStringList &command)
+-{
+-    if (command.isEmpty())
+-        return MAINWINDOW;
+-    else if(command.at(0).compare("debug")==0)
+-        return DEBUG;
+-    else if(command.at(0).compare("show")==0)
+-        return MAINWINDOW;
+-    else if (command.size() != 2) {
+-        return CHECK_FALSE;
+-    }
+-    else if (command.at(0).compare("add")==0
+-          || command.at(0).compare("remove")==0
+-          || command.at(0).compare("add_uri")==0 ) {
+-
+-        return POPWINDOW;
+-    }
+-    return CHECK_FALSE;
+-}
+-
+-QString getRetFromCommand(const QStringList &command)
+-{
+-    QString res;
+-    execCommand(command, &res, nullptr, nullptr, nullptr);
+-    return res;
+-}
+-
+-bool execCommand(const QStringList &command, QString *res, QString *standardError, int *exitCode, int *msec)
+-{
+-    QProcess proc;
+-    QStringList options;
+-    options << "-c"<< command.join(" ");
+-    proc.closeWriteChannel();
+-    proc.start("bash", options);
+-
+-    int mescs = 30000;
+-    if (msec) {
+-        mescs = *msec;
+-    }
+-    
+-    if (!proc.waitForFinished(mescs))
+-        return false;
+-    if (res) {
+-        *res = QString(proc.readAll());
+-        if((*res).right(1) == "\n")
+-            (*res).chop(1);
+-    }
+-    if (standardError) {
+-        *standardError = QString(proc.readAllStandardError());
+-        if((*standardError).right(1) == "\n")
+-            (*standardError).chop(1);
+-    }
+-    if (exitCode)
+-        *exitCode = proc.exitCode();
+-    proc.close();
+-    return true;
+-}
+-
+-void runCommand(const QStringList &command)
+-{
+-    QProcess proc;
+-    QStringList options;
+-    options << "-c"<< command.join(" ");
+-    proc.closeWriteChannel();
+-    proc.startDetached("bash", options);
+-
+-    return ;
+-}
+-
+-char *qstringTochar(const QString &qstr)
+-{
+-    CustomQStringConverter c;
+-    return c.QStringToChar(qstr);
+-}
+-
+-QString getUserName()
+-{
+-    uid_t uid;
+-    uid_t NO_UID = -1;
+-    struct passwd *pw;
+-
+-    errno = 0;
+-    uid = geteuid ();
+-    if (uid == -1 && errno) {
+-        qDebug () << "get uid error";
+-        return "";
+-    }
+-    pw = getpwuid (uid);
+-    if (!pw) {
+-        qDebug ("cannot find name for user ID %lu", (unsigned long int) uid);
+-        return "";
+-    }
+-    return QString(pw->pw_name);
+-}
+-
+-bool isAdministratorUser()
+-{
+-    static gid_t list[100];
+-    int n_gp = getgroups(100,list);
+-    struct group *gp;
+-    for(int i = 0;i < n_gp; i++) {
+-        gp = getgrgid(list[i]);
+-        if (!gp) {
+-            continue;
+-        }
+-        if(QString(gp->gr_name) == "lpadmin") {
+-            return true;
+-        }
+-    }
+-    return false;
+-}
+-
+-void specialDeviceCheck(QString &vendor, QString &model)
+-{
+-    vendor = vendor.trimmed();
+-    model = model.trimmed();
+-
+-    QMap<QString, QString>::const_iterator iter = mfgConvertMap.begin();
+-    while (iter != mfgConvertMap.end())
+-    {
+-        if (iter.key().compare(vendor, Qt::CaseInsensitive) == 0) {
+-            vendor = iter.value();
+-            break;
+-        }
+-        iter++;
+-    }
+-    if (model.indexOf("HP") == 0) {
+-        model.remove(0, 2);
+-        if (model.at(0) == " ") {
+-            model.remove(0, 1);
+-        }
+-    }
+-
+-    if (model.contains(" series")) {
+-        model.remove(" series");
+-    }
+-}
+-
+-QString devicePathCheck(const QString &path)
+-{
+-    QString ppath = path;
+-    if (ppath.contains("unbind@"))
+-        ppath.remove("unbind@");
+-    if (ppath.contains("bind@"))
+-        ppath.remove("bind@");
+-    return ppath;
+-}
+-
+-bool ipIsValid(const QString &ipAddr)
+-{
+-    QRegExp rx2("^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$");
+-    if (!rx2.exactMatch(ipAddr)) {
+-        return false;
+-    } else {
+-        QStringList pieces = ipAddr.split(".");
+-        bool ok = true;
+-        for (int i = 0; i < 4; i++) {
+-            int num = pieces.value(i).toInt(&ok, 10); //合理性判断
+-            if (!ok) {
+-                return false;
+-            }
+-            if (num > 255) {
+-                return false;
+-            }
+-        }
+-    }
+-    return true;
+-}
+-
+-bool printerNameIsLegal(const QString &printerName)
+-{
+-    if (printerName.contains(" ")
+-     || printerName.contains("/")
+-     || printerName.contains("\\")
+-     || printerName.contains("'")
+-     || printerName.contains('"')
+-     || printerName.contains("?")
+-     || printerName.contains("#")
+-     || printerName.contains("<")
+-     || printerName.contains(">")
+-     || printerName.toLocal8Bit().size() > 127) {
+-
+-        return false;
+-    }
+-    return true;
+-}
+-
+-bool processCheck(const QString &processName) {
+-    QString cmd = QString("ps -ef | grep %1 | grep -v grep | awk '{print $2}'").arg(processName);
+-    QString res = getRetFromCommand(cmd.split(" "));
+-    if (res != "" && res.toInt() > 0) {
+-        return true;
+-    }
+-    return false;
+-}
+-
+-QString getPackageVersion(const QString &packageName)
+-{
+-    QString res{QString()};
+-    if (packageName.isEmpty()) {
+-        return res;
+-    }
+-
+-    QString cmd = QString("/usr/bin/dpkg-query -W -f='${Status}\\n' %1").arg(packageName);
+-    QString status = ::getRetFromCommand(cmd.split(" "));
+-    if (status != "install ok installed") {
+-        qDebug() << QString("%1`s status is %2.").arg(packageName).arg(status);
+-        return res;
+-    }
+-
+-    // /usr/bin/dpkg-query -W -f='${Version}\n' kylin-printer
+-    cmd = QString("/usr/bin/dpkg-query -W -f='${Version}\\n' %1").arg(packageName);
+-    res = ::getRetFromCommand(cmd.split(" "));
+-    return  res;
+-}
+-
+-QString getDebVersion(const QString &debName)
+-{
+-    QString deb(debName);
+-    if (!deb.contains("_")) {
+-        return "";
+-    }
+-
+-    deb.remove(0, deb.indexOf("_") + 1);
+-
+-    if (!deb.contains("_")) {
+-        return "";
+-    }
+-
+-    QString debVersion = deb.left(deb.indexOf("_"));
+-    return debVersion;
+-}
+-
+-QString encodeUrl(const QString &in) {
+-    return QUrl::toPercentEncoding(in);
+-}
+-
+-QString decodeUrl(const QString &in) {
+-    return QUrl::fromPercentEncoding(in.toLocal8Bit());
+-}
+-
+-void delay_msec(unsigned int msec)
+-{
+-    QEventLoop loop;
+-    QTimer::singleShot(msec, &loop, SLOT(quit()));
+-    loop.exec();
+-}
+diff --git a/daemons/sessionservice/printerbackend/common/common.h b/daemons/sessionservice/printerbackend/common/common.h
+deleted file mode 100644
+index b511cf2..0000000
+--- a/daemons/sessionservice/printerbackend/common/common.h
++++ /dev/null
+@@ -1,82 +0,0 @@
+-#ifndef KYLIN_PRINTER_COMMON_H
+-#define KYLIN_PRINTER_COMMON_H
+-
+-#include <QString>
+-#include <QStringList>
+-#include <QMap>
+-#include <map>
+-
+-#define QTC(x) (qstringTochar(x))
+-
+-enum CheckRes{
+-    CHECK_FALSE = 0,
+-    MAINWINDOW,
+-    POPWINDOW,
+-    DEBUG,
+-};
+-
+-enum class PopWinStatus : int
+-{
+-    HIDE = 0,
+-    INSTALLING,
+-    INSTALL_SUCCESS,
+-    INSTALL_FAIL,
+-};
+-
+-CheckRes checkCommand(const QStringList &command);
+-
+-QString getRetFromCommand(const QStringList &command);
+-
+-bool execCommand(const QStringList &command, QString *res, QString *standardError, int *exitCode, int *msec);
+-
+-void runCommand(const QStringList &command);
+-
+-char *qstringTochar(const QString &qstr);
+-
+-QString getUserName();
+-
+-bool isAdministratorUser();
+-
+-const QMap<QString, QString> mfgConvertMap {
+-    {"Lenovo Image",    "Lenovo"},
+-    {"Fuji Xerox",      "Fuji-Xerox"},
+-    {"INDEX BRAILLE",   "INDEX-BRAILLE"},
+-    {"KONICA MINOLTA",  "KONICA-MINOLTA"},
+-    {"Hewlett-Packard", "HP"},
+-};
+-
+-void specialDeviceCheck(QString &vendor, QString &model);
+-
+-extern QString devicePathCheck(const QString &path);
+-
+-extern bool ipIsValid(const QString &ipAddr);
+-
+-extern bool printerNameIsLegal(const QString &printerName);
+-
+-enum class CommonStatusFlag : int
+-{
+-    NONE = 0,
+-    SUCCESS,
+-    FAIL,
+-
+-    ERROR_EXIST_SAME_PRINTER,
+-};
+-
+-struct CommonStatus {
+-    CommonStatusFlag status{CommonStatusFlag::NONE};
+-    QString message{QString()};
+-};
+-
+-extern bool processCheck(const QString &processName);
+-
+-extern QString getPackageVersion(const QString &packageName);
+-
+-extern QString getDebVersion(const QString &debName);
+-
+-extern QString encodeUrl(const QString &in);
+-
+-extern QString  decodeUrl(const QString &in);
+-
+-extern void delay_msec(unsigned int msec);
+-
+-#endif // KYLIN_PRINTER_COMMON_H
+diff --git a/daemons/sessionservice/printerbackend/common/custom_qstring_converter.cpp b/daemons/sessionservice/printerbackend/common/custom_qstring_converter.cpp
+deleted file mode 100644
+index b85291f..0000000
+--- a/daemons/sessionservice/printerbackend/common/custom_qstring_converter.cpp
++++ /dev/null
+@@ -1,20 +0,0 @@
+-#include "custom_qstring_converter.h"
+-
+-
+-CustomQStringConverter::CustomQStringConverter()
+-{
+-
+-}
+-
+-CustomQStringConverter::~CustomQStringConverter()
+-{
+-
+-}
+-
+-char *CustomQStringConverter::QStringToChar(const QString &qstr)
+-{
+-    QByteArray ba = qstr.toLocal8Bit();
+-    ba += '\0';
+-    m_buff.append(ba);
+-    return m_buff.back().data();
+-}
+\ No newline at end of file
+diff --git a/daemons/sessionservice/printerbackend/common/custom_qstring_converter.h b/daemons/sessionservice/printerbackend/common/custom_qstring_converter.h
+deleted file mode 100644
+index 8c43e0a..0000000
+--- a/daemons/sessionservice/printerbackend/common/custom_qstring_converter.h
++++ /dev/null
+@@ -1,17 +0,0 @@
+-#ifndef CUSTOM_QSTRING_CONVERTER
+-#define CUSTOM_QSTRING_CONVERTER
+-
+-#include <QString>
+-#include <QByteArrayList>
+-
+-class CustomQStringConverter {
+-public:
+-    CustomQStringConverter();
+-    ~CustomQStringConverter();
+-    char *QStringToChar(const QString &qstr);
+-private:
+-    QByteArrayList m_buff;
+-};
+-
+-
+-#endif // CUSTOM_QSTRING_CONVERTER
+\ No newline at end of file
+diff --git a/daemons/sessionservice/printerbackend/common/global_variable.h b/daemons/sessionservice/printerbackend/common/global_variable.h
+deleted file mode 100644
+index 8c960a3..0000000
+--- a/daemons/sessionservice/printerbackend/common/global_variable.h
++++ /dev/null
+@@ -1,51 +0,0 @@
+-#ifndef GLOBAL_VARIABLE
+-#define GLOBAL_VARIABLE
+-
+-#include <QString>
+-#include <qglobal.h>
+-
+-static QString getPlatForm(void)
+-{
+-    QString platform{QString()};
+-
+-#if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0))
+-    platform = "V10Professional";
+-#else
+-    platform = "V10";
+-#endif
+-
+-
+-    // char *projectName = kdk_system_get_projectName();
+-    // if (projectName == NULL) {
+-    //     return platform;
+-    // }
+-
+-    // platform = QString(projectName);
+-
+-    // free(projectName);
+-
+-    return platform;
+-}
+-
+-#ifdef PROJECT_NAME
+-__attribute__((unused)) static const QString APP_NAME(PROJECT_NAME);
+-#else
+-__attribute__((unused)) static const QString APP_NAME("empty");
+-#endif
+-
+-__attribute__((unused)) static const QString APP_ICON_NAME(APP_NAME);
+-
+-// system info
+-__attribute__((unused)) static const QString SYSTEM_VERSION(getPlatForm());
+-
+-
+-
+-// binary path
+-#ifdef TEST_DEBUG
+-__attribute__((unused)) static const QString APP_PATH(QString("%1/%2").arg(PROJECT_BINARY_DIR).arg(APP_NAME));
+-#else
+-__attribute__((unused)) static const QString APP_PATH(QString("/usr/bin/%1").arg(APP_NAME));
+-#endif
+-
+-
+-#endif // GLOBAL_VARIABLE
+diff --git a/daemons/sessionservice/printerbackend/common/singleton.h b/daemons/sessionservice/printerbackend/common/singleton.h
+deleted file mode 100644
+index 90a6fdc..0000000
+--- a/daemons/sessionservice/printerbackend/common/singleton.h
++++ /dev/null
+@@ -1,18 +0,0 @@
+-#pragma once
+-
+-template<typename T>
+-class Singleton {
+-public:
+-    static T& instance() {
+-        static T instance;
+-        return instance;
+-    }
+-
+-protected:
+-    Singleton() {}
+-    virtual ~Singleton() {}
+-
+-private:
+-    Singleton(const Singleton&) = delete;
+-    Singleton& operator= (const Singleton) = delete;
+-};
+diff --git a/daemons/sessionservice/printerbackend/common/uri.cpp b/daemons/sessionservice/printerbackend/common/uri.cpp
+deleted file mode 100644
+index 076feaa..0000000
+--- a/daemons/sessionservice/printerbackend/common/uri.cpp
++++ /dev/null
+@@ -1,138 +0,0 @@
+-#include "uri.h"
+-#include "common.h"
+-
+-Uri::Uri(const QString &str) :
+-    m_rawString(str)
+-{
+-    scheme = m_rawString.left(m_rawString.indexOf(uriSplit));
+-    protocolType = protocolMap[scheme];
+-    getDeviceType();
+-    if (protocolType == ProtocolType::IPP
+-     || protocolType == ProtocolType::IPPS
+-     || protocolType == ProtocolType::SOCKET) {
+-
+-        getIpAddress();
+-    }
+-}
+-
+-Uri::~Uri()
+-{
+-
+-}
+-
+-DeviceType Uri::getDeviceType()
+-{
+-    switch (protocolType)
+-    {
+-    case ProtocolType::NONE:
+-        deviceType = DeviceType::NONE;
+-        break;
+-    case ProtocolType::LPD:
+-        deviceType = DeviceType::LPD;
+-        break;
+-    case ProtocolType::IPP:
+-    case ProtocolType::IPPS:
+-        deviceType = DeviceType::IPP;
+-        // driverless uri:
+-        // maybe ipp://printername(id)._ipp._tcp.local/
+-        // or ipps://printername(serial)._ipps._tcp.local/
+-        if (m_rawString.contains("._ipp._tcp.local") || m_rawString.contains("._ipps._tcp.local")) {
+-
+-            QString host = m_rawString.right(m_rawString.size() - uriSplit.size() - m_rawString.indexOf(uriSplit));
+-            if (host.isEmpty()) {
+-                break;
+-            }
+-
+-            while (host[0] == "/") {
+-                host.remove(0, 1);
+-            }
+-
+-            if (host.contains("/")) {
+-                host = host.left(host.indexOf("/"));
+-            }
+-
+-            if (host.isEmpty()) {
+-                break;
+-            }
+-
+-            host.remove("._ipp._tcp.local");
+-            host.remove("._ipps._tcp.local");
+-
+-            if (!host.isEmpty()) {
+-                driverlessDomain = decodeUrl(host);
+-                deviceType = DeviceType::DRIVERLESS;
+-            }
+-        }
+-        break;
+-    case ProtocolType::HTTP:
+-    case ProtocolType::HTTPS:
+-        deviceType = DeviceType::HTTP;
+-        break;
+-    case ProtocolType::SOCKET:
+-        deviceType = DeviceType::SOCKET;
+-        break;
+-    case ProtocolType::DNSSD:
+-        deviceType = DeviceType::DNSSD;
+-        break;
+-    case ProtocolType::SERIAL:
+-    case ProtocolType::PARALLEL:
+-        deviceType = DeviceType::SERIAL_AND_PRALALLEL;
+-        break;
+-    case ProtocolType::SMB:
+-        deviceType = DeviceType::SMB;
+-        break;
+-    case ProtocolType::USB:
+-        deviceType = DeviceType::USB;
+-        break;
+-    case ProtocolType::CUPS_PDF:
+-    case ProtocolType::CUPS_BRF:
+-        deviceType = DeviceType::VIRTUAL;
+-        break;
+-    case ProtocolType::GUTENPRINT:
+-        deviceType = DeviceType::GUTENPRINT;
+-        break;
+-    default:
+-        deviceType = DeviceType::NONE;
+-        break;
+-    }
+-    return deviceType;
+-}
+-
+-QString Uri::getIpAddress()
+-{
+-    if (protocolType != ProtocolType::IPP
+-     && protocolType != ProtocolType::IPPS
+-     && protocolType != ProtocolType::SOCKET) {
+-
+-        return QString();
+-    }
+-
+-    QString host = m_rawString.right(m_rawString.size() - uriSplit.size() - m_rawString.indexOf(uriSplit));
+-    if (host.isEmpty()) {
+-        return QString();
+-    }
+-
+-    while (host[0] == "/") {
+-        host.remove(0, 1);
+-    }
+-
+-    if (host.contains("/")) {
+-        host = host.left(host.indexOf("/"));
+-    }
+-
+-    if (host.isEmpty()) {
+-        return QString();
+-    }
+-
+-    if (host.contains(":")) {
+-        host = host.split(":").at(0);
+-    }
+-
+-    if (!ipIsValid(host)) {
+-        return QString();
+-    }
+-
+-    ipAddress = host;
+-
+-    return ipAddress;
+-}
+diff --git a/daemons/sessionservice/printerbackend/common/uri.h b/daemons/sessionservice/printerbackend/common/uri.h
+deleted file mode 100644
+index f86d472..0000000
+--- a/daemons/sessionservice/printerbackend/common/uri.h
++++ /dev/null
+@@ -1,94 +0,0 @@
+-#ifndef CUSTOM_URI
+-#define CUSTOM_URI
+-
+-#include <QString>
+-#include <QMap>
+-
+-
+-enum class DeviceType : int {
+-    NONE = 0,
+-    USB,
+-    IPP,
+-    SOCKET,
+-    DRIVERLESS,
+-    SERIAL_AND_PRALALLEL,
+-    SMB,
+-    LPD,
+-    HTTP,
+-    IPP_REMOTE,
+-    DNSSD,
+-    GUTENPRINT,
+-    VIRTUAL,
+-};
+-
+-const QMap<QString, DeviceType> deviceTypeMap {
+-    {"none",                DeviceType::NONE},
+-    {"usb",                 DeviceType::USB},
+-    {"ipp",                 DeviceType::IPP},
+-    {"socket",              DeviceType::SOCKET},
+-    {"driverless",          DeviceType::DRIVERLESS},
+-    {"serial_and_parallel", DeviceType::SERIAL_AND_PRALALLEL},
+-    {"smb",                 DeviceType::SMB},
+-    {"lpd",                 DeviceType::LPD},
+-    {"virtual",             DeviceType::VIRTUAL},
+-    {"http",                DeviceType::HTTP},
+-    {"ipp_remote",          DeviceType::IPP_REMOTE},
+-    {"dnssd",               DeviceType::DNSSD},
+-    {"gutenprint",          DeviceType::GUTENPRINT},
+-};
+-
+-enum class ProtocolType : int {
+-    NONE = 0,
+-    LPD, // lpd://${打印机网络节点}/${打印机服务}
+-    IPP, // ipp://${IP}:${端口}/ipp/print
+-    IPPS,
+-    HTTP, // http://${IP}
+-    HTTPS,
+-    SOCKET, // socket://${IP}:${端口}
+-    DNSSD, // dnssd://${打印机名称}._ipp._tcp.local/?uuid=${UUID}
+-    SERIAL,
+-    PARALLEL,
+-    SMB,
+-    USB,
+-    CUPS_PDF,
+-    CUPS_BRF,
+-    GUTENPRINT,
+-};
+-
+-const QMap<QString, ProtocolType> protocolMap {
+-    {"none",             ProtocolType::NONE},
+-    {"lpd",              ProtocolType::LPD},
+-    {"ipp",              ProtocolType::IPP},
+-    {"ipps",             ProtocolType::IPPS},
+-    {"http",             ProtocolType::HTTP},
+-    {"https",            ProtocolType::HTTPS},
+-    {"socket",           ProtocolType::SOCKET},
+-    {"dnssd",            ProtocolType::DNSSD},
+-    {"serial",           ProtocolType::SERIAL},
+-    {"parallel",         ProtocolType::PARALLEL},
+-    {"smb",              ProtocolType::SMB},
+-    {"usb",              ProtocolType::USB},
+-    {"cups-pdf",         ProtocolType::CUPS_PDF},
+-    {"cups-brf",         ProtocolType::CUPS_BRF},
+-    {"gutenprint53+usb", ProtocolType::GUTENPRINT},
+-};
+-
+-class Uri {
+-private:
+-    const QString uriSplit = ":/";
+-public:
+-    Uri(const QString &str);
+-    ~Uri();
+-    QString scheme{QString()};
+-    ProtocolType protocolType{ProtocolType::NONE};
+-    DeviceType deviceType{DeviceType::NONE};
+-    QString driverlessDomain{QString()};
+-    QString ipAddress{QString()};
+-private:
+-    QString m_rawString{QString()};
+-    DeviceType getDeviceType();
+-    QString getIpAddress();
+-};
+-
+-
+-#endif // CUSTOM_URI
+\ No newline at end of file
+diff --git a/daemons/sessionservice/printerbackend/data/kylin-os-manager-printer-settings.gschema.xml b/daemons/sessionservice/printerbackend/data/kylin-os-manager-printer-settings.gschema.xml
+deleted file mode 100644
+index c93b25b..0000000
+--- a/daemons/sessionservice/printerbackend/data/kylin-os-manager-printer-settings.gschema.xml
++++ /dev/null
+@@ -1,20 +0,0 @@
+-<schemalist gettext-domain="kylin-os-manager-printer-settings">
+-     <schema id="kylin.os.manager.printer.settings"  path="/kylin/os/manager/printer/settings/">
+-          <key name="ip" type="s">
+-               <default>"api.kylinos.cn"</default>
+-               <summary>ipAddress</summary>
+-               <description>ipAddress</description>
+-          </key>
+-          <key name="printers" type="s">
+-               <default>"{}"</default>
+-               <summary></summary>
+-               <description></description>
+-          </key>
+-          <key name="show-protocols" type="as">
+-               <default>[]</default>
+-               <summary></summary>
+-               <description></description>
+-          </key>
+-          
+-     </schema>
+-</schemalist>
+diff --git a/daemons/sessionservice/printerbackend/device_manager/device_information.cpp b/daemons/sessionservice/printerbackend/device_manager/device_information.cpp
+deleted file mode 100644
+index 1bd0c7a..0000000
+--- a/daemons/sessionservice/printerbackend/device_manager/device_information.cpp
++++ /dev/null
+@@ -1,403 +0,0 @@
+-#include <string>
+-
+-#include <QtNetwork/QNetworkAccessManager>
+-#include <QtNetwork/QNetworkRequest>
+-#include <QtNetwork/QNetworkReply>
+-#include <QEventLoop>
+-
+-#include <QJsonArray>
+-#include <QJsonDocument>
+-#include <QJsonParseError>
+-#include <QJsonValue>
+-#include <QJsonObject>
+-#include <QJsonArray>
+-
+-#include <QTimer>
+-#include <QSysInfo>
+-#include <QByteArray>
+-#include <QDataStream>
+-#include <QtMath>
+-
+-#include "device_information.h"
+-#include "global_variable.h"
+-#include "gsettings_monitor.h"
+-#include "information_collector.h"
+-#include "base_info.h"
+-
+-QString DeviceInformation::serialize() const
+-{
+-    QJsonObject jsonObject;
+-    jsonObject["displayName"]       = this->displayName;
+-    jsonObject["userChoosePpdName"] = this->userChoosePpdName;
+-    jsonObject["pid"]               = this->PID;
+-    jsonObject["vid"]               = this->VID;
+-    jsonObject["manufacter"]        = this->vendor;
+-    jsonObject["model"]             = this->model;
+-    jsonObject["ppdName"]           = this->ppdName;
+-    jsonObject["packageLevel"]      = this->packageLevel;
+-
+-    // 将JSON对象转换为JSON文档
+-    QJsonDocument jsonDocument(jsonObject);
+-    QByteArray jsonData = jsonDocument.toJson();
+-    QString res = QString::fromLocal8Bit(jsonData);
+-    return res;
+-}
+-
+-void DeviceInformation::unserialize(const QString &str)
+-{
+-    QJsonParseError jsonParserError;
+-    QJsonDocument jsonDocument = QJsonDocument::fromJson(str.toLocal8Bit(), &jsonParserError);
+-
+-    if (jsonDocument.isNull() || jsonParserError.error != QJsonParseError::NoError) {
+-        qDebug () << "json解析失败";
+-        return ;
+-    }
+-    if (!jsonDocument.isObject()) {
+-        return ;
+-    }
+-    QJsonObject jsonObject = jsonDocument.object();
+-    if (jsonObject.size() == 0) {
+-        qDebug() << "json is empty!";
+-    }
+-
+-    for (auto it = jsonObject.begin(); it != jsonObject.end(); it++) {
+-        QString key = it.key();
+-        QJsonValue value = it.value();
+-
+-        if (key.isEmpty() || value.isNull() || !value.isString()) {
+-            continue;
+-        }
+-
+-        if (key == "displayName") {
+-            this->displayName = value.toString();
+-        } else if (key == "userChoosePpdName") {
+-            this->userChoosePpdName = value.toString();
+-        } else if (key == "pid") {
+-            this->PID = value.toString();
+-        } else if (key == "vid") {
+-            this->VID = value.toString();
+-        } else if (key == "manufacter") {
+-            this->vendor = value.toString();
+-        } else if (key == "model") {
+-            this->model = value.toString();
+-        } else if (key == "ppdName") {
+-            this->ppdName = value.toString();
+-        } else if (key == "packageLevel") {
+-            this->packageLevel = value.toString();
+-        }
+-    }
+-}
+-
+-void DeviceInformation::importUri(const Uri &uri)
+-{
+-    this->protocolType = uri.protocolType;
+-    this->deviceType = uri.deviceType;
+-    this->driverlessDomain = uri.driverlessDomain;
+-    this->host = uri.ipAddress;
+-}
+-
+-DeviceInformation unserializeDeviceInformation(const QString &str)
+-{
+-    DeviceInformation info;
+-    info.unserialize(str);
+-    return info;
+-}
+-
+-QString devInfoPrint(const DeviceInformation &debugInfo)
+-{
+-    QString info = QString  (
+-              QString("\n")
+-            + QString("+++++++++++++++++++++++++++++++++\n")
+-            + QString("protocolType is: ") + protocolMap.key(debugInfo.protocolType) + QString('\n')
+-            + QString("deviceType   is: ") + deviceTypeMap.key(debugInfo.deviceType) + QString('\n')
+-            + QString("name         is: ") + debugInfo.name         + QString('\n')
+-            + QString("vendor       is: ") + debugInfo.vendor       + QString("\n")
+-            + QString("model        is: ") + debugInfo.model        + QString("\n")
+-            + QString("serial       is: ") + debugInfo.serial       + QString("\n")
+-            + QString("uri          is: ") + debugInfo.uri          + QString("\n")
+-            + QString("packageName  is: ") + debugInfo.packageNameList.join(",") + QString("\n")
+-            + QString("makeAndModel is: ") + debugInfo.makeAndModel + QString("\n")
+-            + QString("uuid         is: ") + debugInfo.uuid         + QString("\n")
+-            + QString("ieee1284ID   is: ") + debugInfo.ieee1284ID   + QString("\n")
+-            + QString("info         is: ") + debugInfo.info         + QString("\n")
+-            + QString("debNameList  is: ") + debugInfo.debNameList.join(",") + QString("\n")
+-    );
+-    if (debugInfo.deviceType == DeviceType::USB) {
+-        info += QString (
+-              QString("sysPath      is: ") + debugInfo.sysPath      + QString('\n')
+-            + QString("devicePath   is: ") + debugInfo.devicePath   + QString("\n")
+-            + QString("usbClass     is: ") + debugInfo.usbClass     + QString("\n")
+-            + QString("busNumber    is: ") + debugInfo.busNumber    + QString("\n")
+-            + QString("deviceNumber is: ") + debugInfo.deviceNumber + QString("\n")
+-            + QString("VID          is: ") + debugInfo.VID          + QString("\n")
+-            + QString("PID          is: ") + debugInfo.PID          + QString("\n")
+-        );
+-    }
+-    else {
+-    info += QString (
+-              QString("networkNode  is: ") + debugInfo.networkNode  + QString('\n')
+-            + QString("host         is: ") + debugInfo.host         + QString('\n')
+-            );
+-    }
+-    info +=  QString("+++++++++++++++++++++++++++++++++\n");
+-    return info;
+-}
+-
+-QDebug operator << (QDebug debug, const DeviceInformation &debugInfo)
+-{
+-    debug.noquote();
+-    debug << devInfoPrint(debugInfo);
+-    return debug;
+-}
+-
+-QStringList getPackagesNameFromHttp(DeviceInformation &device)
+-{
+-    QStringList res;
+-    QMap<QString, QString> messages;
+-
+-    if (device.model.isEmpty() && device.vendor.isEmpty() && device.PID.isEmpty() && device.VID.isEmpty()) {
+-        return res;
+-    }
+-
+-    if (device.vendor.isEmpty()) {
+-        return res;
+-    }
+-
+-    if (device.vendor.contains("Unknown", Qt::CaseInsensitive)) {
+-        return res;
+-    }
+-    QString scheme;
+-    if (GsettingsMonitor::getInstance()->apiServerAddressGet() == "172.20.184.183:8888") {
+-        scheme = "http";
+-    } else {
+-        scheme = "https";
+-    }
+-    // https://api.kylinos.cn/api/v1/getprinterdrive?systemVersion=V10SP1&product=Brother&model=HL-3190CDW&arch=mips64el&manufacter=HP
+-    // https://api.kylinos.cn/api/v1/getprinterdrive?systemVersion=V10Professional&arch=amd64&manufacter=HP&model=Color%20LaserJet%20MFP%20M277c6
+-    QString httpRequest = QString("%1://%2/api/v1/getprintertype?systemVersion=%3&arch=%4%5%6%7%8%9%10%11")
+-                                .arg(scheme)
+-                                .arg(GsettingsMonitor::getInstance()->apiServerAddressGet())
+-                                .arg(BaseInfo::instance().getSystemVersion())
+-                                .arg(BaseInfo::instance().getDebianArchitecture())
+-                                .arg(device.PID.size() ? QString("&pid=" + device.PID) : "")
+-                                .arg(device.VID.size() ? QString("&vid=" + device.VID) : "")
+-                                .arg(device.vendor.size() ? QString("&manufacter=" + device.vendor) : "")
+-                                .arg(device.model.size() ? QString("&model=" + device.model) : "")
+-                                .arg("&appName=kylin-os-manager")
+-                                .arg("&USBclass=07")
+-                                .arg(device.serial.size() ?QString("sn=" + device.serial) : "");
+-    // httpRequest = "http://172.20.184.183:8888/api/v1/getprintertype?systemVersion=V10SP1&arch=amd64&pid=2109&vid=0817&manufacter=HP&model=Color%20LaserJet%20Pro%20M254dn&appName=kylin-printer-test&usb_class=07&sn=00FDDD";
+-    // httpRequest = "http://172.20.184.183:8888/api/v1/getprintertype?systemVersion=V10SP1&arch=amd64&manufacter=Fuji-Xerox&model=ApeosPort-VII C3373&appName=kylin-printer&usb_class=07";
+-    
+-    if(httpRequest.contains("+")){
+-        httpRequest.replace("+", "%2B");
+-    }
+-    messages.insert("pid", device.PID);
+-    messages.insert("vid", device.VID);
+-    messages.insert("vendor", device.vendor);
+-    messages.insert("model", device.model);
+-    messages.insert("httpRequest", httpRequest);
+-
+-    QNetworkAccessManager manager;
+-    QNetworkRequest netRequest;
+-    QNetworkReply *netReply;
+-    QEventLoop loop;
+-    qDebug () << "http link is :" << httpRequest;
+-    netRequest.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
+-    netRequest.setUrl(QUrl(httpRequest));
+-    netReply = manager.get(netRequest);
+-
+-    QTimer timer;
+-    QObject::connect(netReply, SIGNAL(finished()), &loop, SLOT(quit()));
+-    QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
+-    timer.start(10000);
+-    loop.exec();
+-
+-    int statusCode = netReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
+-
+-    messages.insert("httpStatusCode", QString("%1").arg(statusCode));
+-
+-    if (netReply->error() != QNetworkReply::NoError) {
+-        qDebug() << netReply->errorString();
+-        messages.insert("result", "fail");
+-        messages.insert("resultString", "netreply error!");
+-        messages.insert("networkErrorCode", QString("%1").arg(netReply->error()));
+-        messages.insert("networkErrorString", netReply->errorString());
+-        InformationCollector::getInstance().addMessageMap("get_package_list", messages);
+-        return res;
+-    }
+-
+-    QByteArray strRateAll = netReply->readAll();
+-//    strRateAll = "{\"code\":200,\"message\":\"请求成功!\",\"data\":[{\"packageName\":\"hplip_3.21.4.3-1_amd64.deb\",\"type\":\"printer\",\"others\":null,\"ppdName\":\"uld-hp/HP_Color_Laser_15x_Series.ppd\",\"ppdScore\":65,\"packageLevel\":\"Level 1\"}],\"timestamp\":1710816773616,\"lastRequestTime\":\"2024-03-19 10:52:53\"}";
+-    messages.insert("httpReply", strRateAll);
+-
+-    qDebug() << "http result is"<<strRateAll;
+-    if (strRateAll == "") {
+-        messages.insert("result", "fail");
+-        messages.insert("resultString", "netreply is empty!");
+-        messages.insert("networkErrorCode", QString("%1").arg(netReply->error()));
+-        messages.insert("networkErrorString", netReply->errorString());
+-        InformationCollector::getInstance().addMessageMap("get_package_list", messages);
+-        qDebug() << "http request error: cannot get info form: " << httpRequest;
+-        return res;
+-    }
+-
+-    QJsonParseError jsonParserError;
+-    QJsonDocument jsonDocument = QJsonDocument::fromJson(strRateAll, &jsonParserError );
+-
+-    if ( jsonDocument.isNull() || jsonParserError.error != QJsonParseError::NoError ) {
+-        qDebug () << "json解析失败";
+-        messages.insert("result", "fail");
+-        messages.insert("resultString", "json parse error!");
+-        InformationCollector::getInstance().addMessageMap("get_package_list", messages);
+-        return res;
+-    }
+-    else {
+-        qDebug() << "json解析成功!";
+-    }
+-    if (jsonDocument.isObject()) {
+-        QJsonObject jsonObject = jsonDocument.object();
+-        if ( jsonObject.contains("data")
+-            && jsonObject.value("data").isArray() ) {
+-
+-            QJsonArray jsonArray = jsonObject.value("data").toArray();
+-            for ( int i = 0; i < jsonArray.size(); i++) {
+-                QJsonObject packages = jsonArray.at(i).toObject();
+-                qDebug() << packages;
+-                if (   !packages.contains("type")
+-                    || !packages.contains("packageName")
+-                    || !packages.contains("others")
+-                    || !packages.contains("packageLevel")
+-                    || !packages.contains("ppdName")
+-                    || !packages.contains("ppdScore")
+-                    ) {
+-                    continue;
+-                }
+-
+-                if(packages.value("packageLevel").isString()) {
+-                    QString packageLevel = packages.value("packageLevel").toString();
+-                    if (device.packageLevel.isEmpty() && !packageLevel.isEmpty())
+-                        device.packageLevel = packageLevel;
+-                }
+-                if (packages.value("ppdName").isString() && packages.value("ppdScore").isDouble()) {
+-                    int score = qFloor(packages.value("ppdScore").toDouble());
+-                    if (score > device.suggestPpdScore) {
+-                        device.suggestPpdScore = score;
+-                        device.suggestPpdName  = packages.value("ppdName").toString();
+-                    }
+-                }
+-
+-                if (packages.value("packageName").isString()) {
+-                    res.append(packages.value("packageName").toString());
+-                }
+-            }
+-        }
+-    }
+-    QSet<QString> resSet = res.toSet();
+-    QStringList debPackages = resSet.toList();
+-    for (auto package : debPackages) {
+-        if (package.contains("\n")) {
+-            auto pkglist = package.split("\n");
+-            device.debNameList.append(pkglist);
+-        } else {
+-            device.debNameList.append(package);
+-        }
+-    }
+-
+-    for (int i = 0; i < device.debNameList.size(); i++) {
+-        QString name = device.debNameList.at(i);
+-        device.packageNameList.append(name.left(name.indexOf("_")));
+-    }
+-
+-    messages.insert("packagesName", device.packageNameList.join(" "));
+-
+-    if (device.packageNameList.isEmpty()) {
+-        messages.insert("result", "fail");
+-        messages.insert("resultString", "packagesName is empty!");
+-    } else {
+-        messages.insert("result", "success");
+-    }
+-
+-    InformationCollector::getInstance().addMessageMap("get_package_list", messages);
+-
+-
+-    return device.packageNameList;
+-}
+-
+-QString getNameFromDeviceInformation(const DeviceInformation &info)
+-{
+-    QString name;
+-    if (info.vendor.size() && info.model.size()) {
+-        name = info.vendor + "-" + info.model;
+-        name.replace(" ", "-");
+-        name.replace("/", "-");
+-        name.replace("\\", "-");
+-        name.replace("'", "-");
+-        name.replace('"', "-");
+-        name.replace("?", "-");
+-        name.replace("#", "-");
+-        name.replace("<", "-");
+-        name.replace(">", "-");
+-    } else {
+-        name = info.info + " (" +info.uri + ")";
+-    }
+-    return name;
+-}
+-
+-void postDeviceInfo(const DeviceInformation &device, int ppdRank)
+-{
+-    QJsonObject jsonObject;
+-    jsonObject["arch"] = BaseInfo::instance().getDebianArchitecture();
+-    jsonObject["pid"] = device.PID;
+-    jsonObject["vid"] = device.VID;
+-    jsonObject["manufacter"] = device.vendor;
+-    jsonObject["model"] = device.model;
+-    jsonObject["ppdName"] = device.userChoosePpdName;
+-    jsonObject["ppdRank"] = ppdRank;
+-    jsonObject["packageLevel"] = device.packageLevel;
+-    jsonObject["systemVersion"] = BaseInfo::instance().getSystemVersion();
+-
+-
+-    // 将JSON对象转换为JSON文档
+-    QJsonDocument jsonDocument(jsonObject);
+-    QByteArray jsonData = jsonDocument.toJson();
+-
+-    // 创建网络请求并设置URL
+-    QNetworkAccessManager manager;
+-    QString scheme;
+-    if (GsettingsMonitor::getInstance()->apiServerAddressGet() == "172.20.184.183:8888") {
+-        scheme = "http";
+-    } else {
+-        scheme = "https";
+-    }
+-    QString httpRequest = QString("%1://%2/api/v1/addUserPpd").arg(scheme).arg(GsettingsMonitor::getInstance()->apiServerAddressGet());
+-    qDebug() << httpRequest;
+-    qDebug() << jsonData;
+-    QNetworkRequest request;
+-
+-    // 设置请求头部信息
+-    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
+-    request.setUrl(QUrl(httpRequest));
+-
+-    // 发送POST请求
+-    QNetworkReply *reply;
+-    reply = manager.post(request, jsonData);
+-    QEventLoop loop;
+-    QTimer timer;
+-    QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
+-    QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
+-    timer.start(10000);
+-
+-    loop.exec();
+-
+-    if (reply->error() == QNetworkReply::NoError) {
+-        qDebug() << "Request succeeded, response: " << reply->readAll();
+-        QJsonDocument jsonResponse = QJsonDocument::fromJson(reply->readAll());
+-        int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
+-        qDebug() << "HTTP Status Code: " << statusCode;
+-    } else {
+-        qDebug() << "Request failed, error: " << reply->errorString();
+-    }
+-    reply->deleteLater();
+-
+-}
+diff --git a/daemons/sessionservice/printerbackend/device_manager/device_information.h b/daemons/sessionservice/printerbackend/device_manager/device_information.h
+deleted file mode 100644
+index e41ee36..0000000
+--- a/daemons/sessionservice/printerbackend/device_manager/device_information.h
++++ /dev/null
+@@ -1,69 +0,0 @@
+-#ifndef DEVICE_INFORMATION_H
+-#define DEVICE_INFORMATION_H
+-
+-#include <QDebug>
+-#include <QObject>
+-#include <QString>
+-#include <QStringList>
+-#include <map>
+-#include "uri.h"
+-
+-class DeviceInformation {
+-public:
+-    // 公有部分
+-    ProtocolType protocolType{ProtocolType::NONE};
+-    DeviceType deviceType{DeviceType::NONE};
+-    QString devClass;
+-    QString ieee1284ID;
+-    QString location;
+-    QString info;
+-    QString name; // 打印机的名字
+-    QString displayName;
+-    QString vendor; // 供应商
+-    QString model; // 型号
+-    QString serial; // 序列号
+-    QString uri; // 设备uri
+-    QStringList debNameList{QStringList()};
+-    QStringList packageNameList{QStringList()}; // 包名
+-    QString makeAndModel; // make-and-model
+-    QString uuid;
+-    QString ppdName;
+-    QString packageLevel{QString()};
+-    QString suggestPpdName{QString()};
+-    QString userChoosePpdName{QString()};
+-    QString driverlessDomain{QString()};
+-    int suggestPpdScore{0};
+-
+-    // usb 部分
+-    QString sysPath; // sys下的目录
+-    QString devicePath; // dev下的目录 绝对路径
+-    QString usbClass; // 设备种类 打印机为07
+-    QString busNumber;
+-    QString deviceNumber{QString()};
+-    QString VID; // usb vid
+-    QString PID; // usb pid
+-
+-    // 网络部分
+-    QString networkNode;
+-    QString host;
+-
+-    QString serialize() const;
+-    void unserialize(const QString &str);
+-    void importUri(const Uri &uri);
+-};
+-
+-extern DeviceInformation unserializeDeviceInformation(const QString &str);
+-
+-extern QString devInfoPrint(const DeviceInformation&);
+-
+-extern QDebug operator<<(QDebug debug, const DeviceInformation&);
+-
+-extern QStringList getPackagesNameFromHttp(DeviceInformation&);
+-
+-extern QString getNameFromDeviceInformation(const DeviceInformation&);
+-
+-extern void postDeviceInfo(const DeviceInformation &device, int ppdRank);
+-
+-Q_DECLARE_METATYPE(DeviceInformation)
+-
+-#endif // DEVICE_INFORMATION_H
+diff --git a/daemons/sessionservice/printerbackend/device_manager/device_monitor.cpp b/daemons/sessionservice/printerbackend/device_manager/device_monitor.cpp
+deleted file mode 100644
+index 5962d9f..0000000
+--- a/daemons/sessionservice/printerbackend/device_manager/device_monitor.cpp
++++ /dev/null
+@@ -1,195 +0,0 @@
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <string.h>
+-#include <ctype.h>
+-#include <sys/un.h>
+-#include <sys/ioctl.h>
+-#include <sys/socket.h>
+-#include <linux/types.h>
+-#include <linux/netlink.h>
+-#include <errno.h>
+-#include <unistd.h>
+-#include <regex>
+-#include <iostream>
+-
+-#include <sys/inotify.h>
+-
+-#include <cups/cups.h>
+-
+-#include <QDebug>
+-#include <QString>
+-#include <QProcess>
+-#include <QTimer>
+-#include <QFile>
+-#include <QDir>
+-#include <QThread>
+-#include <QObject>
+-#include <QMetaType>
+-#include <QUrl>
+-#include <QDataStream>
+-
+-#include "device_monitor.h"
+-#include "common.h"
+-#include "lpinfo_browser.h"
+-#include "udev_devices.h"
+-#include "information_collector.h"
+-
+-#define UEVENT_BUFFER_SIZE 2048
+-
+-static int init_hotplug_sock(void)
+-{
+-    struct sockaddr_nl snl;
+-    const int buffersize = 16 * 1024 * 1024;
+-    int retval;
+-    memset(&snl, 0x00, sizeof(struct sockaddr_nl));
+-    snl.nl_family = AF_NETLINK;
+-    snl.nl_pid = getpid();
+-    snl.nl_groups = 1;
+-    int hotplug_sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);
+-    if (hotplug_sock == -1)
+-    {
+-        qDebug("error getting socket: %s", strerror(errno));
+-        return -1;
+-    }
+-    /* set receive buffersize */
+-    setsockopt(hotplug_sock, SOL_SOCKET, SO_RCVBUFFORCE, &buffersize, sizeof(buffersize));
+-    retval = bind(hotplug_sock, (struct sockaddr *) &snl, sizeof(struct sockaddr_nl));
+-    if (retval < 0) {
+-        qDebug("bind failed: %s", strerror(errno));
+-        close(hotplug_sock);
+-        hotplug_sock = -1;
+-        return -1;
+-    }
+-    return hotplug_sock;
+-}
+-
+-QString getUsbClassFromPath(const QString &path)
+-{
+-    QString res;
+-    QString bInterfaceClass;
+-    QStringList bInterfaceClassPathList = getRetFromCommand(QStringList{"find", path ,"-name", "bInterfaceClass"}).split("\n");
+-    for (int i = 0; i < bInterfaceClassPathList.size(); i++) {
+-        bInterfaceClass = getRetFromCommand(QStringList{"cat", bInterfaceClassPathList.at(i)});
+-        if (bInterfaceClass == "00" || bInterfaceClass == "ff"){
+-            continue;
+-        }
+-        res = bInterfaceClass;
+-    }
+-    return res;
+-}
+-
+-
+-// DeviceMonitorBackend start
+-
+-DeviceMonitorBackend *DeviceMonitorBackend::getInstance()
+-{
+-    static DeviceMonitorBackend *instance = nullptr;
+-    static QThread *thread;
+-    if (nullptr == instance) {
+-        instance = new DeviceMonitorBackend();
+-        thread = new QThread();
+-        thread->setObjectName("DeviceMonitorBackend");
+-        instance->moveToThread(thread);
+-        connect(instance, &DeviceMonitorBackend::start,
+-                instance, &DeviceMonitorBackend::detectStart);
+-        connect(instance, &DeviceMonitorBackend::usbDeviceAdd,
+-                instance, &DeviceMonitorBackend::doDeviceAdd);
+-        connect(instance, &DeviceMonitorBackend::usbDeviceRemove,
+-                instance, &DeviceMonitorBackend::doDeviceRemove);
+-        thread->start();
+-    }
+-    return instance;
+-}
+-
+-
+-DeviceMonitorBackend::DeviceMonitorBackend()
+-{
+-}
+-
+-DeviceMonitorBackend::~DeviceMonitorBackend()
+-{
+-}
+-
+-void DeviceMonitorBackend::detectStart()
+-{
+-    // qDebug() << "DeviceMonitor::detectStart";
+-    // qDebug() << QThread::currentThreadId();
+-    // usbDeviceAdd("bind@/devices/pci0000:00/0000:00:16.0/0000:0b:00.0/usb3/3-2");
+-    int hotplug_sock = init_hotplug_sock();
+-    while(1)
+-    {
+-        char buf[UEVENT_BUFFER_SIZE*2] = {0};
+-        // recv 会等待usb信号连入
+-        recv(hotplug_sock, &buf, sizeof(buf), 0);
+-        this->usbDeviceIdentify(QString(buf));
+-    }
+-}
+-
+-bool DeviceMonitorBackend::usbDeviceIdentify(const QString &qstr)
+-{
+-    // qDebug() << qstr;
+-    // qDebug() << "DeviceMonitor::usbDeviceIdentify";
+-    // bind@/devices/pci0000:00/0000:00:11.0/0000:02:01.0/usb1/1-1
+-    if (  qstr.indexOf("bind") == 0
+-      &&  (qstr.contains("pci") || qstr.contains("hisi_usb"))
+-      && !qstr.right( qstr.size() -1 - qstr.lastIndexOf('/') ).contains(":")
+-    ) {
+-        emit this->usbDeviceAdd(devicePathCheck(qstr));
+-        return true;
+-    }
+-    // unbind@/devices/pci0000:00/0000:00:11.0/0000:02:01.0/usb1/1-1
+-    if (  qstr.contains("unbind")
+-      &&  (qstr.contains("pci") || qstr.contains("hisi_usb"))
+-      && !qstr.right( qstr.size() -1 - qstr.lastIndexOf('/') ).contains(":")
+-    ) {
+-        emit this->usbDeviceRemove(devicePathCheck(qstr));
+-        return true;
+-    }
+-    return false;
+-}
+-
+-
+-bool DeviceMonitorBackend::doDeviceAdd(const QString &qstr)
+-{
+-    QString deviceId = get_device_id_from_path(qstr);
+-    qDebug() << "DeviceMonitorBackend::doDeviceAdd is: " << deviceId;
+-    if (deviceId.isEmpty()) {
+-        return false;
+-    }
+-
+-    auto newDevice = LpinfoBrowser::getUsbPrinterDeviceFromDeviceId(deviceId);
+-    if (newDevice.deviceType != DeviceType::USB) {
+-        return false;
+-    }
+-    // 判断是否重复
+-    if (this->m_mpDeviceInformationMap.contains(qstr)) {
+-        return false;
+-    }
+-
+-    newDevice.sysPath      = QString("/sys") + qstr;
+-    newDevice.devicePath   = "/dev/" + getRetFromCommand(QStringList{"cat", newDevice.sysPath + "/uevent", "|" , "grep", "DEVNAME"}).remove("DEVNAME=");
+-    newDevice.usbClass     = getUsbClassFromPath(newDevice.sysPath);
+-    newDevice.busNumber    = getRetFromCommand(QStringList{"cat", newDevice.sysPath + "/busnum"});
+-    newDevice.deviceNumber = getRetFromCommand(QStringList{"cat", newDevice.sysPath + "/devnum"});
+-    newDevice.VID          = getRetFromCommand(QStringList{"cat", newDevice.sysPath + "/idVendor"});
+-    newDevice.PID          = getRetFromCommand(QStringList{"cat", newDevice.sysPath + "/idProduct"});
+-
+-
+-    this->m_mpDeviceInformationMap.insert(qstr, newDevice);
+-    qDebug() << "find a new painter!";
+-    // qDebug() << newDevice;
+-    emit DeviceMonitorBackend::getInstance()->findUsbConnect(newDevice);
+-    return true;
+-}
+-
+-bool DeviceMonitorBackend::doDeviceRemove(const QString &qstr)
+-{
+-    if (this->m_mpDeviceInformationMap.contains(qstr)) {
+-        this->m_mpDeviceInformationMap.remove(qstr);
+-    }
+-    // qDebug() << "remove a painter!";
+-    QString path = QString("/sys") + qstr;
+-    // qDebug() << path;
+-    emit this->findUsbDisconnect(path);
+-    return true;
+-}
+diff --git a/daemons/sessionservice/printerbackend/device_manager/device_monitor.h b/daemons/sessionservice/printerbackend/device_manager/device_monitor.h
+deleted file mode 100644
+index 0a0a20e..0000000
+--- a/daemons/sessionservice/printerbackend/device_manager/device_monitor.h
++++ /dev/null
+@@ -1,41 +0,0 @@
+-#ifndef DEVICE_MONITOR_H
+-#define DEVICE_MONITOR_H
+-
+-#include <QObject>
+-#include <QMap>
+-#include <QTimer>
+-#include <QThread>
+-#include <QDebug>
+-
+-#include "device_information.h"
+-
+-
+-
+-
+-class DeviceMonitorBackend : public QObject
+-{
+-    Q_OBJECT
+-
+-private:
+-    DeviceMonitorBackend();
+-public:
+-    static DeviceMonitorBackend *getInstance();
+-    ~DeviceMonitorBackend();
+-    bool doDeviceAdd      (const QString &);
+-    bool doDeviceRemove   (const QString &);
+-
+-private:
+-    QMap<QString, DeviceInformation> m_mpDeviceInformationMap;
+-    void detectStart ();
+-    bool usbDeviceIdentify (const QString &);
+-
+-
+-signals:
+-    void start();
+-    bool usbDeviceAdd      (const QString &);
+-    bool usbDeviceRemove   (const QString &);
+-    void findUsbConnect    (DeviceInformation);
+-    void findUsbDisconnect (QString);
+-};
+-
+-#endif // DEVICE_MONITOR_H
+diff --git a/daemons/sessionservice/printerbackend/device_manager/udev_devices.cpp b/daemons/sessionservice/printerbackend/device_manager/udev_devices.cpp
+deleted file mode 100644
+index d804e87..0000000
+--- a/daemons/sessionservice/printerbackend/device_manager/udev_devices.cpp
++++ /dev/null
+@@ -1,447 +0,0 @@
+-#include <cups/cups.h>
+-#include <cups/http.h>
+-#include <errno.h>
+-#include <fcntl.h>
+-#include <libudev.h>
+-#include <limits.h>
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <string.h>
+-#include <sys/types.h>
+-#include <sys/stat.h>
+-#include <sys/wait.h>
+-#include <ctype.h>
+-#include <syslog.h>
+-#include <unistd.h>
+-#include <libusb-1.0/libusb.h>
+-#include <glib.h>
+-#include <dirent.h>
+-#include <libudev.h>
+-
+-#include <QString>
+-#include <QStringList>
+-#include <QDebug>
+-
+-#include "udev_devices.h"
+-#include "device_information.h"
+-#include "common.h"
+-#include "lpinfo_browser.h"
+-#include "ukui_printer.h"
+-
+-
+-// usb-001-067
+-static char *
+-devpath_from_usb_devaddr (struct udev *udev, const char *devaddr)
+-{
+-    char *devname_ending = g_strdup (devaddr);
+-    char *devname;
+-    const char *devpath;
+-    struct udev_enumerate *udev_enum;
+-    struct udev_list_entry *first = NULL;
+-    struct udev_device *device;
+-
+-    g_strdelimit (devname_ending, "-", '/');
+-    devname = g_strdup_printf("/dev/bus/%s", devname_ending);
+-    g_free (devname_ending);
+-
+-    udev_enum = udev_enumerate_new (udev);
+-    if (udev_enum == NULL) {
+-        qDebug() << "udev_enumerate_new failed";
+-        exit (1);
+-    }
+-
+-    if (udev_enumerate_add_match_property (udev_enum, "DEVNAME", devname) < 0) {
+-        udev_enumerate_unref (udev_enum);
+-        qDebug() << "udev_enumerate_add_match_property failed";
+-        exit (1);
+-    }
+-
+-    if (udev_enumerate_scan_devices (udev_enum) < 0) {
+-        udev_enumerate_unref (udev_enum);
+-        qDebug() << "udev_enumerate_scan_devices failed";
+-        exit (1);
+-    }
+-
+-    first = udev_enumerate_get_list_entry (udev_enum);
+-    if (first == NULL) {
+-        udev_enumerate_unref (udev_enum);
+-        qDebug ("no device named %s found", devname);
+-        exit (1);
+-    }
+-
+-    device = udev_device_new_from_syspath (udev,
+-                                           udev_list_entry_get_name (first));
+-    if (device == NULL) {
+-        udev_enumerate_unref (udev_enum);
+-        qDebug ("unable to examine device");
+-        exit (1);
+-    }
+-
+-    devpath = udev_device_get_devpath (device);
+-    udev_enumerate_unref (udev_enum);
+-    if (!devpath) {
+-        qDebug ("no devpath for device");
+-        exit (1);
+-    }
+-
+-    g_free (devname);
+-    return g_strdup (devpath);
+-}
+-
+-// 将device_id中的信息转成id
+-void
+-parse_device_id (const char *device_id,
+-		         struct device_id_s *id)
+-{
+-    QString s = QString(device_id);
+-
+-    // len = strlen (device_id);
+-    if (s.size() == 0)
+-        return;
+-
+-    if (s[s.size() - 1] == '\n')
+-        s.chop(1);
+-
+-
+-    id->full_device_id = s;
+-
+-    QStringList ls = s.split(";");
+-
+-    for (auto ss : ls) {
+-        if (id->mfg.isEmpty()
+-         && (ss.indexOf("MANUFACTURER") == 0 || ss.indexOf("MFG") == 0)
+-         && (ss.contains(":"))) {
+-
+-            id->mfg = ss.split(":").at(1).trimmed();
+-        }
+-
+-        else if (id->mdl.isEmpty()
+-         && (ss.indexOf("MODEL") == 0 || ss.indexOf("MDL") == 0)
+-         && (ss.contains(":"))) {
+-
+-            id->mdl = ss.split(":").at(1).trimmed();
+-        }
+-
+-        else if (id->sern.isEmpty()
+-         && (ss.indexOf("SERIALNUMBER") == 0 || ss.indexOf("SERN") == 0 || ss.indexOf("SN") == 0)
+-         && (ss.contains(":"))) {
+-
+-            id->sern = ss.split(":").at(1).trimmed();
+-        }
+-    }
+-    // 特殊打印机处理
+-    specialDeviceCheck(id->mfg, id->mdl);
+-    return ;
+-}
+-
+-
+-void deviceIdToDeviceInfo(DeviceInformation &info)
+-{
+-    if (info.ieee1284ID.isEmpty()) {
+-        return ;
+-    }
+-    device_id_s id;
+-    parse_device_id(QTC(info.ieee1284ID), &id);
+-    if (info.vendor.isEmpty()) {
+-        info.vendor = id.mfg;
+-    }
+-    if (info.model.isEmpty()) {
+-        info.model = id.mdl;
+-    }
+-    if (info.serial.isEmpty()) {
+-        info.serial = id.sern;
+-    }
+-}
+-
+-QString get_ieee1284_id_from_child (struct udev *udev, struct udev_device *parent)
+-{
+-    struct udev_enumerate *udev_enum;
+-    udev_enum = udev_enumerate_new (udev);
+-    if (!udev_enum) {
+-        qDebug ("udev_enumerate_new failed");
+-        return QString();
+-    }
+-
+-    if (udev_enumerate_add_match_parent (udev_enum, parent) < 0) {
+-        udev_enumerate_unref (udev_enum);
+-        qDebug ("uname to add parent match");
+-        return QString();
+-    }
+-
+-    if (udev_enumerate_scan_devices (udev_enum) < 0) {
+-        udev_enumerate_unref (udev_enum);
+-        qDebug ("udev_enumerate_scan_devices failed");
+-        return QString();
+-    }
+-
+-    QString ieee1284_id{QString()};
+-    struct udev_list_entry *item, *first = nullptr;
+-    first = udev_enumerate_get_list_entry (udev_enum);
+-    udev_list_entry_foreach (item, first) {
+-        struct udev_device *dev;
+-        dev = udev_device_new_from_syspath (udev, udev_list_entry_get_name (item));
+-        if (dev == nullptr)
+-            continue;
+-
+-        ieee1284_id = udev_device_get_sysattr_value (dev, "ieee1284_id");
+-
+-        udev_device_unref (dev);
+-        if (ieee1284_id.size()) {
+-            break;
+-        }
+-    }
+-
+-    udev_enumerate_unref (udev_enum);
+-    return ieee1284_id;
+-}
+-
+-QString get_ieee1284_id_using_libusb (struct udev_device *dev)
+-{
+-    QList<UkuiUsbPrinter> printers;
+-    // magic function
+-    UkuiPrinterManager::getInstance().enumPrinters(printers);
+-    
+-    QString res;
+-    QString udevbusnum(udev_device_get_sysattr_value(dev, "busnum"));
+-    QString udevdevnum(udev_device_get_sysattr_value(dev, "devnum"));
+-
+-    int got = 0;
+-
+-    libusb_init(nullptr);
+-
+-    int numdevs = 0;
+-    libusb_device **list = nullptr;
+-    numdevs = libusb_get_device_list(nullptr, &list);
+-    if (numdevs <= 0) {
+-        libusb_free_device_list(list, 1);
+-        libusb_exit(nullptr);
+-        return QString();
+-    }
+-
+-    for (int i = 0; i < numdevs; i++) {
+-
+-        struct libusb_device *device = list[i];
+-
+-        QString busNumber = QString("%1").arg(libusb_get_bus_number(device));
+-        QString deviceNumber = QString("%1").arg(libusb_get_device_address(device));
+-        if (udevbusnum != busNumber || udevdevnum != deviceNumber) {
+-            continue;
+-        } 
+-
+-        struct libusb_device_descriptor devdesc;
+-        if (libusb_get_device_descriptor(device, &devdesc) < 0) {
+-            continue;
+-        }
+-
+-        if (!devdesc.bNumConfigurations || !devdesc.idVendor || !devdesc.idProduct) {
+-            continue;
+-        }
+-
+-        for (int conf = 0; conf < devdesc.bNumConfigurations; conf++) {
+-            struct libusb_config_descriptor *confptr = NULL;
+-            if (libusb_get_config_descriptor(device, conf, &confptr) < 0)
+-                continue;
+-            const libusb_interface *ifaceptr;
+-            int iface;
+-            for (iface = 0, ifaceptr = confptr->interface; iface < confptr->bNumInterfaces; iface++, ifaceptr++) {
+-
+-                if (got == 1) {
+-                    continue;
+-                }
+-                int altset;
+-                const struct libusb_interface_descriptor *altptr;
+-                struct libusb_device_handle *handle = NULL;
+-                
+-                int protocol   = 0;
+-                for (altset = 0, altptr = ifaceptr->altsetting; altset < ifaceptr->num_altsetting; altset++, altptr++) {
+-
+-                    if ((altptr->bInterfaceProtocol != 1 && altptr->bInterfaceProtocol != 2) ||
+-                        altptr->bInterfaceProtocol < protocol) {
+-                        continue;
+-                    }
+-
+-                    uint8_t endp;
+-                    uint8_t read_endp  = 0xff;
+-	                uint8_t write_endp = 0xff;
+-                    const struct libusb_endpoint_descriptor *endpptr = NULL;
+-
+-                    for (endp = 0, endpptr = altptr->endpoint; endp < altptr->bNumEndpoints; endp ++, endpptr ++) {
+-                        if ((endpptr->bmAttributes & LIBUSB_TRANSFER_TYPE_MASK) == LIBUSB_TRANSFER_TYPE_BULK) {
+-                            if (endpptr->bEndpointAddress & LIBUSB_ENDPOINT_DIR_MASK) {
+-                                read_endp = endp;
+-                            } else {
+-                                write_endp = endp;
+-                            }
+-                        }
+-                    }
+-
+-                    if (write_endp != 0xff) {
+-                        protocol = altptr->bInterfaceProtocol;
+-                    }
+-                }
+-
+-                if (protocol <= 0) {
+-                    continue;
+-                }
+-
+-                int r = libusb_open(device, &handle);
+-                if (r < 0) {
+-                    qDebug ("failed to open device %d", r);
+-                    continue;
+-                }
+-
+-                if (libusb_kernel_driver_active(handle, iface) == 1) {
+-                    auto r = libusb_detach_kernel_driver(handle, iface);
+-                    if (r < 0) {
+-                        qDebug("DEBUG: Failed to detach \"usblp\" module from %04x:%04x\n",
+-	                        devdesc.idVendor, devdesc.idProduct);
+-                        libusb_close(handle);
+-                        continue;
+-                    }
+-                }
+-                char ieee1284_id[1024];
+-                memset (ieee1284_id, 0, sizeof (ieee1284_id));
+-                if (libusb_control_transfer(handle,
+-                                            LIBUSB_REQUEST_TYPE_CLASS |
+-                                            LIBUSB_ENDPOINT_IN |
+-                                            LIBUSB_RECIPIENT_INTERFACE,
+-                                            0, conf,
+-                                            (iface << 8) | altset,
+-                                            (unsigned char *)ieee1284_id,
+-                                            sizeof (ieee1284_id),
+-                                            5000) < 0) {
+-                    
+-                    qDebug ("Failed to fetch Device ID");
+-                } else {
+-                    got = 1;
+-                    qDebug("%s\n", ieee1284_id + 2);
+-                    res = QString(ieee1284_id + 2);
+-                }
+-                libusb_close (handle);
+-            }
+-        }
+-    }
+-
+-    if (numdevs >= 0) {
+-        libusb_free_device_list(list, 1);
+-    }
+-    libusb_exit(nullptr);
+-    if (got) {
+-        return res;
+-    }
+-    return QString();
+-}
+-
+-QStringList find_matching_device_uris (const QString &deviceId)
+-{
+-    QStringList res{QStringList()};
+-    auto mp = LpinfoBrowser::findDirectPrinter();
+-    for (auto dev : mp) {
+-        if (dev.ieee1284ID == deviceId) {
+-            res.append(dev.uri);
+-        }
+-    }
+-    return res;
+-}
+-
+-// devpath:/devices/pci0000:00/0000:00:14.0/usb1/1-2
+-QString device_id_from_devpath (struct udev *udev, const QString &devpath)
+-{
+-    QString device_id{QString()};
+-    QString syspath = "/sys" + devpath;
+-
+-    struct udev_device *dev = udev_device_new_from_syspath (udev, QTC(syspath));
+-    if (dev == NULL) {
+-        udev_device_unref (dev);
+-        qDebug ("unable to access %s", syspath);
+-        return NULL;
+-    }
+-
+-    qDebug ("device devpath is %s", udev_device_get_devpath(dev));
+-    qDebug ("device serial is %s", udev_device_get_sysattr_value (dev, "serial"));
+-
+-    device_id = get_ieee1284_id_from_child (udev, dev);
+-    if (device_id.isEmpty()) {
+-        /* Use libusb to fetch the Device ID. */
+-        device_id = get_ieee1284_id_using_libusb (dev);
+-        qDebug() << device_id;
+-    }
+-
+-    udev_device_unref (dev);
+-    return device_id;
+-}
+-
+-
+-QStringList list_printers_dev_path()
+-{
+-    struct udev *udev;
+-    struct udev_enumerate *enumerate;
+-    struct udev_list_entry *devices, *dev_list_entry;
+-    struct udev_device *dev;
+-    QStringList res;
+-
+-    udev = udev_new();
+-    if (!udev) {
+-        qDebug("Can't create udev\n");
+-        return res;
+-    }
+-
+-    enumerate = udev_enumerate_new(udev);
+-    udev_enumerate_add_match_subsystem(enumerate, "usb");
+-    // udev_enumerate_add_match_sysattr(enumerate, "bInterfaceClass", "07");
+-    udev_enumerate_add_match_property(enumerate, "DEVTYPE", "usb_device");
+-    udev_enumerate_scan_devices(enumerate);
+-    devices = udev_enumerate_get_list_entry(enumerate);
+-
+-    udev_list_entry_foreach(dev_list_entry, devices)
+-    {
+-        const char *path;
+-
+-        path = udev_list_entry_get_name(dev_list_entry);
+-        dev = udev_device_new_from_syspath(udev, path);
+-        // dev = udev_device_get_parent_with_subsystem_devtype(
+-        //     dev,
+-        //     "usb",
+-        //     "usb_device");
+-        if (!dev)
+-        {
+-            // printf("Unable to find parent usb device.");
+-            continue;
+-        }
+-        // printf(" VID/PID: %s %s\n",
+-        //        udev_device_get_sysattr_value(dev, "idVendor"),
+-        //        udev_device_get_sysattr_value(dev, "idProduct"));
+-        // printf(" %s\n %s\n",
+-        //        udev_device_get_sysattr_value(dev, "manufacturer"),
+-        //        udev_device_get_sysattr_value(dev, "product"));
+-        // printf(" serial: %s\n",
+-        //        udev_device_get_sysattr_value(dev, "serial"));
+-        // printf("%s\n", udev_device_get_devpath(dev));
+-        // printf(" serial: %s\n",
+-        //        udev_device_get_sysattr_value(dev, "interface"));
+-        res.append(udev_device_get_devpath(dev));
+-        udev_device_unref(dev);
+-    }
+-    /* Free the enumerator object */
+-    udev_enumerate_unref(enumerate);
+-
+-    udev_unref(udev);
+-    res = res.toSet().toList();
+-    return res;
+-}
+-
+-QString get_device_id_from_path(const QString &path)
+-{
+-    struct udev *udev;
+-    QString res = QString();
+-
+-    if (path.isEmpty()) {
+-        return res;
+-    }
+-
+-    udev = udev_new ();
+-
+-    res = device_id_from_devpath (udev, path);
+-    udev_unref(udev);
+-    return res;
+-}
+diff --git a/daemons/sessionservice/printerbackend/device_manager/udev_devices.h b/daemons/sessionservice/printerbackend/device_manager/udev_devices.h
+deleted file mode 100644
+index 4610374..0000000
+--- a/daemons/sessionservice/printerbackend/device_manager/udev_devices.h
++++ /dev/null
+@@ -1,22 +0,0 @@
+-#ifndef UDEV_DEVICES_H
+-#define UDEV_DEVICES_H
+-
+-#include "device_information.h"
+-
+-struct device_id_s {
+-    QString full_device_id;
+-    QString mfg;
+-    QString mdl;
+-    QString sern;
+-};
+-
+-void
+-parse_device_id (const char *device_id, struct device_id_s *id);
+-
+-void deviceIdToDeviceInfo(DeviceInformation &info);
+-
+-QStringList list_printers_dev_path();
+-
+-QString get_device_id_from_path(const QString &path);
+-
+-#endif // UDEV_DEVICES_H
+diff --git a/daemons/sessionservice/printerbackend/printer_backend.cpp b/daemons/sessionservice/printerbackend/printer_backend.cpp
+deleted file mode 100644
+index 247fc56..0000000
+--- a/daemons/sessionservice/printerbackend/printer_backend.cpp
++++ /dev/null
+@@ -1,108 +0,0 @@
+-#include <QCoreApplication>
+-#include <QTranslator>
+-#include <QDebug>
+-#include "launch_printer.h"
+-#include <QLibraryInfo>
+-#include <QDir>
+-#include "device_monitor.h"
+-#include "launch_printer.h"
+-#include "common.h"
+-#include "event_notify_monitor.h"
+-#include "device_map.h"
+-#include "pop_window_manager.h"
+-#include "find_and_match_ppds.h"
+-#include "printer_backend.h"
+-
+-
+-void addTrans()
+-{
+-//加载中文
+-    QString qtTranslationsPath;
+-    qtTranslationsPath = QLibraryInfo::location(QLibraryInfo::TranslationsPath);// /usr/share/qt5/translations
+-    QString kylinPrinterTranslationsPath;
+-#ifndef TEST_DEBUG
+-    if (QDir("/usr/share/kylin-os-manager/daemons/sessionservice/printerbackend/translations").exists()) {
+-        kylinPrinterTranslationsPath = "/usr/share/kylin-os-manager/daemons/sessionservice/printerbackend/translations";
+-    }
+-    else {
+-        kylinPrinterTranslationsPath = QCoreApplication::applicationDirPath() + "/.qm";
+-    }
+-
+-#else
+-    kylinPrinterTranslationsPath = QString(PROJECT_SOURCE_DIR) + "/translations";
+-#endif
+-    qDebug () << kylinPrinterTranslationsPath;
+-    QString locale = QLocale::system().name();
+-    static QTranslator trans_global, trans_menu, trans_dict, trans_sdk;
+-
+-    if(!trans_global.load("kylin-printer_" + locale + ".qm", kylinPrinterTranslationsPath))
+-        qDebug() << "Load translations file" <<QLocale() << "failed!";
+-    else
+-        QCoreApplication::installTranslator(&trans_global);
+-
+-    if(!trans_menu.load("qt_" + locale + ".qm", qtTranslationsPath))
+-        qDebug() << "Load translations file" <<QLocale() << "failed!";
+-    else
+-        QCoreApplication::installTranslator(&trans_menu);
+-
+-    if(!trans_sdk.load(":/translations/gui_" + locale + ".qm"))
+-        qDebug() << "Load translations file" <<QLocale() << "failed!";
+-    else
+-        QCoreApplication::installTranslator(&trans_sdk);
+-}
+-
+-bool checkKylinPrinter()
+-{
+-    // kylin-printer 不存在返回true
+-    QString version = getPackageVersion("kylin-printer");
+-
+-    qDebug() << "kylin-printer version is " << version;
+-
+-    if (version.isEmpty()) {
+-        return true;
+-    }
+-    // version < 1.3.1.0-0k4.0
+-    // dpkg --compare-versions verison lt 1.3.1.0-0k4.0 && echo true
+-    QString cmd = QString("dpkg --compare-versions %1 lt 1.3.1.0-0k4.0 && echo true").arg(version);
+-    QString status = ::getRetFromCommand(cmd.split(" "));
+-    if (status == "true") {
+-        // verison >= 1.1.0kord-0k12~rc32
+-        // dpkg --compare-versions verison ge 1.1.0kord-0k12~rc32 && echo true
+-        cmd = QString("dpkg --compare-versions %1 ge 1.1.0kord-0k12~rc32 && echo true").arg(version);
+-        QString status = ::getRetFromCommand(cmd.split(" "));
+-        if (status == "true") {
+-            return true;
+-        } else {
+-            return false;
+-        }
+-    } else {
+-        return false;
+-    }
+-}
+-
+-void doPrinterWork()
+-{
+-    if (!checkKylinPrinter()) {
+-        return;
+-    }
+-    addTrans();
+-
+-    g_findAndMatchWorkThread->start();
+-    g_findAndMatchWorkThread->updatePPDsMap();
+-
+-    LaunchPrinter::getInstance();
+-    PopWindowManager::getInstance();
+-
+-    DeviceMonitorBackend *p = DeviceMonitorBackend::getInstance();
+-    QObject::connect (p,  &DeviceMonitorBackend::usbDeviceAdd,
+-                    LaunchPrinter::getInstance(), &LaunchPrinter::add);
+-
+-    QObject::connect (p,  &DeviceMonitorBackend::usbDeviceRemove,
+-                    LaunchPrinter::getInstance(), &LaunchPrinter::remove);
+-    emit DeviceMonitorBackend::getInstance()->start();
+-
+-    DeviceMap::getInstance();
+-
+-    EventNotifyMonitor *notify = EventNotifyMonitor::getInstance();
+-    emit notify->start();
+-}
+\ No newline at end of file
+diff --git a/daemons/sessionservice/printerbackend/printer_backend.h b/daemons/sessionservice/printerbackend/printer_backend.h
+deleted file mode 100644
+index c01b851..0000000
+--- a/daemons/sessionservice/printerbackend/printer_backend.h
++++ /dev/null
+@@ -1,7 +0,0 @@
+-#ifndef PRINTERBACKEND_H
+-#define PRINTERBACKEND_H
+-
+-
+-void doPrinterWork();
+-
+-#endif // PRINTERBACKEND_H
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/cupsconnection4ppds.cpp b/daemons/sessionservice/printerbackend/printer_manager/cupsconnection4ppds.cpp
+deleted file mode 100644
+index d92dda3..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/cupsconnection4ppds.cpp
++++ /dev/null
+@@ -1,40 +0,0 @@
+-#include <QTimer>
+-#include <QDateTime>
+-#include <QThread>
+-#include "cupsconnection4ppds.h"
+-#include "ukui_printer.h"
+-
+-//QMutex CupsConnection4PPDs::m_mutex;
+-CupsConnection4PPDs::CupsConnection4PPDs()
+-{
+-    qDebug() << "CUPS开始建立" << QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss");
+-    m_server = cupsServer();
+-
+-    m_ippPortNum = ippPort();
+-
+-    m_encryptionType = cupsEncryption();
+-
+-    int cancel = 0;
+-    m_ppdRequestConnection = httpConnect2(m_server, m_ippPortNum, nullptr, AF_UNSPEC, (http_encryption_t)m_encryptionType, 1, 30000, &cancel);
+-
+-    if (!m_ppdRequestConnection)
+-    {
+-        throw std::runtime_error("Failed to construct ppdRequestConnection!");
+-    }
+-    else
+-    {
+-        qDebug() << "CUPS服务ppdRequestConnection建立成功!";
+-    }
+-
+-
+-    qDebug() << "CUPS建立完成" << QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss");
+-}
+-
+-CupsConnection4PPDs::~CupsConnection4PPDs()
+-{
+-    delete m_server;
+-}
+-http_t* CupsConnection4PPDs::getCupsConnection() const
+-{
+-    return m_ppdRequestConnection;
+-}
+\ No newline at end of file
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/cupsconnection4ppds.h b/daemons/sessionservice/printerbackend/printer_manager/cupsconnection4ppds.h
+deleted file mode 100644
+index 7a758b8..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/cupsconnection4ppds.h
++++ /dev/null
+@@ -1,34 +0,0 @@
+-#ifndef CUPSCONNECTION4PPDS_H
+-#define CUPSCONNECTION4PPDS_H
+-
+-#include <sys/utsname.h>
+-#include <cups/cups.h>
+-#include <cups/http.h>
+-#include <QDebug>
+-#include <map>
+-#include <string>
+-#include <qstring.h>
+-#include <stdexcept>
+-#include <QMutex>
+-#include <QMutexLocker>
+-
+-class CupsConnection4PPDs
+-{
+-public:
+-//    static CupsConnection4PPDs* getInstance();
+-//    static QMutex m_mutex;
+-    http_t* getCupsConnection() const;
+-    ~CupsConnection4PPDs();
+-    explicit CupsConnection4PPDs();
+-protected:
+-
+-private:
+-    http_t *m_ppdRequestConnection;
+-    const char *m_server;
+-    int m_ippPortNum;
+-    http_encryption_t m_encryptionType;
+-
+-//    void CupsPpdsRequest();
+-};
+-
+-#endif // CUPSCONNECTION4PPDS_H
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/find_and_match_ppds.cpp b/daemons/sessionservice/printerbackend/printer_manager/find_and_match_ppds.cpp
+deleted file mode 100644
+index fe8719c..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/find_and_match_ppds.cpp
++++ /dev/null
+@@ -1,396 +0,0 @@
+-#include "find_and_match_ppds.h"
+-#define g_cmdFindPPDs(m_newHttp) FindPPDsThread::getInstance(m_newHttp)
+-#define g_cmdMatchPPDs MatchPPDsThread::getInstance()
+-QMutex FindAndMatchPPDs:: m_mutex;
+-ppdPrinterMap FindAndMatchPPDs:: m_currentPPDsMap;
+-ppdPrinterMap FindAndMatchPPDs:: m_extraPPDsMap;
+-/************************************************
+-* 函数名称:FindAndMatchPPDs
+-* 功能描述:构造函数
+-* 输入参数:无
+-* 输出参数:无
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-FindAndMatchPPDs:: FindAndMatchPPDs(QObject *parent)
+-                 :  QObject(parent),
+-                 m_isPPDsCollecting(false),
+-                 m_canMatchPPD(false)
+-{
+-    qDebug() << "FindAndMatchPPDs is begin!";
+-    try
+-    {
+-        buildCupsConnection();
+-    }
+-    catch(const std::exception& e)
+-    {
+-        std::cerr << e.what() << '\n';
+-        throw;
+-    }
+-
+-}
+-/************************************************
+-* 函数名称:~FindAndMatchPPDs
+-* 功能描述:析构函数
+-* 输入参数:无
+-* 输出参数:无
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-FindAndMatchPPDs::~FindAndMatchPPDs()
+-{
+-    destroyCupsConnection();
+-    destroyGetPPDsConnection();
+-}
+-/************************************************
+-* 函数名称:getInstance
+-* 功能描述:public接口,用于返回唯一实例化对象的指针
+-* 输入参数:无
+-* 输出参数:唯一实例化对象的指针。
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-FindAndMatchPPDs *FindAndMatchPPDs::getInstance()
+-{
+-    static FindAndMatchPPDs *findAndMatchInstance = nullptr;
+-    static QThread *pFindAndMatchWorkPPDs = nullptr;
+-    if (findAndMatchInstance == nullptr)
+-    {
+-        m_mutex.lock();
+-        if (findAndMatchInstance == nullptr)
+-        {
+-            try
+-            {
+-                findAndMatchInstance = new FindAndMatchPPDs;
+-                pFindAndMatchWorkPPDs = new QThread();
+-                findAndMatchInstance->moveToThread(pFindAndMatchWorkPPDs);
+-                connect(pFindAndMatchWorkPPDs, &QThread::finished, findAndMatchInstance, &QObject::deleteLater);
+-                connect(findAndMatchInstance, SIGNAL(start()),
+-                        findAndMatchInstance, SLOT(detectStart()));
+-                pFindAndMatchWorkPPDs->start();
+-            }
+-            catch (const std::runtime_error &re)
+-            {
+-                qDebug() << "runtime_error:" << re.what();
+-                throw;
+-            }
+-        }
+-        m_mutex.unlock();
+-    }
+-    return findAndMatchInstance;
+-}
+-/************************************************
+-* 函数名称:buildCupsConnection
+-* 功能描述:私有函数,Cups的链接建立
+-* 输入参数:无
+-* 输出参数:无
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-void FindAndMatchPPDs::buildCupsConnection()
+-{
+-    //CUPS链接建立
+-    //*************************************************************************************
+-    m_cupsConnection = new CupsConnection4PPDs();
+-    m_newHttp = m_cupsConnection->getCupsConnection(); //建立,并获取http链接
+-
+-    if (!m_newHttp)
+-    {
+-        qDebug() << "CUPsConnection construct failed!";
+-        destroyCupsConnection();
+-        throw std::runtime_error("Failed to buildCupsConnection!");
+-    }
+-}
+-/************************************************
+-* 函数名称:destroyCupsConnection
+-* 功能描述:私有函数,Cups的链接的销毁
+-* 输入参数:无
+-* 输出参数:无
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-void FindAndMatchPPDs::destroyCupsConnection()
+-{
+-    qDebug() << "destroyCupsConnection";
+-    if(!m_cupsConnection)
+-    {
+-        delete m_cupsConnection;
+-        m_cupsConnection = nullptr;
+-    }
+-}
+-/************************************************
+-* 函数名称:updatePPDsMap
+-* 功能描述:public接口,用于更新PPD的Map
+-* 输入参数:无
+-* 输出参数:是否更新了,0表示更新了,1表示Map此时正在更新
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-int FindAndMatchPPDs::updatePPDsMap()
+-{
+-    qDebug() << "updatePPDsMap ing !";
+-    if(false == isBusy())
+-    {
+-        buildGetPPDsThreadsAndConnections();
+-        emit startFindPPDs();
+-        m_isPPDsCollecting = true;
+-        return static_cast<int>(FindAndMatchStatus::OPERATION_OK);
+-    }
+-    else
+-    {
+-        return static_cast<int>(FindAndMatchStatus::GETTING_PPD_THREAD_IS_RUNNING);
+-    }
+-}
+-/************************************************
+-* 函数名称:matchPPDToPrinter
+-* 功能描述:public接口,用于在PPD的Map中匹配某打印机对应
+-          的PPD列表
+-* 输入参数:打印机厂商,打印机型号,打印机链接类型,用于取
+-          结果的result
+-* 输出参数:是否匹配了,0表示匹配了,2表示Map此时正在更新
+-          ,3表示匹配失败。若匹配成功,可在入参的result
+-          中取到匹配的结果。
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-int FindAndMatchPPDs::matchPPDToPrinter(QString vendor,
+-                                        QString model,
+-                                        QString suggestPpdName,
+-                                        QString &exactMatchPPD,
+-                                        QStringList &matchResultList)
+-{
+-    if(vendor.isEmpty()||model.isEmpty())
+-    {
+-        qDebug() << "打印机厂商内容为空!";
+-        return static_cast<int>(FindAndMatchStatus::PPDS_MATCH_FAILED);
+-    }
+-    if(vendor.size() > 128 || model.size() > 128)
+-    {
+-        qDebug() << "打印机厂商内容为乱码!";
+-        return static_cast<int>(FindAndMatchStatus::PPDS_MATCH_FAILED);
+-    }
+-    qDebug() << "开始匹配" << vendor << "牌" << model << "的打印机";
+-    if(true == isBusy() || !hasPPDsMap())
+-    {
+-        qDebug() << "线程忙,不能匹配!";
+-
+-        return static_cast<int>(FindAndMatchStatus::PPDS_MAP_IS_NOT_READY);
+-    }
+-    else
+-    {
+-        qDebug() << "开启匹配线程!";
+-        buildMatchPPDsThreadsAndConnections();
+-        int res = g_cmdMatchPPDs->initPPDMatch(vendor,model,suggestPpdName,m_currentPPDsMap,m_extraPPDsMap,exactMatchPPD,matchResultList);
+-        return res;
+-    }
+-}
+-
+-/************************************************
+-* 函数名称:gotPPDsMap
+-* 功能描述:私有函数,获取到了所有PPD的map,相关标志位置位,
+-          销毁PPD链接
+-* 输入参数:无
+-* 输出参数:无
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-void FindAndMatchPPDs::gotPPDsMap(const ppdPrinterMap &temp,const ppdPrinterMap &extra)
+-{
+-    m_currentPPDsMap = temp;
+-    m_extraPPDsMap = extra;
+-
+-    m_canMatchPPD = true;
+-    m_isPPDsCollecting = false;
+-
+-    destroyGetPPDsConnection();
+-    qDebug() << "匹配完毕,成功!";
+-    emit updateFinished();
+-}
+-
+-/************************************************
+-* 函数名称:getPPDsErr
+-* 功能描述:私有函数,获取所有PPD的map失败,相关标志位置位,
+-          销毁PPD链接
+-* 输入参数:无
+-* 输出参数:无
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-void FindAndMatchPPDs::getPPDsErr(int errCode)//RequestError errCode)
+-{
+-    m_canMatchPPD =false;
+-    m_isPPDsCollecting = false;
+-
+-    destroyGetPPDsConnection();
+-    switch(errCode)
+-    {
+-        case static_cast<int>(RequestError::CUPS_REQUEST_ERROR):
+-            qDebug() << "CUPS请求失败!";
+-            break;
+-        case static_cast<int>(RequestError::IPP_REQUEST_ERROR):
+-            qDebug() << "IPP请求失败!";
+-            break;
+-        case static_cast<int>(RequestError::GOT_NO_PPDS):
+-            qDebug() << "没获取到PPD文件!";
+-            break;
+-
+-        default:
+-            break;
+-    }
+-    qDebug() << "匹配完毕,失败!";
+-    emit updateFailed();
+-}
+-
+-/************************************************
+-* 函数名称:buildGetPPDsThreadsAndConnections
+-* 功能描述:私有函数,建立PPD查找线程链接
+-* 输入参数:无
+-* 输出参数:无
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-void FindAndMatchPPDs::buildGetPPDsThreadsAndConnections()
+-{
+-    //*************************************************************************************
+-    //建立通过http链接获取PPDs的线程
+-    //*************************************************************************************
+-    qDebug() << "建立通过http链接获取PPDs的线程";
+-    g_cmdFindPPDs(m_newHttp)->start();
+-    qRegisterMetaType<ppdPrinterMap>("ppdPrinterMap"); //注册自己的类型,必须!!!!!
+-
+-    connect(this, &FindAndMatchPPDs::startFindPPDs, g_cmdFindPPDs(m_newHttp), &FindPPDsThread::initPPDMapConstruct,Qt::UniqueConnection);//查找并构建ppd容器
+-    connect(g_cmdFindPPDs(m_newHttp), SIGNAL(ippRequestError(int)),this,SLOT(getPPDsErr(int)),Qt::UniqueConnection);
+-    connect(g_cmdFindPPDs(m_newHttp), SIGNAL(gotAllHandledPPDs(ppdPrinterMap,ppdPrinterMap)),this, SLOT(gotPPDsMap(ppdPrinterMap,ppdPrinterMap)),Qt::UniqueConnection); //获取到所有PPD文件列表的初始map
+-
+-    //*************************************************************************************
+-}
+-
+-/************************************************
+-* 函数名称:destroyGetPPDsConnection
+-* 功能描述:私有函数,销毁PPD查找线程链接
+-* 输入参数:无
+-* 输出参数:无
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-void FindAndMatchPPDs::destroyGetPPDsConnection()
+-{
+-    qDebug() << "destroyGetPPDsConnection";
+-    disconnect(this, &FindAndMatchPPDs::startFindPPDs, g_cmdFindPPDs(m_newHttp), &FindPPDsThread::initPPDMapConstruct);//查找并构建ppd容器
+-    disconnect(g_cmdFindPPDs(m_newHttp), SIGNAL(ippRequestError(int)),this,SLOT(getPPDsErr(int)));
+-    disconnect(g_cmdFindPPDs(m_newHttp), SIGNAL(gotAllHandledPPDs(ppdPrinterMap,ppdPrinterMap)),this, SLOT(gotPPDsMap(ppdPrinterMap,ppdPrinterMap))); //获取到所有PPD文件列表的初始map
+-}
+-
+-/************************************************
+-* 函数名称:buildMatchPPDsThreadsAndConnections
+-* 功能描述:私有函数,建立PPD匹配线程链接
+-* 输入参数:无
+-* 输出参数:无
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-void FindAndMatchPPDs::buildMatchPPDsThreadsAndConnections()
+-{
+-    qDebug() << "建立打印机匹配PPDs的线程";
+-    g_cmdMatchPPDs->start();
+-}
+-
+-/************************************************
+-* 函数名称:destroyMatchPPDsConnections
+-* 功能描述:私有函数,销毁PPD匹配线程链接
+-* 输入参数:无
+-* 输出参数:无
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-void FindAndMatchPPDs::destroyMatchPPDsConnections()
+-{
+-    qDebug() << "destroyMatchPPDsConnections";
+-}
+-/************************************************
+-* 函数名称:getCurrentPPDsMap
+-* 功能描述:public接口,用于只读当前的PPD列表容器
+-* 输入参数:ppdMap容器
+-* 输出参数:是否取到了,0表示取到了,2表示Map此时正在更新
+-          。若取成功,可在入参的ppdMap中取到PPD的Map。
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-int FindAndMatchPPDs::getCurrentPPDsMap(ppdPrinterMap& ppdMap) const
+-{
+-    qDebug() << "获取当前的PPD文件Map";
+-    m_mutex.lock();                       //会出现死等
+-    if((false == m_isPPDsCollecting)  && (true == m_canMatchPPD))
+-    {
+-        ppdMap = m_currentPPDsMap;
+-        m_mutex.unlock();
+-        return static_cast<int>(FindAndMatchStatus::OPERATION_OK);
+-    }
+-    else
+-    {
+-        m_mutex.unlock();
+-        return static_cast<int>(FindAndMatchStatus::PPDS_MAP_IS_NOT_READY);
+-    }
+-}
+-/************************************************
+-* 函数名称:isBusy
+-* 功能描述:public接口,用于只读当前是否可以进行PPD列表更
+-          新
+-* 输入参数:无
+-* 输出参数:是否可以进行PPD列表更新,false表示可以,true表示不可以。
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-bool FindAndMatchPPDs::isBusy() const
+-{
+-    return m_isPPDsCollecting;
+-}
+-/************************************************
+-* 函数名称:hasPPDsMap
+-* 功能描述:public接口,用于只读当前是否可以进行PPD匹配
+-* 输入参数:无
+-* 输出参数:是否可以进行PPD匹配,false表示不可以,true表示可以。
+-* 修改日期:2021.05.27
+-* 修改内容:
+-*   创建  HZH
+-*
+-*************************************************/
+-bool FindAndMatchPPDs::hasPPDsMap() const
+-{
+-    return m_canMatchPPD;
+-}
+-
+-void FindAndMatchPPDs::detectStart()
+-{
+-    qDebug() << "FindAndMatchPPDs Thread is:" << QThread::currentThreadId();
+-}
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/find_and_match_ppds.h b/daemons/sessionservice/printerbackend/printer_manager/find_and_match_ppds.h
+deleted file mode 100644
+index 5bf46f9..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/find_and_match_ppds.h
++++ /dev/null
+@@ -1,118 +0,0 @@
+-#ifndef FIND_AND_MATCH_PPDS_H
+-#define FIND_AND_MATCH_PPDS_H
+-
+-#include <QObject>
+-#include <QMap>
+-#include <QString>
+-#include <QThread>
+-
+-#include <iostream>
+-#include <stdexcept>
+-#include <QMetaType>
+-#include "cupsconnection4ppds.h"
+-#include "findppdsthread.h"
+-#include "matchppdsthread.h"
+-#include "device_monitor.h"
+-
+-enum class FindAndMatchStatus : int {
+-    OPERATION_OK = 0,
+-    GETTING_PPD_THREAD_IS_RUNNING,
+-    PPDS_MAP_IS_NOT_READY,
+-    PPDS_MATCH_FAILED,
+-};
+-
+-#define g_findAndMatchWorkThread (FindAndMatchPPDs::getInstance()) //CUPS连接建立实例化
+-//#define g_cupsConnection (CupsConnection4PPDs::getInstance()) //CUPS连接建立实例化
+-
+-class FindAndMatchPPDs : public QObject
+-{
+-    Q_OBJECT
+-public:
+-
+-    static FindAndMatchPPDs* getInstance();//public接口,返回唯一实例化对象的指针
+-
+-    int updatePPDsMap();//public接口,用于更新PPD的Map
+-    int matchPPDToPrinter(QString vendor,
+-                          QString model,
+-                          QString suggestPpdName,
+-                          QString &exactMatchPPD,
+-                          QStringList &matchResultList);//public接口,用于匹配打印机对应的PPD文件
+-
+-    int getCurrentPPDsMap(ppdPrinterMap& ppdMap) const;//public接口,用于只读当前的PPD列表容器
+-
+-    bool isBusy() const;//public接口,用于检测当前是否可以进行PPD的Map更新
+-    bool hasPPDsMap() const;//public接口,用于检测是否可以进行PPD的匹配
+-
+-
+-protected:
+-
+-
+-
+-public slots:
+-    void getPPDsErr(int);//RequestError errCode);
+-    void gotPPDsMap(const ppdPrinterMap &temp,const ppdPrinterMap &extra);
+-    void detectStart();
+-signals:
+-    void startFindPPDs();
+-    void start();
+-    void updateFinished();
+-    void updateFailed();
+-private:
+-
+-    ~FindAndMatchPPDs();
+-    FindAndMatchPPDs(QObject *parent = nullptr);
+-    FindAndMatchPPDs(FindAndMatchPPDs const&);
+-    FindAndMatchPPDs& operator=(FindAndMatchPPDs const&);
+-
+-    static QMutex m_mutex;                         //线程锁保证单例线程安全
+-
+-    static ppdPrinterMap m_currentPPDsMap;           //当前的ppd列表容器
+-    static ppdPrinterMap m_extraPPDsMap;           //当前的ppd列表容器
+-
+-    void buildCupsConnection();                    //建立CUPS链接
+-    void destroyCupsConnection();
+-
+-    void buildGetPPDsThreadsAndConnections();      //建立获取PPD线程
+-    void destroyGetPPDsConnection();
+-
+-    void buildMatchPPDsThreadsAndConnections();    //建立匹配PPD线程
+-    void destroyMatchPPDsConnections();
+-
+-
+-    /***********************链接CUPS查找PPDS部分用的**************************/
+-    CupsConnection4PPDs* m_cupsConnection = nullptr;
+-    http_t *m_newHttp = nullptr;
+-    ipp_t *m_ppdRequest = nullptr;
+-    ipp_t *m_cupsAnswer = nullptr;
+-    ipp_attribute_t *m_attr = nullptr;
+-
+-    QMap<QStringList, QString> m_originPPDs = {}; //从CUPS请求到的原始PPDS列表
+-
+-    FindPPDsThread *m_cmdFindPPDs = nullptr; //从CUPS链接获取PPDS列表的线程
+-    QThread *m_FindPPDs = nullptr;
+-    MatchPPDsThread *m_cmdMatchPPDs = nullptr; //从PPDS列表匹配打印机名称的线程
+-    QThread *m_MatchPPDs = nullptr;
+-
+-    bool m_ppdsMapisOK = false;                                  //是否有精准匹配的PPDS
+-    QMap<QString, QMap<QString, PPDsAndAttr>> m_originData = {}; //QMap<厂商名,QMap<型号,PPDS属性数据结构>>的原始数据
+-
+-    bool m_isPPDsCollecting;
+-    bool m_canMatchPPD;
+-
+-    class DEL
+-    {
+-    public:
+-        ~DEL()
+-        {
+-            if( g_findAndMatchWorkThread )
+-            {
+-                qDebug() << "调用了析构函数!!!";
+-                delete g_findAndMatchWorkThread;
+-            }
+-        }
+-    };
+-
+-    static DEL m_Gabor;
+-};
+-
+-#endif // FIND_AND_MATCH_PPDS_H
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/findppdsthread.cpp b/daemons/sessionservice/printerbackend/printer_manager/findppdsthread.cpp
+deleted file mode 100644
+index f492467..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/findppdsthread.cpp
++++ /dev/null
+@@ -1,559 +0,0 @@
+-#include <QThread>
+-#include "findppdsthread.h"
+-QMutex FindPPDsThread:: m_mutex;
+-QString modelUniform(QString handledStr);
+-QString deviceUniform(QString handledStr);
+-QString makeandmodelUniform(QString handledStr);
+-FindPPDsThread::FindPPDsThread(http_t* httpConnection, QObject *parent)
+-                    : QObject(parent),
+-                    m_newHttp(httpConnection),
+-                    m_originPPDs(),
+-                    m_deviceIDPPDs()
+-{
+-    qDebug() << "FindPPDsThread is begin!";
+-}
+-
+-FindPPDsThread* FindPPDsThread::getInstance(http_t* httpConnection)
+-{
+-    static FindPPDsThread *singleInstance = nullptr;
+-    static QThread *pFindPPDsWorkPPDs = nullptr;
+-    if (singleInstance == nullptr)
+-    {
+-        m_mutex.lock();
+-        if (singleInstance == nullptr)
+-        {
+-            singleInstance = new FindPPDsThread(httpConnection);
+-            pFindPPDsWorkPPDs = new QThread();
+-            singleInstance->moveToThread(pFindPPDsWorkPPDs);
+-
+-            connect(pFindPPDsWorkPPDs, &QThread::finished, singleInstance, &QObject::deleteLater);
+-            connect(singleInstance, SIGNAL(start()),
+-                    singleInstance, SLOT(detectStart()));
+-            pFindPPDsWorkPPDs->start();
+-        }
+-        m_mutex.unlock();
+-    }
+-    return singleInstance;
+-
+-}
+-
+-FindPPDsThread::~FindPPDsThread()
+-{
+-    if(!m_originPPDs.isEmpty())
+-    {
+-        m_originPPDs.clear();
+-    }
+-    if(!m_deviceIDPPDs.isEmpty())
+-    {
+-        m_deviceIDPPDs.clear();
+-    }
+-}
+-
+-void FindPPDsThread::initPPDMapConstruct()
+-{
+-    QMutexLocker lockData( &m_mutex);
+-
+-    if(!m_originPPDs.isEmpty())
+-    {
+-        m_originPPDs.clear();
+-    }
+-    if(!m_deviceIDPPDs.isEmpty())
+-    {
+-        m_deviceIDPPDs.clear();
+-    }
+-
+-    int operateStatus = getPPDsFromCUPS();
+-
+-    if(operateStatus == static_cast<int>(RequestError::PPDS_GOT_SUCCESS))
+-    {
+-        if(!m_originPPDs.isEmpty())
+-        {
+-            qDebug() << "PPDs got!";
+-            emit gotAllHandledPPDs(m_originPPDs, m_deviceIDPPDs);
+-        }
+-        else
+-        {
+-            emit ippRequestError(static_cast<int>(RequestError::GOT_NO_PPDS));
+-        }
+-    }
+-    else if(operateStatus == static_cast<int>(RequestError::CUPS_REQUEST_ERROR))
+-    {
+-        emit ippRequestError(static_cast<int>(RequestError::CUPS_REQUEST_ERROR));
+-    }
+-    else if(operateStatus == static_cast<int>(RequestError::IPP_REQUEST_ERROR))
+-    {
+-        emit ippRequestError(static_cast<int>(RequestError::IPP_REQUEST_ERROR));
+-    }
+-    return;
+-}
+-
+-int FindPPDsThread::getPPDsFromCUPS()
+-{
+-    if(!m_originPPDs.isEmpty())
+-    {
+-        m_originPPDs.clear();
+-    }
+-    if(!m_deviceIDPPDs.isEmpty())
+-    {
+-        m_deviceIDPPDs.clear();
+-    }
+-
+-    m_ppdRequest = ippNewRequest(CUPS_GET_PPDS);
+-
+-    m_cupsAnswer = cupsDoRequest(m_newHttp, m_ppdRequest, "/admin/");
+-
+-    if (!m_cupsAnswer || ippGetStatusCode(m_cupsAnswer) > IPP_OK_CONFLICT)
+-    {
+-        qDebug() << "cupsAnswer request failed!";
+-        if(!m_cupsAnswer)
+-        {
+-
+-            return static_cast<int>(RequestError::CUPS_REQUEST_ERROR);
+-        }
+-        else
+-        {
+-            qDebug() << ippGetStatusCode(m_cupsAnswer);
+-
+-            return static_cast<int>(RequestError::IPP_REQUEST_ERROR);
+-        }
+-    }
+-    else
+-    {
+-        if(ippGetStatusCode(m_cupsAnswer) == 0)
+-        {
+-            qDebug() << "ippGetStatusCode(cupsAnswer) result is OK";
+-        }
+-    }
+-
+-    for (m_attr = ippFirstAttribute(m_cupsAnswer); m_attr; m_attr = ippNextAttribute(m_cupsAnswer))
+-    {
+-        const char *name = nullptr;
+-
+-        name = ippGetName(m_attr);
+-        if(!name)
+-        {
+-            continue;
+-        }
+-        if (!strcmp(name, "ppd-name") && ippGetValueTag(m_attr) == IPP_TAG_NAME)
+-        {
+-            QString ppdname = nullptr;
+-            QString ppd_make_and_model = nullptr;
+-            QString ppd_device_id = nullptr;
+-            QString ppd_make = nullptr;
+-            QString ppd_product = nullptr;
+-            QString keyMFG = nullptr;
+-            QString deviceID = nullptr;
+-            QString deviceMakeAndModel = nullptr;
+-
+-            ppdname = ippGetString(m_attr, 0, nullptr);
+-            PPDsAndAttr a;
+-            a.ppdname = ppdname;
+-            if(a.ppdname.contains("driverless",Qt::CaseInsensitive))
+-            {
+-                continue;
+-            }
+-
+-
+-            for (; m_attr && ippGetGroupTag(m_attr) == IPP_TAG_PRINTER; m_attr = ippNextAttribute(m_cupsAnswer))
+-            {
+-                const char *AttrName = nullptr;
+-
+-                AttrName = ippGetName(m_attr);
+-                if(!AttrName)
+-                {
+-                    break;
+-                }
+-
+-                if(AttrName && !strcmp(AttrName, "ppd-make-and-model"))
+-                {
+-                    ppd_make_and_model = QString::fromLocal8Bit((char *)ippGetString(m_attr, 0, nullptr));
+-
+-                    QStringList temp = {};
+-                    if(ppd_make_and_model.contains("fuji",Qt::CaseInsensitive)
+-                            &&ppd_make_and_model.contains("xerox",Qt::CaseInsensitive))
+-                    {
+-                        keyMFG = "Fuji-Xerox";
+-                        if(!ppd_make_and_model.compare("Fuji Xerox",Qt::CaseInsensitive))
+-                        {
+-                            continue;
+-                        }
+-                        a.match_str = modelUniform(ppd_make_and_model.remove(0,11));
+-                        if(ppd_make_and_model.compare("") || ppd_make_and_model.compare(" "))
+-                        {
+-                            temp = ppd_make_and_model.split(' ');
+-                            for (int i = 1; i < temp.size(); ++i)
+-                            {
+-                                a.ppd_make_and_model.append(temp[i]);
+-                                a.ppd_make_and_model.append("-");
+-                            }
+-                            a.ppd_make_and_model.remove(a.ppd_make_and_model.length() - 1, 1);
+-                        }
+-                        else
+-                        {
+-                            continue;
+-                        }
+-                    }
+-                    else if(ppd_make_and_model.contains("konica",Qt::CaseInsensitive)
+-                            &&ppd_make_and_model.contains("minolta",Qt::CaseInsensitive))
+-                    {
+-                        keyMFG = "Konica-Minolta";
+-                        if(!ppd_make_and_model.compare("konica minolta",Qt::CaseInsensitive))
+-                        {
+-                            continue;
+-                        }
+-
+-                        a.match_str = modelUniform(ppd_make_and_model.remove(0,15));
+-                        if(ppd_make_and_model.compare("") || ppd_make_and_model.compare(" "))
+-                        {
+-                            temp = ppd_make_and_model.split(' ');
+-                            if (temp.size() == 1)
+-                            {
+-                                if(temp[0].contains("PS(P)",Qt::CaseInsensitive))
+-                                {
+-                                    temp[0].remove(temp[0].length() - 5, temp[0].length());
+-                                }
+-                                a.ppd_make_and_model.append(temp[0]);
+-                            }
+-                            else
+-                            {
+-                                if (temp.size() == 2 && temp[1].contains("PS(P)",Qt::CaseInsensitive))
+-                                {
+-                                    if(temp[0].contains("PS(P)",Qt::CaseInsensitive))
+-                                    {
+-                                        temp[0].remove(temp[0].length() - 5, temp[0].length());
+-                                    }
+-                                    a.ppd_make_and_model.append(temp[0]);
+-                                }
+-                                else
+-                                {
+-                                    for (int i = 1; i < temp.size(); ++i)
+-                                    {
+-                                        a.ppd_make_and_model.append(temp[i]);
+-                                        a.ppd_make_and_model.append("-");
+-                                    }
+-                                    a.ppd_make_and_model.remove(a.ppd_make_and_model.length() - 1, 1);
+-                                }
+-                            }
+-                        }
+-                        else
+-                        {
+-                            continue;
+-                        }
+-                    }
+-                    else if(ppd_make_and_model.contains("lexmark",Qt::CaseInsensitive)
+-                            &&ppd_make_and_model.contains("international",Qt::CaseInsensitive))
+-                    {
+-                        keyMFG = "Lexmark-International";
+-                        if(!ppd_make_and_model.compare("lexmark international",Qt::CaseInsensitive))
+-                        {
+-                            continue;
+-                        }
+-                        a.match_str = modelUniform(ppd_make_and_model.remove(0,22));
+-                        if(ppd_make_and_model.compare("") || ppd_make_and_model.compare(" "))
+-                        {
+-                            temp = ppd_make_and_model.split(' ');
+-                            for (int i = 1; i < temp.size(); ++i)
+-                            {
+-                                a.ppd_make_and_model.append(temp[i]);
+-                                a.ppd_make_and_model.append("-");
+-                            }
+-                            a.ppd_make_and_model.remove(a.ppd_make_and_model.length() - 1, 1);
+-                        }
+-                        else
+-                        {
+-                            continue;
+-                        }
+-                    }
+-                    else if(ppd_make_and_model.contains("kyocera",Qt::CaseInsensitive)
+-                            &&ppd_make_and_model.contains("mita",Qt::CaseInsensitive))
+-                    {
+-                        keyMFG = "Kyocera-Mita";
+-                        if(!ppd_make_and_model.compare("kyocera mita",Qt::CaseInsensitive))
+-                        {
+-                            continue;
+-                        }
+-                        a.match_str = modelUniform(ppd_make_and_model.remove(0,13));
+-                        if(ppd_make_and_model.compare("") || ppd_make_and_model.compare(" "))
+-                        {
+-                            temp = ppd_make_and_model.split(' ');
+-                            if (temp.size() == 1)
+-                            {
+-                                a.ppd_make_and_model.append(temp[0]);
+-                            }
+-                            else
+-                            {
+-                                for (int i = 1; i < temp.size(); ++i)
+-                                {
+-                                    a.ppd_make_and_model.append(temp[i]);
+-                                    a.ppd_make_and_model.append("-");
+-                                }
+-                                a.ppd_make_and_model.remove(a.ppd_make_and_model.length() - 1, 1);
+-                            }
+-                        }
+-                        else
+-                        {
+-                            continue;
+-                        }
+-                    }
+-                    else if(ppd_make_and_model.contains("hewlett",Qt::CaseInsensitive)
+-                            &&ppd_make_and_model.contains("packard",Qt::CaseInsensitive))
+-                    {
+-                        keyMFG = "HP";
+-                        if(!ppd_make_and_model.compare("hewlett packard",Qt::CaseInsensitive))
+-                        {
+-                            continue;
+-                        }
+-                        a.match_str = modelUniform(ppd_make_and_model.remove(0,16));
+-                        if(ppd_make_and_model.compare("") || ppd_make_and_model.compare(" "))
+-                        {
+-                            temp = ppd_make_and_model.split(' ');
+-                            for (int i = 1; i < temp.size(); ++i)
+-                            {
+-                                a.ppd_make_and_model.append(temp[i]);
+-                                a.ppd_make_and_model.append("-");
+-                            }
+-                            a.ppd_make_and_model.remove(a.ppd_make_and_model.length() - 1, 1);
+-                        }
+-                        else
+-                        {
+-                            continue;
+-                        }
+-                    }
+-                    else if(ppd_make_and_model.contains("lenovo",Qt::CaseInsensitive)
+-                            &&ppd_make_and_model.contains("image",Qt::CaseInsensitive))
+-                    {
+-                        keyMFG = "Lenovo";
+-                        if(!ppd_make_and_model.compare("lenovo image",Qt::CaseInsensitive))
+-                        {
+-                            continue;
+-                        }
+-                        a.match_str = modelUniform(ppd_make_and_model.remove(0,13));
+-                        if(ppd_make_and_model.compare("") || ppd_make_and_model.compare(" "))
+-                        {
+-                            a.ppd_make_and_model.append(ppd_make_and_model);
+-                        }
+-                        else
+-                        {
+-                            continue;
+-                        }
+-                    }
+-                    else
+-                    {
+-                        temp = ppd_make_and_model.split(' ');
+-                        keyMFG = temp[0];
+-
+-                        ppd_make_and_model = ppd_make_and_model.remove(0,keyMFG.size()+1);
+-
+-                        if(a.ppd_make_and_model.contains("driverless",Qt::CaseInsensitive))
+-                        {
+-                            a.ppd_make_and_model.clear();
+-                        }
+-
+-                        if(ppd_make_and_model.compare("") || ppd_make_and_model.compare(" "))
+-                        {
+-                            for (int i = 1; i < temp.size(); ++i)
+-                            {
+-                                a.ppd_make_and_model.append(temp[i]);
+-                                a.ppd_make_and_model.append("-");
+-                            }
+-                            a.ppd_make_and_model.remove(a.ppd_make_and_model.length() - 1, 1);
+-                            a.match_str = modelUniform(a.ppd_make_and_model);
+-                        }
+-                        else
+-                        {
+-                            continue;
+-                        }
+-                    }
+-
+-                }
+-                if(AttrName && !strcmp(AttrName, "ppd-device-id"))
+-                {
+-                    ppd_device_id = QString::fromLocal8Bit((char *)ippGetString(m_attr, 0, nullptr));
+-                    if(!ppd_device_id.isEmpty())
+-                    {
+-                        deviceID = deviceUniform(ppd_device_id);
+-                        deviceMakeAndModel = makeandmodelUniform(ppd_device_id);
+-                    }
+-
+-                    a.ppd_device_id = ppd_device_id;
+-                }
+-                if(AttrName && !strcmp(AttrName, "ppd-make"))
+-                {
+-                    ppd_make = QString::fromLocal8Bit((char *)ippGetString(m_attr, 0, nullptr));
+-                    a.ppd_make = ppd_make;
+-                }
+-                if(AttrName && !strcmp(AttrName, "ppd-product"))
+-                {
+-                    ppd_product = QString::fromLocal8Bit((char *)ippGetString(m_attr, 0, nullptr));
+-                    a.ppd_product = ppd_product;
+-                }
+-            }
+-
+-            keyMFG = keyMFG.toLower();
+-
+-            bool hasExist = false;
+-            auto it = m_originPPDs.begin();
+-            for (;it != m_originPPDs.end();++it)
+-            {
+-                if (it.key().contains(keyMFG, Qt::CaseInsensitive))
+-                {
+-                    hasExist = true;
+-                    keyMFG = it.key();
+-                }
+-            }
+-
+-
+-            if (true == hasExist)
+-            {
+-                auto &mfg = m_originPPDs[keyMFG];
+-                if(!a.match_str.isEmpty())
+-                {
+-                    mfg.insert(a.match_str,a);
+-                }
+-            }
+-            else
+-            {
+-                QMap<QString,PPDsAndAttr> tempMap ;
+-                if(!a.match_str.isEmpty())
+-                {
+-                    tempMap.insert(a.match_str,a);
+-                    m_originPPDs.insert(keyMFG,tempMap);
+-                }
+-            }
+-
+-            if(keyMFG != deviceID && !deviceID.isEmpty() && deviceID != " " && !deviceID.contains(keyMFG))
+-            {
+-                bool hasExist = false;
+-                auto it = m_originPPDs.begin();
+-                for (;it != m_originPPDs.end();++it)
+-                {
+-                    if (it.key().contains(deviceID, Qt::CaseInsensitive))
+-                    {
+-                        hasExist = true;
+-                        deviceID = it.key();
+-                    }
+-                }
+-
+-                if (true == hasExist)
+-                {
+-                    auto &mfg = m_deviceIDPPDs[deviceID];
+-                    a.match_str = (deviceMakeAndModel.isEmpty())? a.match_str:deviceMakeAndModel;
+-                    if(!a.match_str.isEmpty())
+-                    {
+-                        mfg.insert(a.match_str,a);
+-                    }
+-                }
+-                else
+-                {
+-                    QMap<QString,PPDsAndAttr> tempMap ;
+-                    a.match_str = (deviceMakeAndModel.isEmpty())? a.match_str:deviceMakeAndModel;
+-                    if(!a.match_str.isEmpty())
+-                    {
+-                        tempMap.insert(a.match_str,a);
+-                        m_deviceIDPPDs.insert(deviceID,tempMap);
+-                    }
+-                }
+-            }
+-        }
+-    }
+-    if (m_cupsAnswer!=nullptr)
+-    {
+-        ippDelete(m_cupsAnswer);
+-    }
+-
+-    return static_cast<int>(RequestError::PPDS_GOT_SUCCESS);
+-}
+-
+-void FindPPDsThread::detectStart()
+-{
+-    qDebug() << "FindPPDsThread Thread is:" << QThread::currentThreadId();
+-}
+-
+-QString modelUniform(QString handledStr)
+-{
+-    QString outputStr;
+-    outputStr.clear();
+-    foreach (auto &letter, handledStr.toLower())
+-    {
+-        if (letter.isSpace())
+-        {
+-            continue;
+-        }
+-        else if(!letter.isLetterOrNumber())
+-        {
+-            continue;
+-        }
+-        else
+-        {
+-            outputStr.append(letter);
+-        }
+-    }
+-    return outputStr;
+-}
+-
+-QString deviceUniform(QString handledStr)
+-{
+-    QString outputStr;
+-    outputStr.clear();
+-
+-    QStringList deviceInfoList = (handledStr.trimmed()).split(";");
+-    for(QString str: deviceInfoList)
+-    {
+-        if(str.contains("mfg",Qt::CaseInsensitive))
+-        {
+-            handledStr = str;
+-            break;
+-        }
+-        if(str.contains("MANUFACTURER",Qt::CaseInsensitive))
+-        {
+-            handledStr = str;
+-            break;
+-        }
+-    }
+-
+-    foreach (auto &letter, handledStr)
+-    {
+-        if (letter.isSpace())
+-        {
+-            outputStr.append("-");
+-        }
+-        else
+-        {
+-            outputStr.append(letter);
+-        }
+-    }
+-    return outputStr;
+-}
+-
+-QString makeandmodelUniform(QString handledStr)
+-{
+-    QString outputStr;
+-    outputStr.clear();
+-
+-    QStringList deviceInfoList = (handledStr.trimmed()).split(";");
+-    for(QString str: deviceInfoList)
+-    {
+-        if(str.contains("mdl",Qt::CaseInsensitive))
+-        {
+-            handledStr = str;
+-            break;
+-        }
+-    }
+-
+-    foreach (auto &letter, handledStr)
+-    {
+-        if (letter.isSpace())
+-        {
+-            outputStr.append("-");
+-        }
+-        else
+-        {
+-            outputStr.append(letter);
+-        }
+-    }
+-    if(outputStr.startsWith("mdl:", Qt::CaseInsensitive))
+-    {
+-        outputStr.remove(0,4);
+-    }
+-    return outputStr;
+-}
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/findppdsthread.h b/daemons/sessionservice/printerbackend/printer_manager/findppdsthread.h
+deleted file mode 100644
+index 735ca00..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/findppdsthread.h
++++ /dev/null
+@@ -1,72 +0,0 @@
+-#ifndef FINDPPDSTHREAD_H
+-#define FINDPPDSTHREAD_H
+-
+-#include <QObject>
+-#include <QApplication>
+-#include <QMetaType>
+-#include <QMutexLocker>
+-#include <QTimer>
+-#include "cupsconnection4ppds.h"
+-
+-
+-class PPDsAndAttr
+-{
+-public:
+-    QString ppdname;
+-    QString ppd_make;
+-    QString ppd_product;
+-    QString ppd_make_and_model;
+-    QString ppd_device_id;
+-    QString match_str;
+-};
+-Q_DECLARE_METATYPE(PPDsAndAttr)
+-
+-enum class RequestError:int
+-{
+-    PPDS_GOT_SUCCESS = 0,
+-    CUPS_REQUEST_ERROR,
+-    IPP_REQUEST_ERROR,
+-    GOT_NO_PPDS,
+-};
+-
+-using ppdPrinterMap = QMap<QString,QMap<QString,PPDsAndAttr> > ;
+-
+-class FindPPDsThread : public QObject
+-{
+-    Q_OBJECT
+-public:
+-    static FindPPDsThread* getInstance(http_t* httpConnection);
+-
+-protected:
+-
+-
+-signals:
+-    void gotAllHandledPPDs(const ppdPrinterMap &origin,const ppdPrinterMap &extra);
+-    void ippRequestError(int);
+-    void getPPDsFromCUPSErr();
+-    void ppdRequestSuccessed();
+-
+-    void start();
+-
+-public slots:
+-    void initPPDMapConstruct();
+-
+-    void detectStart();
+-private:
+-    ~FindPPDsThread();
+-    explicit FindPPDsThread(http_t* httpConnection, QObject *parent = nullptr);
+-    FindPPDsThread(FindPPDsThread const&);
+-    FindPPDsThread& operator =(FindPPDsThread const&);
+-
+-    static QMutex m_mutex;
+-    http_t* m_newHttp = nullptr;
+-    ipp_t* m_ppdRequest = nullptr;
+-    ipp_t* m_cupsAnswer = nullptr;
+-    ipp_attribute_t *m_attr = nullptr;
+-
+-    QMap<QString,QMap<QString,PPDsAndAttr> > m_originPPDs;
+-    QMap<QString,QMap<QString,PPDsAndAttr> > m_deviceIDPPDs;
+-    int getPPDsFromCUPS();
+-};
+-
+-#endif // FINDPPDSTHREAD_H
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/lpinfo_browser.cpp b/daemons/sessionservice/printerbackend/printer_manager/lpinfo_browser.cpp
+deleted file mode 100644
+index f83b06e..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/lpinfo_browser.cpp
++++ /dev/null
+@@ -1,462 +0,0 @@
+-#include <cups/cups.h>
+-#include <cups/adminutil.h>
+-#include <cups/http.h>
+-#include <cups/cups.h>
+-#include <cups/ipp.h>
+-#include <QVariant>
+-#include <QDebug>
+-#include "lpinfo_browser.h"
+-#include "common.h"
+-#include "udev_devices.h"
+-#include "ukui_printer.h"
+-#include "custom_qstring_converter.h"
+-#include "uri.h"
+-
+-LpinfoBrowser *LpinfoBrowser::getInstance()
+-{
+-    static LpinfoBrowser *instance = nullptr;
+-    if (nullptr == instance) {
+-        instance = new LpinfoBrowser();
+-    }
+-    return instance;
+-}
+-
+-LpinfoBrowser::LpinfoBrowser(/* args */)
+-{
+-
+-}
+-
+-LpinfoBrowser::~LpinfoBrowser()
+-{
+-}
+-
+-// find remote printer
+-struct printerAttr
+-{
+-    const char *name;
+-    ipp_tag_e tag;
+-};
+-
+-printerAttr attrList[] =
+-{
+-    {"printer-name",              IPP_TAG_NAME},
+-    {"printer-type",              IPP_TAG_ENUM},
+-    {"printer-location",          IPP_TAG_TEXT},
+-    {"printer-info",              IPP_TAG_TEXT},
+-    {"printer-make-and-model",    IPP_TAG_TEXT},
+-    {"printer-state",             IPP_TAG_ENUM},
+-    {"printer-state-message",     IPP_TAG_TEXT},
+-    {"printer-state-reasons",     IPP_TAG_KEYWORD},
+-    {"printer-uri-supported",     IPP_TAG_URI},
+-    {"device-uri",                IPP_TAG_URI},
+-    {"device-class",              IPP_TAG_KEYWORD},
+-    {"device-info",               IPP_TAG_TEXT},
+-    {"device-make-and-model",     IPP_TAG_TEXT},
+-    {"device-id",                 IPP_TAG_TEXT},
+-    {"device-location",           IPP_TAG_TEXT},
+-    {"printer-is-shared",         IPP_TAG_BOOLEAN},
+-    {"printer-is-accepting-jobs", IPP_TAG_BOOLEAN},
+-    {"printer-up-time",           IPP_TAG_INTEGER},
+-    {"queued-job-count",          IPP_TAG_INTEGER},
+-};
+-
+-enum printerAttrCnt
+-{
+-    ALL = -1,
+-    PRINTER_NAME,
+-    PRINTER_TYPE,
+-    PRINTER_LOCATION,
+-    PRINTER_INFO,
+-    PRINTER_MAKE_AND_MODEL,
+-    PRINTER_STATE,
+-    PRINTER_STATE_MESSAGE,
+-    PRINTER_STATE_REASONS,
+-    PRINTER_URI_SUPPORTED,
+-    DEVICE_URI,
+-    DEVICE_CLASS,
+-    DEVICE_INFO,
+-    DEVICE_MAKE_AND_MODEL,
+-    DEVICE_ID,
+-    DEVICE_LOCATION,
+-    PRINTER_IS_SHARED,
+-    PRINTER_IS_ACCEPTING_JOBS,
+-    PRINTER_UP_TIME,
+-    QUEUED_JOB_COUNT
+-};
+-
+-QVariant getValueFromAttr(ipp_attribute_t *attr, int i)
+-{
+-    QVariant var;
+-    switch (ippGetValueTag(attr))
+-    {
+-    case IPP_TAG_NAME:
+-    case IPP_TAG_TEXT:
+-    case IPP_TAG_KEYWORD:
+-    case IPP_TAG_URI:
+-    case IPP_TAG_CHARSET:
+-    case IPP_TAG_MIMETYPE:
+-    case IPP_TAG_LANGUAGE:
+-        var = ippGetString (attr, i, NULL);
+-        break;
+-    case IPP_TAG_INTEGER:
+-    case IPP_TAG_ENUM:
+-        var = ippGetInteger (attr, i);
+-        break;
+-    case IPP_TAG_BOOLEAN:
+-        var = ippGetBoolean (attr, i);
+-        break;
+-    case IPP_TAG_RANGE:
+-        // lower = ippGetRange (attr, i, &upper);
+-        // val = Py_BuildValue ("(ii)",
+-		// 	 lower,
+-		// 	 upper);
+-        break;
+-
+-    case IPP_TAG_NOVALUE:
+-        ;
+-        break;
+-    case IPP_TAG_DATE:
+-        ;
+-        break;
+-    case IPP_TAG_RESOLUTION:
+-    // xres = ippGetResolution(attr, i, &yres, &units);
+-    // val = Py_BuildValue ("(iii)",
+-	// 		 xres,
+-	// 		 yres,
+-	// 		 units);
+-        break;
+-    default:
+-        printf ("(unknown IPP value tag 0x%x)", ippGetValueTag(attr));
+-        break;
+-    }
+-    if (var.isNull()) {
+-        qDebug() << "the variant is empty!";
+-    }
+-    return var;
+-}
+-
+-QVariant getQVarFromAttr(ipp_attribute_t *attr, printerAttrCnt i)
+-{
+-    QVariant var;
+-    if (i == -1
+-     || !strcmp(ippGetName(attr), attrList[i].name)
+-     && ippGetValueTag(attr) == attrList[i].tag) {
+-
+-        var = getValueFromAttr(attr, 0);
+-        if (var.isNull()) {
+-            qDebug() << "the variant is empty!";
+-        }
+-    }
+-    return var;
+-}
+-
+-QStringList LpinfoBrowser::findRemotePrinter(const QString &host, const int port)
+-{
+-    QStringList resList;
+-    int encryption = (http_encryption_t) cupsEncryption ();
+-    http_t *http = httpConnectEncrypt (QTC(host), port, (http_encryption_t) encryption);
+-    if (!http) {
+-        qDebug ("failed to connect to remote: %s:%d\n", QTC(host), port);
+-        return resList;
+-    }
+-    ipp_t *request = ippNewRequest(CUPS_GET_PRINTERS), *answer;
+-    ipp_attribute_t *attr;
+-    const char *attributes[] = {
+-        attrList[PRINTER_NAME].name,
+-        attrList[PRINTER_TYPE].name,
+-        attrList[PRINTER_LOCATION].name,
+-        attrList[PRINTER_INFO].name,
+-        attrList[PRINTER_MAKE_AND_MODEL].name,
+-        attrList[PRINTER_STATE].name,
+-        attrList[PRINTER_STATE_MESSAGE].name,
+-        attrList[PRINTER_STATE_REASONS].name,
+-        attrList[PRINTER_URI_SUPPORTED].name,
+-        attrList[DEVICE_URI].name,
+-        attrList[PRINTER_IS_SHARED].name,
+-    };
+-    ippAddStrings (request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
+-		           "requested-attributes",
+-		           sizeof (attributes) / sizeof (attributes[0]),
+-		           NULL, attributes);
+-    answer = cupsDoRequest (http, request, "/");
+-    if (!answer || ippGetStatusCode (answer) > IPP_OK_CONFLICT) {
+-        if (answer && ippGetStatusCode (answer) == IPP_NOT_FOUND) {
+-        // No printers.
+-            qDebug ("no printers in %s:%d\n",  QTC(host), port);
+-            ippDelete (answer);
+-        }
+-        else
+-            qDebug("error: %d, %s\n", answer ? ippGetStatusCode (answer) : cupsLastError (), answer ? NULL : cupsLastErrorString ());
+-        if (answer)
+-            ippDelete (answer);
+-        return resList;
+-    }
+-    for (attr = ippFirstAttribute(answer); attr; attr = ippNextAttribute(answer)) {
+-        char *printer = NULL;
+-        if (attr && ippGetGroupTag (attr) != IPP_TAG_PRINTER)
+-            continue;
+-        if (!attr)
+-            break;
+-        QVariant var = getQVarFromAttr(attr, PRINTER_NAME);
+-        if (!var.isNull())
+-            resList.append(var.toString());
+-        var = getQVarFromAttr(attr, PRINTER_URI_SUPPORTED);
+-        if (!var.isNull())
+-            resList.append(var.toString());
+-    }
+-    ippDelete (answer);
+-    return resList;
+-}
+-
+-static ipp_t *
+-cupsDoRequestOrDie (http_t *http,
+-                   ipp_t *request,
+-                   const char *resource)
+-{
+-    ipp_t *answer = cupsDoRequest (http, request, resource);
+-    if (answer == NULL) {
+-        qDebug ("failed to send IPP request %d", ippGetOperation (request));
+-        exit (1);
+-    }
+-
+-    if (ippGetStatusCode (answer) > IPP_OK_CONFLICT) {
+-        qDebug ("IPP request %d failed (%d)", ippGetOperation (request), ippGetStatusCode (answer));
+-        exit (1);
+-    }
+-
+-    return answer;
+-}
+-
+-bool deviceidInfoCheck(DeviceInformation &info)
+-{
+-    if (info.ieee1284ID.isEmpty()) {
+-        return false;
+-    }
+-    device_id_s id;
+-    parse_device_id(QTC(info.ieee1284ID), &id);
+-    if (info.vendor.isEmpty()) {
+-        info.vendor = id.mfg;
+-    }
+-    if (info.model.isEmpty()) {
+-        info.model = id.mdl;
+-    }
+-    if (info.serial.isEmpty()) {
+-        info.serial = id.sern;
+-    }
+-
+-    if (info.vendor.isEmpty() || info.model.isEmpty()) {
+-        return false;
+-    }
+-    return true;
+-}
+-
+-QMap<QString, DeviceInformation> LpinfoBrowser::findNetWorkPrinter()
+-{
+-    QStringList include_schemes = {
+-        CUPS_INCLUDE_ALL
+-    };
+-
+-    QStringList exclude_schemes = {
+-        "ipp",
+-        "beh",
+-        "http",
+-        "ipps",
+-        "https",
+-        "hp",
+-        "hpfax",
+-        "socket",
+-        "cups-pdf",
+-        "cups-brf",
+-        "bluetooth",
+-        "dnssd",
+-        "lpd",
+-        "smb",
+-    };
+-
+-    auto res = LpinfoBrowser::findPrinter(include_schemes, exclude_schemes);
+-    for (auto iterator = res.begin(); iterator != res.end();) {
+-        // if (!ipv6UriCheck(info.uri)) {
+-        //     iterator = res.erase(iterator);
+-        //     continue ;
+-        // }
+-
+-        Uri uri(iterator.value().uri);
+-        iterator.value().importUri(uri);
+-        if (iterator.value().deviceType == DeviceType::NONE) {
+-            iterator = res.erase(iterator);
+-            continue ;
+-        }
+-
+-        if (!deviceidInfoCheck(iterator.value())) {
+-            iterator = res.erase(iterator);
+-            continue ;
+-        }
+-
+-        iterator++;
+-    }
+-
+-    return res;
+-}
+-
+-QMap<QString, DeviceInformation> LpinfoBrowser::findDirectPrinter()
+-{
+-    QStringList include_schemes = {
+-        "serial",
+-        "parallel",
+-        "usb",
+-        "gutenprint53+usb",
+-        "cups-brf",
+-        "cups-pdf"
+-    };
+-
+-    QStringList exclude_schemes = {
+-    };
+-
+-    auto res = LpinfoBrowser::findPrinter(include_schemes, exclude_schemes);
+-    for (auto iterator = res.begin(); iterator != res.end();) {
+-        deviceIdToDeviceInfo(iterator.value());
+-
+-        if (iterator.value().info.contains("(driverless)")) {
+-            iterator = res.erase(iterator);
+-            continue ;
+-        }
+-
+-        if (iterator.value().uri == "usb:///") {
+-            qDebug() << "the uri is usb:///!";
+-            iterator = res.erase(iterator);
+-            continue ;
+-        }
+-
+-        Uri uri(iterator.value().uri);
+-        iterator.value().importUri(uri);
+-        if (iterator.value().deviceType == DeviceType::NONE) {
+-            iterator = res.erase(iterator);
+-            continue ;
+-        }
+-
+-        deviceIdToDeviceInfo(iterator.value());
+-        iterator++;
+-    }
+-
+-
+-    return res;
+-}
+-
+-DeviceInformation LpinfoBrowser::getUsbPrinterDeviceFromDeviceId(const QString &deviceId)
+-{
+-    auto res = LpinfoBrowser::findDirectPrinter();
+-    for (auto iterator = res.begin(); iterator != res.end(); ++iterator) {
+-        auto value = iterator.value();
+-        if (deviceId == value.ieee1284ID) {
+-            return value;
+-        }
+-    }
+-    return DeviceInformation();
+-}
+-
+-QMap<QString, DeviceInformation> LpinfoBrowser::findAllPrinter()
+-{
+-    QStringList include_schemes = {
+-    };
+-
+-    QStringList exclude_schemes = {
+-    };
+-
+-    auto res = LpinfoBrowser::findPrinter(include_schemes, exclude_schemes);
+-    for (auto iterator = res.begin(); iterator != res.end(); ++iterator) {
+-        auto value = iterator.value();
+-        deviceIdToDeviceInfo(iterator.value());
+-    }
+-
+-    return res;
+-}
+-
+-QMap<QString, DeviceInformation> LpinfoBrowser::findPrinter(const QStringList &include_schemes, const QStringList &exclude_schemes)
+-{
+-    QMap<QString, DeviceInformation> resmp;
+-
+-    http_t *cups;
+-    ipp_t *request, *answer;
+-    ipp_attribute_t *attr;
+-
+-    cups = httpConnectEncrypt (cupsServer (), ippPort(), cupsEncryption ());
+-    request = ippNewRequest (CUPS_GET_DEVICES);
+-
+-    if (include_schemes.size()) {
+-        const char **strlist = new const char*[include_schemes.size()];
+-        CustomQStringConverter c;
+-        for (int i = 0; i < include_schemes.size(); i++) {
+-            strlist[i] = c.QStringToChar(include_schemes[i]);
+-        }
+-        ippAddStrings (request, IPP_TAG_OPERATION, IPP_TAG_NAME, "include-schemes",
+-                       include_schemes.size(),
+-                       NULL, strlist);
+-        delete[] strlist;
+-    }
+-
+-    if (exclude_schemes.size()) {
+-        const char **strlist = new const char*[exclude_schemes.size()];
+-        CustomQStringConverter c;
+-        for (int i = 0; i < exclude_schemes.size(); i++) {
+-            strlist[i] = c.QStringToChar(exclude_schemes[i]);
+-        }
+-        ippAddStrings (request, IPP_TAG_OPERATION, IPP_TAG_NAME, "exclude-schemes",
+-                       exclude_schemes.size(),
+-                       NULL, strlist);
+-        delete[] strlist;
+-    }
+-
+-    answer = cupsDoRequestOrDie (cups, request, "/");
+-    httpClose (cups);
+-
+-        for (attr = ippFirstAttribute (answer); attr; attr = ippNextAttribute (answer)) {
+-
+-        while (attr && ippGetGroupTag (attr) != IPP_TAG_PRINTER)
+-            attr = ippNextAttribute (answer);
+-
+-        if (!attr)
+-            break;
+-        DeviceInformation info;
+-        for (; attr && ippGetGroupTag (attr) == IPP_TAG_PRINTER; attr = ippNextAttribute (answer)) {
+-            QVariant var = getQVarFromAttr(attr, DEVICE_URI);
+-            if (!var.isNull()) {
+-                info.uri = var.toString();
+-                continue;
+-            }
+-            var = getQVarFromAttr(attr, DEVICE_CLASS);
+-            if (!var.isNull()) {
+-                info.devClass = var.toString();
+-                continue;
+-            }
+-            var = getQVarFromAttr(attr, DEVICE_INFO);
+-            if (!var.isNull()) {
+-                info.info = var.toString();
+-                continue;
+-            }
+-            var = getQVarFromAttr(attr, DEVICE_MAKE_AND_MODEL);
+-            if (!var.isNull()) {
+-                info.makeAndModel = var.toString();
+-                continue;
+-            }
+-            var = getQVarFromAttr(attr, DEVICE_ID);
+-            if (!var.isNull()) {
+-                info.ieee1284ID = var.toString();
+-                continue;
+-            }
+-            var = getQVarFromAttr(attr, DEVICE_LOCATION);
+-            if (!var.isNull()) {
+-                info.location = var.toString();
+-                continue;
+-            }
+-        }
+-
+-        if (!resmp.contains(info.uri)) {
+-            resmp.insert(info.uri, info);
+-        }
+-        if (!attr)
+-            break;
+-    }
+-
+-    ippDelete(answer);
+-    return resmp;
+-}
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/lpinfo_browser.h b/daemons/sessionservice/printerbackend/printer_manager/lpinfo_browser.h
+deleted file mode 100644
+index 58b3bd2..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/lpinfo_browser.h
++++ /dev/null
+@@ -1,30 +0,0 @@
+-#ifndef LPINFO_BROWSER_H
+-#define LPINFO_BROWSER_H
+-
+-#include <QObject>
+-#include <QString>
+-#include <QList>
+-#include <cups/http.h>
+-#include <cups/ipp.h>
+-#include "device_information.h"
+-
+-extern QVariant getValueFromAttr(ipp_attribute_t *attr, int i);
+-
+-class LpinfoBrowser: public QObject
+-{
+-    Q_OBJECT
+-private:
+-    LpinfoBrowser(/* args */);
+-public:
+-    static LpinfoBrowser *getInstance();
+-    static QStringList findRemotePrinter(const QString &host, const int port);
+-    static QMap<QString, DeviceInformation> findNetWorkPrinter();
+-    static QMap<QString, DeviceInformation> findDirectPrinter();
+-    static QMap<QString, DeviceInformation> findAllPrinter();
+-    static QMap<QString, DeviceInformation> findPrinter(const QStringList &include_schemes, const QStringList &exclude_schemes);
+-    static DeviceInformation getUsbPrinterDeviceFromDeviceId(const QString &deviceId);
+-    ~LpinfoBrowser();
+-
+-};
+-
+-#endif // LPINFO_BROWSER_H
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/matchppdsthread.cpp b/daemons/sessionservice/printerbackend/printer_manager/matchppdsthread.cpp
+deleted file mode 100644
+index e58c6b9..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/matchppdsthread.cpp
++++ /dev/null
+@@ -1,513 +0,0 @@
+-#include <QThread>
+-#include "matchppdsthread.h"
+-QMutex MatchPPDsThread:: m_mutex;
+-MatchPPDsThread::MatchPPDsThread(QObject *parent) : QObject(parent)
+-{
+-    qDebug() << "FindPPDsThread is begin!";
+-}
+-MatchPPDsThread::~MatchPPDsThread()
+-{
+-
+-}
+-MatchPPDsThread* MatchPPDsThread::getInstance()
+-{
+-    static MatchPPDsThread *singleInstance = nullptr;
+-    static QThread *pMatchPPDsThreadWorkPPDs = nullptr;
+-
+-    if (singleInstance == nullptr)
+-    {
+-        m_mutex.lock();
+-        if (singleInstance == nullptr)
+-        {
+-            singleInstance = new MatchPPDsThread();
+-            pMatchPPDsThreadWorkPPDs = new QThread();
+-            singleInstance->moveToThread(pMatchPPDsThreadWorkPPDs);
+-
+-            connect(pMatchPPDsThreadWorkPPDs, &QThread::finished, singleInstance, &QObject::deleteLater);
+-            connect(singleInstance, SIGNAL(start()),
+-                    singleInstance, SLOT(detectStart()));
+-            pMatchPPDsThreadWorkPPDs->start();
+-        }
+-        m_mutex.unlock();
+-    }
+-    return singleInstance;
+-}
+-
+-int MatchPPDsThread::initPPDMatch(QString bandName,
+-                                   QString printerName,
+-                                   QString suggestPpdName,
+-                                   ppdPrinterMap data,
+-                                   ppdPrinterMap extra,
+-                                   QString &exactMatchPPD,
+-                                   QStringList &matchResultList)
+-{
+-    qDebug() << "匹配中!";
+-
+-    if(bandName.isEmpty())
+-    {
+-        qDebug() << "输入的要查询的厂商名为空!";
+-        return static_cast<int>(matchRes::INPUT_ERR);
+-    }
+-    if(printerName.isEmpty())
+-    {
+-        qDebug() << "输入的要查询的打印机名为空!";
+-        return static_cast<int>(matchRes::INPUT_ERR);
+-    }
+-    if(data.isEmpty())
+-    {
+-        qDebug() << "输入的ppd与printer关系QMap为空!";
+-        return static_cast<int>(matchRes::INPUT_ERR);
+-    }
+-
+-    if (!suggestPpdName.isEmpty()) {
+-        for(auto outerIterator = data.begin(); outerIterator != data.end(); ++outerIterator) {
+-            auto innerMap = outerIterator.value();
+-            for (auto innerIterator = innerMap.begin(); innerIterator != innerMap.end(); ++innerIterator) {
+-                auto innerKey = innerIterator.key();
+-                auto value = innerIterator.value();
+-                if (value.ppdname == suggestPpdName) {
+-                    exactMatchPPD = value.ppdname;
+-                    return 0;
+-                }
+-            }
+-        }
+-    }
+-
+-    m_originData = data;
+-    QStringList printerNameList = (bandName + ' ' + printerName).split(' ');
+-    m_printerBandName = nullptr;
+-    m_printerModelName = nullptr;
+-
+-    m_printerBandName = bandName.toLower();
+-    if (!m_printerBandName.isEmpty())
+-    {
+-        for (int i = 1; i < printerNameList.size(); ++i)
+-        {
+-            QString tempLetterAndNum = nullptr;
+-            tempLetterAndNum = originStringHandle(printerNameList[i]);
+-
+-            m_printerModelName.append(tempLetterAndNum);
+-            m_printerModelName.append(' ');
+-        }
+-    }
+-
+-    if (m_originData.find(m_printerBandName) != m_originData.end())
+-    {
+-        auto &mfg = m_originData[m_printerBandName];
+-
+-        int res = exactMatch(m_printerModelName, mfg, exactMatchPPD,matchResultList);
+-        return res;//EXACT_MATCH = 0,MATCHED_NORMAL = 1,
+-    }
+-    else if (hasThisBandName(extra, m_printerBandName))
+-    {
+-        auto &mfg = extra[getMfgName(extra, m_printerBandName)];
+-
+-        int res = exactMatch(m_printerModelName, mfg, exactMatchPPD,matchResultList);
+-        return res;//EXACT_MATCH = 0,MATCHED_NORMAL = 1,
+-    }
+-    else
+-    {
+-        auto &mfg = m_originData["generic"];
+-
+-        int res = genericMatch(m_printerModelName, mfg, exactMatchPPD,matchResultList);
+-        return res;//MATCHED_GENERIC = 2,
+-    }
+-}
+-
+-int MatchPPDsThread::genericMatch(QString printerModel
+-                                  , QMap<QString, PPDsAndAttr> map
+-                                  , QString &exactMatchPPD
+-                                  , QStringList &matchResultList)
+-{
+-    if(!map.size())
+-    {
+-        qDebug() << "入参map大小为0";
+-        return static_cast<int>(matchRes::INPUT_ERR);
+-    }
+-    if(printerModel.isEmpty())
+-    {
+-        qDebug() << "入参printerModel内容为空";
+-        return static_cast<int>(matchRes::INPUT_ERR);
+-    }
+-
+-    QStringList printerModelList = printerModel.split(' ');
+-    if (printerModelList.size() <= 2)
+-    {
+-        qDebug() << "printerModelList值不符合规范";
+-        return static_cast<int>(matchRes::INPUT_ERR);
+-    }
+-    printerModelList.removeAt(0);
+-
+-    printerModel.clear();
+-
+-    foreach (QString it , printerModelList)
+-    {
+-        printerModel.append(it);
+-    }
+-
+-    QString tempPrinterModel = nullptr;
+-    modelUniform(printerModel, tempPrinterModel);
+-
+-    exactMatchPPD.clear();
+-    matchResultList.clear();
+-    int numOfMatchedPPD = 0;
+-    int size = tempPrinterModel.size();
+-    for (int i = size ; i > 2; i--)
+-    {
+-        QString currentStr = tempPrinterModel.left(i);
+-
+-        foreach (auto keyPPDs, map.keys())
+-        {
+-            if (map[keyPPDs].ppdname.contains("driverless"))
+-            {
+-                continue;
+-            }
+-            else
+-            {
+-                QString handledPPDMakeAndModel;
+-                handledPPDMakeAndModel = originStringHandle(keyPPDs);
+-
+-                QString tempHandledPPDMakeAndModel = nullptr;
+-                modelUniform(handledPPDMakeAndModel, tempHandledPPDMakeAndModel);
+-
+-                handledPPDMakeAndModel.clear();
+-                handledPPDMakeAndModel = tempHandledPPDMakeAndModel;
+-
+-                if (handledPPDMakeAndModel.contains(currentStr, Qt::CaseInsensitive))
+-                {
+-//                    matchResultList.append(map[keyPPDs].ppdname);
+-//                    ++numOfMatchedPPD;
+-                }
+-                if(5 <= numOfMatchedPPD)
+-                {
+-                    break;
+-                }
+-            }
+-        }
+-
+-        if (5 <= numOfMatchedPPD)
+-        {
+-            break;
+-        }
+-    }
+-
+-    qDebug() << "没找到和" << printerModel << "匹配的PPD文件,使用通用文件";
+-    qDebug() << "找到匹配的通用PPD文件" << matchResultList.size() << "个";
+-
+-    if(matchResultList.size() == 0)
+-    {
+-        qDebug() << "没找到和" << printerModel << "相近的通用驱动文件";
+-
+-        QMap<QString, PPDsAndAttr>::iterator it = map.begin();
+-        int i = 0;
+-        for(;it != map.end();it++)
+-        {
+-            if(i < 5)
+-            {
+-                if(it.key().contains("text"))
+-                {
+-                    matchResultList.append(it.value().ppdname);
+-                    i++;
+-                }
+-            }
+-            else
+-            {
+-                break;
+-            }
+-        }
+-    }
+-    return static_cast<int>(matchRes::MATCHED_GENERIC);
+-
+-}
+-
+-int MatchPPDsThread::exactMatch(QString printerModel
+-                                , QMap<QString, PPDsAndAttr> map
+-                                , QString &exactMatchPPD
+-                                , QStringList &matchResultList)
+-{
+-    if(!map.size())
+-    {
+-        qDebug() << "入参map大小为0";
+-        return static_cast<int>(matchRes::INPUT_ERR);
+-    }
+-    if(printerModel.isEmpty())
+-    {
+-        qDebug() << "入参printerModel内容为空";
+-        return static_cast<int>(matchRes::INPUT_ERR);
+-    }
+-
+-    m_exactMatchFlag = false;
+-
+-    QStringList printerModelList = printerModel.split(' ');
+-    if (printerModelList.size() <= 2)
+-    {
+-        qDebug() << "printerModelList值不符合规范";
+-        return static_cast<int>(matchRes::INPUT_ERR);
+-    }
+-    QString tempPrinterModel = nullptr;
+-    modelUniform(printerModel, tempPrinterModel);
+-
+-    QMap<QString, PPDsAndAttr>::iterator iter = map.begin();
+-    QString iterList[4] = {};
+-
+-    int i = 0;
+-    exactMatchPPD.clear();
+-    QStringList exactMatchPPDList;
+-    matchResultList.clear();
+-    while (iter != map.end())
+-    {
+-        //map的key是处理后的match_str,已去掉减号和空格,即按从小到大的顺序排列的。
+-        if(iter.value().ppdname.contains("driverless"))
+-        {
+-            qDebug() << "排除的PPD文件为:" << iter.value().ppdname;
+-            iter = map.erase(iter);
+-        }
+-
+-        QString handledPPDMakeAndModel;
+-        handledPPDMakeAndModel = originStringHandle(iter.key());
+-
+-        QString tempHandledPPDMakeAndModel = nullptr;
+-        modelUniform(handledPPDMakeAndModel, tempHandledPPDMakeAndModel);
+-
+-        handledPPDMakeAndModel.clear();
+-        handledPPDMakeAndModel = tempHandledPPDMakeAndModel;
+-
+-        if(iter == map.begin() && 0 < handledPPDMakeAndModel.compare(tempPrinterModel, Qt::CaseInsensitive))
+-        {
+-            m_exactMatchFlag = false;
+-            exactMatchPPD.clear();
+-
+-            int count  = (map.count() < 5)?map.count():5;
+-            for(int i = 0; i < count; ++i)
+-            {
+-                if(exactMatchPPD.isEmpty())
+-                {
+-                    if(handledPPDMakeAndModel.contains(tempPrinterModel,Qt::CaseInsensitive))
+-                    {
+-                        m_exactMatchFlag = true;
+-                        exactMatchPPD = iter.value().ppdname;
+-                    }
+-                }
+-                matchResultList.append(iter.value().ppdname);
+-                if(iter != map.end())
+-                {
+-                    iter++;
+-                    if(iter == map.end())
+-                    {
+-                        break;
+-                    }
+-                }
+-            }
+-
+-            //上来最小的都比它大,取最开始的5个PPD,直接结束跳出。
+-            break;
+-        }
+-        else
+-        {
+-            if(iter == map.end() && 0 > handledPPDMakeAndModel.compare(tempPrinterModel, Qt::CaseInsensitive))
+-            {
+-                m_exactMatchFlag = false;
+-                int count  = (map.count() < 5)?map.count():5;
+-                for(int i = 0; i < count; ++i)
+-                {
+-                    matchResultList.append(iter.value().ppdname);
+-                    if(iter != map.begin())
+-                    {
+-                        iter--;
+-                        if(iter == map.begin())
+-                        {
+-                            break;
+-                        }
+-                    }
+-                }
+-                exactMatchPPD.clear();
+-                //最后的字符串的都比它小,取最后的5个PPD,直接结束跳出。
+-                break;
+-            }
+-            else
+-            {
+-                if (handledPPDMakeAndModel.contains(tempPrinterModel, Qt::CaseInsensitive))
+-                {
+-                    m_exactMatchFlag = true;
+-
+-                    exactMatchPPDList.append(iter.value().ppdname);
+-
+-                    while(iter != map.end())
+-                    {
+-                        iter++;
+-                        if(iter == map.end())
+-                        {
+-                            break;
+-                        }
+-                        else if(iter.value().match_str.contains(tempPrinterModel, Qt::CaseInsensitive))
+-                        {
+-                            exactMatchPPDList.append(iter.value().ppdname);
+-                        }
+-                    }
+-
+-                    break;
+-                }
+-                else if(0 > handledPPDMakeAndModel.compare(tempPrinterModel, Qt::CaseInsensitive))
+-                {
+-                    iterList[i%4] = iter.value().ppdname;
+-                    i++;
+-                    //比其小的字符串正常记录
+-                }
+-                else if(0 < handledPPDMakeAndModel.compare(tempPrinterModel, Qt::CaseInsensitive))
+-                {
+-                    iterList[i%4] = iter.value().ppdname;
+-                    i++;
+-                    if(iter != map.end())
+-                    {
+-                        iter++;
+-                        if(iter == map.end())
+-                        {
+-                            break;
+-                        }
+-                        else
+-                        {
+-                            iterList[i%4] = iter.value().ppdname;
+-                        }
+-
+-                        //从比其小变为了比其大,列表中的数据返回即可
+-                        m_exactMatchFlag = false;
+-                        for(int j = 0; j < 4; ++j)
+-                        {
+-                            matchResultList.append(iterList[j]);
+-                        }
+-                        if(iter != map.end())
+-                        {
+-                            iter++;
+-                            if(iter == map.end())
+-                            {
+-                                break;
+-                            }
+-                            else
+-                            {
+-                                matchResultList.append(iter.value().ppdname);
+-                            }
+-                        }
+-                        qSort(matchResultList.begin(),matchResultList.end());
+-                        break;
+-                    }
+-                    else
+-                    {
+-                        m_exactMatchFlag = false;
+-
+-                        for(int j = 0; j < 4; ++j)
+-                        {
+-                            matchResultList.append(iterList[j]);
+-                        }
+-                        qSort(matchResultList.begin(),matchResultList.end());
+-                        break;
+-                    }
+-                }
+-            }
+-        }
+-        iter++;
+-    }
+-
+-
+-    if (!m_exactMatchFlag)
+-    {
+-        qDebug() << "没找到和" << printerModel << "精准匹配的PPD文件";
+-        exactMatchPPD.clear();
+-        return static_cast<int>(matchRes::MATCHED_NORMAL);
+-    }
+-    else
+-    {
+-        exactMatchPPD.clear();
+-        for(auto it : exactMatchPPDList)
+-        {
+-            if(!it.contains("foomatic",Qt::CaseInsensitive))
+-            {
+-                exactMatchPPD = it;
+-                break;
+-            }
+-        }
+-        if(exactMatchPPD.isEmpty() && exactMatchPPDList.size())
+-        {
+-            exactMatchPPD = exactMatchPPDList.at(0);
+-        }
+-        qDebug() << "找到了和" << printerModel << "精准匹配的PPD文件" << exactMatchPPD;
+-        return static_cast<int>(matchRes::EXACT_MATCH);
+-    }
+-
+-}
+-
+-QString MatchPPDsThread::originStringHandle(QString originString)
+-{
+-    if (originString.isEmpty())
+-    {
+-        qDebug() << "当前处理字符串为空字符串";
+-        return originString;
+-    }
+-    QString tempHandledString = nullptr;
+-    foreach (auto &letter, originString)
+-    {
+-        if (!letter.isLetterOrNumber())
+-        {
+-            tempHandledString.append(' ');
+-        }
+-        else
+-        {
+-            tempHandledString.append(letter);
+-            if (letter.isLetter() && (*(&letter + 1)).isDigit())
+-            {
+-                tempHandledString.append(' ');
+-            }
+-            else if (letter.isDigit() && (*(&letter + 1)).isLetter())
+-            {
+-                tempHandledString.append(' ');
+-            }
+-        }
+-    }
+-
+-    return tempHandledString;
+-}
+-void MatchPPDsThread::modelUniform(QString handledStr, QString& outputStr)
+-{
+-    foreach (auto &letter, handledStr)
+-    {
+-        if (letter.isSpace())
+-        {
+-            continue;
+-        }
+-        else if(!letter.isLetterOrNumber())
+-        {
+-            continue;
+-        }
+-        else
+-        {
+-            outputStr.append(letter);
+-        }
+-    }
+-}
+-void MatchPPDsThread::detectStart()
+-{
+-    qDebug() << "MatchPPDsThread Thread is:" << QThread::currentThreadId();
+-}
+-
+-bool MatchPPDsThread::hasThisBandName(ppdPrinterMap extra, QString inputName)
+-{
+-    for (auto key : static_cast<QList<QString> >(extra.keys()))
+-    {
+-        if(key.contains(inputName,Qt::CaseInsensitive))
+-        {
+-            return true;
+-        }
+-    }
+-    return false;
+-}
+-
+-QString MatchPPDsThread::getMfgName(ppdPrinterMap extra, QString inputName)
+-{
+-    for (auto key : static_cast<QList<QString> >(extra.keys()))
+-    {
+-        if(key.contains(inputName,Qt::CaseInsensitive))
+-        {
+-            return key;
+-        }
+-    }
+-    return "";
+-}
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/matchppdsthread.h b/daemons/sessionservice/printerbackend/printer_manager/matchppdsthread.h
+deleted file mode 100644
+index fdb8ba4..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/matchppdsthread.h
++++ /dev/null
+@@ -1,67 +0,0 @@
+-#ifndef MATCHPPDSTHREAD_H
+-#define MATCHPPDSTHREAD_H
+-
+-#include <QObject>
+-#include<QMutexLocker>
+-#include "findppdsthread.h"
+-
+-enum class matchRes:int
+-{
+-    EXACT_MATCH = 0,
+-    MATCHED_NORMAL,
+-    MATCHED_GENERIC,
+-    INPUT_ERR,
+-};
+-
+-class MatchPPDsThread : public QObject
+-{
+-    Q_OBJECT
+-public:
+-    static MatchPPDsThread* getInstance();
+-
+-protected:
+-
+-signals:
+-    void matchFailed();
+-
+-    void start();
+-public slots:
+-    int initPPDMatch(QString bandName,
+-                      QString printerName,
+-                      QString suggestPpdName,
+-                      ppdPrinterMap data,
+-                      ppdPrinterMap extra,
+-                      QString &exactMatchPPD,
+-                      QStringList &matchResultList);
+-    void detectStart();
+-private:
+-    explicit MatchPPDsThread(QObject *parent = nullptr);
+-    ~MatchPPDsThread();
+-    MatchPPDsThread(MatchPPDsThread const&);
+-    MatchPPDsThread& operator =(MatchPPDsThread const&);
+-
+-    static QMutex m_mutex;
+-    QMap<QString, QMap<QString, PPDsAndAttr> > m_originData;
+-
+-    QString m_printerBandName = nullptr;
+-    QString m_printerModelName = nullptr;
+-
+-    int exactMatch(QString printerModel
+-                   , QMap<QString, PPDsAndAttr> map
+-                   , QString &exactMatchPPD
+-                   , QStringList &matchResultList);
+-    int genericMatch(QString printerModel
+-                     , QMap<QString, PPDsAndAttr> map
+-                     , QString &exactMatchPPD
+-                     , QStringList &matchResultList);
+-
+-    bool m_exactMatchFlag = false;
+-
+-    QString originStringHandle(QString originString);
+-
+-    void modelUniform(QString handledStr, QString& outputStr);
+-    bool hasThisBandName(ppdPrinterMap extra, QString inputName);
+-    QString getMfgName(ppdPrinterMap extra, QString inputName);
+-};
+-
+-#endif // MATCHPPDSTHREAD_H
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/package_helper.cpp b/daemons/sessionservice/printerbackend/printer_manager/package_helper.cpp
+deleted file mode 100644
+index dd97003..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/package_helper.cpp
++++ /dev/null
+@@ -1,77 +0,0 @@
+-#include "package_helper.h"
+-#include "common.h"
+-#include <QThread>
+-#include <QTimer>
+-
+-
+-bool packageIsInstalled(const QString &debName, const QString &packageName)
+-{
+-    // brscan5chn_1.2.5-0_amd64.deb
+-    QString packageVersion = getPackageVersion(packageName);
+-    if (packageVersion.isEmpty()) {
+-        return false;
+-    }
+-    QString deb(debName);
+-    // perhaps deb is brscan5chn
+-    if (!deb.contains("_")) {
+-        if (deb == packageName) {
+-            return true;
+-        } else {
+-            return false;
+-        }
+-    }
+-
+-    deb.remove(0, deb.indexOf("_") + 1);
+-
+-    if (!deb.contains("_")) {
+-        return false;
+-    }
+-
+-    QString debVersion = deb.left(deb.indexOf("_"));
+-    if (debVersion.isEmpty()) {
+-        return false;
+-    }
+-    if (debVersion != packageVersion) {
+-        return false;
+-    }
+-    return true;
+-}
+-
+-
+-PackageHelper::PackageHelper(DeviceInformation &info, QObject *parent)
+-    : m_info(info), QObject(parent)
+-{
+-    m_thread = new QThread();
+-    moveToThread(m_thread);
+-
+-    connect(m_thread, &QThread::started, this, &PackageHelper::dowork);
+-
+-    connect(this, &PackageHelper::finished, m_thread, &QThread::quit);
+-    connect(this, &PackageHelper::finished, this, &PackageHelper::deleteLater);
+-    connect(m_thread, &QThread::finished, m_thread, &QThread::deleteLater);
+-}
+-
+-PackageHelper::~PackageHelper()
+-{
+-
+-}
+-
+-void PackageHelper::dowork()
+-{
+-    getPackagesNameFromHttp(m_info);
+-
+-    if (m_info.packageNameList.size() == 0) {
+-        failed();
+-        return ;
+-    }
+-
+-    int needInstall = false;
+-    for (int i = 0; i < m_info.packageNameList.size(); i++) {
+-        if (packageIsInstalled(m_info.debNameList[i], m_info.packageNameList[i]) == false) {
+-            needInstall = true;
+-            break;
+-        }
+-    }
+-
+-    succeed(needInstall);
+-}
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/package_helper.h b/daemons/sessionservice/printerbackend/printer_manager/package_helper.h
+deleted file mode 100644
+index c47999f..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/package_helper.h
++++ /dev/null
+@@ -1,29 +0,0 @@
+-#ifndef PACKAGE_HELPER_H
+-#define PACKAGE_HELPER_H
+-
+-#include <QTimer>
+-#include "device_information.h"
+-#include <QThread>
+-
+-class PackageHelper : public QObject
+-{
+-    Q_OBJECT
+-public:
+-    PackageHelper(DeviceInformation &info, QObject *parent = nullptr);
+-    ~PackageHelper();
+-Q_SIGNALS:
+-    void finished();
+-    void succeed(bool needInstall);
+-    void failed();
+-public:
+-    void startWorker(){
+-        if(m_thread!=nullptr)
+-            m_thread->start();
+-    }
+-private:
+-    void dowork();
+-    QThread *m_thread{nullptr};
+-    DeviceInformation &m_info;
+-};
+-
+-#endif//PACKAGE_HELPER_H
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/ukui_apt.cpp b/daemons/sessionservice/printerbackend/printer_manager/ukui_apt.cpp
+deleted file mode 100644
+index 5549992..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/ukui_apt.cpp
++++ /dev/null
+@@ -1,228 +0,0 @@
+-#include "ukui_apt.h"
+-#include <QDebug>
+-#include <QFileInfo>
+-#include <QProcess>
+-#include <QtDBus>
+-#include <QTimer>
+-#include "information_collector.h"
+-#include "common.h"
+-
+-static const QString KUM_DEST = "com.kylin.systemupgrade";
+-static const QString KUM_PATH = "/com/kylin/systemupgrade";
+-static const QString KUM_IFACE = "com.kylin.systemupgrade.interface";
+-
+-AptUtilHelper::AptUtilHelper(DeviceInformation device,QObject *parent) : QObject(parent),m_device(device)
+-{
+-    auto sysBus = QDBusConnection::systemBus();
+-    sysBus.connect(KUM_DEST, KUM_PATH, KUM_IFACE, QString("UpdateInstallFinished"),
+-        this, SLOT(onRecvApt(bool, QStringList, QString, QString)));
+-    sysBus.connect(KUM_DEST, KUM_PATH, KUM_IFACE, QString("InstalldebStatusChanged"),
+-                   this, SLOT(onInstalldebStatusChanged(int, QString, QString)));
+-    m_thread = new QThread;
+-    moveToThread(m_thread);
+-    connect(m_thread, &QThread::started, this, &AptUtilHelper::processPkg);
+-    connect(this, &AptUtilHelper::canceled, this, &AptUtilHelper::handleCancel);
+-    connect(this, &AptUtilHelper::finished, m_thread, &QThread::quit);
+-    connect(this, &AptUtilHelper::finished, this, &AptUtilHelper::deleteLater);
+-    connect(m_thread, &QThread::finished, m_thread, &QThread::deleteLater);
+-}
+-
+-AptUtilHelper::~AptUtilHelper()
+-{
+-    qDebug() << "~~~~~~~~destroy...";
+-}
+-
+-void AptUtilHelper::processPkg()
+-{
+-    qDebug("Pkg Worker Started!");
+-    //Get Package...
+-
+-    if (m_device.packageNameList.isEmpty()) {
+-        getPackagesNameFromHttp(m_device);
+-    }
+-    if(m_device.packageNameList.isEmpty()) {
+-        m_installStatus = ukuiInstallStatus::UKUI_INSTALL_FAIL;
+-        emit failed();
+-        return;
+-    }
+-    m_messages.insert("packagesName", m_device.packageNameList.join(" "));
+-    m_messages.insert("installType", "InstallPkgs");
+-    for (auto debName : m_device.debNameList) {
+-        QString verison = getDebVersion(debName);
+-        if (verison.isEmpty()) {
+-            m_packages.append(debName.left(debName.indexOf("_")));
+-        }
+-        else {
+-            m_packages.append(debName.left(debName.indexOf("_")) + "=" + getDebVersion(debName));
+-        }
+-    }
+-    qDebug() << m_packages;
+-    installPackage(m_packages);
+-    m_timer = new QTimer(this);
+-    connect(m_timer, &QTimer::timeout, [=](){
+-        m_timer->stop();
+-        stopAptTask();
+-        m_messages.insert("result", "fail");
+-        m_messages.insert("resultString", "install package time out!");
+-        InformationCollector::getInstance().addMessageMap("install_package", m_messages);
+-        this->failed();
+-    });
+-    m_timer->start(APT_INSTALL_MAX_MILLISECOND);
+-    qDebug("Worker Ended!");
+-}
+-
+-void AptUtilHelper::stopAptTask()
+-{
+-    if (m_installStatus != ukuiInstallStatus::UKUI_INSTALL_IN_PROGRESS) {
+-        return;
+-    }
+-    m_installStatus = ukuiInstallStatus::UKUI_INSTALL_STOP;
+-    qDebug() << "run CancelDownload method";
+-    QDBusConnection bus = QDBusConnection::systemBus();
+-    QDBusInterface dbus_iface(KUM_DEST,KUM_PATH, KUM_IFACE, bus);
+-    QDBusMessage message = dbus_iface.call("CancelDownload");
+-    qDebug() << message;
+-}
+-
+-void AptUtilHelper::handleCancel()
+-{
+-    if (m_timer) {
+-        m_timer->stop();
+-    }
+-    stopAptTask();
+-    this->failed();
+-}
+-
+-void AptUtilHelper::onInstalldebStatusChanged(int progress , QString status, QString current_details)
+-{
+-    qDebug() << QString("InstalldebStatusChanged progress = %1 , status = %2 ,current_details = %3").arg(progress).arg(status).arg(current_details);
+-}
+-
+-void AptUtilHelper::onRecvApt(bool success, QStringList updateGroup, QString errorString, QString errorDesc) {
+-    qDebug() << "onReceiveKumAptSignal" << success;
+-    if(success == false) {
+-        //Error
+-        m_messages.insert("result", "fail");
+-        m_messages.insert("resultString", "install package failed!");
+-        m_messages.insert("errorString", errorString);
+-        m_messages.insert("errorDesc", errorDesc);
+-        InformationCollector::getInstance().addMessageMap("install_package", m_messages);
+-        qDebug() << "Install package failed..."<< errorString << " " << errorDesc;
+-        m_packages.clear();
+-        m_installStatus = ukuiInstallStatus::UKUI_INSTALL_FAIL;
+-        emit failed();
+-    }else if(success == true) {
+-        m_messages.insert("result", "success");
+-        InformationCollector::getInstance().addMessageMap("install_package", m_messages);
+-        qDebug() << "Installed." << m_packages;
+-        m_installStatus = ukuiInstallStatus::UKUI_INSTALL_SUCCESS;
+-        emit succeed();
+-    } else {
+-        qDebug() << "installing...";
+-    }
+-}
+-
+-bool checkDBusMessage(const QDBusMessage &message) {
+-    if (message.arguments().size()>1 && message.arguments().at(0).isValid()) {
+-        if(message.arguments().at(0).type() == QVariant::Int) {
+-            if (message.arguments().at(0).value<int>() == 0) {
+-                return true;
+-            }
+-        }
+-    }
+-    return false;
+-}
+-
+-void AptUtilHelper::installPackage(QStringList packageName)
+-{
+-    qDebug() << "Package:" << packageName;
+-    qDebug() << "installPackage 1:";
+-    QDBusConnection bus = QDBusConnection::systemBus();
+-    QDBusInterface dbus_iface(KUM_DEST,KUM_PATH, KUM_IFACE, bus);
+-    QDBusMessage message = dbus_iface.call("InstallPackages", packageName);
+-    qDebug() << message;
+-    if (!checkDBusMessage(message)) {
+-        m_installStatus = ukuiInstallStatus::UKUI_INSTALL_FAIL;
+-        emit failed();
+-    } else {
+-        m_installStatus = ukuiInstallStatus::UKUI_INSTALL_IN_PROGRESS;
+-    }
+-}
+-
+-DebUtilHelper::DebUtilHelper(QString debName,QObject *parent) :
+-    QObject(parent),
+-    m_debName(debName)
+-{
+-    auto sysBus = QDBusConnection::systemBus();
+-    sysBus.connect(KUM_DEST, KUM_PATH, KUM_IFACE, QString("InstalldebFinished"),
+-        this, SLOT(onRecvApt(bool, QString, QString)));
+-    sysBus.connect(KUM_DEST, KUM_PATH, KUM_IFACE, QString("InstalldebStatusChanged"),
+-        this, SLOT(onInstalldebStatusChanged(int, QString, QString)));
+-    m_thread = new QThread;
+-    moveToThread(m_thread);
+-    connect(m_thread, &QThread::started, this, &DebUtilHelper::processDeb);
+-    connect(this, &DebUtilHelper::succeed, this, &DebUtilHelper::finished);
+-    connect(this, &DebUtilHelper::failed, this, &DebUtilHelper::finished);
+-    connect(this, &DebUtilHelper::finished, m_thread, &QThread::quit);
+-    connect(this, &DebUtilHelper::finished, this, &DebUtilHelper::deleteLater);
+-    connect(m_thread, &QThread::finished, m_thread, &QThread::deleteLater);
+-    //thread->start();
+-}
+-
+-DebUtilHelper::~DebUtilHelper()
+-{
+-    qDebug() << "~~~~~~~~destroy...";
+-}
+-
+-void DebUtilHelper::processDeb()
+-{
+-    m_messages.insert("packagesName", m_debName);
+-    m_messages.insert("installType", "InstallDebFile");
+-    qDebug("Deb Worker Started!");
+-    qDebug() << m_debName;
+-    installLocalDeb(m_debName);
+-    m_timer = new QTimer(this);
+-    connect(m_timer, &QTimer::timeout, [=](){
+-        m_messages.insert("result", "fail");
+-        m_messages.insert("resultString", "install package time out!");
+-        InformationCollector::getInstance().addMessageMap("install_package", m_messages);
+-        this->failed();
+-    });
+-    m_timer->start(60000);
+-    qDebug("Deb Worker Ended!");
+-}
+-
+-void DebUtilHelper::onInstalldebStatusChanged(int progress , QString status, QString current_details)
+-{
+-    qDebug() << QString("InstalldebStatusChanged progress = %1 , status = %2 ,current_details = %3").arg(progress).arg(status).arg(current_details);
+-}
+-
+-void DebUtilHelper::onRecvApt(bool success, QString errorString, QString errorDesc) {
+-    qDebug() << "onReceiveKumAptSignal" << success;
+-    if(success == false) {
+-        //Error
+-        m_messages.insert("result", "fail");
+-        m_messages.insert("resultString", "install package failed!");
+-        m_messages.insert("errorString", errorString);
+-        m_messages.insert("errorDesc", errorDesc);
+-        InformationCollector::getInstance().addMessageMap("install_package", m_messages);
+-        qDebug() << "Install package failed..."<< errorString << " " << errorDesc;
+-        emit failed();
+-    }else if(success == true) {
+-        m_messages.insert("result", "success");
+-        InformationCollector::getInstance().addMessageMap("install_package", m_messages);
+-        qDebug() << "Installed." << m_debName;
+-        emit succeed();
+-    } else {
+-        qDebug() << "installing...";
+-    }
+-}
+-
+-void DebUtilHelper::installLocalDeb(QString debFilePath)
+-{
+-    qDebug() << "Package:" << debFilePath;
+-    qDebug() << "installLocalDeb 2:";
+-    QDBusConnection bus = QDBusConnection::systemBus();
+-    QDBusInterface dbus_iface(KUM_DEST, KUM_PATH, KUM_IFACE, bus);
+-    qDebug() << dbus_iface.call("InstallDebFile", "kylin-os-manager", debFilePath, true, true, QLocale::system().name());
+-}
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/ukui_apt.h b/daemons/sessionservice/printerbackend/printer_manager/ukui_apt.h
+deleted file mode 100644
+index 89c6e32..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/ukui_apt.h
++++ /dev/null
+@@ -1,108 +0,0 @@
+-#ifndef UKUI_APT_H
+-#define UKUI_APT_H
+-// Use QObject
+-#include <QDebug>
+-#include <QObject>
+-#include <QVariant>
+-// Use libqapt as apt interface
+-//#include <qapt/backend.h>
+-//#include <qapt/debfile.h>
+-//#include <qapt/package.h>
+-//#include <qapt/transaction.h>
+-//
+-#include "device_monitor.h"
+-#include "device_information.h"
+-#include <QThread>
+-
+-class QTimer;
+-
+-enum class ukuiAptError : int {
+-    UKUI_APT_SUCCESS = 0,
+-    UKUI_APT_CANNOT_ACCESS_SERVER,
+-    UKUI_APT_NO_SUCH_PACKAGE,
+-    UKUI_APT_INSTALL_FAIL,
+-};
+-
+-enum class ukuiInstallStatus : int {
+-    UKUI_INSTALL_START = 0,
+-    UKUI_INSTALL_IN_PROGRESS,
+-    UKUI_INSTALL_SUCCESS,
+-    UKUI_INSTALL_FAIL,
+-    UKUI_INSTALL_STOP,
+-};
+-
+-const int APT_INSTALL_MAX_MILLISECOND = 60 * 1000 * 3;
+-
+-//Worker Class
+-//TODO : 需要手动判断包是否已经安装,优化匹配速度
+-class AptUtilHelper : public QObject
+-{
+-    Q_OBJECT
+-public:
+-    explicit AptUtilHelper(DeviceInformation device,QObject *parent = nullptr);
+-    ~AptUtilHelper();
+-Q_SIGNALS:
+-    void installEnd();
+-    void finished();
+-    void succeed();
+-    void failed();
+-    void canceled();
+-    void error(QString err);
+-//暂时还没发出来
+-    void alreadyInstalled();
+-private slots:
+-    void onInstalldebStatusChanged(int, QString, QString);
+-    void onRecvApt(bool, QStringList, QString, QString);
+-    void stopAptTask();
+-    void handleCancel();
+-public:
+-    void startWorker(){
+-        if(m_thread!=nullptr)
+-            m_thread->start();
+-    }
+-private:
+-    void processPkg();
+-    void installPackage(QStringList packageName);
+-    QThread *m_thread{nullptr};
+-    QTimer *m_timer{nullptr};
+-    QString m_packageName = "";
+-    DeviceInformation m_device = DeviceInformation();
+-    QStringList m_packages = QStringList();
+-    QMap<QString, QString> m_messages;
+-    ukuiInstallStatus m_installStatus{ukuiInstallStatus::UKUI_INSTALL_START};
+-};
+-
+-//TODO : 需要手动判断包是否已经安装,优化匹配速度
+-class DebUtilHelper : public QObject
+-{
+-    Q_OBJECT
+-public:
+-    explicit DebUtilHelper(QString debName,QObject *parent = nullptr);
+-    ~DebUtilHelper();
+-Q_SIGNALS:
+-    void installEnd();
+-    void finished();
+-    void failed();
+-    void succeed();
+-    void error(QString err);
+-//暂时还没发出来
+-    void alreadyInstalled();
+-private slots:
+-    void onInstalldebStatusChanged(int, QString, QString);
+-    void onRecvApt(bool, QString, QString);
+-public:
+-    void startWorker(){
+-        if(m_thread!=nullptr)
+-            m_thread->start();
+-    }
+-private:
+-    void processDeb();
+-    void installLocalDeb(QString debFilePath);
+-    //工作线程
+-    QThread *m_thread{nullptr};
+-    QTimer *m_timer{nullptr};
+-    QString m_debName = "";
+-    QMap<QString, QString> m_messages;
+-};
+-
+-#endif //UKUI_APT_H
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/ukui_printer.cpp b/daemons/sessionservice/printerbackend/printer_manager/ukui_printer.cpp
+deleted file mode 100644
+index 1f88df4..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/ukui_printer.cpp
++++ /dev/null
+@@ -1,1955 +0,0 @@
+-#include <QLocale>
+-
+-#include "cupsconnection4ppds.h"
+-#include "ukui_printer.h"
+-#include "common.h"
+-#include <unistd.h>
+-#include <cupsfilters/ipp.h>
+-#include <cups/adminutil.h>
+-#include "lpinfo_browser.h"
+-#include "information_collector.h"
+-
+-ConstrainOption inputSlot { "InputSlot", { "MPTRAY", "TRAY1", "AUTO" } };
+-ConstrainOption colorSpace { "ColorSpace", { "Gray" } };
+-ConstrainOption pageSize { "PageSize",
+-    { "Letter", "Legal", "Executive", "FanFoldGermanLegal", "A4", "A5", "A6", "210x270mm", "Env10", "EnvMonarch", "EnvDL", "ENVC5", "ISOB5", "B5", "ISOB6",
+-        "B6", "4x6", "PostCard", "DoublePostcardRotated", "EnvYou4", "195x270mm", "184x260mm", "197x273mm" } };
+-ConstrainOption brMediaType { "BrMediaType", { "PLAIN", "THICK", "THICKERPAPER2", "BOND", "ENV", "ENVTHICK", "ENVTHIN", "RECYCLED" } };
+-ConstrainOption MediaType { "MediaType", { "PLAIN", "THICK", "THICKERPAPER2", "BOND", "ENV", "ENVTHICK", "ENVTHIN", "RECYCLED" } };
+-ConstrainOption duplex { "Duplex", { "None", "DuplexNoTumble", "DuplexTumble" } };
+-ConstrainOption resolution { "Resolution", { "300dpi", "600dpi", "2400x600dpi", "1200dpi" } };
+-
+-//#define g_cupsConnection (CupsConnection4PPDs::getInstance())
+-const char* baseIppUriFormat = "ipp://%s:%d/printers/";
+-// canonicalize uri
+-static void construct_uri(char* buffer, size_t buflen, const char* base, const char* value)
+-{
+-    char* d = buffer;
+-    const unsigned char* s = (const unsigned char*)value;
+-    if (strlen(base) < buflen) {
+-        strcpy(buffer, base);
+-        d += strlen(base);
+-    } else {
+-        strncpy(buffer, base, buflen);
+-        d += buflen;
+-    }
+-
+-    while (*s && d < buffer + buflen) {
+-        if (isalpha(*s) || isdigit(*s) || *s == '-')
+-            *d++ = *s++;
+-        else if (*s == ' ') {
+-            *d++ = '+';
+-            s++;
+-        } else {
+-            if (d + 2 < buffer + buflen) {
+-                *d++ = '%';
+-                *d++ = "0123456789ABCDEF"[((*s) & 0xf0) >> 4];
+-                *d++ = "0123456789ABCDEF"[((*s) & 0x0f)];
+-                s++;
+-            } else {
+-                break;
+-            }
+-        }
+-    }
+-
+-    if (d < buffer + buflen)
+-        *d = '\0';
+-}
+-
+-static  std::string convertFromQString(const QString &in)
+-{
+-    QByteArray data = in.toUtf8();
+-    int size = data.size();
+-    char* dest = new char[size+1];
+-    strncpy(dest,data.data(),size);
+-    dest[size] = '\0';
+-    std::string res(dest);
+-    delete []dest;
+-    dest = 0;
+-    qDebug() << QByteArray::fromStdString(res);
+-    return res;
+-}
+-
+-QDebug operator << (QDebug debug, const InkProperty &debugInfo)
+-{
+-    debug.noquote();
+-    QString info = QString("%1,%2,%3,%4").arg(debugInfo.color.name()).arg(debugInfo.name).arg(debugInfo.type).arg(debugInfo.level);
+-    debug << info;
+-    return debug;
+-}
+-
+-UkuiPrinterManager::UkuiPrinterManager()
+-{
+-    // std::cout << "ukuiPrivaluenter Create.." << std::endl;
+-    m_user = cupsUser();
+-    m_locale = QLocale::system().name();
+-
+-    qDebug("Current user:%s\n", m_user.toLocal8Bit().data());
+-}
+-
+-UkuiPrinterManager::~UkuiPrinterManager(/* args */) { qDebug() << "ukuiPrinter destroy.."; }
+-// Add Printer,use ipp request
+-bool UkuiPrinterManager::addPrinter(const QString& usbUri, const QString& printerName, const QString& ppdName, const QString& location, QString& errorString)
+-{
+-    InformationCollector::getInstance().addMessage(QString("add printer %1 :%2 %3 %4").arg(printerName).arg(usbUri).arg(ppdName).arg(location));
+-    ipp_t* request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER);
+-    // ipp_t* request = ippNew();
+-    // ippSetOperation(request, CUPS_ADD_MODIFY_PRINTER);
+-    ipp_t* answer = nullptr;
+-    char uri[HTTP_MAX_URI];
+-    char baseUri[128];
+-    sprintf(baseUri, baseIppUriFormat, m_host.toLocal8Bit().data(), m_port);
+-    construct_uri(uri, HTTP_MAX_URI, baseUri, printerName.toLocal8Bit().data());
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", nullptr, uri);
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name", nullptr, ppdName.toLocal8Bit().data());
+-    if (usbUri.size())
+-        ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_URI, "device-uri", nullptr, usbUri.toLocal8Bit().data());
+-    ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-info", nullptr, printerName.toLocal8Bit().data());
+-    ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-location", nullptr, location.toLocal8Bit().data());
+-    answer = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/admin/");
+-    if (answer == nullptr) {
+-        printf("cupsDoRequest Failed.\n");
+-        ipp_status_t err = cupsLastError();
+-        if (err == ipp_status_t::IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED) {
+-            int ret = cupsDoAuthentication(m_http, "POST", "/admin/");
+-            Q_UNUSED(ret)
+-        }
+-        qDebug() << "ERROR:" << cupsLastErrorString();
+-        errorString = QString(cupsLastErrorString());
+-        return false;
+-    }
+-    ipp_status_t status = ippGetStatusCode(answer);
+-    if (status > IPP_OK_CONFLICT) {
+-        printf("Error:%s\n", cupsLastErrorString());
+-        errorString = QString(cupsLastErrorString());
+-        return false;
+-    }
+-    ippDelete(answer);
+-    answer = nullptr;
+-
+-    request = ippNewRequest(IPP_ENABLE_PRINTER);
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", nullptr, uri);
+-    answer = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/admin/");
+-    if (answer != nullptr) {
+-        ippDelete(answer);
+-        answer = nullptr;
+-    }
+-
+-    request = ippNewRequest(IPP_RESUME_PRINTER);
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", nullptr, uri);
+-    answer = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/admin/");
+-    if (answer != nullptr) {
+-        ippDelete(answer);
+-        answer = nullptr;
+-    }
+-
+-    return true;
+-}
+-
+-bool UkuiPrinterManager::removePrinter(const QString& printerName)
+-{
+-    InformationCollector::getInstance().addMessage(QString("removePrinter") +  QString(printerName));
+-    ipp_t* request = ippNewRequest(CUPS_DELETE_PRINTER);
+-    ipp_t* answer = nullptr;
+-    char uri[HTTP_MAX_URI];
+-    char baseUri[128];
+-    sprintf(baseUri, baseIppUriFormat, m_host.toLocal8Bit().data(), m_port);
+-    construct_uri(uri, HTTP_MAX_URI, baseUri, printerName.toLocal8Bit().data());
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", nullptr, uri);
+-    answer = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/admin/");
+-    if (answer == nullptr) {
+-        printf("cupsDoRequest Failed.\n");
+-        return false;
+-    }
+-    ipp_status_t status = ippGetStatusCode(answer);
+-    if (status > IPP_OK_CONFLICT) {
+-        printf("Error:%s\n", cupsLastErrorString());
+-        ippDelete(answer);
+-        return false;
+-    }
+-    ippDelete(answer);
+-    return true;
+-}
+-void UkuiPrinterManager::addIppAttribute(PrinterAdvancedAttribute attribute)
+-{
+-    switch (attribute.tag) {
+-    default:
+-        break;
+-    }
+-    return;
+-}
+-bool UkuiPrinterManager::renamePrinter(QString oldname, QString newname)
+-{
+-    InformationCollector::getInstance().addMessage(QString("renamePrinter") +  QString(oldname) + QString(newname));
+-    duplicatePrinter(newname, oldname);
+-    removePrinter(oldname);
+-
+-    return true;
+-}
+-#if 1
+-//使用cups接口打印的测试页,使用ipp获取属性时无法拿到标题
+-//故修改为使用ipp方案
+-bool UkuiPrinterManager::printTestPage(const QString& printerName)
+-{
+-    InformationCollector::getInstance().addMessage(QString("printTestPage:")+ printerName);
+-    static const QString fileName = "/usr/share/cups/data/testprint";
+-    QString resource = QString("/printers/%1").arg(printerName);// "/printers/printername"
+-    QString title = "Test Page";
+-    ipp_t *request = ippNewRequest(IPP_PRINT_JOB);
+-    ipp_t *response;
+-    ipp_t* answer = nullptr;
+-    char uri[HTTP_MAX_URI];
+-    char baseUri[128];
+-    sprintf(baseUri, baseIppUriFormat, m_host.toLocal8Bit().data(), m_port);
+-    construct_uri(uri, HTTP_MAX_URI, baseUri, convertFromQString(printerName).c_str());
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,"requesting-user-name", NULL, convertFromQString(m_user).c_str());
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL, convertFromQString(title).c_str());
+-    /*
+-    * Do the request and get back a response...
+-    */
+-    if ((response = cupsDoFileRequest(CUPS_HTTP_DEFAULT,
+-                                      request,
+-                                      convertFromQString(resource).c_str(),
+-                                      convertFromQString(fileName).c_str())) != NULL)
+-    {
+-      ippDelete(response);
+-    }
+-
+-    if (cupsLastError() == IPP_NOT_AUTHORIZED)
+-    {
+-        qDebug() << "Error IPP_NOT_AUTHORIZED";
+-        return false;
+-    }
+-    else if (cupsLastError() > IPP_OK_CONFLICT){
+-        qDebug() << "Error print test failed:"<<cupsLastError() << cupsLastErrorString();
+-        return false;
+-    }
+-
+-    return true;
+-}
+-#else
+-bool UkuiPrinterManager::printTestPage(const QString& printerName, const QString& fileName)
+-{
+-    cups_dest_t* allDests = nullptr;
+-    cups_dest_t currentDest;
+-    int destCount;
+-    cups_file_t* fp = cupsFileOpen(fileName.toLocal8Bit().data(), "r");
+-    if (fp == NULL) {
+-        printf("Failed to print test page: open printing file failed\n");
+-        return false;
+-    }
+-    destCount = cupsGetDests(&allDests);
+-    if (destCount == 0) {
+-        /* code */
+-        printf("No available printer.\n");
+-        return false;
+-    }
+-    for (int i = 0; i < destCount; i++) {
+-        if (printerName.compare(allDests[i].name) == 0) {
+-            currentDest = allDests[i];
+-        }
+-    }
+-
+-    http_t* http; /* Connection to destination */
+-    cups_dinfo_t* dinfo; /* Destination info */
+-    unsigned int dFlags = 0;
+-    ssize_t bytes;
+-    char buffer[32768];
+-    http = cupsConnectDest(&currentDest, dFlags, 30000, NULL, NULL, 0, NULL, NULL);
+-    if (http == NULL)
+-        return false;
+-
+-    dinfo = cupsCopyDestInfo(http, &currentDest);
+-    if (dinfo == NULL)
+-        return false;
+-
+-    const char* title;
+-    if ((title = strrchr(fileName.toLocal8Bit().data(), '/')) != NULL)
+-        title++;
+-    else
+-        title = fileName.toLocal8Bit().data();
+-
+-    int job_id;
+-    int num_options = 0;
+-    cups_option_t* options = nullptr;
+-    if (cupsCreateDestJob(http, &currentDest, dinfo, &job_id, title, num_options, options) > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED) {
+-        /* code */
+-        cupsFileClose(fp);
+-        return false;
+-    }
+-    if (cupsStartDestDocument(http, &currentDest, dinfo, job_id, title, CUPS_FORMAT_AUTO, 0, NULL, 1) != HTTP_STATUS_CONTINUE) {
+-        printf("Unable to send document: %s\n", cupsLastErrorString());
+-        cupsFileClose(fp);
+-        return false;
+-    }
+-
+-    while ((bytes = cupsFileRead(fp, buffer, sizeof(buffer))) > 0) {
+-        qDebug() << "Cups File Read " << bytes << " bytes.";
+-        if (cupsWriteRequestData(http, buffer, (size_t)bytes) != HTTP_STATUS_CONTINUE) {
+-            printf("Unable to write document data: %s\n", cupsLastErrorString());
+-            break;
+-        }
+-    }
+-
+-    cupsFileClose(fp);
+-
+-    if (cupsFinishDestDocument(http, const_cast<cups_dest_t*>(&currentDest), dinfo) > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED) {
+-        printf("Unable to send document: %s\n", cupsLastErrorString());
+-        return false;
+-    }
+-    puts("Job queued.");
+-printTestEnd:
+-    if (dinfo != nullptr) {
+-        /* code */
+-        cupsFreeDestInfo(dinfo);
+-    }
+-
+-    if (allDests != nullptr) {
+-        /* code */
+-        cupsFreeDests(destCount, allDests);
+-    }
+-    httpClose(http);
+-    // Free
+-    return true;
+-}
+-#endif
+-void UkuiPrinterManager::enumPrinters(QList<UkuiUsbPrinter>& printers)
+-{
+-    const char* defaultName = cupsGetDefault2(CUPS_HTTP_DEFAULT);
+-    cups_dest_t* dests; /* Destinations */
+-    int num_dests = cupsGetDests(&dests);
+-    for (auto i = 0; i < num_dests; i++) {
+-        UkuiUsbPrinter printer;
+-        printer.name = dests[i].name;
+-        if (defaultName != nullptr && printer.name.compare(defaultName) == 0) {
+-            printer.is_default = true;
+-        }
+-        //qDebug("Printer Name:%s", printer.name.toLocal8Bit().data());
+-        QMap<QString, QStringList> inkInfo;
+-        int minn = 0x3f3f3f3f;
+-        for (auto k = 0; k < dests[i].num_options; k++) {
+-            //qDebug("    (%s %s)", dests[i].options[k].name, dests[i].options[k].value);
+-            if (QString::compare(dests[i].options[k].name, "device-uri") == 0) {
+-                printer.device_uri = dests[i].options[k].value;
+-            } else if (QString::compare(dests[i].options[k].name, "printer-uri-supported") == 0) {
+-                printer.printer_uri = dests[i].options[k].value;
+-            } else if (QString::compare(dests[i].options[k].name, "printer-make-and-model") == 0) {
+-                printer.make_and_model = dests[i].options[k].value;
+-            } else if (QString::compare(dests[i].options[k].name, "printer-state") == 0) {
+-                if (QString::compare(dests[i].options[k].value, "3") == 0) {
+-                    printer.connect_status = tr("Idle");
+-                } else if (QString::compare(dests[i].options[k].value, "4") == 0) {
+-                    printer.connect_status = tr("Printing");
+-                } else if (QString::compare(dests[i].options[k].value, "5") == 0) {
+-                    printer.connect_status = tr("Stopped");
+-                }
+-            } else if (QString::compare(dests[i].options[k].name, "printer-location") == 0) {
+-                printer.location = dests[i].options[k].value;
+-            } else if (QString::compare(dests[i].options[k].name, "marker-colors") == 0
+-                    || QString::compare(dests[i].options[k].name, "marker-names") == 0
+-                    || QString::compare(dests[i].options[k].name, "marker-types") == 0
+-                    || QString::compare(dests[i].options[k].name, "marker-levels") == 0) {
+-
+-                QString value = QString(dests[i].options[k].value) + ",";
+-                QStringList list = value.split(",");
+-                minn = qMin(minn, list.size());
+-                inkInfo.insert(dests[i].options[k].name, list);
+-            }
+-        }
+-
+-        if (minn != 0x3f3f3f3f && minn > 0) {
+-            for (int i = 0; i < minn; i++) {
+-                InkProperty ink;
+-                if (inkInfo.contains("marker-colors")) {
+-                    ink.color.setNamedColor(inkInfo["marker-colors"].at(i));
+-                }
+-                if (inkInfo.contains("marker-names")) {
+-                    ink.name = inkInfo["marker-names"].at(i);
+-                }
+-                if (inkInfo.contains("marker-types")) {
+-                    ink.type = inkInfo["marker-types"].at(i);
+-                }
+-                if (inkInfo.contains("marker-levels")) {
+-                    ink.level = inkInfo["marker-levels"].at(i).toInt();
+-                }
+-
+-                if (!ink.color.name().isEmpty() && !ink.name.isEmpty() && ink.level >= 0 && ink.level <= 100) {
+-                    printer.inkOptions.append(ink);
+-                }
+-            }
+-        }
+-
+-        if (printer.printer_uri.compare("") != 0) {
+-            getPpdInfo(printer);
+-            printers.push_back(printer);
+-        }
+-    }
+-    cupsFreeDests(num_dests, dests);
+-}
+-
+-void UkuiPrinterManager::enumUsbPrinters(QList<UkuiUsbPrinter>& printers)
+-{
+-    enumPrinters(printers);
+-    foreach(auto printer, printers) {
+-        if (!printer.device_uri.contains("usb://")) {
+-            printers.removeOne(printer);
+-        }
+-    }
+-}
+-
+-bool UkuiPrinterManager::printerIsInstalled(const QString &uri, bool needEnumPrinters, const QList<UkuiUsbPrinter>& printerNameList)
+-{
+-    if (uri.isEmpty()) {
+-        return false;
+-    }
+-
+-    QList<UkuiUsbPrinter> *printersHandle = nullptr;
+-    QList<UkuiUsbPrinter> printers;
+-    if (needEnumPrinters == true) {
+-        UkuiPrinterManager::getInstance().enumPrinters(printers);
+-        printersHandle = &printers;
+-    } else {
+-        printersHandle = const_cast<QList<UkuiUsbPrinter> *>(&printerNameList);
+-    }
+-
+-    foreach (auto printer, *printersHandle) {
+-        if (printer.device_uri == uri) {
+-            return true;
+-        }
+-    }
+-    return false;
+-}
+-
+-CommonStatus UkuiPrinterManager::printerNameCheck(const QString &printerName, bool needEnumPrinters, const QList<UkuiUsbPrinter>& printerNameList, const QString &oldPrinterName)
+-{
+-    CommonStatus res;
+-
+-    if (printerName.isEmpty()) {
+-        return  res;
+-    }
+-
+-    if (printerName == oldPrinterName) {
+-        res.status = CommonStatusFlag::FAIL;
+-        return res;
+-    }
+-
+-    if (!printerNameIsLegal(printerName)) {
+-        res.status = CommonStatusFlag::FAIL;
+-        res.message = tr("Printer Name Cannot Contains '%1', And More Than 0 Letter, Less Than 128 Letters !").arg("/\\'\"?#<>");
+-        return res;
+-    }
+-
+-    QList<UkuiUsbPrinter> *printersHandle = nullptr;
+-    QList<UkuiUsbPrinter> printers;
+-    if (needEnumPrinters == true) {
+-        UkuiPrinterManager::getInstance().enumPrinters(printers);
+-        printersHandle = &printers;
+-    } else {
+-        printersHandle = const_cast<QList<UkuiUsbPrinter> *>(&printerNameList);
+-    }
+-
+-    for (auto printer : *printersHandle) {
+-        if(!printerName.compare(printer.name,Qt::CaseInsensitive)) {
+-            if(!printerName.compare(printer.name,Qt::CaseSensitive)) {
+-                res.status = CommonStatusFlag::ERROR_EXIST_SAME_PRINTER;
+-                res.message = tr("Exist Same Name Printer!");
+-            } else {
+-                res.status = CommonStatusFlag::FAIL;
+-                res.message = tr("Printer name is not case sensitive!");
+-            }
+-            return res;
+-        }
+-    }
+-
+-    res.status = CommonStatusFlag::SUCCESS;
+-    return res;
+-}
+-
+-void UkuiPrinterManager::getPrintQueue(QString printerName, UkuiQueueStatus status, QList<PrintJob>& retJobs)
+-{
+-    cups_job_t* jobs;
+-    int whichjob = -1;
+-    int job_count;
+-    switch (status) {
+-    case UkuiQueueStatus::UKUI_PRINTER_QUEUE_ACTIVE:
+-        whichjob = CUPS_WHICHJOBS_ACTIVE;
+-        break;
+-    case UkuiQueueStatus::UKUI_PRINTER_QUEUE_UNFINISHED:
+-    case UkuiQueueStatus::UKUI_PRINTER_QUEUE_FINISHED:
+-        whichjob = CUPS_WHICHJOBS_COMPLETED;
+-        break;
+-    case UkuiQueueStatus::UKUI_PRINTER_QUEUE_ALL:
+-    default:
+-        whichjob = CUPS_WHICHJOBS_ALL;
+-        break;
+-    }
+-    // 这里要注意 jobs顺序是从小到达排列的(即最早的job-->最晚的job)
+-    job_count = cupsGetJobs(&jobs, printerName.toStdString().c_str(), 0, whichjob);
+-    for (int i = 0; i < job_count; i++) {
+-//        qDebug("%d Jobs[%d]  dest:%s title:%s user:%s state:%d", i, jobs[i].id, jobs[i].dest, jobs[i].title, jobs[i].user, jobs[i].state);
+-        PrintJob job;
+-        job.printerName = jobs[i].dest;
+-        job.title       = jobs[i].title;
+-        job.id          = jobs[i].id;
+-        job.user        = jobs[i].user;
+-        job.jobState    = jobs[i].state;
+-        // 时间可能为0 就会显示成1970xxx
+-        if (jobs[i].completed_time)
+-            job.completeTime = jobs[i].completed_time;
+-        if (jobs[i].creation_time)
+-            job.createTime = jobs[i].creation_time;
+-        if (jobs[i].processing_time)
+-            job.processingTime = jobs[i].processing_time;
+-        if (jobs[i].state == IPP_JSTATE_PROCESSING) {
+-            job.status = UkuiQueueStatus::UKUI_PRINTER_QUEUE_ACTIVE;
+-        } else if (jobs[i].state == IPP_JSTATE_COMPLETED) {
+-            job.status = UkuiQueueStatus::UKUI_PRINTER_QUEUE_FINISHED;
+-        } else {
+-            job.status = UkuiQueueStatus::UKUI_PRINTER_QUEUE_UNFINISHED;
+-        }
+-        getJobAttributes(job.id, &job);
+-        retJobs.push_back(job);
+-    }
+-    // perhaps should get "job-state-message" to show how the job is not
+-    // completed.
+-}
+-
+-bool UkuiPrinterManager::restartJob(const int &jobId)
+-{
+-    InformationCollector::getInstance().addMessage(QString("restartJob")+ QString(jobId));
+-    ipp_t *request;
+-    request = ippNewRequest(IPP_RESTART_JOB);
+-    QString uri = QString("ipp://localhost/jobs/%1").arg(jobId);
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, QTC(uri));
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
+-    ippDelete(cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/jobs"));
+-    if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) {
+-        return false;
+-    }
+-    else if (cupsLastError() > IPP_OK_CONFLICT) {
+-        qDebug () << cupsLastErrorString();
+-        return false;
+-    }
+-    return true;
+-}
+-// cupsCancelJob2 函数第四个参数为purge
+-// 置成1就是delete 置成0就是cancel
+-bool UkuiPrinterManager::cancelJob(const QString &printerName, const int &jobId)
+-{
+-    InformationCollector::getInstance().addMessage(QString("cancelJob") + QString("printerName") + QString(jobId));
+-    return (cupsCancelJob2(CUPS_HTTP_DEFAULT, QTC(printerName), jobId, 0) < IPP_STATUS_REDIRECTION_OTHER_SITE);
+-}
+-
+-bool UkuiPrinterManager::deleteJob(const QString &printerName, const int &jobId)
+-{
+-    InformationCollector::getInstance().addMessage(QString("deleteJob") + QString("printerName") + QString(jobId));
+-    return (cupsCancelJob2(CUPS_HTTP_DEFAULT, QTC(printerName), jobId, 1) < IPP_STATUS_REDIRECTION_OTHER_SITE);
+-}
+-
+-// jobid为0时认为需要move所有job
+-bool UkuiPrinterManager::moveJob(const QString &from, const QString &to, const int &jobId)
+-{
+-    InformationCollector::getInstance().addMessage(QString("moveJob") + QString(from) + QString(to) + QString(jobId));
+-    ipp_t *request;
+-    request = ippNewRequest(CUPS_MOVE_JOB);
+-    if (jobId) {
+-        QString jobUri = QString("ipp://localhost/jobs/%1").arg(jobId);
+-        ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL,
+-                     QTC(jobUri));
+-    }
+-    else {
+-        QString printerUri = QString("ipp://localhost/printers/%1").arg(from);
+-        ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL,
+-                     QTC(printerUri));
+-    }
+-
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
+-                 NULL, cupsUser());
+-
+-    QString printerUri = QString("ipp://localhost/printers/%1").arg(to);
+-    ippAddString(request, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri",
+-                 NULL, QTC(printerUri));
+-
+-    ippDelete(cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/jobs"));
+-
+-    if (cupsLastError() > IPP_OK_CONFLICT) {
+-        qDebug("moveJob: %s", cupsLastErrorString());
+-        return false;
+-    }
+-    else
+-        return true;
+-}
+-
+-bool UkuiPrinterManager::moveAllJob(const QString &from, const QString &to)
+-{
+-    return moveJob(from, to, 0);
+-}
+-
+-bool UkuiPrinterManager::getJobAttributes(int jobId, PrintJob *job, QMap<QString, QVariant> *jobProperties)
+-{
+-    if (!jobId) {
+-        return false;
+-    }
+-    ipp_t *request, *answer;
+-    ipp_attribute_t *attr;
+-    request = ippNewRequest(IPP_GET_JOB_ATTRIBUTES);
+-    QString uri = QString("ipp://localhost/jobs/%1").arg(jobId);
+-    ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, QTC(uri));
+-    //   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "job-printer-uri");
+-    answer = cupsDoRequest (CUPS_HTTP_DEFAULT, request, "/");
+-    // 需要什么拿什么
+-    for (attr = ippFirstAttribute (answer); attr; attr = ippNextAttribute (answer)) {
+-        // qDebug() << ippGetName(attr)<< " " <<  ippGetString(attr,0,NULL) << " " << ippGetInteger(attr, 0);
+-        if (jobProperties) {
+-            (*jobProperties).insert(ippGetName(attr), getValueFromAttr(attr, 0));
+-        }
+-        // qDebug() << ippGetName(attr)<< getValueFromAttr(attr, 0);
+-        if (job) {
+-            if (!strcmp(ippGetName(attr), "job-k-octets") && ippGetValueTag(attr) == IPP_TAG_INTEGER) {
+-                (*job).size = ippGetInteger(attr, 0);
+-            }
+-            if (!strcmp(ippGetName(attr), "job-preserved") && ippGetValueTag(attr) == IPP_TAG_BOOLEAN) {
+-                (*job).preserved = ippGetBoolean(attr, 0);
+-            }
+-        }
+-    }
+-    if (answer)
+-        ippDelete (answer);
+-    return true;
+-}
+-
+-bool UkuiPrinterManager::holdJob(const int &jobId)
+-{
+-    InformationCollector::getInstance().addMessage(QString("holdJob") +  QString(jobId));
+-    return this->setJobHoldUntil(jobId, "indefinite");
+-}
+-
+-bool UkuiPrinterManager::releaseJob(const int &jobId)
+-{
+-    InformationCollector::getInstance().addMessage(QString("releaseJob") +  QString(jobId));
+-    return this->setJobHoldUntil(jobId, "no-hold");
+-}
+-
+-bool UkuiPrinterManager::setJobHoldUntil(const int &jobId, const QString &jobHoldUntil)
+-{
+-    ipp_t *request, *answer;
+-    int num_options = 0;
+-    cups_option_t *options = NULL;
+-    request = ippNewRequest(IPP_SET_JOB_ATTRIBUTES);
+-    QString uri = QString("ipp://localhost/jobs/%1").arg(jobId);
+-    ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, QTC(uri));
+-    ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser ());
+-    num_options = cupsAddOption ("job-hold-until", QTC(jobHoldUntil), num_options, &options);
+-    cupsEncodeOptions (request, num_options, options);
+-    answer = cupsDoRequest (CUPS_HTTP_DEFAULT, request, "/jobs/");
+-    if (!answer || ippGetStatusCode (answer) > IPP_OK_CONFLICT) {
+-        qDebug("set_ipp_error: %d, %s\n", answer ? ippGetStatusCode (answer) : cupsLastError (), answer ? NULL : cupsLastErrorString ());
+-        if (answer)
+-            ippDelete (answer);
+-        qDebug ("<- Connection_setJobHoldUntil() (error)\n");
+-    return false;
+-    }
+-    return true;
+-}
+-QString UkuiPrinterManager::generatePrinterName()
+-{
+-    QList<UkuiUsbPrinter> printerList;
+-    enumPrinters(printerList);
+-    int number = -1;
+-    for (auto printer : printerList) {
+-        if (printer.name.indexOf("printer") == 0) {
+-            number = qMax(number, 0);
+-        }
+-        if (printer.name.indexOf("printer_") == 0) {
+-            number = qMax(number, printer.name.mid(8, -1).toInt());
+-        }
+-    }
+-    number++;
+-    if (number == 0)
+-        return QString("printer");
+-    return QString("printer_%1").arg(number);
+-}
+-void UkuiPrinterManager::getAdvancedPrinterProperties(UkuiUsbPrinter printer, QMap<QString, QVariant>& properties)
+-{
+-    QList<PrinterAdvancedAttribute> printerAttributes;
+-    getAllProperties(printer.printer_uri, printerAttributes);
+-    convertProperties(printerAttributes, properties);
+-    QMap<QString, PrinterOptionalAttribute> map_attr_with_option;
+-    for (auto i = 0; i < printerAttributes.size(); i++) {
+-        if (printerAttributes.at(i).key.endsWith("-default") == true) {
+-            QString key = printerAttributes.at(i).key.left(printerAttributes.at(i).key.length() - strlen("-default"));
+-            auto it = map_attr_with_option.find(key);
+-            if (it == map_attr_with_option.end()) {
+-                PrinterOptionalAttribute attr;
+-                attr.value = printerAttributes.at(i).value;
+-                map_attr_with_option.insert(key, attr);
+-            } else {
+-                it.value().value = printerAttributes.at(i).value;
+-            }
+-        } else if (printerAttributes.at(i).key.endsWith("-supported") == true) {
+-            continue;
+-        } else {
+-            QString key = printerAttributes.at(i).key;
+-            auto it = map_attr_with_option.find(key);
+-            if (it == map_attr_with_option.end()) {
+-                PrinterOptionalAttribute attr;
+-                attr.value = printerAttributes.at(i).value;
+-                map_attr_with_option.insert(key, attr);
+-            } else {
+-                it.value().value = printerAttributes.at(i).value;
+-            }
+-        }
+-    }
+-    for (auto i = 0; i < printerAttributes.size(); i++) {
+-        if (printerAttributes.at(i).key.endsWith("-supported") == true) {
+-            QString key = printerAttributes.at(i).key.left(printerAttributes.at(i).key.length() - strlen("-supported"));
+-            auto it = map_attr_with_option.find(key);
+-            if (it != map_attr_with_option.end()) {
+-                it.value().supportedValue = printerAttributes.at(i).value;
+-            }
+-        }
+-    }
+-
+-    for (auto i = map_attr_with_option.begin(); i != map_attr_with_option.end(); i++) {
+-        qDebug() << "K:" << i.key() << "V:" << i.value().value << "S:" << i.value().supportedValue;
+-    }
+-}
+-
+-void UkuiPrinterManager::getAllProperties(QString printer_uri, QList<PrinterAdvancedAttribute>& printerAttributes)
+-{
+-    ipp_t* request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
+-    ipp_t* answer = nullptr;
+-    ipp_attribute_t* attr = nullptr;
+-    const char* attributes[] = { "all", nullptr };
+-    ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(attributes) / sizeof(attributes[0]), nullptr, attributes);
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", nullptr, printer_uri.toLocal8Bit().data());
+-    answer = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/");
+-    if (answer && ippGetStatusCode(answer) == IPP_NOT_FOUND) {
+-        // No printers.
+-        qDebug() << "<- Connection::getPrinters() = {}(no printers)";
+-        ippDelete(answer);
+-        return;
+-    }
+-    for (attr = ippFirstAttribute(answer); attr; attr = ippNextAttribute(answer)) {
+-        while (attr && ippGetGroupTag(attr) != IPP_TAG_PRINTER) {
+-            attr = ippNextAttribute(answer);
+-        }
+-
+-        if (!attr)
+-            break;
+-
+-        for (; attr; attr = ippNextAttribute(answer)) {
+-            PrinterAdvancedAttribute Attr;
+-            Attr.tag = ippGetValueTag(attr);
+-            Attr.key = ippGetName(attr);
+-            if (ippGetCount(attr) > 1) {
+-                QVariantList list;
+-                QVariant item;
+-                for (auto i = 0; i < ippGetCount(attr); i++) {
+-                    item = getProperty(attr, i);
+-                    list.push_back(item);
+-                }
+-                Attr.value = list;
+-            } else {
+-                Attr.value = getProperty(attr);
+-            }
+-            if (Attr.key.contains("media") == true) {
+-                printf("xxx");
+-            }
+-            if (Attr.value.isNull() == false) {
+-                printerAttributes.push_back(Attr);
+-            }
+-        }
+-
+-        if (!attr)
+-            break;
+-    }
+-
+-    ippDelete(answer);
+-}
+-
+-bool UkuiPrinterManager::modifyPrinterAttributes(UkuiUsbPrinter printer, QMap<QString, QVariant>& properties)
+-{
+-    ipp_t* request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER);
+-    ipp_t* answer = nullptr;
+-    Q_UNUSED(request)
+-    Q_UNUSED(answer)
+-    char uri[HTTP_MAX_URI];
+-    char baseUri[128];
+-    sprintf(baseUri, baseIppUriFormat, m_host.toLocal8Bit().data(), m_port);
+-    construct_uri(uri, HTTP_MAX_URI, baseUri, printer.name.toLocal8Bit().data());
+-    QList<PrinterAdvancedAttribute> oldProperties;
+-    getAllProperties(printer.name, oldProperties);
+-    for (auto property : oldProperties) {
+-        auto it = properties.find(property.key);
+-        Q_UNUSED(it)
+-    }
+-    for (auto property : properties) { }
+-    return false;
+-}
+-void UkuiPrinterManager::convertProperties(QList<PrinterAdvancedAttribute> attrs, QMap<QString, QVariant>& properties)
+-{
+-    for (auto i = attrs.begin(); i != attrs.end(); i++) {
+-        properties.insert(i->key, i->value);
+-    }
+-}
+-void UkuiPrinterManager::changeProperties(QStringList& properties)
+-{
+-    Q_UNUSED(properties);
+-    ipp_t* request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER);
+-    ipp_t* answer = nullptr;
+-    char uri[HTTP_MAX_URI];
+-    char baseUri[128];
+-    sprintf(baseUri, baseIppUriFormat, m_host.toLocal8Bit().data(), m_port);
+-    construct_uri(uri, HTTP_MAX_URI, baseUri, "Hewlett-Packard-HP-LaserJet-Pro-M706n");
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", nullptr, uri);
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_TEXT, "printer-info", nullptr, "xHP-LaserJet-Pro-M706");
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_TEXT, "printer-location", nullptr, "lHP-LaserJet-Pro-M706n");
+-    ippAddBoolean(request, IPP_TAG_OPERATION, "printer-is-shared", true);
+-    ippAddBoolean(request, IPP_TAG_OPERATION, "printer-is-accepting-jobs", true);
+-    ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "copies-default", 4);
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "media-default", nullptr, "na_letter_8.5x11in");
+-    answer = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/admin/");
+-    if (answer != nullptr) {
+-        ipp_status_t status = ippGetStatusCode(answer);
+-        Q_UNUSED(status)
+-        ippDelete(answer);
+-    }
+-}
+-// TODO:设置默认打印机
+-bool UkuiPrinterManager::setDefaultPrinter(QString printerName)
+-{
+-    InformationCollector::getInstance().addMessage(QString("setDefaultPrinter") +  QString(printerName));
+-    char* instance;
+-    char* printer = 0;
+-    if (printerName.compare("") == 0)
+-        return false;
+-
+-    cups_dest_t* dests; /* Destinations */
+-
+-    std::string tmpStr = convertFromQString(printerName);
+-    printer = const_cast<char*>(tmpStr.c_str());
+-    int num_dests = cupsGetDests(&dests);
+-    if (num_dests == 0 || dests == nullptr)
+-        return false;
+-
+-    if ((instance = strrchr(printer, '/')) != NULL)
+-        *instance++ = '\0';
+-
+-    cups_dest_t* dest = cupsGetDest(printer, instance, num_dests, dests);
+-    if (dest == nullptr) {
+-        return false;
+-    }
+-    // cupsSetDefaultDest(printer,instance,num_dests,dests);
+-    for (auto i = 0; i < num_dests; i++) {
+-        dests[i].is_default = false;
+-    }
+-    dest->is_default = true;
+-    cupsSetDests(num_dests, dests);
+-    cupsFreeDests(num_dests, dests);
+-    // cupsSetDefaultDest(printer,instance,num_dests,dests);
+-    // System Wide Ipp
+-    // CUPS_SET_DEFAULT
+-    ipp_t* request = ippNewRequest(CUPS_SET_DEFAULT);
+-    ipp_t* answer = nullptr;
+-    char uri[HTTP_MAX_URI];
+-    char baseUri[128];
+-    sprintf(baseUri, baseIppUriFormat, m_host.toLocal8Bit().data(), m_port);
+-    construct_uri(uri, HTTP_MAX_URI, baseUri, printer);
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+-    answer = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/admin/");
+-    if (answer == nullptr) {
+-        printf("cupsDoRequest Failed.\n");
+-        ipp_status_t err = cupsLastError();
+-        if (err == ipp_status_t::IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED) {
+-            int ret = cupsDoAuthentication(m_http, "POST", "/admin/");
+-            Q_UNUSED(ret)
+-        }
+-        qDebug() << "ERROR:" << cupsLastErrorString();
+-        return false;
+-    }
+-    ipp_status_t status = ippGetStatusCode(answer);
+-    if (status > IPP_OK_CONFLICT) {
+-        qDebug("Error:%s\n", cupsLastErrorString());
+-        return false;
+-    }
+-    ippDelete(answer);
+-
+-    return true;
+-}
+-
+-QString UkuiPrinterManager::getDefaultPrinter()
+-{
+-    return cupsGetDefault();
+-}
+-QVariant UkuiPrinterManager::getProperty(ipp_attribute_t* attr, int i)
+-{
+-    QVariant value;
+-    ipp_tag_t tag;
+-    ipp_tag_t valTag = tag = ippGetValueTag(attr);
+-    Q_UNUSED(valTag)
+-    switch (tag) {
+-    case IPP_TAG_NAME:
+-    case IPP_TAG_TEXT:
+-    case IPP_TAG_CHARSET:
+-    case IPP_TAG_URI:
+-    case IPP_TAG_MIMETYPE:
+-    case IPP_TAG_LANGUAGE:
+-    case IPP_TAG_KEYWORD: {
+-        QStringList retList;
+-        // qDebug() << ippGetName(attr) << ippGetValueTag(attr) << ippGetCount(attr);
+-        for (auto i = 0; i < ippGetCount(attr); i++) {
+-            retList.push_back(ippGetString(attr, i, NULL));
+-            // qDebug() << "   " << retList.at(i);
+-        }
+-        value = retList;
+-    } break;
+-    case IPP_TAG_BEGIN_COLLECTION: {
+-        qDebug() << ippGetName(attr) << ippGetValueTag(attr) << ippGetCount(attr);
+-        getCollection(attr);
+-    } break;
+-    case IPP_TAG_END_COLLECTION: {
+-    } break;
+-    case IPP_TAG_INTEGER:
+-    case IPP_TAG_ENUM: {
+-        QVariantList retList;
+-        for (auto i = 0; i < ippGetCount(attr); i++) {
+-            retList.push_back(ippGetInteger(attr, i));
+-        }
+-        value = retList;
+-    } break;
+-    case IPP_TAG_BOOLEAN: {
+-        value = ippGetBoolean(attr, i);
+-    } break;
+-    case IPP_TAG_RANGE: {
+-        QVariantList list;
+-        int lower, upper;
+-        lower = ippGetRange(attr, i, &upper);
+-        list.push_back(lower);
+-        list.push_back(upper);
+-        value = list;
+-    } break;
+-    case IPP_TAG_RESOLUTION: {
+-        QVariantList list;
+-        int yres = 0;
+-        ipp_res_t unit;
+-        int xres = ippGetResolution(attr, i, &yres, &unit);
+-        list.push_back(xres);
+-        list.push_back(yres);
+-        list.push_back((int)unit);
+-        value = list;
+-    } break;
+-    case IPP_TAG_DATE:
+-    case IPP_TAG_NOVALUE:
+-    case IPP_TAG_UNKNOWN:
+-    default: {
+-        qDebug() << "Type Not Supported:" << tag << " " << ippGetName(attr);
+-    }
+-    }
+-    return value;
+-}
+-
+-void UkuiPrinterManager::getCollection(ipp_attribute_t* attr)
+-{
+-    int count = ippGetCount(attr);
+-    for (auto i = 0; i < count; i++) {
+-        ipp_t* col = ippGetCollection(attr, i);
+-        qDebug() << "{";
+-        for (auto attr = ippFirstAttribute(col); attr; attr = ippNextAttribute(col)) {
+-            if (ippGetValueTag(attr) == 52) {
+-                getCollection(attr);
+-            } else {
+-                qDebug() << "   " << ippGetName(attr) << ippGetValueTag(attr) << getProperty(attr);
+-            }
+-        }
+-        qDebug() << "}";
+-    }
+-}
+-
+-void UkuiPrinterManager::setLocation(const QString printer_uri, const QString location)
+-{
+-    qDebug() << "ukuiPrinter::setLocation";
+-    ipp_t* request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER);
+-    ipp_t* answer = nullptr;
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", nullptr, printer_uri.toLocal8Bit().data());
+-    ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-location", nullptr, location.toLocal8Bit().data());
+-    answer = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/admin/");
+-    if (answer && ippGetStatusCode(answer) != IPP_OK) {
+-        qDebug() << ippGetStatusCode(answer);
+-    }
+-    ippDelete(answer);
+-}
+-void UkuiPrinterManager::setInfo(const QString printer_uri, const QString info)
+-{
+-    qDebug() << "ukuiPrinter::setLocation";
+-    ipp_t* request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER);
+-    ipp_t* answer = nullptr;
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", nullptr, printer_uri.toLocal8Bit().data());
+-    ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-info", nullptr, info.toLocal8Bit().data());
+-    answer = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/admin/");
+-    if (answer && ippGetStatusCode(answer) != IPP_OK) {
+-        qDebug() << ippGetStatusCode(answer);
+-    }
+-    ippDelete(answer);
+-}
+-void UkuiPrinterManager::setUri(const QString printer_uri, const QString device_uri)
+-{
+-    qDebug() << "ukuiPrinter::setUri";
+-    ipp_t* request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER);
+-    ipp_t* answer = nullptr;
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", nullptr, printer_uri.toLocal8Bit().data());
+-    ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_URI, "device-uri", nullptr, device_uri.toLocal8Bit().data());
+-    answer = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/admin/");
+-    if (answer && ippGetStatusCode(answer) != IPP_OK) {
+-        qDebug() << ippGetStatusCode(answer);
+-    }
+-    ippDelete(answer);
+-}
+-
+-bool UkuiPrinterManager::getOption(ppd_file_t *ppd,ppd_option_t* option, SelectableProperty& property)
+-{
+-    ppd_choice_t* choice = ppdFindChoice(option, option->defchoice);
+-    if (choice == nullptr)
+-    {
+-        return false;
+-    }
+-    // Selected...
+-    property.keyword.name = option->keyword;
+-    QString str = QString("%1.%2").arg(m_locale).arg("Translation");
+-    ppd_attr_t *attr = ppdFindAttr(ppd,str.toStdString().c_str(),option->keyword);
+-    if(attr){
+-        property.keyword.displayName = attr->text;
+-    }else{
+-        property.keyword.displayName = option->text;
+-    }
+-    property.current.name = choice->choice;
+-    str = QString("%1.%2").arg(m_locale).arg(option->keyword);
+-    attr = ppdFindAttr(ppd,str.toStdString().c_str(),choice->choice);
+-    if(attr){
+-        property.current.displayName = attr->text;
+-    }else{
+-        property.current.displayName = choice->text;
+-    }
+-    for (auto i = 0; i < option->num_choices; i++) {
+-        struct AttrName temp;
+-        temp.name = option->choices[i].choice;
+-        attr = ppdFindAttr(ppd,str.toStdString().c_str(),option->choices[i].choice);
+-        if(attr){
+-            temp.displayName = attr->text;
+-        }else{
+-            temp.displayName = option->choices[i].text;
+-        }
+-        property.supported.push_back(temp);
+-    }
+-    return true;
+-}
+-
+-void UkuiPrinterManager::getInkInfo(UkuiUsbPrinter& printer)
+-{
+-    if (printer.device_uri.isEmpty()) {
+-        return ;
+-    }
+-
+-    const char* attributes[] = {
+-        "marker-change-time",
+-        "marker-colors",
+-        "marker-high-levels",
+-        "marker-levels",
+-        "marker-low-levels",
+-        "marker-message",
+-        "marker-names",
+-        "marker-types",
+-    };
+-
+-    ipp_t *request = ippNewRequest(CUPS_GET_PRINTERS);
+-    ipp_t *answer;
+-    ipp_attribute_t *attr;
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, QTC(printer.device_uri));
+-    ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
+-        "requested-attributes", sizeof(attributes) / sizeof(attributes[0]), NULL, attributes);
+-
+-    answer = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/");
+-    if (!answer || ippGetStatusCode (answer) > IPP_OK_CONFLICT) {
+-        if (answer && ippGetStatusCode (answer) == IPP_NOT_FOUND) {
+-        // No printers.
+-            qDebug ("no printers in CUPS_HTTP_DEFAULT\n");
+-            ippDelete (answer);
+-            return ;
+-        }
+-        else
+-            qDebug("error: %d, %s\n", answer ? ippGetStatusCode (answer) : cupsLastError (), answer ? NULL : cupsLastErrorString ());
+-        if (answer)
+-            ippDelete (answer);
+-        return ;
+-    }
+-    int minn = 0x3f3f3f3f;
+-    QMap<QString, PrinterAdvancedAttribute> printerAttributes;
+-    for (attr = ippFirstAttribute(answer); attr; attr = ippNextAttribute(answer)) {
+-        if (attr && ippGetGroupTag (attr) != IPP_TAG_PRINTER)
+-            continue;
+-        if (!attr)
+-            break;
+-        PrinterAdvancedAttribute Attr;
+-        Attr.tag = ippGetValueTag(attr);
+-        Attr.key = ippGetName(attr);
+-        // getProperty已经获取过一次了,不用自己写循环获取了
+-        Attr.value = getProperty(attr);
+-        if (Attr.key == "marker-colors"
+-         || Attr.key == "marker-names"
+-         || Attr.key == "marker-types"
+-         || Attr.key == "marker-levels") {
+-            minn = qMin(minn, ippGetCount(attr));
+-        }
+-        printerAttributes.insert(ippGetName(attr), Attr);
+-    }
+-    ippDelete (answer);
+-
+-    if (minn == 0x3f3f3f3f || minn == 0) {
+-        return ;
+-    }
+-
+-    for (int i = 0; i < minn; i++) {
+-        InkProperty ink;
+-        if (printerAttributes.contains("marker-colors"))
+-            ink.color.setNamedColor(printerAttributes["marker-colors"].value.toList().at(i).toString());
+-        if (printerAttributes.contains("marker-names"))
+-            ink.name  = printerAttributes["marker-names"].value.toList().at(i).toString();
+-        if (printerAttributes.contains("marker-types"))
+-            ink.type  = printerAttributes["marker-types"].value.toList().at(i).toString();
+-        if (printerAttributes.contains("marker-levels")) {
+-            ink.level = printerAttributes["marker-levels"].value.toList().at(i).toInt();
+-            switch (ink.level)
+-            {
+-            case -1:
+-                qDebug() << "the level is unavailable!";
+-                break;
+-            case -2:
+-                qDebug() << "the level is unknown!";
+-                break;
+-            case -3:
+-                qDebug() << "the level is unknown but has not yet reached capacity!";
+-                break;
+-            default:
+-                break;
+-            }
+-        }
+-        printer.inkOptions.append(ink);
+-    }
+-    if (printer.inkOptions.isEmpty()) {
+-        InformationCollector::getInstance().addMessage("no ink options found!");
+-    }
+-    return ;
+-}
+-
+-void UkuiPrinterManager::getPpdInfo(UkuiUsbPrinter& printer)
+-{
+-    if (printer.name.compare("") == 0) {
+-        return;
+-    }
+-    const char* tmpFileName = cupsGetPPD2(CUPS_HTTP_DEFAULT, printer.name.toLocal8Bit().data());
+-    ppd_file_t* ppd = ppdOpenFile(tmpFileName);
+-    ppdMarkDefaults(ppd);
+-    ppd_attr_t* attr;
+-    attr = ppdFindAttr(ppd, "ModelName", NULL);
+-    if (attr != nullptr) {
+-        printer.product = attr->value;
+-    }
+-    attr = ppdFindAttr(ppd, "Manufacturer", NULL);
+-    if (attr != nullptr) {
+-        printer.vendor = attr->value;
+-    }
+-    ppd_option_t* option = ppdFirstOption(ppd);
+-    while (option != nullptr) {
+-        SelectableProperty tmp;
+-        getOption(ppd,option,tmp);
+-        printer.flexibleOptions.push_back(tmp);
+-        option = ppdNextOption(ppd);
+-    }
+-    ppdClose(ppd);
+-    unlink(tmpFileName);
+-}
+-
+-#if 1
+-//
+-void UkuiPrinterManager::setPrinterPPD(const UkuiUsbPrinter &printer){
+-    if (m_ppd == nullptr) {
+-        return;
+-    }
+-
+-    const char* filename = cupsGetPPD2(CUPS_HTTP_DEFAULT, printer.name.toLocal8Bit().data());
+-    if (filename == nullptr) {
+-        return;
+-    }
+-    cups_file_t* orig = cupsFileOpen(filename, "r");
+-    if (orig == nullptr) {
+-        return;
+-    }
+-
+-    bool needUpdate = false;
+-    char tempFile[1024];
+-    cups_file_t* newppd = cupsTempFile2(tempFile, 1024);
+-    char line[1024];
+-    while (cupsFileGetLine(orig, line, 1024) != 0) {
+-        QString strline(line);
+-        if (strline.startsWith("*Default", Qt::CaseInsensitive) == false) {
+-            cupsFilePuts(newppd, line);
+-        }
+-        else if(strline.indexOf(':') == -1){
+-            cupsFilePuts(newppd, line);
+-        }
+-        else {
+-            const int defLen = 8;
+-            int pos = strline.indexOf(':');
+-            int pos2 = strline.lastIndexOf('\n');
+-            //*Default<Key>: <Value>
+-            //获取Key字符串
+-            QString key = strline.mid(defLen,pos-defLen);
+-            //获取Value字符串
+-            QString value = strline.mid(pos+2,pos2-2-pos);
+-            //qDebug() << key << value;
+-            ppd_choice_t* choice = ppdFindMarkedChoice(m_ppd, key.toLocal8Bit().data());
+-            if (choice == nullptr) {
+-                continue;
+-            }
+-            if (value.compare(choice->choice) != 0) {
+-                needUpdate = true;
+-                QString newLine = QString("*Default%1: %2\n").arg(key).arg(choice->choice);
+-                cupsFilePuts(newppd, newLine.toLocal8Bit().data());
+-            } else
+-                cupsFilePuts(newppd, line);
+-
+-        }
+-    }
+-
+-    cupsFileClose(newppd);
+-    cupsFileClose(orig);
+-    ppdClose(m_ppd);
+-    m_ppd = nullptr;
+-
+-    ipp_t* answer = nullptr;
+-    ipp_t* request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER);
+-    char uri[HTTP_MAX_URI];
+-    char baseUri[128];
+-    sprintf(baseUri, baseIppUriFormat, m_host.toLocal8Bit().data(), m_port);
+-    construct_uri(uri, HTTP_MAX_URI, baseUri, printer.name.toLocal8Bit().data());
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
+-    answer = cupsDoFileRequest(CUPS_HTTP_DEFAULT, request, "/admin/", needUpdate ? tempFile : filename);
+-    unlink(tempFile);
+-    unlink(filename);
+-    if (answer != nullptr) {
+-        ippDelete(answer);
+-    } else {
+-        printf("cupsDoRequest Failed.\n");
+-        ipp_status_t err = cupsLastError();
+-        Q_UNUSED(err)
+-        qDebug() << "ERROR:" << cupsLastErrorString();
+-    }
+-}
+-
+-#else
+-// Open ppd -> mark option -> emit -> close ppd
+-void UkuiPrinterManager::setPrinterPPD(const UkuiUsbPrinter& printer)
+-{
+-    const char* filename = cupsGetPPD2(CUPS_HTTP_DEFAULT, printer.name.toLocal8Bit().data());
+-    if (filename == nullptr) {
+-        return;
+-    }
+-    cups_file_t* orig = cupsFileOpen(filename, "r");
+-    if (orig == nullptr) {
+-        return;
+-    }
+-    ppd_file_t* ppd = ppdOpenFile(filename);
+-    if (ppd == nullptr) {
+-        return;
+-    }
+-    ppdMarkDefaults(ppd);
+-    bool needUpdate = false;
+-    char tempFile[1024];
+-    cups_file_t* newppd = cupsTempFile2(tempFile, 1024);
+-    char line[1024];
+-    while (cupsFileGetLine(orig, line, 1024) != 0) {
+-        QString strline(line);
+-        if (strline.startsWith("*Default", Qt::CaseInsensitive) == false) {
+-            cupsFilePuts(newppd, line);
+-        } else {
+-            if (printer.duplex.keyword.name.isNull() == false && strline.contains(printer.duplex.keyword.name) == true) {
+-                ppd_choice_t* choice = ppdFindMarkedChoice(ppd, printer.duplex.keyword.name.toLocal8Bit().data());
+-                if (choice == nullptr) {
+-                    continue;
+-                }
+-                if (printer.duplex.current.name.compare(choice->choice) != 0) {
+-                    needUpdate = true;
+-                    QString newLine = QString("*Default%1: %2\n")
+-                            .arg(printer.duplex.keyword.name)
+-                            .arg(printer.duplex.current.name);
+-                    cupsFilePuts(newppd, newLine.toLocal8Bit().data());
+-                } else
+-                    cupsFilePuts(newppd, line);
+-            } else if (printer.colorMode.keyword.name.isNull() == false && strline.contains(printer.colorMode.keyword.name) == true) {
+-                ppd_choice_t* choice = ppdFindMarkedChoice(ppd, printer.colorMode.keyword.name.toLocal8Bit().data());
+-                if (choice == nullptr) {
+-                    continue;
+-                }
+-                if (printer.colorMode.current.name.compare(choice->choice) != 0) {
+-                    needUpdate = true;
+-                    QString newLine = QString("*Default%1: %2\n")
+-                            .arg(printer.colorMode.keyword.name)
+-                            .arg(printer.colorMode.current.name);
+-                    cupsFilePuts(newppd, newLine.toLocal8Bit().data());
+-                } else
+-                    cupsFilePuts(newppd, line);
+-            } else if (printer.inputSlot.keyword.name.isNull() == false && strline.contains(printer.inputSlot.keyword.name) == true) {
+-                ppd_choice_t* choice = ppdFindMarkedChoice(ppd, printer.inputSlot.keyword.name.toLocal8Bit().data());
+-                if (choice == nullptr) {
+-                    continue;
+-                }
+-                if (printer.inputSlot.current.name.compare(choice->choice) != 0) {
+-                    needUpdate = true;
+-                    QString newLine = QString("*Default%1: %2\n")
+-                            .arg(printer.inputSlot.keyword.name)
+-                            .arg(printer.inputSlot.current.name);
+-                    cupsFilePuts(newppd, newLine.toLocal8Bit().data());
+-                } else
+-                    cupsFilePuts(newppd, line);
+-            } else if (printer.mediaType.keyword.name.isNull() == false
+-                       && strline.contains(printer.mediaType.keyword.name) == true) {
+-                ppd_choice_t* choice = ppdFindMarkedChoice(ppd, printer.mediaType.keyword.name.toLocal8Bit().data());
+-                if (choice == nullptr) {
+-                    continue;
+-                }
+-                if (printer.mediaType.current.name.compare(choice->choice) != 0) {
+-                    needUpdate = true;
+-                    QString newLine = QString("*Default%1: %2\n")
+-                            .arg(printer.mediaType.keyword.name)
+-                            .arg(printer.mediaType.current.name);
+-                    cupsFilePuts(newppd, newLine.toLocal8Bit().data());
+-                } else
+-                    cupsFilePuts(newppd, line);
+-            } else if (printer.mediaSize.keyword.name.isNull() == false
+-                       && strline.contains("ImageableArea") == true) {
+-                ppd_choice_t* choice = ppdFindMarkedChoice(ppd, "PageSize");
+-                if (choice == nullptr) {
+-                    continue;
+-                }
+-                if (printer.mediaSize.current.name.compare(choice->choice) != 0) {
+-                    needUpdate = true;
+-                    QString newLine = QString("*Default%1: %2\n")
+-                            .arg("ImageableArea")
+-                            .arg(printer.mediaSize.current.name);
+-                    cupsFilePuts(newppd, newLine.toLocal8Bit().data());
+-                } else
+-                    cupsFilePuts(newppd, line);
+-
+-            } else if (printer.mediaSize.keyword.name.isNull() == false && strline.contains("PageSize") == true) {
+-                ppd_choice_t* choice = ppdFindMarkedChoice(ppd, "PageSize");
+-                if (choice == nullptr) {
+-                    continue;
+-                }
+-                if (printer.mediaSize.current.name.compare(choice->choice) != 0) {
+-                    needUpdate = true;
+-                    QString newLine = QString("*Default%1: %2\n")
+-                            .arg(choice->option->keyword)
+-                            .arg(printer.mediaSize.current.name);
+-                    cupsFilePuts(newppd, newLine.toLocal8Bit().data());
+-                } else
+-                    cupsFilePuts(newppd, line);
+-
+-            } else if (printer.mediaSize.keyword.name.isNull() == false && strline.contains("PageRegion") == true) {
+-                ppd_choice_t* choice = ppdFindMarkedChoice(ppd, "PageSize");
+-                if (choice == nullptr) {
+-                    continue;
+-                }
+-                if (printer.mediaSize.current.name.compare(choice->choice) != 0) {
+-                    needUpdate = true;
+-                    QString newLine = QString("*Default%1: %2\n")
+-                            .arg("PageRegion")
+-                            .arg(printer.mediaSize.current.name);
+-                    cupsFilePuts(newppd, newLine.toLocal8Bit().data());
+-                } else
+-                    cupsFilePuts(newppd, line);
+-
+-            } else if (printer.mediaSize.keyword.name.isNull() == false && strline.contains("PageDimension") == true) {
+-                ppd_choice_t* choice = ppdFindMarkedChoice(ppd, "PageSize");
+-                if (choice == nullptr) {
+-                    continue;
+-                }
+-                if (printer.mediaSize.current.name.compare(choice->choice) != 0) {
+-                    needUpdate = true;
+-                    QString newLine = QString("*Default%1: %2\n")
+-                            .arg("PageDimension")
+-                            .arg(printer.mediaSize.current.name);
+-                    cupsFilePuts(newppd, newLine.toLocal8Bit().data());
+-                } else
+-                    cupsFilePuts(newppd, line);
+-
+-            } else if (printer.mediaSize.keyword.name.isNull() == false && strline.contains("PaperDimension") == true) {
+-                ppd_choice_t* choice = ppdFindMarkedChoice(ppd, "PageSize");
+-                if (choice == nullptr) {
+-                    continue;
+-                }
+-                if (printer.mediaSize.current.name.compare(choice->choice) != 0) {
+-                    needUpdate = true;
+-                    QString newLine = QString("*Default%1: %2\n")
+-                            .arg("PaperDimension")
+-                            .arg(printer.mediaSize.current.name);
+-                    cupsFilePuts(newppd, newLine.toLocal8Bit().data());
+-                } else
+-                    cupsFilePuts(newppd, line);
+-
+-            } else {
+-                bool tmpFlag = false;
+-                if (printer.flexibleOptions.size())
+-                {
+-                    for (auto option : printer.flexibleOptions) {
+-                        if (option.keyword.name.isNull() == false && strline.contains(option.keyword.name) == true) {
+-                            QByteArray tmp = option.keyword.name.toLocal8Bit();
+-                            ppd_choice_t* choice = ppdFindMarkedChoice(ppd, tmp.data());
+-                            if (choice == nullptr) {
+-                                tmpFlag = false;
+-                                break;
+-                            }
+-                            if (option.current.name.compare(choice->choice) != 0) {
+-                                needUpdate = true;
+-                                QString newLine = QString("*Default%1: %2\n")
+-                                        .arg(choice->option->keyword)
+-                                        .arg(option.current.name);
+-                                cupsFilePuts(newppd, newLine.toLocal8Bit().data());
+-                                tmpFlag = true;
+-                            }
+-                            break;
+-                        }
+-                    }
+-                }
+-                if(tmpFlag == false)
+-                {
+-                    qDebug() << strline;
+-                    cupsFilePuts(newppd, line);
+-                }
+-            }
+-        }
+-    }
+-
+-    cupsFileClose(newppd);
+-    cupsFileClose(orig);
+-    ppdClose(ppd);
+-
+-    ipp_t* answer = nullptr;
+-    ipp_t* request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER);
+-    char uri[HTTP_MAX_URI];
+-    char baseUri[128];
+-    sprintf(baseUri, baseIppUriFormat, m_host.toLocal8Bit().data(), m_port);
+-    construct_uri(uri, HTTP_MAX_URI, baseUri, printer.name.toLocal8Bit().data());
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
+-    answer = cupsDoFileRequest(CUPS_HTTP_DEFAULT, request, "/admin/", needUpdate ? tempFile : filename);
+-    unlink(tempFile);
+-    unlink(filename);
+-    if (answer != nullptr) {
+-        ippDelete(answer);
+-    } else {
+-        printf("cupsDoRequest Failed.\n");
+-        ipp_status_t err = cupsLastError();
+-        Q_UNUSED(err)
+-        qDebug() << "ERROR:" << cupsLastErrorString();
+-    }
+-}
+-#endif
+-//开始
+-//传入打印机名称,传出打印机属性
+-bool UkuiPrinterManager::startModifyAttr(const QString& printerName, UkuiUsbPrinter& printer)
+-{
+-    //Get printer info
+-    if (printerName.compare("") == 0)
+-        return false;
+-
+-    const char* defaultName = cupsGetDefault2(CUPS_HTTP_DEFAULT);
+-    char* instance = 0;
+-    cups_dest_t* dests; /* Destinations */
+-    int num_dests = cupsGetDests(&dests);
+-    if (num_dests == 0 || dests == nullptr)
+-        return false;
+-    std::string str = printerName.toStdString();
+-    char* tmp =  const_cast<char*>(str.c_str());
+-    if ((instance = strrchr(tmp, '/')) != NULL)
+-        *instance++ = '\0';
+-
+-    cups_dest_t* dest = cupsGetDest(tmp, instance, num_dests, dests);
+-    if (dest == nullptr) {
+-        qDebug() << "failed to get printer info: " << printerName;
+-        return false;
+-    }
+-
+-    printer.name = dest->name;
+-
+-    if (defaultName != nullptr && printer.name.compare(defaultName) == 0) {
+-        printer.is_default = true;
+-    }
+-    //qDebug("Printer Name:%s", printer.name.toLocal8Bit().data());
+-    for (auto k = 0; k < dest->num_options; k++) {
+-        //qDebug("    (%s %s)", dests[i].options[k].name, dests[i].options[k].value);
+-        if (QString::compare(dest->options[k].name, "device-uri") == 0) {
+-            printer.device_uri = dest->options[k].value;
+-        } else if (QString::compare(dest->options[k].name, "printer-uri-supported") == 0) {
+-            printer.printer_uri = dest->options[k].value;
+-        } else if (QString::compare(dest->options[k].name, "printer-make-and-model") == 0) {
+-            printer.make_and_model = dest->options[k].value;
+-        } else if (QString::compare(dest->options[k].name, "printer-state") == 0) {
+-            if (QString::compare(dest->options[k].value, "3") == 0) {
+-                printer.connect_status = tr("Idle");
+-            } else if (QString::compare(dest->options[k].value, "4") == 0) {
+-                printer.connect_status = tr("Printing");
+-            } else if (QString::compare(dest->options[k].value, "5") == 0) {
+-                printer.connect_status = tr("Stopped");
+-            }
+-        } else if (QString::compare(dest->options[k].name, "printer-location") == 0) {
+-            printer.location = dest->options[k].value;
+-        }
+-    }
+-
+-    if (printer.printer_uri.compare("") != 0) {
+-        getPpdInfo(printer);
+-    }
+-
+-    m_curFile = cupsGetPPD2(CUPS_HTTP_DEFAULT, printer.name.toLocal8Bit().data());
+-    std::string tmpStr = convertFromQString(m_curFile);
+-    m_ppd = ppdOpenFile(const_cast<char*>(tmpStr.c_str()));
+-    ppdMarkDefaults(m_ppd);
+-
+-    return true;
+-}
+-
+-void UkuiPrinterManager::endModifyAttr(const UkuiUsbPrinter &printer, bool needSave, bool needSaveUri)
+-{
+-    if (needSave == true) {
+-        //属性
+-        if (m_canSave == true) {
+-            setPrinterConfig(printer);
+-        } else {
+-            qDebug() << "Can not save now...";
+-        }
+-    }
+-    if (needSaveUri == true) {
+-        if (m_canSave == true) {
+-            setUri(printer.printer_uri, printer.device_uri);
+-        } else {
+-            qDebug() << "Can not save now...";
+-        }
+-    }
+-
+-    //清理现场,把类内变量清除
+-    //clear m_ppd,名
+-    if (m_ppd != nullptr) {
+-        ppdClose(m_ppd);
+-        m_ppd = nullptr;
+-    }
+-    if (m_curFile.compare("") != 0) {
+-        std::string tmpStr = convertFromQString(m_curFile);
+-
+-        unlink(const_cast<char*>(tmpStr.c_str()));
+-        m_curFile = "";
+-    }
+-    m_canSave = true;
+-}
+-//0 :无冲突,其他:冲突选项个数
+-// -1 报错
+-int UkuiPrinterManager::modifyPrinterAttr(const QString& key, const QString& value, QMap<QString, QString>& conflicts)
+-{
+-    conflicts.clear();
+-    if (m_ppd == nullptr)
+-        return -1;
+-
+-    ppdMarkOption(m_ppd, key.toUtf8().data(), value.toUtf8().data());
+-    //检测冲突
+-    int num = ppdConflicts(m_ppd);
+-    if (num != 0) {
+-        m_canSave = false;
+-        //枚举所有冲突属性
+-        for (auto j = 0; j < m_ppd->num_groups; j++) {
+-            for (auto k = 0; k < m_ppd->groups[j].num_options; k++) {
+-                ppd_option_t option = m_ppd->groups[j].options[k];
+-                if (option.conflicted) {
+-                    for (auto m = 0; m < option.num_choices; m++) {
+-                        if (option.choices[m].marked) {
+-                            qDebug() << k << option.keyword << option.choices[m].text;
+-                            conflicts.insert(option.keyword, option.choices[m].choice);
+-                        }
+-                    }
+-                }
+-            }
+-        }
+-    } else {
+-        m_canSave = true;
+-    }
+-    return num;
+-}
+-
+-bool UkuiPrinterManager::getConflictResults(const QString& key, QList<conflictPair>& conflicts)
+-{
+-    qDebug() << key;
+-    conflicts.clear();
+-    ppd_option_t *option1, *option2;
+-    ppd_choice_t *choice1, *choice2;
+-    ppd_const_t constrain;
+-    if(m_ppd == nullptr)
+-    {
+-        qDebug() << "m_ppd is nullptr!";
+-    }
+-    for (auto j = 0; j < m_ppd->num_consts; j++) {
+-        constrain = m_ppd->consts[j];
+-        option1 = ppdFindOption(m_ppd, constrain.option1);
+-        option2 = ppdFindOption(m_ppd, constrain.option2);
+-
+-        if (option1 == nullptr || option2 == nullptr)
+-            continue;
+-        qDebug() << "key" << key;
+-        qDebug() << "option1->keyword:" << option1->keyword;
+-        qDebug() << "option2->keyword:" << option2->keyword;
+-        qDebug() << "key.compare(option1->keyword):" << key.compare(option1->keyword);
+-        qDebug() << "key.compare(option2->keyword):" << key.compare(option2->keyword);
+-        if (key.compare(option1->keyword) != 0 && key.compare(option2->keyword))
+-            continue;
+-
+-        if (constrain.choice1[0] != '\0') {
+-            choice1 = ppdFindChoice(option1, constrain.choice1);
+-        } else {
+-            for (auto i = 0; i < option1->num_choices; i++) {
+-                if (option1->choices[i].marked != 0) {
+-                    choice1 = &(option1->choices[i]);
+-                    break;
+-                }
+-            }
+-        }
+-
+-        if (constrain.choice2[0] != '\0') {
+-            choice2 = ppdFindChoice(option2, constrain.choice2);
+-        } else {
+-            for (auto i = 0; i < option2->num_choices; i++) {
+-                if (option2->choices[i].marked != 0) {
+-                    choice2 = &(option2->choices[i]);
+-                    break;
+-                }
+-            }
+-        }
+-        //两个属性都mark的时候
+-        if (choice1 != nullptr && choice1->marked && choice2 != nullptr && choice2->marked) {
+-            conflictPair conflict;
+-            conflict.first.first = option1->keyword;
+-            conflict.first.second = choice1->choice;
+-            conflict.second.first = option2->keyword;
+-            conflict.second.second = choice2->choice;
+-            conflicts.push_back(conflict);
+-            //qDebug() << "Conflict Detected:(" << option1->keyword << choice1->choice << ") And (" << option2->keyword << choice2->choice <<")";
+-        }
+-    }
+-    return (conflicts.size() == 0) ? false : true;
+-}
+-
+-
+-bool UkuiPrinterManager::setPrinterConfig(const UkuiUsbPrinter& printer)
+-{
+-    setPrinterPPD(printer);
+-    setLocation(printer.printer_uri, printer.location);
+-    return true;
+-}
+-bool UkuiPrinterManager::duplicatePrinter(const QString newName, const QString oldName)
+-{
+-    if ((oldName.compare("") == 0) || (newName.compare("") == 0))
+-        return false;
+-    //PPD
+-    const char* filename = cupsGetPPD2(CUPS_HTTP_DEFAULT, oldName.toLocal8Bit().data());
+-    if (filename == nullptr) {
+-        return false;
+-    }
+-    ipp_t* answer = nullptr;
+-    ipp_t* request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER);
+-    char uri[HTTP_MAX_URI];
+-    char baseUri[128];
+-    sprintf(baseUri, baseIppUriFormat, m_host.toLocal8Bit().data(), m_port);
+-    construct_uri(uri, HTTP_MAX_URI, baseUri, newName.toLocal8Bit().data());
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
+-    answer = cupsDoFileRequest(CUPS_HTTP_DEFAULT, request, "/admin/", filename);
+-    unlink(filename);
+-    if (answer != nullptr) {
+-        ippDelete(answer);
+-    } else {
+-        printf("cupsDoRequest Failed.\n");
+-        ipp_status_t err = cupsLastError();
+-        Q_UNUSED(err)
+-        qDebug() << "ERROR:" << cupsLastErrorString();
+-        return false;
+-    }
+-    cups_dest_t* dests; /* Destinations */
+-    int num_dests = cupsGetDests(&dests);
+-    if (num_dests == 0 || dests == nullptr)
+-        return false;
+-
+-    char* oldInstance = nullptr;
+-//    char* oldPrinter = nullptr;
+-
+-//    QByteArray temp = oldName.toUtf8();
+-    std::string tmpStr = convertFromQString(oldName);
+-
+-    char* oldPrinter = const_cast<char*>(tmpStr.c_str());
+-
+-
+-    if ((oldInstance = strrchr(oldPrinter, '/')) != NULL)
+-        *oldInstance++ = '\0';
+-
+-    cups_dest_t* oldDest = cupsGetDest(oldPrinter, oldInstance, num_dests, dests);
+-    char* devUri = const_cast<char*>(cupsGetOption("device-uri", oldDest->num_options, oldDest->options));
+-    char* location = const_cast<char*>(cupsGetOption("printer-location", oldDest->num_options, oldDest->options));
+-    char* info = const_cast<char*>(cupsGetOption("printer-info", oldDest->num_options, oldDest->options));
+-    int isShared = (QString::compare(cupsGetOption("printer-is-shared", oldDest->num_options, oldDest->options), "true", Qt::CaseInsensitive) == 0) ? 1 : 0;
+-    int isAccepting = (QString::compare(cupsGetOption("printer-is-accepting-jobs", oldDest->num_options, oldDest->options), "true", Qt::CaseInsensitive) == 0) ? 1 : 0;
+-    int isTemp = (QString::compare(cupsGetOption("printer-is-temporary", oldDest->num_options, oldDest->options), "true", Qt::CaseInsensitive) == 0) ? 1 : 0;
+-    qDebug() << oldDest->num_options;
+-    // Need Set uri, location ,description, shared, enable, accepting, op policy,
+-    //cupsSetDests2(CUPS_HTTP_DEFAULT,num_dests,dests);
+-    //Use IPP set Attrs, cupsSetDests always failed.
+-    setUri(uri, devUri);
+-    setInfo(uri, info);
+-    setLocation(uri, location);
+-    request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER);
+-    answer = nullptr;
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", nullptr, uri);
+-    ippAddBoolean(request, IPP_TAG_OPERATION, "printer-is-shared", isShared);
+-    ippAddBoolean(request, IPP_TAG_OPERATION, "printer-is-accepting-jobs", isAccepting);
+-    ippAddBoolean(request, IPP_TAG_OPERATION, "printer-is-temporary", isTemp);
+-
+-    answer = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/admin/");
+-    if (answer && ippGetStatusCode(answer) != IPP_OK) {
+-        qDebug() << ippGetStatusCode(answer);
+-    }
+-    ippDelete(answer);
+-
+-    request = ippNewRequest(IPP_RESUME_PRINTER);
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", nullptr, uri);
+-    answer = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/admin/");
+-    if (answer != nullptr) {
+-        ippDelete(answer);
+-        answer = nullptr;
+-    }
+-    return true;
+-}
+-
+-bool UkuiPrinterManager::getCupsDebugLogging()
+-{
+-    int num_settings = 0;
+-    cups_option_t *settings = NULL;
+-    http_t	*http;
+-    if ((http = httpConnectEncrypt(cupsServer(), ippPort(),
+-                                   cupsEncryption())) == NULL)
+-    {
+-    // _cupsLangPrintf(stderr, _("cupsctl: Unable to connect to server: %s"),
+-    //                 strerror(errno));
+-    return false;
+-    }
+-
+-    if (!cupsAdminGetServerSettings(http, &num_settings, &settings)) {
+-        // _cupsLangPrintf(stderr, "cupsctl: %s", cupsLastErrorString());
+-        return false;
+-    }
+-    else {
+-        for (int i = 0; i < num_settings; i++) {
+-            if (!strcmp(settings[i].name, CUPS_SERVER_DEBUG_LOGGING)) {
+-                qDebug() << settings[i].value;
+-                qDebug() << atoi(settings[i].value);
+-                return atoi(settings[i].value);
+-            }
+-        }
+-    }
+-    cupsFreeOptions(num_settings, settings);
+-    return true;
+-}
+-void UkuiPrinterManager::setCupsDebugLogging(bool flag)
+-{
+-    QString s = flag ? "--debug-logging" : "--no-debug-logging";
+-    runCommand(QStringList{"cupsctl", s});
+-    return ;
+-}
+-
+-
+-bool UkuiPrinterManager::getPrinterShared(const QString &printerName)
+-{
+-    char uri[HTTP_MAX_URI];
+-    ipp_t *request;
+-    ipp_t *answer;
+-    ipp_attribute_t *attr;
+-    const char *attributes[] = {
+-    "printer-is-shared",
+-    };
+-    request = ippNewRequest (IPP_GET_PRINTER_ATTRIBUTES);
+-    construct_uri(uri, sizeof (uri), "ipp://localhost/printers/", QTC(printerName));
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+-    ippAddStrings (request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
+-		           "requested-attributes",
+-		           sizeof (attributes) / sizeof (attributes[0]),
+-		           NULL, attributes);
+-    answer = cupsDoRequest (CUPS_HTTP_DEFAULT, request, "/");
+-    if (!answer || ippGetStatusCode (answer) > IPP_OK_CONFLICT) {
+-        if (answer && ippGetStatusCode (answer) == IPP_NOT_FOUND) {
+-        // No printers.
+-            qDebug ("Get Enabled failed in %s\n",  QTC(printerName));
+-            ippDelete (answer);
+-            return false;
+-        }
+-        else
+-            qDebug("error: %d, %s\n", answer ? ippGetStatusCode (answer) : cupsLastError (), answer ? NULL : cupsLastErrorString ());
+-        if (answer)
+-            ippDelete (answer);
+-        return false;
+-    }
+-    for (attr = ippFirstAttribute(answer); attr; attr = ippNextAttribute(answer)) {
+-        if (attr && ippGetGroupTag (attr) != IPP_TAG_PRINTER)
+-            continue;
+-        if (!attr)
+-            break;
+-        qDebug() << ippGetName(attr);
+-        if (!strcmp(ippGetName(attr), "printer-is-shared") && ippGetValueTag(attr) == IPP_TAG_BOOLEAN) {
+-            return ippGetBoolean (attr, 0);
+-        }
+-    }
+-    return false;
+-}
+-
+-void UkuiPrinterManager::setPrinterShared(const QString &printerName, bool flag)
+-{
+-    InformationCollector::getInstance().addMessage(QString("setPrinterShared %1 %2").arg(printerName).arg(flag));
+-    qDebug() << printerName;
+-    char uri[HTTP_MAX_URI];
+-    ipp_t *request;
+-    ipp_t *answer;
+-    request = ippNewRequest (CUPS_ADD_MODIFY_PRINTER);
+-    construct_uri(uri, sizeof (uri), "ipp://localhost/printers/", QTC(printerName));
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+-    for (int i = 0; i < 2; i++) {
+-        ippAddBoolean(request, IPP_TAG_OPERATION, "printer-is-shared", flag);
+-        answer = cupsDoRequest (CUPS_HTTP_DEFAULT, request, "/admin/");
+-        if (answer && ippGetStatusCode (answer) == IPP_NOT_POSSIBLE) {
+-            // Perhaps it's a class, not a printer.
+-            ippDelete (answer);
+-            request = ippNewRequest (CUPS_ADD_MODIFY_CLASS);
+-            construct_uri(uri, sizeof (uri), "ipp://localhost/printers/", QTC(printerName));
+-            ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+-        } else break;
+-    }
+-    if (!answer || ippGetStatusCode (answer) > IPP_OK_CONFLICT) {
+-        qDebug() <<  cupsLastErrorString ();
+-        if (answer)
+-            ippDelete (answer);
+-    }
+-    return ;
+-}
+-
+-bool UkuiPrinterManager::getPrinterEnabled(const QString &printerName)
+-{
+-    char uri[HTTP_MAX_URI];
+-    ipp_t *request;
+-    ipp_t *answer;
+-    ipp_attribute_t *attr;
+-    const char *attributes[] = {
+-        "printer-state",
+-    };
+-    request = ippNewRequest (IPP_GET_PRINTER_ATTRIBUTES);
+-    construct_uri(uri, sizeof (uri), "ipp://localhost/printers/", QTC(printerName));
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+-    ippAddStrings (request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
+-		           "requested-attributes",
+-		           sizeof (attributes) / sizeof (attributes[0]),
+-		           NULL, attributes);
+-    answer = cupsDoRequest (CUPS_HTTP_DEFAULT, request, "/");
+-    if (!answer || ippGetStatusCode (answer) > IPP_OK_CONFLICT) {
+-        if (answer && ippGetStatusCode (answer) == IPP_NOT_FOUND) {
+-        // No printers.
+-            qDebug ("Get Enabled failed in %s\n",  QTC(printerName));
+-            ippDelete (answer);
+-            return false;
+-        }
+-        else
+-            qDebug("error: %d, %s\n", answer ? ippGetStatusCode (answer) : cupsLastError (), answer ? NULL : cupsLastErrorString ());
+-        if (answer)
+-            ippDelete (answer);
+-        return false;
+-    }
+-    for (attr = ippFirstAttribute(answer); attr; attr = ippNextAttribute(answer)) {
+-        if (attr && ippGetGroupTag (attr) != IPP_TAG_PRINTER)
+-            continue;
+-        if (!attr)
+-            break;
+-        if (!strcmp(ippGetName(attr), "printer-state") && ippGetValueTag(attr) == IPP_TAG_ENUM) {
+-            return ippGetInteger (attr, 0) != IPP_PRINTER_STOPPED;
+-        }
+-    }
+-    return false;
+-}
+-
+-void UkuiPrinterManager::setPrinterEnabled(const QString &printerName, bool flag)
+-{
+-    char uri[HTTP_MAX_URI];
+-    ipp_t *request;
+-    ipp_t *answer;
+-    ipp_attribute_t *attr;
+-
+-    request = ippNewRequest (flag ? IPP_RESUME_PRINTER : IPP_PAUSE_PRINTER);
+-    construct_uri(uri, sizeof (uri), "ipp://localhost/printers/", QTC(printerName));
+-    ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+-    answer = cupsDoRequest (CUPS_HTTP_DEFAULT, request, "/admin/");
+-    if (answer && ippGetStatusCode (answer) == IPP_NOT_POSSIBLE) {
+-        // Perhaps it's a class, not a printer.
+-        ippDelete (answer);
+-        qDebug() << cupsLastErrorString();
+-    }
+-    if (!answer || ippGetStatusCode (answer) > IPP_OK_CONFLICT) {
+-        qDebug() <<  cupsLastErrorString ();
+-        if (answer)
+-            ippDelete (answer);
+-    }
+-    return ;
+-}
+-
+-bool UkuiPrinterManager::isRemotePrinter(const QString &printerName)
+-{
+-    char uri[HTTP_MAX_URI];
+-    ipp_t *request;
+-    ipp_t *answer;
+-    ipp_attribute_t *attr;
+-    const char *attributes[] = {
+-        "printer-make-and-model",
+-    };
+-    request = ippNewRequest (CUPS_GET_PRINTERS);
+-    construct_uri(uri, sizeof (uri), "ipp://localhost/printers/", QTC(printerName));
+-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+-    ippAddStrings (request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
+-		           "requested-attributes",
+-		           sizeof (attributes) / sizeof (attributes[0]),
+-		           NULL, attributes);
+-    answer = cupsDoRequest (CUPS_HTTP_DEFAULT, request, "/");
+-    if (!answer || ippGetStatusCode (answer) > IPP_OK_CONFLICT) {
+-        if (answer && ippGetStatusCode (answer) == IPP_NOT_FOUND) {
+-        // No printers.
+-            qDebug ("Get Enabled failed in %s\n",  QTC(printerName));
+-            ippDelete (answer);
+-            return false ;
+-        }
+-        else
+-            qDebug("error: %d, %s\n", answer ? ippGetStatusCode (answer) : cupsLastError (), answer ? NULL : cupsLastErrorString ());
+-        if (answer)
+-            ippDelete (answer);
+-        return false;
+-    }
+-    for (attr = ippFirstAttribute(answer); attr; attr = ippNextAttribute(answer)) {
+-        if (attr && ippGetGroupTag (attr) != IPP_TAG_PRINTER)
+-            continue;
+-        if (!attr)
+-            break;
+-        if (!strcmp(ippGetName(attr), "printer-make-and-model") && ippGetValueTag(attr) == IPP_TAG_TEXT) {
+-            qDebug() << ippGetString (attr, 0, nullptr);
+-            return !strcmp(ippGetString (attr, 0, nullptr), "Remote Printer");
+-        }
+-    }
+-    return false;
+-}
+-
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/ukui_printer.h b/daemons/sessionservice/printerbackend/printer_manager/ukui_printer.h
+deleted file mode 100644
+index 6ac232d..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/ukui_printer.h
++++ /dev/null
+@@ -1,257 +0,0 @@
+-#ifndef UKUI_PRINTER_H
+-#define UKUI_PRINTER_H
+-
+-#include <QDateTime>
+-#include <QDebug>
+-#include <QList>
+-#include <QMap>
+-#include <QColor>
+-#include <QVariant>
+-#include <cups/cups.h>
+-#include <cups/ppd.h>
+-#include <vector>
+-#include <memory>
+-
+-#include "common.h"
+-
+-typedef QPair<QPair<QString,QString>,QPair<QString,QString>> conflictPair;
+-
+-struct ConstrainOption {
+-    QString name;
+-    QStringList options;
+-};
+-// Set properties enable,shared
+-enum class UkuiPrinterProperties : int {
+-    UKUI_PRINTER_PROPERTY_START = 0, // NONE
+-    UKUI_PRINTER_NAME, // string
+-    UKUI_PRINTER_DESCRIPTION, // string
+-    UKUI_PRINTER_LOCATION, // string
+-    UKUI_PRINTER_DRV_PPD, // string
+-    UKUI_PRINTER_ENABLE, //"true"/"false"
+-    UKUI_PRINTER_SHARED, //"true"/"false"
+-};
+-
+-enum class UkuiQueueStatus : int {
+-    UKUI_PRINTER_QUEUE_ACTIVE = 0,
+-    UKUI_PRINTER_QUEUE_FINISHED,
+-    UKUI_PRINTER_QUEUE_UNFINISHED,
+-    UKUI_PRINTER_QUEUE_ALL
+-};
+-
+-struct PrintJob {
+-    int id;
+-    QString printerName;
+-    QString user;
+-    QString title;
+-    UkuiQueueStatus status;
+-    int jobState;
+-    time_t createTime;
+-    time_t completeTime;
+-    time_t processingTime;
+-    int size;
+-    bool preserved;
+-};
+-
+-Q_DECLARE_METATYPE(PrintJob)
+-
+-struct PrinterAdvancedAttribute {
+-    QString key;
+-    ipp_tag_t tag;
+-    QVariant value;
+-    PrinterAdvancedAttribute() { tag = IPP_TAG_CUPS_INVALID; }
+-    PrinterAdvancedAttribute(QString K,ipp_tag_t T,QVariant V) {
+-		key = K, tag = T, value = V;
+-	}
+-};
+-
+-struct PrinterOptionalAttribute {
+-    // QString key;
+-    QVariant value;
+-    QVariant supportedValue;
+-};
+-
+-struct PrinterModifableAttr {
+-    int state; // Can not modify
+-    bool isShared;
+-    bool isAcceptJobs;
+-    QString printerInfo;
+-    QString location;
+-    QString colorMode;
+-    int copies;
+-    QString sides;
+-    QString mediaSize;
+-};
+-
+-struct AttrName{
+-    QString name;
+-    QString displayName;
+-    bool operator==(const struct AttrName& src) const {
+-        return (this->name.compare(src.name)==0)&&(this->displayName.compare(src.displayName)==0);
+-    }
+-};
+-
+-struct SelectableProperty {
+-    struct AttrName keyword;
+-    struct AttrName current;
+-    QList<struct AttrName> supported;
+-    bool operator==(const SelectableProperty& src) const
+-    {
+-        return this->keyword == src.keyword && this->current == src.current && this->supported == src.supported;
+-    }
+-};
+-
+-struct InkProperty {
+-    InkProperty(){
+-        color = QColor();
+-        name = QString();
+-        type = QString();
+-        level = 0;
+-    };
+-    ~InkProperty(){};
+-    QColor color;
+-    QString name;
+-    QString type;
+-    int level;
+-    friend QDebug operator<<(QDebug debug, const InkProperty&);
+-};
+-
+-class UkuiUsbPrinter {
+-public:
+-    UkuiUsbPrinter()
+-    { /*qDebug() << "Printer Create...";*/
+-    }
+-    ~UkuiUsbPrinter()
+-    { /*qDebug() << "Printer Destroy..."; */
+-    }
+-
+-public:
+-    // Dest
+-    QString name = QString(""); // Destination name; RO
+-    QString printer_uri = QString(""); // Printer Uri : like ipp://localhost:631/printers/xxx RO
+-    QString device_uri = QString(""); // Device Uri : like usb://xxxx/xxxx?serial=xxxx RO
+-    QString make_and_model = QString(""); // Printer Model RO
+-    QString connect_status = QString(""); // RO
+-    QString location = QString(""); // RW
+-    QString info = QString("");
+-    bool is_default = false; // RW
+-    // PPD
+-    // Need Save
+-    QString ppdName = QString("");
+-    QString vendor = QString(""); // RO
+-    QString product = QString(""); // RO
+-    //Need Call checkConflict when attribute changes.
+-    QList<SelectableProperty> flexibleOptions;
+-    QList<InkProperty> inkOptions;
+-
+-    bool operator==(const UkuiUsbPrinter& src) const
+-    {
+-        return this->name == src.name && this->printer_uri == src.printer_uri && this->device_uri == src.device_uri
+-            && this->make_and_model == src.make_and_model && this->connect_status == src.connect_status && this->location == src.location
+-            && this->is_default == src.is_default && this->ppdName == src.ppdName && this->vendor == src.vendor && this->product == src.product
+-            && this->flexibleOptions == src.flexibleOptions;
+-    }
+-};
+-
+-class  UkuiPrinterManager : public QObject {
+-    Q_OBJECT
+-    // Meyers singleton
+-public:
+-    static UkuiPrinterManager& getInstance()
+-    {
+-        static UkuiPrinterManager instance;
+-        return instance;
+-    }
+-    void setHostAndPort(QString host, int port);
+-    // Set ppd and some properties to a specified printer
+-    bool addPrinter(const QString& usbUri, const QString& printerName, const QString& ppdName, const QString& location, QString& errorString);
+-    // Remove specified printer
+-    bool removePrinter(const QString& printerName);
+-    bool printTestPage(const QString& printerName);
+-    // Get all printers with cups options
+-    void enumPrinters(QList<UkuiUsbPrinter>& printers);
+-    void enumUsbPrinters(QList<UkuiUsbPrinter>& printers);
+-    bool printerIsInstalled(const QString &uri, bool needEnumPrinters = true, const QList<UkuiUsbPrinter>& printerNameList = QList<UkuiUsbPrinter>());
+-    CommonStatus printerNameCheck(const QString &printerName = QString(), bool needEnumPrinters = true, const QList<UkuiUsbPrinter>& printerNameList = QList<UkuiUsbPrinter>(), const QString &oldPrinterName = QString());
+-    //设置成功返回true,设置失败返回false
+-    bool setDefaultPrinter(QString printerName);
+-    QString getDefaultPrinter();
+-    bool setPrinterConfig(const UkuiUsbPrinter& printer);
+-    // TODO: Duplicate printer, add a new printer with old ppd ,location,description
+-    bool duplicatePrinter(const QString newName,const QString oldName);
+-    //开始修改属性
+-    bool startModifyAttr(const QString &printerName, UkuiUsbPrinter &printer);
+-    //修改属性,返回冲突属性数量,conflicts是冲突的属性键值对
+-    int modifyPrinterAttr(const QString &key,const QString &value,QMap<QString,QString> &conflicts);
+-    //获取和包括<key>属性的PPD冲突结果
+-    bool getConflictResults(const QString &key,QList<conflictPair> &conflicts);
+-    //修改位置,不涉及属性冲突检测
+-    void modifyLocation(const QString &location);
+-    void modifyInfo(const QString& info);
+-    //停止修改属性,保存或取消, 保存PPD, 保存Dest信息
+-    void endModifyAttr(const UkuiUsbPrinter &printer, bool needSave, bool needSaveUri);
+-
+-    void getPrintQueue(QString printerName, UkuiQueueStatus status, QList<PrintJob>& retJobs);
+-    bool restartJob(const int &jobId);
+-    bool cancelJob(const QString &printerName, const int &jobId);
+-    bool deleteJob(const QString &printerName, const int &jobId);
+-    bool moveJob(const QString &from, const QString &to, const int &jobId);
+-    bool moveAllJob(const QString &from, const QString &to);
+-    bool getJobAttributes(int jobId = 0, PrintJob *job = nullptr, QMap<QString, QVariant> *jobProperties = nullptr);
+-    bool holdJob(const int &jobId);
+-    bool releaseJob(const int &jobId);
+-    bool setJobHoldUntil(const int &jobId, const QString &jobHoldUntil);
+-    QString generatePrinterName();
+-/// Not Used
+-    void getAdvancedPrinterProperties(UkuiUsbPrinter printer, QMap<QString, QVariant>& properties);
+-    bool modifyPrinterAttributes(UkuiUsbPrinter printer, QMap<QString, QVariant>& newProperties);
+-    void changeProperties(QStringList& properties);
+-    // TODO:
+-    //判断打印机名称是否合法
+-    bool isPrinterNameValid(QString) { return false; }
+-    // void getPaperSize(const QString printer_uri, QString& curSize, QStringList& allSize);
+-    void getPaperSize(const QString printer_uri, SelectableProperty& media, SelectableProperty& sides, SelectableProperty& color);
+-    void setPaperSize(const QString printer_uri, const QString newSize);
+-    bool getCupsDebugLogging();
+-    void setCupsDebugLogging(bool flag);
+-    bool getPrinterShared(const QString &printerName);
+-    void setPrinterShared(const QString &printerName, bool flag);
+-    bool getPrinterEnabled(const QString &printerName);
+-    void setPrinterEnabled(const QString &printerName, bool flag);
+-    bool isRemotePrinter(const QString &printerName);
+-private:
+-    UkuiPrinterManager(/* args */);
+-    UkuiPrinterManager(UkuiPrinterManager const&);
+-    UkuiPrinterManager& operator=(UkuiPrinterManager const&);
+-    ~UkuiPrinterManager();
+-
+-    void setLocation(const QString printer_uri, const QString location);
+-    void setInfo(const QString printer_uri, const QString info);
+-    void setUri(const QString printer_uri, const QString device_uri);
+-    void setPrinterPPD(const UkuiUsbPrinter& printer);
+-    void getPpdInfo(UkuiUsbPrinter& printer);//返回测试
+-    void getInkInfo(UkuiUsbPrinter& printer);
+-    bool getOption(ppd_file_t *ppd,ppd_option_t* option, SelectableProperty& property);
+-
+-    // TODO:Rename Printer, first add a new printer with old ppd,set
+-    bool renamePrinter(QString oldname, QString newname);
+-    // Not Used
+-    // QString: attr name, QVariant attr value
+-    QVariant getProperty(ipp_attribute_t* attr, int i = 0);
+-    void generateDefaultOptions();
+-    // void getAdvancedPrinterProperties(
+-    //     std::string printer_uri, QMap<QString, QVariant>& properties);
+-    void getAllProperties(QString printer_uri, QList<PrinterAdvancedAttribute>& printerAttributes);
+-    void convertProperties(QList<PrinterAdvancedAttribute>, QMap<QString, QVariant>& properties);
+-    void addIppAttribute(PrinterAdvancedAttribute attribute);
+-    void getCollection(ipp_attribute_t* attr);
+-private:
+-    QString m_host = QString("127.0.0.1");
+-    QString m_user = QString("");
+-    QString m_locale = QString("");//语言,默认zh_CN
+-    http_t* m_http = nullptr;
+-    int m_port = 631;
+-    QString m_curFile;//PPD 临时文件
+-    ppd_file_t* m_ppd = nullptr; //PPD 内容
+-    bool m_canSave = true;//冲突检测标志位
+-};
+-#endif // UKUI_PRINTER_H
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/upload_helper.cpp b/daemons/sessionservice/printerbackend/printer_manager/upload_helper.cpp
+deleted file mode 100644
+index 2541160..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/upload_helper.cpp
++++ /dev/null
+@@ -1,30 +0,0 @@
+-#include "upload_helper.h"
+-#include "common.h"
+-#include <QThread>
+-#include <QTimer>
+-
+-UploadHelper::UploadHelper(DeviceInformation info, int ppdRank, QObject *parent)
+-    : m_info(info), m_ppdRank(ppdRank), QObject(parent)
+-{
+-    m_thread = new QThread();
+-    moveToThread(m_thread);
+-
+-    connect(m_thread, &QThread::started, this, &UploadHelper::dowork);
+-
+-    connect(this, &UploadHelper::finished, m_thread, &QThread::quit);
+-    connect(this, &UploadHelper::finished, this, &UploadHelper::deleteLater);
+-    connect(m_thread, &QThread::finished, m_thread, &QThread::deleteLater);
+-}
+-
+-UploadHelper::~UploadHelper()
+-{
+-
+-}
+-
+-void UploadHelper::dowork()
+-{
+-    postDeviceInfo(m_info, m_ppdRank);
+-
+-
+-    finished();
+-}
+diff --git a/daemons/sessionservice/printerbackend/printer_manager/upload_helper.h b/daemons/sessionservice/printerbackend/printer_manager/upload_helper.h
+deleted file mode 100644
+index 3a20cc9..0000000
+--- a/daemons/sessionservice/printerbackend/printer_manager/upload_helper.h
++++ /dev/null
+@@ -1,28 +0,0 @@
+-#ifndef UPLOAD_HELPER_H
+-#define UPLOAD_HELPER_H
+-
+-#include <QTimer>
+-#include "device_information.h"
+-#include <QThread>
+-
+-class UploadHelper : public QObject
+-{
+-    Q_OBJECT
+-public:
+-    UploadHelper(DeviceInformation info, int ppdRank, QObject *parent = nullptr);
+-    ~UploadHelper();
+-Q_SIGNALS:
+-    void finished();
+-public:
+-    void startWorker(){
+-        if(m_thread!=nullptr)
+-            m_thread->start();
+-    }
+-private:
+-    void dowork();
+-    QThread *m_thread{nullptr};
+-    DeviceInformation m_info;
+-    int m_ppdRank;
+-};
+-
+-#endif//UPLOAD_HELPER_H
+diff --git a/daemons/sessionservice/printerbackend/python/sync.py b/daemons/sessionservice/printerbackend/python/sync.py
+deleted file mode 100755
+index 9e2f310..0000000
+--- a/daemons/sessionservice/printerbackend/python/sync.py
++++ /dev/null
+@@ -1,87 +0,0 @@
+-#!/bin/python3
+-
+-import os
+-import subprocess
+-import sys
+-
+-workspaceDir = os.path.abspath(os.path.dirname(__file__) + '/../')
+-sourceDir = os.path.abspath(workspaceDir + '/../../../../work/kylin-printer/')
+-print(workspaceDir, sourceDir)
+-
+-def copy_file(source, destination):
+-    try:
+-        result = subprocess.run(['cp', source, destination], check=True, text=True, capture_output=True)
+-        print(f"文件已复制: {source} -> {destination}")
+-    except subprocess.CalledProcessError as e:
+-        print(f"错误: {e.stderr}")
+-
+-def move_file(source, destination):
+-    try:
+-        result = subprocess.run(['mv', source, destination], check=True, text=True, capture_output=True)
+-        print(f"文件已移动: {source} -> {destination}")
+-    except subprocess.CalledProcessError as e:
+-        print(f"错误: {e.stderr}")
+-
+-list=[
+-    "cmake/printer.cmake",
+-    "cmake/common.cmake",
+-    "ui/new_pop_window",
+-    "ui/new_pop_window/pop_window_manager.h",
+-    "ui/new_pop_window/pop_window_manager.cpp",
+-    "ui/gsettings_monitor.cpp",
+-    "ui/gsettings_monitor.h",
+-    "device_manager/udev_devices.cpp",
+-    "device_manager/device_information.cpp",
+-    "device_manager/device_information.h",
+-    "device_manager/device_monitor.h",
+-    "device_manager/device_monitor.cpp",
+-    "device_manager/udev_devices.h",
+-    "backend/launch_printer.cpp",
+-    "backend/device_map.cpp",
+-    "backend/device_map.h",
+-    "backend/launch_printer.h",
+-    "util/information_collector.h",
+-    "util/system_notification.cpp",
+-    "util/information_collector.cpp",
+-    "util/system_notification.h",
+-    "printer_manager/find_and_match_ppds.h",
+-    "printer_manager/lpinfo_browser.cpp",
+-    "printer_manager/cupsconnection4ppds.cpp",
+-    "printer_manager/cupsconnection4ppds.h",
+-    "printer_manager/lpinfo_browser.h",
+-    "printer_manager/ukui_apt.h",
+-    "printer_manager/package_helper.h",
+-    "printer_manager/ukui_printer.cpp",
+-    "printer_manager/findppdsthread.h",
+-    "printer_manager/findppdsthread.cpp",
+-    "printer_manager/ukui_printer.h",
+-    "printer_manager/find_and_match_ppds.cpp",
+-    "printer_manager/matchppdsthread.cpp",
+-    "printer_manager/matchppdsthread.h",
+-    "printer_manager/ukui_apt.cpp",
+-    "printer_manager/package_helper.cpp",
+-    "common/uri.h",
+-    "common/base_info.cpp",
+-    "common/common.h",
+-    "common/custom_qstring_converter.cpp",
+-    "common/global_variable.h",
+-    "common/common.cpp",
+-    "common/uri.cpp",
+-    "common/singleton.h",
+-    "common/custom_qstring_converter.h",
+-    "common/base_info.h",
+-    "translations/kylin-printer_bo_CN.ts",
+-    "translations/kylin-printer_en.ts",
+-    "translations/kylin-printer_kk.ts",
+-    "translations/kylin-printer_ky.ts",
+-    "translations/kylin-printer_mn.ts",
+-    "translations/kylin-printer_ru.ts",
+-    "translations/kylin-printer_ug.ts",
+-    "translations/kylin-printer_zh_CN.ts",
+-    "translations/kylin-printer_zh_HK.ts",
+-]
+-
+-for path in list:
+-    sourcePath = sourceDir + "/" + path
+-    destPath   = workspaceDir + "/" + path
+-    copy_file(sourcePath, destPath)
+\ No newline at end of file
+diff --git a/daemons/sessionservice/printerbackend/translations/generate_translations_qm.sh b/daemons/sessionservice/printerbackend/translations/generate_translations_qm.sh
+deleted file mode 100644
+index 8ad28b7..0000000
+--- a/daemons/sessionservice/printerbackend/translations/generate_translations_qm.sh
++++ /dev/null
+@@ -1,11 +0,0 @@
+-#!/bin/bash
+-
+-project_path=$(cd `dirname $0`; pwd)
+-cd $project_path/..
+-
+-ts_file_list=(`ls translations/*.ts`)
+-
+-for ts in "${ts_file_list[@]}"
+-do
+-    lrelease "${ts}"
+-done
+\ No newline at end of file
+diff --git a/daemons/sessionservice/printerbackend/translations/kylin-printer_bo_CN.ts b/daemons/sessionservice/printerbackend/translations/kylin-printer_bo_CN.ts
+deleted file mode 100644
+index 37a8864..0000000
+--- a/daemons/sessionservice/printerbackend/translations/kylin-printer_bo_CN.ts
++++ /dev/null
+@@ -1,1741 +0,0 @@
+-<?xml version="1.0" encoding="utf-8"?>
+-<!DOCTYPE TS>
+-<TS version="2.1" language="bo_CN">
+-<context>
+-    <name></name>
+-    <message>
+-        <location filename="../kylin-printer.desktop.in.h" line="1"/>
+-        <source>Printer</source>
+-        <translation>པར་འདེབས་འཕྲུལ་འཁོར།</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/data/kylin-printer-applet.desktop.in.h" line="1"/>
+-        <source>Printer-backend</source>
+-        <translation>པར་འདེབས་འཕྲུལ་འཁོར་གྱི་རྒྱབ་རྟེན་</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AddPrinterWindow</name>
+-    <message>
+-        <location filename="../ui/add_printer_window.ui" line="26"/>
+-        <source>AddPrinterWindow</source>
+-        <translation>ཁ་སྣོན་བྱས་པའི་ཁ་སྣོན་བྱས་པའི་ཁ་སྣོན་བྱས་པའི་</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="136"/>
+-        <source>Add Printer</source>
+-        <translation>དཔར་ཆས་ཁ་སྣོན་བྱེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="148"/>
+-        <source>Auto</source>
+-        <translation>རང་འགུལ་གྱིས་རླངས་</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="149"/>
+-        <location filename="../ui/add_printer_window.cpp" line="191"/>
+-        <source>Manual</source>
+-        <translation>ལག་དེབ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="161"/>
+-        <source>Device List</source>
+-        <translation>སྒྲིག་ཆས་ཀྱི་རེའུ་མིག</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="192"/>
+-        <source>Protocol</source>
+-        <translation>གྲོས་ཆོད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="193"/>
+-        <source>Address</source>
+-        <translation>སྡོད་གནས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="199"/>
+-        <source>Search</source>
+-        <translation>འཚོལ་ཞིབ།</translation>
+-    </message>
+-    <message>
+-        <source>socket</source>
+-        <translation type="vanished">བསྒར་ཁུང་།</translation>
+-    </message>
+-    <message>
+-        <source>ipp</source>
+-        <translation type="vanished">ipp</translation>
+-    </message>
+-    <message>
+-        <source>http</source>
+-        <translation type="vanished">http</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="213"/>
+-        <source>name</source>
+-        <translation>མིང་།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="214"/>
+-        <source>location</source>
+-        <translation>གནས་ཡུལ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="215"/>
+-        <source>driver</source>
+-        <translation>ཁ་ལོ་བ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="321"/>
+-        <source>Success</source>
+-        <translation>ལེགས་འགྲུབ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="322"/>
+-        <source>Fail</source>
+-        <translation>ཕམ་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="220"/>
+-        <source>forward</source>
+-        <translation>མདུན་དུ་སྐྱོད་པ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Error</source>
+-        <translation>ནོར་འཁྲུལ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <source>Add printer failed: no PPD selected!</source>
+-        <translation>ཁ་སྣོན་བྱས་པའི་དཔར་ཆས་ལ་ཕམ་ཁ་བྱུང་བ་སྟེ། PPDབདམས་མེད་</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>དཔར་ཆས་ཁ་སྣོན་བྱས་ནས་ཕམ་སོང་། ཅུང་ཙམ་འགོར་རྗེས་ཡང་བསྐྱར་ཐེངས་གཅིག་ལ་བསྐྱར་དུ་ཞིབ་བཤེར་བྱེད</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="304"/>
+-        <location filename="../ui/add_printer_window.cpp" line="314"/>
+-        <location filename="../ui/add_printer_window.cpp" line="333"/>
+-        <location filename="../ui/add_printer_window.cpp" line="433"/>
+-        <location filename="../ui/add_printer_window.cpp" line="443"/>
+-        <location filename="../ui/add_printer_window.cpp" line="561"/>
+-        <location filename="../ui/add_printer_window.cpp" line="603"/>
+-        <location filename="../ui/add_printer_window.cpp" line="648"/>
+-        <location filename="../ui/add_printer_window.cpp" line="687"/>
+-        <source>Confirm</source>
+-        <translation>གཏན་འཁེལ་བྱ་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Hint</source>
+-        <translation>གསལ་འདེབས་བྱེད་པ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <source>Add printer successfully,printer a test page?</source>
+-        <translation>དཔར་ཆས་ལེགས་འགྲུབ་བྱུང་ན་དཔར་ཆས་ལ་ཚོད་ལྟའི་ཤོག་ལྷེ་ཞིག་ཡོད་དམ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="313"/>
+-        <source>Print test page</source>
+-        <translation>པར་སྐྲུན་ཚོད་ལྟའི་ཤོག་ལྷེ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>ཚད་ལེན་ཚོད་ལྟའི་ཤོག་ལྷེ་དེ་ལེགས་འགྲུབ་བྱུང་ཡོད་དམ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>ཚོད་ལྟའི་པར་སྐྲུན་ལ་ཕམ་ཉེས་བྱུང་། ཁྱོད་ཀྱིས་དཔར་ཆས་ཀྱི་ཁ་ལོ་བ་ཞིག་བརྗེ་དགོས་སམ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <source>Automatic driver configuration failed, please select the driver manually.</source>
+-        <translation>རང་འགུལ་གྱིས་བཀོད་སྒྲིག་ལ་བརྟེན་ནས་ཕམ་ཁ་བྱུང་བར་སྐུལ་འདེད་བྱེད་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="578"/>
+-        <source>Searching for driver...</source>
+-        <translation>འཚོལ་ཞིབ་ལ་བརྟེན་ནས་སྐུལ་འདེད་བྱེད་བཞིན་ཡོད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <source>Failed to search for driver. Do you want to use local driver?</source>
+-        <translation>འཚོལ་ཞིབ་ལ་བརྟེན་ནས་ཕམ་ཁ་བྱུང་ན་ས་གནས་དེ་གའི་སྐུལ་འདེད་བྱེད་དགོས་སམ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="620"/>
+-        <source>It is detected that the driver comes from the Internet. Do you want to continue the installation?</source>
+-        <translation>ཞིབ་དཔྱད་ཚད་ལེན་བྱེད་པའི་གོ་རིམ་ནི་དྲ་སྦྲེལ་ལས་བྱུང་བ་ཡིན་པས། མུ་མཐུད་དུ་སྒྲིག་སྦྱོར་བྱེད་དགོས་སམ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="625"/>
+-        <source>Install</source>
+-        <translation>སྒྲིག་སྦྱོར་བྱེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="639"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation>སྒྲིག་ཆས་ཀྱི་བཟོ་དབྱིབས་འདིས་སྐུལ་འདེད་འོས་འཚམ་བྱེད་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="642"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation>ཚོང་ལས་གྲོས་མཐུན་གྱི་ཚོད་འཛིན་ཐེབས་པའི་དབང་གིས་སྒྲིག་ཆས་བཟོ་མཁན་དང་འབྲེལ་བ་བྱས་ནས་སྒྲིག་ཆས་ཀྱི་བཟོ་དབྱིབས་དེ་ཐོབ་པར་བྱེད་པའི་གོ་རིམ་ཞིག་ཡིན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="659"/>
+-        <source>Installing printer driver...</source>
+-        <translation>སྐུལ་འདེད་བྱེད་བཞིན་པའི་སྒང་ཡིན་པས་ཅུང་ཙམ་འགོར་རྗེས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <source>Driver installation failed. Do you want to use local driver?</source>
+-        <translation>སྒྲིག་སྦྱོར་ལ་ཕམ་ཉེས་བྱུང་ན་ས་གནས་དེ་གའི་སྐུལ་འདེད་བཀོལ་སྤྱོད་བྱེད་ཐུབ་བམ།</translation>
+-    </message>
+-    <message>
+-        <source>Change Driver</source>
+-        <translation type="vanished">ཁ་ལོ་བ་བརྗེ་བ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="604"/>
+-        <location filename="../ui/add_printer_window.cpp" line="626"/>
+-        <location filename="../ui/add_printer_window.cpp" line="688"/>
+-        <source>Cancel</source>
+-        <translation>ཕྱིར་འཐེན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="362"/>
+-        <source>Searching printers...</source>
+-        <translation>པར་འདེབས་འཕྲུལ་འཁོར་འཚོལ་ཞིབ་བྱེད་པ...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <source>Can not find this Printer!</source>
+-        <translation>དཔར་ཆས་འདི་རྙེད་མི་ཐུབ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="432"/>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <location filename="../ui/add_printer_window.cpp" line="622"/>
+-        <location filename="../ui/add_printer_window.cpp" line="645"/>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <location filename="../ui/add_printer_window.cpp" line="747"/>
+-        <source>Warning</source>
+-        <translation>ཐ་ཚིག་སྒྲོག་པ།</translation>
+-    </message>
+-    <message>
+-        <source>Searching printer driver...</source>
+-        <translation type="vanished">དཔར་འདེབས་འཕྲུལ་འཁོར་གྱི་ཁ་ལོ་བ་འཚོལ་ཞིབ</translation>
+-    </message>
+-    <message>
+-        <source>Install driver package automatically failed,continue?</source>
+-        <translation type="vanished">ཁ་ལོ་བའི་ཐུམ་སྒྲིལ་རང་འགུལ་གྱིས་ཕམ་ཉེས་བྱུང་ནས་མུ་མཐུད་དུ་རྒྱུན་འཁྱོངས</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="749"/>
+-        <source>Close</source>
+-        <translation>སྒོ་རྒྱག་པ།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AutoSearchResultModel</name>
+-    <message>
+-        <location filename="../ui/auto_search_result_model.cpp" line="49"/>
+-        <location filename="../ui/auto_search_result_model.cpp" line="51"/>
+-        <source>network</source>
+-        <translation>དྲ་རྒྱ།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseInfo</name>
+-    <message>
+-        <location filename="../common/base_info.cpp" line="64"/>
+-        <source>Printer</source>
+-        <translation>དཔར་འདེབས་འཕྲུལ་འཁོར།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseNotifyDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="35"/>
+-        <source>Dialog</source>
+-        <translation>གླེང་མོལ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="124"/>
+-        <source>TextLabel</source>
+-        <translation>ཡི་གེ་ལ་པེར་གྱིས་བཤད་རྒྱུར</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ChoosePpdComboBox</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="15"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="22"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="137"/>
+-        <source>Choose PPD</source>
+-        <translation>PPDབདམས་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="16"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="25"/>
+-        <source>Choose from the PPD library</source>
+-        <translation>PPDདཔེ་མཛོད་ཁང་ནས་གདམ་གསེས་བྱེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="17"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="29"/>
+-        <source>Add local PPD</source>
+-        <translation>ས་གནས་དེ་གའི་PPDབསྣན་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="48"/>
+-        <source>Please select a deb package.</source>
+-        <translation>ཁྱེད་ཀྱིས་བདེ་མོ་མཛོད་ཀྱི་ཁུག་མ་ཞིག་འདེམས་རོགས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="50"/>
+-        <source>Deb File(*.deb)</source>
+-        <translation>Deb File(*.deb)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="51"/>
+-        <source>Choose</source>
+-        <translation>གདམ་གསེས་བྱེད་པ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="52"/>
+-        <source>Cancel</source>
+-        <translation>ཕྱིར་འཐེན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="69"/>
+-        <source>Searching driver...</source>
+-        <translation>འཚོལ་ཞིབ་ཁ་ལོ་བ་ ...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Warning</source>
+-        <translation>ཐ་ཚིག་སྒྲོག་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Install package failed,please retry.</source>
+-        <translation>སྒྲིག་སྦྱོར་བྱས་ནས་ཕམ་ཉེས་བྱུང་ན་བསྐྱར་དུ་ཞིབ་བཤེར་བྱེད་རོགས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="92"/>
+-        <source>Yes</source>
+-        <translation>རེད།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ConfigIPAddressDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="32"/>
+-        <source>Dialog</source>
+-        <translation>གླེང་མོལ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="75"/>
+-        <source>Common configuration</source>
+-        <translation>ཐུན་མོང་དུ་སྤྱོད་པའི་བཀོད་སྒྲིག</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="150"/>
+-        <source>初始地址:api.kylinos.cn</source>
+-        <translation>ཁ་ན་api.kylinos.cn</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="180"/>
+-        <source>Advanced Features</source>
+-        <translation>ནུས་པ་མཐོན་པོ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="30"/>
+-        <source>Configure</source>
+-        <translation>བཀོད་སྒྲིག་བྱེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="31"/>
+-        <source>Service address:</source>
+-        <translation>ཞབས་ཞུའི་ས་གནས་ནི།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="32"/>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="34"/>
+-        <source>Enable</source>
+-        <translation>སྤྱོད་འགོ་འཛུགས་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="33"/>
+-        <source>This printer can be used to convert print files to PDF format</source>
+-        <translation>པར་འདེབས་འཕྲུལ་ཆས་འདི་བཀོལ་ནས་ཡིག་ཆ་དེ་PDFཡི་རྣམ་པར་བསྒྱུར་ཆོག</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="35"/>
+-        <source>This printer can be used to convert print files to BRF format</source>
+-        <translation>པར་འདེབས་འཕྲུལ་ཆས་འདི་བཀོལ་ནས་ཡིག་ཆ་དེ་BRFཡི་རྣམ་པར་བསྒྱུར་ཆོག</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="36"/>
+-        <source>Displays all serial printers</source>
+-        <translation>ལྐོག་དཔར་འཕྲུལ་ཆས་ཡོད་ཚད་མངོན་པར་བྱས་ཡོད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="37"/>
+-        <source>Cancel</source>
+-        <translation>ཕྱིར་འཐེན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="38"/>
+-        <source>Ok</source>
+-        <translation>འགྲིགས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Warning</source>
+-        <translation>ཐ་ཚིག་སྒྲོག་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Config init failed</source>
+-        <translation>ཁུང་ཙིའི་ནང་དུ་ཕམ་ཉེས་བྱུང་བ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="53"/>
+-        <source>Confirm</source>
+-        <translation>གཏན་འཁེལ་བྱ་དགོས།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CupsDebugLoggingCheckbox</name>
+-    <message>
+-        <location filename="../ui/cups_debug_logging_checkbox.cpp" line="8"/>
+-        <source>Retain debug info for troubleshooting</source>
+-        <translation>གྲལ་བཤེར་བྱེད་པར་ཚོད་ལྟ་བྱེད་པའི་ཆ་འཕྲིན་སོར་འཇོག་བྱ་དགོས།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomAboutDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_about_dialog.cpp" line="12"/>
+-        <source>Version: </source>
+-        <translation>པར་གཞི།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomDoublelineCheckBox</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_doubleline_checkbox.ui" line="14"/>
+-        <source>Form</source>
+-        <translation>ཁ་བྱང་།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DebInstallWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>རྣམ་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="75"/>
+-        <source>Driver</source>
+-        <translation>ཁ་ལོ་བ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="143"/>
+-        <source>Cancel</source>
+-        <translation>ཕྱིར་འཐེན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="23"/>
+-        <source>Modify Printer Driver</source>
+-        <translation>པར་འདེབས་འཕྲུལ་འཁོར་གྱི་ཁ་ལོ་བར་བཟོ་བཅོས་རྒྱག</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Error</source>
+-        <translation>ནོར་འཁྲུལ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Modify PPD failed: no PPD selected!</source>
+-        <translation>PPDལ་བཟོ་བཅོས་བརྒྱབ་ནས་ཕམ་ཁ་བྱུང་བ་སྟེ། PPDབདམས་ཐོན་མ་བྱུང་།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="162"/>
+-        <source>Confirm</source>
+-        <translation>གཏན་འཁེལ་བྱ་དགོས།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceListButton</name>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="32"/>
+-        <source>Idle</source>
+-        <translation>སྒྱིད་ལུག་བྱེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="35"/>
+-        <source>Printing</source>
+-        <translation>པར་སྐྲུན་ཡིག་རིགས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="38"/>
+-        <source>Stopped</source>
+-        <translation>བཀག་འགོག་བྱས་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="41"/>
+-        <source>Unknow</source>
+-        <translation>ཤེས་མེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="62"/>
+-        <location filename="../ui/device_list_button.cpp" line="264"/>
+-        <location filename="../ui/device_list_button.cpp" line="296"/>
+-        <source>Default</source>
+-        <translation>ཁ་ཆད་དང་འགལ་</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="133"/>
+-        <location filename="../ui/device_list_button.cpp" line="163"/>
+-        <source>Set Default</source>
+-        <translation>ཁ་ཆད་དང་འགལ་བའི་གནས</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="135"/>
+-        <location filename="../ui/device_list_button.cpp" line="166"/>
+-        <source>Enabled</source>
+-        <translation>ནུས་པ་ཐོན་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="139"/>
+-        <location filename="../ui/device_list_button.cpp" line="169"/>
+-        <source>Shared</source>
+-        <translation>ཐུན་མོང་དུ་ལོངས་</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceMap</name>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="301"/>
+-        <source>Printer</source>
+-        <translation>དཔར་འདེབས་འཕྲུལ་འཁོར།</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="303"/>
+-        <source>Printers</source>
+-        <translation>པར་འདེབས་འཕྲུལ་འཁོར།</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="305"/>
+-        <source>plug-in:</source>
+-        <translation>plug-in:</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="307"/>
+-        <source>unplugged:</source>
+-        <translation>ཁ་གསལ་མེད་པ་སྟེ།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EmptyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/right_widget.cpp" line="96"/>
+-        <source>Please click &quot;+&quot; button to add a printer.</source>
+-        <translation>&quot;+&quot;མཐེབ་གཅུས་བརྒྱབ་ནས་དཔར་ཆས་ཤིག་ཁ་སྣོན་བྱེད་རོགས།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EventNotifyMonitor</name>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="430"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="482"/>
+-        <source>Printer </source>
+-        <translation>དཔར་འདེབས་འཕྲུལ་འཁོར། </translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="454"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="469"/>
+-        <source>Job:</source>
+-        <translation>ལས་ཀ་འདི་ལྟ་སྟེ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="456"/>
+-        <source>created!</source>
+-        <translation>གསར་སྐྲུན་བྱས་པ་རེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="471"/>
+-        <source>completed!</source>
+-        <translation>ལེགས་གྲུབ་བྱུང་བ་རེད།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>InkInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/ink_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation>ཁ་བྱང་།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerModel</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="50"/>
+-        <source>Test Page</source>
+-        <translation>ཚོད་ལྟའི་ཤོག་ལྷེ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="53"/>
+-        <source>untitled</source>
+-        <translation>ཡིག་རྨོངས་སེལ་བ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="64"/>
+-        <source>unknown</source>
+-        <translation>ཤེས་མེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="70"/>
+-        <source>Printing page %1</source>
+-        <translation>ཤོག་ངོས་1པར་རྒྱག་བཞིན་ཡོད།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="261"/>
+-        <source>Printer</source>
+-        <translation>དཔར་འདེབས་འཕྲུལ་འཁོར།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="412"/>
+-        <source>Cancel print</source>
+-        <translation>པར་སྐྲུན་ཡིག་རིགས་མེད་པར</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="415"/>
+-        <source>Delete print</source>
+-        <translation>པར་སྐྲུན་ཡིག་རིགས་བསུབ་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="418"/>
+-        <source>Hold print</source>
+-        <translation>པར་སྐྲུན་ཡིག་རིགས་ཉར་འཛིན</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="421"/>
+-        <source>Release print</source>
+-        <translation>པར་སྐྲུན་ཡིག་རིགས་འགྲེམས་སྤེལ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="424"/>
+-        <source>Reprint</source>
+-        <translation>བསྐྱར་དུ་བྱུགས་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="427"/>
+-        <source>Job properties</source>
+-        <translation>ལས་འགན་གྱི་ངོ་བོ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Warning</source>
+-        <translation>ཐ་ཚིག་སྒྲོག་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <source>Set error: Job status has been updated!</source>
+-        <translation>ནོར་འཁྲུལ་བྱུང་བ་སྟེ། ལས་གནས་ཀྱི་གནས་ཚུལ་གསར་སྒྱུར་བྱས་ཟིན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="447"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="453"/>
+-        <source>Sure</source>
+-        <translation>གཏན་འཁེལ་བྱ་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Cannot move job to itself!</source>
+-        <translation>ལས་ཀ་རང་ཉིད་ལ་སྤོ་སྒྱུར་བྱེད་མི་ཐུབ།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobMenu</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="108"/>
+-        <source>Cancel print</source>
+-        <translation>པར་སྐྲུན་ཡིག་རིགས་མེད་པར</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="110"/>
+-        <source>Delete print</source>
+-        <translation>པར་སྐྲུན་ཡིག་རིགས་བསུབ་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="112"/>
+-        <source>Hold print</source>
+-        <translation>པར་སྐྲུན་ཡིག་རིགས་ཉར་འཛིན</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="114"/>
+-        <source>Release print</source>
+-        <translation>པར་སྐྲུན་ཡིག་རིགས་འགྲེམས་སྤེལ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="116"/>
+-        <source>Reprint</source>
+-        <translation>བསྐྱར་དུ་ཐེལ་ཙེ་རྒྱག་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="118"/>
+-        <source>Use other printer...</source>
+-        <translation>དཔར་ཆས་གཞན་དག་བཀོལ་སྤྱོད་བྱེད་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="120"/>
+-        <source>Job properties</source>
+-        <translation>ལས་འགན་གྱི་ངོ་བོ།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobPropertiesWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="15"/>
+-        <source>Job properties</source>
+-        <translation>ལས་འགན་གྱི་ངོ་བོ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="35"/>
+-        <source>name</source>
+-        <translation>མིང་།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="36"/>
+-        <source>value</source>
+-        <translation>རིན་ཐང་།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LaunchPrinter</name>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>ཡིག་དཔར་ཚོད་ལྟའི་ཤོག་ངོས་ལ་ལེགས་འགྲུབ་བྱུང་ཡོད་དམ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>%1 print result confirmation</source>
+-        <translation>1.ཡིག་དཔར་བྱས་པའི་མཇུག་འབྲས་ལ་ངོས་འཛིན་ཁས་ལེན་བྱ་དགོས</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="94"/>
+-        <source>Yes</source>
+-        <translation>དེ་ནི་རེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="96"/>
+-        <source>No</source>
+-        <translation>དེ་ལྟར་མ་བྱས་</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LeftWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="47"/>
+-        <source>Device List</source>
+-        <translation>སྒྲིག་ཆས་ཀྱི་རེའུ་མིག</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="362"/>
+-        <source>Warning</source>
+-        <translation>ཐ་ཚིག་སྒྲོག་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="212"/>
+-        <source>Are you sure to delete &quot;%1&quot;?</source>
+-        <translation>ཁྱོད་ཀྱིས་ངེས་པར་དུ་&quot;%1&quot;བསུབ་དགོས་སམ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="216"/>
+-        <source>Delete</source>
+-        <translation>བསུབ་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="217"/>
+-        <source>Cancel</source>
+-        <translation>ཕྱིར་འཐེན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="360"/>
+-        <source>Set Default Failed!</source>
+-        <translation>སྔོན་ལ་ཕམ་ཁ་བྱུང་བ་རེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="364"/>
+-        <source>Close</source>
+-        <translation>སྒོ་རྒྱག་པ།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWinPropertyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.ui" line="26"/>
+-        <source>Form</source>
+-        <translation>རྣམ་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="45"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="47"/>
+-        <source>Printer</source>
+-        <translation>དཔར་འདེབས་འཕྲུལ་འཁོར།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="71"/>
+-        <source>Property</source>
+-        <translation>རྒྱུ་ནོར།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="78"/>
+-        <source>Job List</source>
+-        <translation>ལས་གནས་ཀྱི་མིང་ཐོ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="85"/>
+-        <source>PrintTest</source>
+-        <translation>པར་སྐྲུན་ཡིག་རིགས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="90"/>
+-        <source>Troubleshooting</source>
+-        <translation>བར་ཆད་བྱུང་རིགས་གྲལ་བཤེར་བྱེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="192"/>
+-        <source>Idle</source>
+-        <translation>སྒྱིད་ལུག་བྱེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="194"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="196"/>
+-        <source>Printing</source>
+-        <translation>པར་སྐྲུན་ཡིག་རིགས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="198"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="200"/>
+-        <source>Stopped</source>
+-        <translation>བཀག་འགོག་བྱས་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="205"/>
+-        <source>Unknown</source>
+-        <translation>ཤེས་མེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="229"/>
+-        <source>Are you sure to rename &quot;%1&quot; ?</source>
+-        <translation>ཁྱོད་ཀྱིས་ངེས་པར་དུ་མིང་བསྒྱུར་དགོས་པ་ཡིན་ན &quot;%1&quot; ?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="233"/>
+-        <source>Rename</source>
+-        <translation>བསྐྱར་དུ་མིང་བཏགས་པ་</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="234"/>
+-        <source>Cancel</source>
+-        <translation>ཕྱིར་འཐེན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="230"/>
+-        <source>Warning</source>
+-        <translation>ཐ་ཚིག་སྒྲོག་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="231"/>
+-        <source>This action will delete the job queue too!</source>
+-        <translation>བྱ་སྤྱོད་འདིས་ཀྱང་ལས་གནས་ཀྱི་གྲལ་བསྒྲིགས་ནས་བསུབ་རྒྱུ་རེད།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWindow</name>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="91"/>
+-        <source>Printer</source>
+-        <translation>དཔར་འདེབས་འཕྲུལ་འཁོར།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="225"/>
+-        <source>Delete Failed!</source>
+-        <translation>ཕམ་ཁ་བྱུང་བ་དེ་བསུབ་པ་རེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="227"/>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Warning</source>
+-        <translation>ཐ་ཚིག་སྒྲོག་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="229"/>
+-        <location filename="../ui/mainwindow.cpp" line="269"/>
+-        <source>Close</source>
+-        <translation>སྒོ་རྒྱག་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>དཔར་ཆས་ཁ་སྣོན་བྱས་ནས་ཕམ་སོང་། ཅུང་ཙམ་འགོར་རྗེས་ཡང་བསྐྱར་ཐེངས་གཅིག་ལ་བསྐྱར་དུ་ཞིབ་བཤེར་བྱེད</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="326"/>
+-        <source>Try to connect the Printer...</source>
+-        <translation>ཐབས་བརྒྱ་ཇུས་སྟོང་གིས་དཔར་ཆས་སྦྲེལ་མཐུད་བྱེད་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Error</source>
+-        <translation>ནོར་འཁྲུལ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Open Printer Failed,Please Del And Add Printer, Then Try Again!</source>
+-        <translation>ཁ་ཕྱེས་པའི་དཔར་ཆས་ལ་སྐྱོན་ཤོར་བ་དང་། ཏེ་ཨར་དང་དཔར་ཆས་བསྣན་རྗེས་ཡང་བསྐྱར་ཚོད་ལྟ་ཞིག་བྱེད་རོགས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="333"/>
+-        <source>Sure</source>
+-        <translation>གཏན་འཁེལ་བྱ་དགོས།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MenuModule</name>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="44"/>
+-        <location filename="../ui/menumodule.cpp" line="73"/>
+-        <source>Help</source>
+-        <translation>རོགས་རམ་བྱེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="42"/>
+-        <location filename="../ui/menumodule.cpp" line="70"/>
+-        <source>About</source>
+-        <translation>འབྲེལ་ཡོད་ཀྱི་སྐོར།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="38"/>
+-        <location filename="../ui/menumodule.cpp" line="76"/>
+-        <source>Configure</source>
+-        <translation>བཀོད་སྒྲིག་བྱེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="40"/>
+-        <location filename="../ui/menumodule.cpp" line="88"/>
+-        <source>Classic Printer</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="46"/>
+-        <location filename="../ui/menumodule.cpp" line="66"/>
+-        <source>Quit</source>
+-        <translation>ཕྱིར་འཐེན་བྱ་རྒྱུ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.h" line="52"/>
+-        <source>Printer</source>
+-        <translation>དཔར་འདེབས་འཕྲུལ་འཁོར།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>NewPopWindow</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>རྣམ་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="40"/>
+-        <source>Printer</source>
+-        <translation>དཔར་འདེབས་འཕྲུལ་འཁོར།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="59"/>
+-        <source>Print Test Page</source>
+-        <translation>པར་སྐྲུན་ཚོད་ལྟའི་ཤོག་ལྷེ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="60"/>
+-        <source>View Device</source>
+-        <translation>ལྟ་ཀློག་སྒྲིག་ཆས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="61"/>
+-        <source>Manual Install</source>
+-        <translation>ལག་ཤེས་སྒྲིག་སྦྱོར།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="128"/>
+-        <source>Installing......</source>
+-        <translation>སྒྲིག་སྦྱོར་བྱས་པ......</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="143"/>
+-        <source>Successful installation!</source>
+-        <translation>སྒྲིག་སྦྱོར་ལེགས་འགྲུབ་བྱུང་བ་རེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="164"/>
+-        <source>Installation failed!</source>
+-        <translation>སྒྲིག་སྦྱོར་བྱས་ཀྱང་ཕམ་སོང་།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="188"/>
+-        <source>Printer Detected:</source>
+-        <translation>ཞིབ་དཔྱད་ཚད་ལེན་བྱས་པའི་པར་འདེབས་འཕྲུལ་འཁོར</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Hint</source>
+-        <translation>གསལ་འདེབས་བྱེད་པ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>ཚད་ལེན་ཚོད་ལྟའི་ཤོག་ལྷེ་དེ་ལེགས་འགྲུབ་བྱུང་ཡོད་དམ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="206"/>
+-        <source>Yes</source>
+-        <translation>རེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="207"/>
+-        <source>No</source>
+-        <translation>མིན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>ཚོད་ལྟའི་པར་སྐྲུན་ལ་ཕམ་ཉེས་བྱུང་། ཁྱོད་ཀྱིས་དཔར་ཆས་ཀྱི་ཁ་ལོ་བ་ཞིག་བརྗེ་དགོས་སམ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="213"/>
+-        <source>Change Driver</source>
+-        <translation>ཁ་ལོ་བ་བརྗེ་བ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="214"/>
+-        <source>Cancel</source>
+-        <translation>ཕྱིར་འཐེན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Error</source>
+-        <translation>ནོར་འཁྲུལ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Failed to start, please try to add the printer again!</source>
+-        <translation>འགོ་བརྩམས་མ་ཐུབ་ན་ ཡང་བསྐྱར་དཔར་ཆས་ཁ་སྣོན་བྱེད་རོགས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="229"/>
+-        <source>Ok</source>
+-        <translation>འགྲིགས།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PopWindowManager</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Do you want to add a printer?</source>
+-        <translation>དཔར་ཆས་ཁ་སྣོན་བྱས་ཡོད་དམ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>The printer was detected:%1</source>
+-        <translation>ཞིབ་དཔྱད་ཚད་ལེན་བྱས་ནས་དཔར་ཆས་ཀྱི་བརྒྱ་ཆ་1.1ཟིན་ཡོད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Add</source>
+-        <translation>ཁ་སྣོན་རྒྱག་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="167"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation>སྒྲིག་ཆས་ཀྱི་བཟོ་དབྱིབས་འདིས་སྐུལ་འདེད་འོས་འཚམ་བྱེད་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="170"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation>ཚོང་ལས་གྲོས་མཐུན་གྱི་ཚོད་འཛིན་ཐེབས་པའི་དབང་གིས་སྒྲིག་ཆས་བཟོ་མཁན་དང་འབྲེལ་བ་བྱས་ནས་སྒྲིག་ཆས་ཀྱི་བཟོ་དབྱིབས་དེ་ཐོབ་པར་བྱེད་པའི་གོ་རིམ་ཞིག་ཡིན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="172"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="223"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="237"/>
+-        <source>%1 installation failed</source>
+-        <translation>1.སྒྲིག་སྦྱོར་ལེགས་འགྲུབ་མ་བྱུང་།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>%1 successful installation</source>
+-        <translation>1.སྒྲིག་སྦྱོར་ལེགས་འགྲུབ་བྱུང་བ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="222"/>
+-        <source>No printer driver for %1.</source>
+-        <translation>1%ཡི་དཔར་ཆས་ཀྱི་སྐུལ་འདེད་གོ་རིམ་མེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>Print test page</source>
+-        <translation>ཡིག་དཔར་ཚོད་ལྟ་ཤོག་ལྷེ་དཔར་བ།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyListWindow</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.ui" line="26"/>
+-        <source>PropertyListWindow</source>
+-        <translation>རྒྱུ་ནོར་གྱི་མིང་ཐོའི་རླུང་ཕྱོགས་</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="9"/>
+-        <source>Cancel</source>
+-        <translation>ཕྱིར་འཐེན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="10"/>
+-        <source>Confirm</source>
+-        <translation>གཏན་འཁེལ་བྱ་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="11"/>
+-        <source>Refresh</source>
+-        <translation>གསར་དུ་བཀྲུ་བ།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyManagerModel</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="139"/>
+-        <source>Model:</source>
+-        <translation>དཔེ་དབྱིབས་འདི་ལྟ་སྟེ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="140"/>
+-        <source>Status:</source>
+-        <translation>གོ་གནས་ནི།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="141"/>
+-        <source>Location:</source>
+-        <translation>གནས་ཡུལ་ནི།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="142"/>
+-        <source>Driver:</source>
+-        <translation>ཁ་ལོ་བ་ནི།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="23"/>
+-        <source>base</source>
+-        <translation>རྟེན་གཞི།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="36"/>
+-        <source>Ink</source>
+-        <translation>སྣག་ཚ་དང་སྣག་ཚ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="40"/>
+-        <source>advanced</source>
+-        <translation>སྔོན་ཐོན་རང་བཞིན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="58"/>
+-        <source>PrinterProperty</source>
+-        <translation>པར་འདེབས་འཕྲུལ་འཁོར་གྱི་ཁ་ལོ་བ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="95"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="163"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="327"/>
+-        <source>Name</source>
+-        <translation>མིང་།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="96"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="166"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="331"/>
+-        <source>Location</source>
+-        <translation>གནས་ཡུལ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="97"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="170"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="335"/>
+-        <source>Status</source>
+-        <translation>གནས་ཚུལ་གྱི་གནས་</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="98"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="339"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="380"/>
+-        <source>Driver</source>
+-        <translation>ཁ་ལོ་བ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="101"/>
+-        <source>Modify</source>
+-        <translation>བཟོ་བཅོས་རྒྱག་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="103"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="193"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="343"/>
+-        <source>URI</source>
+-        <translation>URI</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="127"/>
+-        <source> (level: %1%)</source>
+-        <translation> (ལྷག་གྲངས། )བརྒྱ་ཆ་1ཡོད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="172"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="174"/>
+-        <source>Idle</source>
+-        <translation>སྒྱིད་ལུག་བྱེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="176"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="178"/>
+-        <source>Printing</source>
+-        <translation>པར་སྐྲུན་ཡིག་རིགས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="180"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="182"/>
+-        <source>Stopped</source>
+-        <translation>བཀག་འགོག་བྱས་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="187"/>
+-        <source>Unknow</source>
+-        <translation>ཤེས་མེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="396"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="412"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="423"/>
+-        <source>Warning</source>
+-        <translation>ཐ་ཚིག་སྒྲོག་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <source>Error happened, all options restored!.</source>
+-        <translation>ནོར་འཁྲུལ་བྱུང་བས་བསལ་འདེམས་ཚང་མ་སླར་གསོ་བྱས་པ་རེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="232"/>
+-        <source>Confirm</source>
+-        <translation>གཏན་འཁེལ་བྱ་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="269"/>
+-        <source>Conflict with &quot;%1&quot;</source>
+-        <translation>&quot;བརྒྱ་ཆ་1&quot;དང་འགལ་བ་བྱུང་བ་རེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="395"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>པར་འདེབས་འཕྲུལ་འཁོར་གྱི་མིང་ནང་དུ་&quot;/\&quot;#&quot;དང་འཕྲིན་ཡིག་0ལྷག་ཙམ་ཡོད་པ་དེ་འཕྲིན་ཡིག་128ལས་ཉུང་བ་རེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="398"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="414"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="425"/>
+-        <source>Close</source>
+-        <translation>སྒོ་རྒྱག་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="411"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>མིང་གཅིག་མཚུངས་ཡིན་པའི་དཔར་ཆས་ཡོད་</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="422"/>
+-        <source>Printer Name Illegal!</source>
+-        <translation>པར་འདེབས་འཕྲུལ་འཁོར་གྱི་མིང་ཁྲིམས་དང་མི་མཐུན</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ProperytItemWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="217"/>
+-        <source>Idle</source>
+-        <translation>སྒྱིད་ལུག་བྱེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="220"/>
+-        <source>Printing</source>
+-        <translation>པར་སྐྲུན་ཡིག་རིགས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="223"/>
+-        <source>Stopped</source>
+-        <translation>བཀག་འགོག་བྱས་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="226"/>
+-        <source>Unknow</source>
+-        <translation>ཤེས་མེད་པ།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>QObject</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="32"/>
+-        <source>id</source>
+-        <translation>ཐོབ་ཐང་ལག་ཁྱེར།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="33"/>
+-        <source>user</source>
+-        <translation>སྤྱོད་མཁན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="34"/>
+-        <source>title</source>
+-        <translation>ཁ་བྱང་།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="35"/>
+-        <source>printer name</source>
+-        <translation>དཔར་ཆས་ཀྱི་མིང་།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="36"/>
+-        <source>size</source>
+-        <translation>ཆེ་ཆུང་།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="37"/>
+-        <source>create time</source>
+-        <translation>དུས་ཚོད་གསར་སྐྲུན་བྱེད་</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="38"/>
+-        <source>job state</source>
+-        <translation>ལས་གནས་ཀྱི་གནས་ཚུལ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="44"/>
+-        <source>Job is waiting to be printed</source>
+-        <translation>ལས་ཀ་ནི་པར་སྐྲུན་བྱེད་པར་སྒུག་ཡོད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="45"/>
+-        <source>Job is held for printing</source>
+-        <translation>པར་སྐྲུན་ལས་རིགས་ཀྱི་ལས་འགན་འཁུར་རྒྱུ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="46"/>
+-        <source>Job is currently printing</source>
+-        <translation>མིག་སྔར་པར་སྐྲུན་བྱེད་བཞིན་པའི་ལས་གནས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="47"/>
+-        <source>Job has been stopped</source>
+-        <translation>ལས་ཀ་བྱེད་མཚམས་བཞག་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="48"/>
+-        <source>Job has been canceled</source>
+-        <translation>ལས་ཀ་མེད་པར་བཟོས་ཟིན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="49"/>
+-        <source>Job has aborted due to error</source>
+-        <translation>ནོར་འཁྲུལ་བྱུང་བའི་རྐྱེན་གྱིས་ལས་ཀ་ཤོར་བ་རེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="50"/>
+-        <source>Job has completed successfully</source>
+-        <translation>ལས་ཀ་བདེ་བླག་ངང་ལེགས་གྲུབ་བྱུང་ཡོད།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>RenamePrinterDialog</name>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="26"/>
+-        <source>RenamePrinterDialog</source>
+-        <translation>མིང་ལ་པར་རྒྱག་མཁན་གྱི་ནད་རྟགས་ཡོད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="148"/>
+-        <source>Cancel</source>
+-        <translation>ཕྱིར་འཐེན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="167"/>
+-        <source>Ok</source>
+-        <translation>འགྲིགས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.cpp" line="11"/>
+-        <source>Printer Name</source>
+-        <translation>པར་འདེབས་འཕྲུལ་འཁོར་གྱི་མིང་།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SelectPpdDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="26"/>
+-        <source>SelectPpdDialog</source>
+-        <translation>PppdDialogབདམས་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="203"/>
+-        <source>Cancel</source>
+-        <translation>ཕྱིར་འཐེན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="247"/>
+-        <source>Apply</source>
+-        <translation>རེ་ཞུ་</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="23"/>
+-        <source>Select Driver</source>
+-        <translation>ཁ་ལོ་བ་གདམ་གསེས་</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="56"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="85"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="266"/>
+-        <source>driver</source>
+-        <translation>ཁ་ལོ་བ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="57"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="71"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="232"/>
+-        <source>vendor</source>
+-        <translation>ཚོང་པ་ཉི་ཚེ་</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="195"/>
+-        <source>Reading Drivers,Please Wait...</source>
+-        <translation>དཔེ་ཆ་ཀློག་པའི་ཁ་ལོ་བ་རྣམས་ཀྱིས་རེ་སྒུག་</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="319"/>
+-        <source>Please Choose Model And Vender!</source>
+-        <translation>ཁྱོད་ཀྱིས་དཔེ་དབྱིབས་དང་འཁོན་ལན་བས་ཁྱོད་ལ་གདམ་ག་གནང་རོགས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="320"/>
+-        <source>Warning</source>
+-        <translation>ཐ་ཚིག་སྒྲོག་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="322"/>
+-        <source>Close</source>
+-        <translation>སྒོ་རྒྱག་པ།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbAuthInfoDialog</name>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.ui" line="26"/>
+-        <source>SmbAuthInfoDialog</source>
+-        <translation>SmbAuthInfoDialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="13"/>
+-        <source>Authentication</source>
+-        <translation>ཐོབ་ཐང་དཔང་དངོས་བདེན་པ་ཡིན་པའི་ར</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="14"/>
+-        <source>Authentication is required to connect to the printer &quot;%1&quot;</source>
+-        <translation>&quot;1&quot;པར་འདེབས་འཕྲུལ་ཆས་བརྒྱ་ཆ་1ལ་འབྲེལ་མཐུད་བྱེད་པར་བདེན་དཔང་ར་སྤྲོད་བྱེད་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="15"/>
+-        <source>Username</source>
+-        <translation>སྤྱོད་མཁན་གྱི་མིང་།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="16"/>
+-        <source>Password</source>
+-        <translation>གསང་བའི་ཨང་གྲངས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="17"/>
+-        <source>Workgroup</source>
+-        <translation>ས་ཁོངས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="18"/>
+-        <source>Accept</source>
+-        <translation>གཏན་འཁེལ་བྱ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="19"/>
+-        <source>Cancel</source>
+-        <translation>མེད་པར་བཟོ་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="37"/>
+-        <source>Authentication in progress. Please wait...</source>
+-        <translation>བདེན་དཔང་ར་སྤྲོད་བྱེད་བཞིན་ཡོད་པས་ཅུང་ཙམ་སྒུགས་དང་།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="58"/>
+-        <source>Warning</source>
+-        <translation>ཐ་ཚིག་སྒྲོག་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="59"/>
+-        <source>Confirm</source>
+-        <translation>གཏན་འཁེལ་བྱ།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbClientHelper</name>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="175"/>
+-        <source>Cannot connect to %1!</source>
+-        <translation>བརྒྱ་ཆ་1འཐུད་ཐབས་མེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="180"/>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="187"/>
+-        <source>Wrong user name or password!</source>
+-        <translation>ནོར་འཁྲུལ་གྱི་སྤྱོད་མཁན་གྱི་མིང་ངམ་གསང་གྲངས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="192"/>
+-        <source>The samba server shared printer list is empty</source>
+-        <translation>sambཞབས་ཞུའི་ཡོ་བྱད་མཉམ་སྤྱོད་ཀྱིས་པར་འདེབས་འཕྲུལ་ཆས་ཀྱི་རེའུ་མིག་དེ་སྟོང་པར་བརྩི་བ།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SystemNotification</name>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="21"/>
+-        <source>Printer Info</source>
+-        <translation>པར་འདེབས་འཕྲུལ་འཁོར་གྱི་ཆ་འཕྲིན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="36"/>
+-        <source>Printer</source>
+-        <translation>དཔར་འདེབས་འཕྲུལ་འཁོར།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TrayWin</name>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="33"/>
+-        <source>Minimize</source>
+-        <translation>ཉུང་དུ་གཏོང་གང་ཐུབ་བྱ་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="39"/>
+-        <source>Maximize</source>
+-        <translation>ཚད་གཞི་མཐོ་ཤོས་ཀྱི་སྒོ་ནས</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="45"/>
+-        <source>Quit</source>
+-        <translation>ཕྱིར་འཐེན་བྱ་རྒྱུ།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingDialog</name>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.ui" line="14"/>
+-        <source>TroubleshootingDialog</source>
+-        <translation>TroubleshootingDialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="24"/>
+-        <source>Troubleshooting</source>
+-        <translation>བར་ཆད་བྱུང་རིགས་གྲལ་བཤེར་བྱེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="25"/>
+-        <source>Accept</source>
+-        <translation>གཏན་འཁེལ་བྱ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="26"/>
+-        <source>Cancel</source>
+-        <translation>མེད་པར་བཟོ་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="27"/>
+-        <source>Repair</source>
+-        <translation>ཉམས་གསོ་མཐེབ་བཀྱག་ཅིག</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="77"/>
+-        <source>Check whether the CUPS service is enabled</source>
+-        <translation>CUPSཞབས་ཞུ་བྱེད་འགོ་ཚུགས་ཡོད་མེད་ལ་ཞིབ་བཤེར་བྱ་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="87"/>
+-        <source>CUPS service is enabled</source>
+-        <translation>CUPSཞབས་ཞུ་འགོ་ཚུགས་པ་རེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="90"/>
+-        <source>CUPS service is not enabled</source>
+-        <translation>CUPSཞབས་ཞུ་འགོ་ཚུགས་མེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="105"/>
+-        <source>Check CUPS user access rights</source>
+-        <translation>CUPSལ་སྤྱོད་མཁན་གྱི་འཚམས་འདྲིའི་དབང་ཚད་ལ་ཞིབ་བཤེར་བྱས་</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="116"/>
+-        <source>CUPS users can access normally</source>
+-        <translation>CUPSབེད་སྤྱོད་མཁན་གྱིས་རྒྱུན་ལྡན་གྱི་འཚམས་འདྲི་བྱས་ཆོག།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="119"/>
+-        <source>CUPS user restricted access rights</source>
+-        <translation>CUPSལ་སྤྱོད་མཁན་གྱི་འཚམས་འདྲིའི་དབང་ཚད་ལ་ཚོད་འཛིན་ཐེབས།།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="133"/>
+-        <source>Check whether the printer connection is normal</source>
+-        <translation>བསྐྱར་དཔར་འཕྲུལ་ཆས་རྒྱུན་ལྡན་ཡིན་མིན་ལ་ཞིབ་བཤེར་བྱེད་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="152"/>
+-        <source>Printer connected</source>
+-        <translation>བསྐྱར་དཔར་འཕྲུལ་ཆས་འབྲེལ་ཡོད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="155"/>
+-        <source>Printer disconnected</source>
+-        <translation>པར་རྒྱག་འཕྲུལ་ཆས་ཀྱིས་འབྲེལ་མཐུད་བྱེད་མཚམས་ཆད་པ་རེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="186"/>
+-        <source>Check whether the printer protocol port configuration is enabled</source>
+-        <translation>བསྐྱར་དཔར་འཕྲུལ་ཆས་ཀྱི་གྲོས་མཐུན་བཀོད་སྒྲིག་བྱེད་འགོ་ཚུགས་ཡོད་མེད་ལ་ཞིབ་བཤེར་བྱ་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="194"/>
+-        <source>Printer protocol port configuration is enabled</source>
+-        <translation>པར་འདེབས་འཕྲུལ་ཆས་ཀྱི་གྲོས་མཐུན་བཀོད་སྒྲིག་བྱེད་འགོ་ཚུགས་ཡོད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="197"/>
+-        <source>Printer protocol port is not configured to be enabled</source>
+-        <translation>པར་འདེབས་འཕྲུལ་ཆས་ཀྱི་གྲོས་མཐུན་བཀོད་སྒྲིག་བྱེད་འགོ་ཚུགས་མེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Error</source>
+-        <translation>ནོར་འཁྲུལ།ནོར་འཁྲུལ་</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Automatic repair failed and manual troubleshooting is required.</source>
+-        <translation>རང་འགུལ་གྱིས་ཉམས་གསོ་བྱས་ནས་ཕམ་ཉེས་བྱུང་ན་ལག་པ་འགུལ་ནས་སྐྱོན་ཆ་སེལ་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="208"/>
+-        <source>Confirm</source>
+-        <translation>གཏན་འཁེལ་བྱ།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/troubleshooting_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation>ཁ་བྱང་།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>UkuiPrinterManager</name>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="340"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1499"/>
+-        <source>Idle</source>
+-        <translation>སྒྱིད་ལུག་བྱེད་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="342"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1501"/>
+-        <source>Printing</source>
+-        <translation>པར་སྐྲུན་ཡིག་རིགས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="344"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1503"/>
+-        <source>Stopped</source>
+-        <translation>བཀག་འགོག་བྱས་པ།</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="438"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>པར་འདེབས་འཕྲུལ་འཁོར་གྱི་མིང་ནང་དུ་&quot;/\&quot;#&quot;དང་འཕྲིན་ཡིག་0ལྷག་ཙམ་ཡོད་པ་དེ་འཕྲིན་ཡིག་128ལས་ཉུང་བ་རེད།</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="455"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>མིང་གཅིག་མཚུངས་ཡིན་པའི་དཔར་ཆས་ཡོད་</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="458"/>
+-        <source>Printer name is not case sensitive!</source>
+-        <translation>དཔར་ཆས་ཀྱི་མིང་ལ་དཔེ་མཚོན་གྱི་ཚོར་བ་རྣོན་པོ་མེད།</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>WaitingDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="32"/>
+-        <source>Widget</source>
+-        <translation>ཚོད་འཛིན་བཅས་བྱ་དགོས།</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="87"/>
+-        <source>TextLabel</source>
+-        <translation>དཔེ་དེབ་ཀྱི་འཆིང་རྒྱ།</translation>
+-    </message>
+-</context>
+-</TS>
+diff --git a/daemons/sessionservice/printerbackend/translations/kylin-printer_en.ts b/daemons/sessionservice/printerbackend/translations/kylin-printer_en.ts
+deleted file mode 100644
+index a8d0e52..0000000
+--- a/daemons/sessionservice/printerbackend/translations/kylin-printer_en.ts
++++ /dev/null
+@@ -1,1717 +0,0 @@
+-<?xml version="1.0" encoding="utf-8"?>
+-<!DOCTYPE TS>
+-<TS version="2.1" language="en_US">
+-<context>
+-    <name>AddPrinterWindow</name>
+-    <message>
+-        <location filename="../ui/add_printer_window.ui" line="26"/>
+-        <source>AddPrinterWindow</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="136"/>
+-        <source>Add Printer</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="148"/>
+-        <source>Auto</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="149"/>
+-        <location filename="../ui/add_printer_window.cpp" line="191"/>
+-        <source>Manual</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="161"/>
+-        <source>Device List</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="192"/>
+-        <source>Protocol</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="193"/>
+-        <source>Address</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="199"/>
+-        <source>Search</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="213"/>
+-        <source>name</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="214"/>
+-        <source>location</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="215"/>
+-        <source>driver</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="220"/>
+-        <source>forward</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Error</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <source>Add printer failed: no PPD selected!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="304"/>
+-        <location filename="../ui/add_printer_window.cpp" line="314"/>
+-        <location filename="../ui/add_printer_window.cpp" line="333"/>
+-        <location filename="../ui/add_printer_window.cpp" line="433"/>
+-        <location filename="../ui/add_printer_window.cpp" line="443"/>
+-        <location filename="../ui/add_printer_window.cpp" line="561"/>
+-        <location filename="../ui/add_printer_window.cpp" line="603"/>
+-        <location filename="../ui/add_printer_window.cpp" line="648"/>
+-        <location filename="../ui/add_printer_window.cpp" line="687"/>
+-        <source>Confirm</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Hint</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <source>Add printer successfully,printer a test page?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="313"/>
+-        <source>Print test page</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <source>Automatic driver configuration failed, please select the driver manually.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="578"/>
+-        <source>Searching for driver...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <source>Failed to search for driver. Do you want to use local driver?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="604"/>
+-        <location filename="../ui/add_printer_window.cpp" line="626"/>
+-        <location filename="../ui/add_printer_window.cpp" line="688"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="620"/>
+-        <source>It is detected that the driver comes from the Internet. Do you want to continue the installation?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="625"/>
+-        <source>Install</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="639"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="642"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="659"/>
+-        <source>Installing printer driver...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <source>Driver installation failed. Do you want to use local driver?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="362"/>
+-        <source>Searching printers...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <source>Can not find this Printer!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="432"/>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <location filename="../ui/add_printer_window.cpp" line="622"/>
+-        <location filename="../ui/add_printer_window.cpp" line="645"/>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <location filename="../ui/add_printer_window.cpp" line="747"/>
+-        <source>Warning</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="321"/>
+-        <source>Success</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="322"/>
+-        <source>Fail</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="749"/>
+-        <source>Close</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AutoSearchResultModel</name>
+-    <message>
+-        <location filename="../ui/auto_search_result_model.cpp" line="49"/>
+-        <location filename="../ui/auto_search_result_model.cpp" line="51"/>
+-        <source>network</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseInfo</name>
+-    <message>
+-        <location filename="../common/base_info.cpp" line="64"/>
+-        <source>Printer</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseNotifyDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="35"/>
+-        <source>Dialog</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="124"/>
+-        <source>TextLabel</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ChoosePpdComboBox</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="15"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="22"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="137"/>
+-        <source>Choose PPD</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="16"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="25"/>
+-        <source>Choose from the PPD library</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="17"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="29"/>
+-        <source>Add local PPD</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="48"/>
+-        <source>Please select a deb package.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="50"/>
+-        <source>Deb File(*.deb)</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="51"/>
+-        <source>Choose</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="52"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="69"/>
+-        <source>Searching driver...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Warning</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Install package failed,please retry.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="92"/>
+-        <source>Yes</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ConfigIPAddressDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="30"/>
+-        <source>Configure</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="31"/>
+-        <source>Service address:</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="32"/>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="34"/>
+-        <source>Enable</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="33"/>
+-        <source>This printer can be used to convert print files to PDF format</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="35"/>
+-        <source>This printer can be used to convert print files to BRF format</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="36"/>
+-        <source>Displays all serial printers</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="38"/>
+-        <source>Ok</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Warning</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Config init failed</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="53"/>
+-        <source>Confirm</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="32"/>
+-        <source>Dialog</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="75"/>
+-        <source>Common configuration</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="150"/>
+-        <source>初始地址:api.kylinos.cn</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="180"/>
+-        <source>Advanced Features</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="37"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CupsDebugLoggingCheckbox</name>
+-    <message>
+-        <location filename="../ui/cups_debug_logging_checkbox.cpp" line="8"/>
+-        <source>Retain debug info for troubleshooting</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomAboutDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_about_dialog.cpp" line="12"/>
+-        <source>Version: </source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomDoublelineCheckBox</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_doubleline_checkbox.ui" line="14"/>
+-        <source>Form</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DebInstallWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="75"/>
+-        <source>Driver</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="143"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="23"/>
+-        <source>Modify Printer Driver</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Error</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Modify PPD failed: no PPD selected!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="162"/>
+-        <source>Confirm</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceListButton</name>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="32"/>
+-        <source>Idle</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="35"/>
+-        <source>Printing</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="38"/>
+-        <source>Stopped</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="41"/>
+-        <source>Unknow</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="62"/>
+-        <location filename="../ui/device_list_button.cpp" line="264"/>
+-        <location filename="../ui/device_list_button.cpp" line="296"/>
+-        <source>Default</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="133"/>
+-        <location filename="../ui/device_list_button.cpp" line="163"/>
+-        <source>Set Default</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="135"/>
+-        <location filename="../ui/device_list_button.cpp" line="166"/>
+-        <source>Enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="139"/>
+-        <location filename="../ui/device_list_button.cpp" line="169"/>
+-        <source>Shared</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceMap</name>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="301"/>
+-        <source>Printer</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="303"/>
+-        <source>Printers</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="305"/>
+-        <source>plug-in:</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="307"/>
+-        <source>unplugged:</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EmptyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/right_widget.cpp" line="96"/>
+-        <source>Please click &quot;+&quot; button to add a printer.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EventNotifyMonitor</name>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="430"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="482"/>
+-        <source>Printer </source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="454"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="469"/>
+-        <source>Job:</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="456"/>
+-        <source>created!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="471"/>
+-        <source>completed!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>InkInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/ink_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerModel</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="50"/>
+-        <source>Test Page</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="64"/>
+-        <source>unknown</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="70"/>
+-        <source>Printing page %1</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="53"/>
+-        <source>untitled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="261"/>
+-        <source>Printer</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="412"/>
+-        <source>Cancel print</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="415"/>
+-        <source>Delete print</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="418"/>
+-        <source>Hold print</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="421"/>
+-        <source>Release print</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="424"/>
+-        <source>Reprint</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="427"/>
+-        <source>Job properties</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Warning</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <source>Set error: Job status has been updated!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="447"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="453"/>
+-        <source>Sure</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Cannot move job to itself!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobMenu</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="108"/>
+-        <source>Cancel print</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="110"/>
+-        <source>Delete print</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="112"/>
+-        <source>Hold print</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="114"/>
+-        <source>Release print</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="116"/>
+-        <source>Reprint</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="118"/>
+-        <source>Use other printer...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="120"/>
+-        <source>Job properties</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobPropertiesWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="15"/>
+-        <source>Job properties</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="35"/>
+-        <source>name</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="36"/>
+-        <source>value</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LaunchPrinter</name>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>%1 print result confirmation</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="94"/>
+-        <source>Yes</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="96"/>
+-        <source>No</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LeftWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="47"/>
+-        <source>Device List</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="216"/>
+-        <source>Delete</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="362"/>
+-        <source>Warning</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="212"/>
+-        <source>Are you sure to delete &quot;%1&quot;?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="217"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="360"/>
+-        <source>Set Default Failed!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="364"/>
+-        <source>Close</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWinPropertyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="45"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="47"/>
+-        <source>Printer</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="71"/>
+-        <source>Property</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="78"/>
+-        <source>Job List</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="85"/>
+-        <source>PrintTest</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="90"/>
+-        <source>Troubleshooting</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="192"/>
+-        <source>Idle</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="194"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="196"/>
+-        <source>Printing</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="198"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="200"/>
+-        <source>Stopped</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="205"/>
+-        <source>Unknown</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="229"/>
+-        <source>Are you sure to rename &quot;%1&quot; ?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="233"/>
+-        <source>Rename</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="234"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="230"/>
+-        <source>Warning</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="231"/>
+-        <source>This action will delete the job queue too!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.ui" line="26"/>
+-        <source>Form</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWindow</name>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="91"/>
+-        <source>Printer</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="225"/>
+-        <source>Delete Failed!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="227"/>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Warning</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="229"/>
+-        <location filename="../ui/mainwindow.cpp" line="269"/>
+-        <source>Close</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="326"/>
+-        <source>Try to connect the Printer...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Error</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="333"/>
+-        <source>Sure</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Open Printer Failed,Please Del And Add Printer, Then Try Again!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MenuModule</name>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="44"/>
+-        <location filename="../ui/menumodule.cpp" line="73"/>
+-        <source>Help</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="42"/>
+-        <location filename="../ui/menumodule.cpp" line="70"/>
+-        <source>About</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="38"/>
+-        <location filename="../ui/menumodule.cpp" line="76"/>
+-        <source>Configure</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="40"/>
+-        <location filename="../ui/menumodule.cpp" line="88"/>
+-        <source>Classic Printer</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="46"/>
+-        <location filename="../ui/menumodule.cpp" line="66"/>
+-        <source>Quit</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.h" line="52"/>
+-        <source>Printer</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>NewPopWindow</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="40"/>
+-        <source>Printer</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="59"/>
+-        <source>Print Test Page</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="60"/>
+-        <source>View Device</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="61"/>
+-        <source>Manual Install</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="128"/>
+-        <source>Installing......</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="143"/>
+-        <source>Successful installation!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="164"/>
+-        <source>Installation failed!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="188"/>
+-        <source>Printer Detected:</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Hint</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="207"/>
+-        <source>No</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="206"/>
+-        <source>Yes</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="214"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="213"/>
+-        <source>Change Driver</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Error</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Failed to start, please try to add the printer again!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="229"/>
+-        <source>Ok</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PopWindowManager</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Do you want to add a printer?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>The printer was detected:%1</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Add</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="167"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="170"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="172"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="223"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="237"/>
+-        <source>%1 installation failed</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>%1 successful installation</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="222"/>
+-        <source>No printer driver for %1.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>Print test page</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyListWindow</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="9"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="10"/>
+-        <source>Confirm</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="11"/>
+-        <source>Refresh</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.ui" line="26"/>
+-        <source>PropertyListWindow</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyManagerModel</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="139"/>
+-        <source>Model:</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="140"/>
+-        <source>Status:</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="141"/>
+-        <source>Location:</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="142"/>
+-        <source>Driver:</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="23"/>
+-        <source>base</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="36"/>
+-        <source>Ink</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="40"/>
+-        <source>advanced</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="58"/>
+-        <source>PrinterProperty</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="95"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="163"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="327"/>
+-        <source>Name</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="96"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="166"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="331"/>
+-        <source>Location</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="97"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="170"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="335"/>
+-        <source>Status</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="98"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="339"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="380"/>
+-        <source>Driver</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="101"/>
+-        <source>Modify</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="103"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="193"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="343"/>
+-        <source>URI</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="127"/>
+-        <source> (level: %1%)</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="172"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="174"/>
+-        <source>Idle</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="176"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="178"/>
+-        <source>Printing</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="180"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="182"/>
+-        <source>Stopped</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="187"/>
+-        <source>Unknow</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="396"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="412"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="423"/>
+-        <source>Warning</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <source>Error happened, all options restored!.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="232"/>
+-        <source>Confirm</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="269"/>
+-        <source>Conflict with &quot;%1&quot;</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="395"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="398"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="414"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="425"/>
+-        <source>Close</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="411"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="422"/>
+-        <source>Printer Name Illegal!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ProperytItemWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="217"/>
+-        <source>Idle</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="220"/>
+-        <source>Printing</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="223"/>
+-        <source>Stopped</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="226"/>
+-        <source>Unknow</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>QObject</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="32"/>
+-        <source>id</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="33"/>
+-        <source>user</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="34"/>
+-        <source>title</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="35"/>
+-        <source>printer name</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="36"/>
+-        <source>size</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="37"/>
+-        <source>create time</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="38"/>
+-        <source>job state</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="44"/>
+-        <source>Job is waiting to be printed</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="45"/>
+-        <source>Job is held for printing</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="46"/>
+-        <source>Job is currently printing</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="47"/>
+-        <source>Job has been stopped</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="48"/>
+-        <source>Job has been canceled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="49"/>
+-        <source>Job has aborted due to error</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="50"/>
+-        <source>Job has completed successfully</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>RenamePrinterDialog</name>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="26"/>
+-        <source>RenamePrinterDialog</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="148"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="167"/>
+-        <source>Ok</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.cpp" line="11"/>
+-        <source>Printer Name</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SelectPpdDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="23"/>
+-        <source>Select Driver</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="56"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="85"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="266"/>
+-        <source>driver</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="57"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="71"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="232"/>
+-        <source>vendor</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="195"/>
+-        <source>Reading Drivers,Please Wait...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="319"/>
+-        <source>Please Choose Model And Vender!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="320"/>
+-        <source>Warning</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="322"/>
+-        <source>Close</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="26"/>
+-        <source>SelectPpdDialog</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="203"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="247"/>
+-        <source>Apply</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbAuthInfoDialog</name>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.ui" line="26"/>
+-        <source>SmbAuthInfoDialog</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="13"/>
+-        <source>Authentication</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="14"/>
+-        <source>Authentication is required to connect to the printer &quot;%1&quot;</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="15"/>
+-        <source>Username</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="16"/>
+-        <source>Password</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="17"/>
+-        <source>Workgroup</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="18"/>
+-        <source>Accept</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="19"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="37"/>
+-        <source>Authentication in progress. Please wait...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="58"/>
+-        <source>Warning</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="59"/>
+-        <source>Confirm</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbClientHelper</name>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="175"/>
+-        <source>Cannot connect to %1!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="180"/>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="187"/>
+-        <source>Wrong user name or password!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="192"/>
+-        <source>The samba server shared printer list is empty</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SystemNotification</name>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="21"/>
+-        <source>Printer Info</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="36"/>
+-        <source>Printer</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TrayWin</name>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="33"/>
+-        <source>Minimize</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="39"/>
+-        <source>Maximize</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="45"/>
+-        <source>Quit</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingDialog</name>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.ui" line="14"/>
+-        <source>TroubleshootingDialog</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="24"/>
+-        <source>Troubleshooting</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="25"/>
+-        <source>Accept</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="26"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="27"/>
+-        <source>Repair</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="77"/>
+-        <source>Check whether the CUPS service is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="87"/>
+-        <source>CUPS service is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="90"/>
+-        <source>CUPS service is not enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="105"/>
+-        <source>Check CUPS user access rights</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="116"/>
+-        <source>CUPS users can access normally</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="119"/>
+-        <source>CUPS user restricted access rights</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="133"/>
+-        <source>Check whether the printer connection is normal</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="152"/>
+-        <source>Printer connected</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="155"/>
+-        <source>Printer disconnected</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="186"/>
+-        <source>Check whether the printer protocol port configuration is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="194"/>
+-        <source>Printer protocol port configuration is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="197"/>
+-        <source>Printer protocol port is not configured to be enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Error</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Automatic repair failed and manual troubleshooting is required.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="208"/>
+-        <source>Confirm</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/troubleshooting_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>UkuiPrinterManager</name>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="340"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1499"/>
+-        <source>Idle</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="342"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1501"/>
+-        <source>Printing</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="344"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1503"/>
+-        <source>Stopped</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="438"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="455"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="458"/>
+-        <source>Printer name is not case sensitive!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>WaitingDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="32"/>
+-        <source>Widget</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="87"/>
+-        <source>TextLabel</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name></name>
+-    <message>
+-        <location filename="../kylin-printer.desktop.in.h" line="1"/>
+-        <source>Printer</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/data/kylin-printer-applet.desktop.in.h" line="1"/>
+-        <source>Printer-backend</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-</TS>
+diff --git a/daemons/sessionservice/printerbackend/translations/kylin-printer_kk.ts b/daemons/sessionservice/printerbackend/translations/kylin-printer_kk.ts
+deleted file mode 100644
+index e8dc638..0000000
+--- a/daemons/sessionservice/printerbackend/translations/kylin-printer_kk.ts
++++ /dev/null
+@@ -1,1741 +0,0 @@
+-<?xml version="1.0" encoding="utf-8"?>
+-<!DOCTYPE TS>
+-<TS version="2.1" language="kk">
+-<context>
+-    <name></name>
+-    <message>
+-        <location filename="../kylin-printer.desktop.in.h" line="1"/>
+-        <source>Printer</source>
+-        <translation>Принтерлер</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/data/kylin-printer-applet.desktop.in.h" line="1"/>
+-        <source>Printer-backend</source>
+-        <translation>Принтерлердің артқа шегінуі</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AddPrinterWindow</name>
+-    <message>
+-        <location filename="../ui/add_printer_window.ui" line="26"/>
+-        <source>AddPrinterWindow</source>
+-        <translation>AddPrinterWindow</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="136"/>
+-        <source>Add Printer</source>
+-        <translation>Принтер қосу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="148"/>
+-        <source>Auto</source>
+-        <translation>Авто</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="149"/>
+-        <location filename="../ui/add_printer_window.cpp" line="191"/>
+-        <source>Manual</source>
+-        <translation>Қолмен</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="161"/>
+-        <source>Device List</source>
+-        <translation>Құрылғы тізімі</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="192"/>
+-        <source>Protocol</source>
+-        <translation>Хаттама</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="193"/>
+-        <source>Address</source>
+-        <translation>Адрес</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="199"/>
+-        <source>Search</source>
+-        <translation>Іздеу</translation>
+-    </message>
+-    <message>
+-        <source>socket</source>
+-        <translation type="vanished">розетка</translation>
+-    </message>
+-    <message>
+-        <source>ipp</source>
+-        <translation type="vanished">ipp</translation>
+-    </message>
+-    <message>
+-        <source>http</source>
+-        <translation type="vanished">http</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="213"/>
+-        <source>name</source>
+-        <translation>атауы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="214"/>
+-        <source>location</source>
+-        <translation>орналасуы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="215"/>
+-        <source>driver</source>
+-        <translation>драйвер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="220"/>
+-        <source>forward</source>
+-        <translation>форвард</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Error</source>
+-        <translation>Қате</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <source>Add printer failed: no PPD selected!</source>
+-        <translation>Принтер қосу жаңылысы: PPD таңдалмады!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>Принтер қосу жаңылысы, біраз уақыттан кейін қайталап көріңіз.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="304"/>
+-        <location filename="../ui/add_printer_window.cpp" line="314"/>
+-        <location filename="../ui/add_printer_window.cpp" line="333"/>
+-        <location filename="../ui/add_printer_window.cpp" line="433"/>
+-        <location filename="../ui/add_printer_window.cpp" line="443"/>
+-        <location filename="../ui/add_printer_window.cpp" line="561"/>
+-        <location filename="../ui/add_printer_window.cpp" line="603"/>
+-        <location filename="../ui/add_printer_window.cpp" line="648"/>
+-        <location filename="../ui/add_printer_window.cpp" line="687"/>
+-        <source>Confirm</source>
+-        <translation>Растау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Hint</source>
+-        <translation>Тұспал</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <source>Add printer successfully,printer a test page?</source>
+-        <translation>Принтер сәтті қосып, сынақ бетін басып шығарыңыз ба?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="313"/>
+-        <source>Print test page</source>
+-        <translation>Сынақ бетін басып шығару</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="321"/>
+-        <source>Success</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="322"/>
+-        <source>Fail</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <source>Automatic driver configuration failed, please select the driver manually.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="578"/>
+-        <source>Searching for driver...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <source>Failed to search for driver. Do you want to use local driver?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="620"/>
+-        <source>It is detected that the driver comes from the Internet. Do you want to continue the installation?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="625"/>
+-        <source>Install</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="639"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="642"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="659"/>
+-        <source>Installing printer driver...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <source>Driver installation failed. Do you want to use local driver?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>Сынақ беті сәтті басылды ма?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>Сынақ басып шығару жаңылысы. Принтер драйверін өзгерткіңіз келе ме?</translation>
+-    </message>
+-    <message>
+-        <source>Change Driver</source>
+-        <translation type="vanished">Драйверді өзгерту</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="604"/>
+-        <location filename="../ui/add_printer_window.cpp" line="626"/>
+-        <location filename="../ui/add_printer_window.cpp" line="688"/>
+-        <source>Cancel</source>
+-        <translation>Болдырмау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="362"/>
+-        <source>Searching printers...</source>
+-        <translation>Принтерлерді іздеу...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <source>Can not find this Printer!</source>
+-        <translation>Бұл принтер табылмады!</translation>
+-    </message>
+-    <message>
+-        <source>Searching printer driver...</source>
+-        <translation type="vanished">Принтердің драйверін іздеу...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="432"/>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <location filename="../ui/add_printer_window.cpp" line="622"/>
+-        <location filename="../ui/add_printer_window.cpp" line="645"/>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <location filename="../ui/add_printer_window.cpp" line="747"/>
+-        <source>Warning</source>
+-        <translation>Ескерту</translation>
+-    </message>
+-    <message>
+-        <source>Install driver package automatically failed,continue?</source>
+-        <translation type="vanished">Драйвер бумасы автоматты түрде істен шыққан, жалғастырылған ба?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="749"/>
+-        <source>Close</source>
+-        <translation>Жабу</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AutoSearchResultModel</name>
+-    <message>
+-        <location filename="../ui/auto_search_result_model.cpp" line="49"/>
+-        <location filename="../ui/auto_search_result_model.cpp" line="51"/>
+-        <source>network</source>
+-        <translation>желі</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseInfo</name>
+-    <message>
+-        <location filename="../common/base_info.cpp" line="64"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseNotifyDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="35"/>
+-        <source>Dialog</source>
+-        <translation>Диалог</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="124"/>
+-        <source>TextLabel</source>
+-        <translation>TextLabel</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ChoosePpdComboBox</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="15"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="22"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="137"/>
+-        <source>Choose PPD</source>
+-        <translation>PPD таңдау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="16"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="25"/>
+-        <source>Choose from the PPD library</source>
+-        <translation>PPD кітапханасынан таңдау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="17"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="29"/>
+-        <source>Add local PPD</source>
+-        <translation>Жергілікті PPD қосу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="48"/>
+-        <source>Please select a deb package.</source>
+-        <translation>Деб-пакетті таңдаңыз.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="50"/>
+-        <source>Deb File(*.deb)</source>
+-        <translation>Deb файлы(*.deb)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="51"/>
+-        <source>Choose</source>
+-        <translation>Таңдау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="52"/>
+-        <source>Cancel</source>
+-        <translation>Болдырмау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="69"/>
+-        <source>Searching driver...</source>
+-        <translation>Драйверді іздеу...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Warning</source>
+-        <translation>Ескерту</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Install package failed,please retry.</source>
+-        <translation>Пакетті орнату жаңылысы, қайталауыңызды өтінемін.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="92"/>
+-        <source>Yes</source>
+-        <translation>Иә</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ConfigIPAddressDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="32"/>
+-        <source>Dialog</source>
+-        <translation>Диалог</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="75"/>
+-        <source>Common configuration</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="150"/>
+-        <source>初始地址:api.kylinos.cn</source>
+-        <translation>初始地址:api.kylinos.cn</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="180"/>
+-        <source>Advanced Features</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="30"/>
+-        <source>Configure</source>
+-        <translation>Баптау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="31"/>
+-        <source>Service address:</source>
+-        <translation>Қызмет көрсету мекенжайы:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="32"/>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="34"/>
+-        <source>Enable</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="33"/>
+-        <source>This printer can be used to convert print files to PDF format</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="35"/>
+-        <source>This printer can be used to convert print files to BRF format</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="36"/>
+-        <source>Displays all serial printers</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="37"/>
+-        <source>Cancel</source>
+-        <translation>Болдырмау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="38"/>
+-        <source>Ok</source>
+-        <translation>Жақсы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Warning</source>
+-        <translation>Ескерту</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Config init failed</source>
+-        <translation>Ендіруді баптау жаңылысы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="53"/>
+-        <source>Confirm</source>
+-        <translation>Растау</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CupsDebugLoggingCheckbox</name>
+-    <message>
+-        <location filename="../ui/cups_debug_logging_checkbox.cpp" line="8"/>
+-        <source>Retain debug info for troubleshooting</source>
+-        <translation>Ақауларды жою үшін ақаулықтарды жою туралы ақпаратты сақтау</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomAboutDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_about_dialog.cpp" line="12"/>
+-        <source>Version: </source>
+-        <translation type="unfinished">Нұсқасы: </translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomDoublelineCheckBox</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_doubleline_checkbox.ui" line="14"/>
+-        <source>Form</source>
+-        <translation type="unfinished">Пішін</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DebInstallWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>Пішін</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="75"/>
+-        <source>Driver</source>
+-        <translation>Драйвер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="143"/>
+-        <source>Cancel</source>
+-        <translation>Болдырмау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="162"/>
+-        <source>Confirm</source>
+-        <translation>Растау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="23"/>
+-        <source>Modify Printer Driver</source>
+-        <translation>Принтер драйверін өзгерту</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Error</source>
+-        <translation>Қате</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Modify PPD failed: no PPD selected!</source>
+-        <translation>PPD өзгерту жаңылысы: PPD таңдалмады!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceListButton</name>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="32"/>
+-        <source>Idle</source>
+-        <translation>Idle</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="35"/>
+-        <source>Printing</source>
+-        <translation>Басып шығару</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="38"/>
+-        <source>Stopped</source>
+-        <translation>Тоқтатылды</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="41"/>
+-        <source>Unknow</source>
+-        <translation>Unknow</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="62"/>
+-        <location filename="../ui/device_list_button.cpp" line="264"/>
+-        <location filename="../ui/device_list_button.cpp" line="296"/>
+-        <source>Default</source>
+-        <translation>Әдетті</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="133"/>
+-        <location filename="../ui/device_list_button.cpp" line="163"/>
+-        <source>Set Default</source>
+-        <translation>Әдепкі орнату</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="135"/>
+-        <location filename="../ui/device_list_button.cpp" line="166"/>
+-        <source>Enabled</source>
+-        <translation>Қосулы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="139"/>
+-        <location filename="../ui/device_list_button.cpp" line="169"/>
+-        <source>Shared</source>
+-        <translation>Ортақ пайдаланылған</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceMap</name>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="301"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="303"/>
+-        <source>Printers</source>
+-        <translation>Принтерлер</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="305"/>
+-        <source>plug-in:</source>
+-        <translation>қосылатын модуль:</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="307"/>
+-        <source>unplugged:</source>
+-        <translation>ажыратылған:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EmptyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/right_widget.cpp" line="96"/>
+-        <source>Please click &quot;+&quot; button to add a printer.</source>
+-        <translation>Принтер қосу үшін «+» түймешігін басыңыз.</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EventNotifyMonitor</name>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="430"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="482"/>
+-        <source>Printer </source>
+-        <translation>Принтер </translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="454"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="469"/>
+-        <source>Job:</source>
+-        <translation>Жұмыс орны:</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="456"/>
+-        <source>created!</source>
+-        <translation>жасалған!</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="471"/>
+-        <source>completed!</source>
+-        <translation>аяқталды!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>InkInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/ink_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation type="unfinished">Пішін</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerModel</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="50"/>
+-        <source>Test Page</source>
+-        <translation>Сынақ беті</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="53"/>
+-        <source>untitled</source>
+-        <translation>атақсыз</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="64"/>
+-        <source>unknown</source>
+-        <translation>беймәлім</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="70"/>
+-        <source>Printing page %1</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="261"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="412"/>
+-        <source>Cancel print</source>
+-        <translation>Басып шығарудан бас тарту</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="415"/>
+-        <source>Delete print</source>
+-        <translation>Басып шығаруды жою</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="418"/>
+-        <source>Hold print</source>
+-        <translation>Басып шығаруды ұстап тұру</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="421"/>
+-        <source>Release print</source>
+-        <translation>Басып шығару</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="424"/>
+-        <source>Reprint</source>
+-        <translation>Қайта бояу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="427"/>
+-        <source>Job properties</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Warning</source>
+-        <translation>Ескерту</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <source>Set error: Job status has been updated!</source>
+-        <translation>Қатені орнату: Жұмыс күйі жаңартылды!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="447"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="453"/>
+-        <source>Sure</source>
+-        <translation>Әрине</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Cannot move job to itself!</source>
+-        <translation>Жұмыс орнын өзіне көшіру мүмкін емес!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobMenu</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="108"/>
+-        <source>Cancel print</source>
+-        <translation>Басып шығарудан бас тарту</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="110"/>
+-        <source>Delete print</source>
+-        <translation>Басып шығаруды жою</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="112"/>
+-        <source>Hold print</source>
+-        <translation>Басып шығаруды ұстап тұру</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="114"/>
+-        <source>Release print</source>
+-        <translation>Басып шығару</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="116"/>
+-        <source>Reprint</source>
+-        <translation type="unfinished">Қайта бояу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="118"/>
+-        <source>Use other printer...</source>
+-        <translation>Басқа принтерді пайдалану...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="120"/>
+-        <source>Job properties</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobPropertiesWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="15"/>
+-        <source>Job properties</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="35"/>
+-        <source>name</source>
+-        <translation type="unfinished">атауы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="36"/>
+-        <source>value</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LaunchPrinter</name>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation type="unfinished">Сынақ беті сәтті басылды ма?</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>%1 print result confirmation</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="94"/>
+-        <source>Yes</source>
+-        <translation type="unfinished">Иә</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="96"/>
+-        <source>No</source>
+-        <translation type="unfinished">Жоқ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LeftWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="47"/>
+-        <source>Device List</source>
+-        <translation>Құрылғы тізімі</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="212"/>
+-        <source>Are you sure to delete &quot;%1&quot;?</source>
+-        <translation>&quot;% 1&quot; дегенді міндетті түрде жоясыз ба?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="216"/>
+-        <source>Delete</source>
+-        <translation>Өшіру</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="217"/>
+-        <source>Cancel</source>
+-        <translation>Болдырмау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="360"/>
+-        <source>Set Default Failed!</source>
+-        <translation>Әдепкі жаңылыс!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="362"/>
+-        <source>Warning</source>
+-        <translation>Ескерту</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="364"/>
+-        <source>Close</source>
+-        <translation>Жабу</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWinPropertyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.ui" line="26"/>
+-        <source>Form</source>
+-        <translation>Пішін</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="45"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="47"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="71"/>
+-        <source>Property</source>
+-        <translation>Сипат</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="78"/>
+-        <source>Job List</source>
+-        <translation>Тапсырмалар тізімі</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="85"/>
+-        <source>PrintTest</source>
+-        <translation>PrintTest</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="90"/>
+-        <source>Troubleshooting</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="192"/>
+-        <source>Idle</source>
+-        <translation>Idle</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="194"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="196"/>
+-        <source>Printing</source>
+-        <translation>Басып шығару</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="198"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="200"/>
+-        <source>Stopped</source>
+-        <translation>Тоқтатылды</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="205"/>
+-        <source>Unknown</source>
+-        <translation>Беймәлім</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="229"/>
+-        <source>Are you sure to rename &quot;%1&quot; ?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="233"/>
+-        <source>Rename</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="234"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished">Болдырмау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="230"/>
+-        <source>Warning</source>
+-        <translation>Ескерту</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="231"/>
+-        <source>This action will delete the job queue too!</source>
+-        <translation>Бұл акция жұмыс кезегін де жояды!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWindow</name>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="91"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="225"/>
+-        <source>Delete Failed!</source>
+-        <translation>Өшірілмеді!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="227"/>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Warning</source>
+-        <translation>Ескерту</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="229"/>
+-        <location filename="../ui/mainwindow.cpp" line="269"/>
+-        <source>Close</source>
+-        <translation>Жабу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>Принтер қосу жаңылысы, біраз уақыттан кейін қайталап көріңіз.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="326"/>
+-        <source>Try to connect the Printer...</source>
+-        <translation>Принтерді қосуға тырысыңыз...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Error</source>
+-        <translation>Қате</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Open Printer Failed,Please Del And Add Printer, Then Try Again!</source>
+-        <translation>Принтерді ашу жаңылысы,Del және принтерді қосыңыз, содан кейін қайталап көріңіз!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="333"/>
+-        <source>Sure</source>
+-        <translation>Әрине</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MenuModule</name>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="44"/>
+-        <location filename="../ui/menumodule.cpp" line="73"/>
+-        <source>Help</source>
+-        <translation>Анықтама</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="42"/>
+-        <location filename="../ui/menumodule.cpp" line="70"/>
+-        <source>About</source>
+-        <translation>Шамамен</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="38"/>
+-        <location filename="../ui/menumodule.cpp" line="76"/>
+-        <source>Configure</source>
+-        <translation>Баптау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="40"/>
+-        <location filename="../ui/menumodule.cpp" line="88"/>
+-        <source>Classic Printer</source>
+-        <translation>Классикалық принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="46"/>
+-        <location filename="../ui/menumodule.cpp" line="66"/>
+-        <source>Quit</source>
+-        <translation>Шығу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.h" line="52"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>NewPopWindow</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>Пішін</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="40"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="59"/>
+-        <source>Print Test Page</source>
+-        <translation>Сынақ бетін басып шығару</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="60"/>
+-        <source>View Device</source>
+-        <translation>Құрылғыны қарау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="61"/>
+-        <source>Manual Install</source>
+-        <translation>Қолмен орнату</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="128"/>
+-        <source>Installing......</source>
+-        <translation>Орнату...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="143"/>
+-        <source>Successful installation!</source>
+-        <translation>Орнату сәтті өтті!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="164"/>
+-        <source>Installation failed!</source>
+-        <translation>Орнату жаңылысы!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="188"/>
+-        <source>Printer Detected:</source>
+-        <translation>Принтер анықталды:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Hint</source>
+-        <translation>Тұспал</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>Сынақ беті сәтті басылды ма?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="206"/>
+-        <source>Yes</source>
+-        <translation>Иә</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="207"/>
+-        <source>No</source>
+-        <translation>Жоқ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>Сынақ басып шығару жаңылысы. Принтер драйверін өзгерткіңіз келе ме?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="213"/>
+-        <source>Change Driver</source>
+-        <translation>Драйверді өзгерту</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="214"/>
+-        <source>Cancel</source>
+-        <translation>Болдырмау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Error</source>
+-        <translation>Қате</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Failed to start, please try to add the printer again!</source>
+-        <translation>Басталмады, принтерді қайта қосуға тырысыңыз!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="229"/>
+-        <source>Ok</source>
+-        <translation>Жақсы</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PopWindowManager</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Do you want to add a printer?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>The printer was detected:%1</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Add</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="167"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="170"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="172"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="223"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="237"/>
+-        <source>%1 installation failed</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>%1 successful installation</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="222"/>
+-        <source>No printer driver for %1.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>Print test page</source>
+-        <translation type="unfinished">Сынақ бетін басып шығару</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyListWindow</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.ui" line="26"/>
+-        <source>PropertyListWindow</source>
+-        <translation>PropertyListWindow</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="9"/>
+-        <source>Cancel</source>
+-        <translation>Болдырмау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="10"/>
+-        <source>Confirm</source>
+-        <translation>Растау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="11"/>
+-        <source>Refresh</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyManagerModel</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="139"/>
+-        <source>Model:</source>
+-        <translation>Үлгі:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="140"/>
+-        <source>Status:</source>
+-        <translation>Күйі:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="141"/>
+-        <source>Location:</source>
+-        <translation>Орналасқан жері:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="142"/>
+-        <source>Driver:</source>
+-        <translation>Драйвер:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="23"/>
+-        <source>base</source>
+-        <translation>базистік</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="36"/>
+-        <source>Ink</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="40"/>
+-        <source>advanced</source>
+-        <translation>алдыңғы қатарлы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="58"/>
+-        <source>PrinterProperty</source>
+-        <translation>PrinterProperty</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="95"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="163"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="327"/>
+-        <source>Name</source>
+-        <translation>Атауы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="96"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="166"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="331"/>
+-        <source>Location</source>
+-        <translation>Орналасуы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="97"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="170"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="335"/>
+-        <source>Status</source>
+-        <translation>Күйі</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="98"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="339"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="380"/>
+-        <source>Driver</source>
+-        <translation>Драйвер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="101"/>
+-        <source>Modify</source>
+-        <translation>Өзгерту</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="103"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="193"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="343"/>
+-        <source>URI</source>
+-        <translation>URI</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="127"/>
+-        <source> (level: %1%)</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="172"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="174"/>
+-        <source>Idle</source>
+-        <translation>Idle</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="176"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="178"/>
+-        <source>Printing</source>
+-        <translation>Басып шығару</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="180"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="182"/>
+-        <source>Stopped</source>
+-        <translation>Тоқтатылды</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="187"/>
+-        <source>Unknow</source>
+-        <translation>Unknow</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="396"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="412"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="423"/>
+-        <source>Warning</source>
+-        <translation>Ескерту</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <source>Error happened, all options restored!.</source>
+-        <translation>Қате болды, барлық параметрлер қалпына келтірілді!.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="232"/>
+-        <source>Confirm</source>
+-        <translation>Растау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="269"/>
+-        <source>Conflict with &quot;%1&quot;</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="395"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>Принтер атауында &apos;/\&apos;&apos;?#&apos;, ал 0 әріптен артық, 128 әріптен кем болуы мүмкін емес!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="398"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="414"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="425"/>
+-        <source>Close</source>
+-        <translation>Жабу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="411"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>Сол атаудағы принтер бар!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="422"/>
+-        <source>Printer Name Illegal!</source>
+-        <translation>Принтердің атауы Заңсыз!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ProperytItemWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="217"/>
+-        <source>Idle</source>
+-        <translation>Idle</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="220"/>
+-        <source>Printing</source>
+-        <translation>Басып шығару</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="223"/>
+-        <source>Stopped</source>
+-        <translation>Тоқтатылды</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="226"/>
+-        <source>Unknow</source>
+-        <translation>Unknow</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>QObject</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="32"/>
+-        <source>id</source>
+-        <translation>id</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="33"/>
+-        <source>user</source>
+-        <translation>пайдаланушы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="34"/>
+-        <source>title</source>
+-        <translation>тақырыбы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="35"/>
+-        <source>printer name</source>
+-        <translation>принтер атауы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="36"/>
+-        <source>size</source>
+-        <translation>өлшемі</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="37"/>
+-        <source>create time</source>
+-        <translation>уақыт жасау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="38"/>
+-        <source>job state</source>
+-        <translation>жұмыс орнының жай-күйі</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="44"/>
+-        <source>Job is waiting to be printed</source>
+-        <translation>Жұмыс басылуын күтуде</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="45"/>
+-        <source>Job is held for printing</source>
+-        <translation>Баспа үшін жұмыс жүргізіледі</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="46"/>
+-        <source>Job is currently printing</source>
+-        <translation>Қазіргі уақытта жұмыс орны басып шығарылуда</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="47"/>
+-        <source>Job has been stopped</source>
+-        <translation>Жұмыс тоқтатылды</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="48"/>
+-        <source>Job has been canceled</source>
+-        <translation>Жұмыс тоқтатылды</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="49"/>
+-        <source>Job has aborted due to error</source>
+-        <translation>Қатеге байланысты жұмыс доғарылды</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="50"/>
+-        <source>Job has completed successfully</source>
+-        <translation>Жұмыс сәтті аяқталды</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>RenamePrinterDialog</name>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="26"/>
+-        <source>RenamePrinterDialog</source>
+-        <translation>RenamePrinterDialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="148"/>
+-        <source>Cancel</source>
+-        <translation>Болдырмау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="167"/>
+-        <source>Ok</source>
+-        <translation>Жақсы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.cpp" line="11"/>
+-        <source>Printer Name</source>
+-        <translation>Принтер атауы</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SelectPpdDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="26"/>
+-        <source>SelectPpdDialog</source>
+-        <translation>PelectPdDialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="203"/>
+-        <source>Cancel</source>
+-        <translation>Болдырмау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="247"/>
+-        <source>Apply</source>
+-        <translation>Қолдану</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="23"/>
+-        <source>Select Driver</source>
+-        <translation>Драйверді таңдау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="56"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="85"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="266"/>
+-        <source>driver</source>
+-        <translation>драйвер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="57"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="71"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="232"/>
+-        <source>vendor</source>
+-        <translation>жеткізуші</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="195"/>
+-        <source>Reading Drivers,Please Wait...</source>
+-        <translation>Драйверлерді оқу,Күте тұрыңыз...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="319"/>
+-        <source>Please Choose Model And Vender!</source>
+-        <translation>Үлгі мен вендерді таңдауыңызды сұраймын!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="320"/>
+-        <source>Warning</source>
+-        <translation>Ескерту</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="322"/>
+-        <source>Close</source>
+-        <translation>Жабу</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbAuthInfoDialog</name>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.ui" line="26"/>
+-        <source>SmbAuthInfoDialog</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="13"/>
+-        <source>Authentication</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="14"/>
+-        <source>Authentication is required to connect to the printer &quot;%1&quot;</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="15"/>
+-        <source>Username</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="16"/>
+-        <source>Password</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="17"/>
+-        <source>Workgroup</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="18"/>
+-        <source>Accept</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="19"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished">Болдырмау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="37"/>
+-        <source>Authentication in progress. Please wait...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="58"/>
+-        <source>Warning</source>
+-        <translation type="unfinished">Ескерту</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="59"/>
+-        <source>Confirm</source>
+-        <translation type="unfinished">Растау</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbClientHelper</name>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="175"/>
+-        <source>Cannot connect to %1!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="180"/>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="187"/>
+-        <source>Wrong user name or password!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="192"/>
+-        <source>The samba server shared printer list is empty</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SystemNotification</name>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="21"/>
+-        <source>Printer Info</source>
+-        <translation>Принтер ақпараты</translation>
+-    </message>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="36"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TrayWin</name>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="33"/>
+-        <source>Minimize</source>
+-        <translation>Кішірейту</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="39"/>
+-        <source>Maximize</source>
+-        <translation>Барынша көбейту</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="45"/>
+-        <source>Quit</source>
+-        <translation>Шығу</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingDialog</name>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.ui" line="14"/>
+-        <source>TroubleshootingDialog</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="24"/>
+-        <source>Troubleshooting</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="25"/>
+-        <source>Accept</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="26"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished">Болдырмау</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="27"/>
+-        <source>Repair</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="77"/>
+-        <source>Check whether the CUPS service is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="87"/>
+-        <source>CUPS service is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="90"/>
+-        <source>CUPS service is not enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="105"/>
+-        <source>Check CUPS user access rights</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="116"/>
+-        <source>CUPS users can access normally</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="119"/>
+-        <source>CUPS user restricted access rights</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="133"/>
+-        <source>Check whether the printer connection is normal</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="152"/>
+-        <source>Printer connected</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="155"/>
+-        <source>Printer disconnected</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="186"/>
+-        <source>Check whether the printer protocol port configuration is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="194"/>
+-        <source>Printer protocol port configuration is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="197"/>
+-        <source>Printer protocol port is not configured to be enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Error</source>
+-        <translation type="unfinished">Қате</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Automatic repair failed and manual troubleshooting is required.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="208"/>
+-        <source>Confirm</source>
+-        <translation type="unfinished">Растау</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/troubleshooting_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation type="unfinished">Пішін</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>UkuiPrinterManager</name>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="340"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1499"/>
+-        <source>Idle</source>
+-        <translation>Idle</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="342"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1501"/>
+-        <source>Printing</source>
+-        <translation>Басып шығару</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="344"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1503"/>
+-        <source>Stopped</source>
+-        <translation>Тоқтатылды</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="438"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>Принтер атауында &apos;/\&apos;&apos;?#&apos;, ал 0 әріптен артық, 128 әріптен кем болуы мүмкін емес!</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="455"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>Сол атаудағы принтер бар!</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="458"/>
+-        <source>Printer name is not case sensitive!</source>
+-        <translation>Принтер атауы кейске сезімтал емес!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>WaitingDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="32"/>
+-        <source>Widget</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="87"/>
+-        <source>TextLabel</source>
+-        <translation type="unfinished">TextLabel</translation>
+-    </message>
+-</context>
+-</TS>
+diff --git a/daemons/sessionservice/printerbackend/translations/kylin-printer_ky.ts b/daemons/sessionservice/printerbackend/translations/kylin-printer_ky.ts
+deleted file mode 100644
+index 860578f..0000000
+--- a/daemons/sessionservice/printerbackend/translations/kylin-printer_ky.ts
++++ /dev/null
+@@ -1,1741 +0,0 @@
+-<?xml version="1.0" encoding="utf-8"?>
+-<!DOCTYPE TS>
+-<TS version="2.1" language="ky">
+-<context>
+-    <name></name>
+-    <message>
+-        <location filename="../kylin-printer.desktop.in.h" line="1"/>
+-        <source>Printer</source>
+-        <translation>Принтерлер</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/data/kylin-printer-applet.desktop.in.h" line="1"/>
+-        <source>Printer-backend</source>
+-        <translation>Принтерлер-колдоосу</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AddPrinterWindow</name>
+-    <message>
+-        <location filename="../ui/add_printer_window.ui" line="26"/>
+-        <source>AddPrinterWindow</source>
+-        <translation>АддПринтерВиндоу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="136"/>
+-        <source>Add Printer</source>
+-        <translation>Принтер кошуу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="148"/>
+-        <source>Auto</source>
+-        <translation>Авто</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="149"/>
+-        <location filename="../ui/add_printer_window.cpp" line="191"/>
+-        <source>Manual</source>
+-        <translation>Колдонмо</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="161"/>
+-        <source>Device List</source>
+-        <translation>Түзмөк тизмеси</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="192"/>
+-        <source>Protocol</source>
+-        <translation>Протокол</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="193"/>
+-        <source>Address</source>
+-        <translation>Дареги</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="199"/>
+-        <source>Search</source>
+-        <translation>Издөө</translation>
+-    </message>
+-    <message>
+-        <source>socket</source>
+-        <translation type="vanished">розетка</translation>
+-    </message>
+-    <message>
+-        <source>ipp</source>
+-        <translation type="vanished">ипп</translation>
+-    </message>
+-    <message>
+-        <source>http</source>
+-        <translation type="vanished">Http</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="213"/>
+-        <source>name</source>
+-        <translation>аты</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="214"/>
+-        <source>location</source>
+-        <translation>жайгашкан жери</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="215"/>
+-        <source>driver</source>
+-        <translation>айдоочу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="220"/>
+-        <source>forward</source>
+-        <translation>алдыга</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Error</source>
+-        <translation>Ката</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <source>Add printer failed: no PPD selected!</source>
+-        <translation>Принтер кошуу ишке ашпады: ППД тандалган жок!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>Принтер кошуу ишке ашпады,сураныч, бир аз убакыт өткөндөн кийин кайра кирүү.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="304"/>
+-        <location filename="../ui/add_printer_window.cpp" line="314"/>
+-        <location filename="../ui/add_printer_window.cpp" line="333"/>
+-        <location filename="../ui/add_printer_window.cpp" line="433"/>
+-        <location filename="../ui/add_printer_window.cpp" line="443"/>
+-        <location filename="../ui/add_printer_window.cpp" line="561"/>
+-        <location filename="../ui/add_printer_window.cpp" line="603"/>
+-        <location filename="../ui/add_printer_window.cpp" line="648"/>
+-        <location filename="../ui/add_printer_window.cpp" line="687"/>
+-        <source>Confirm</source>
+-        <translation>Ырастоосу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Hint</source>
+-        <translation>Хинт</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <source>Add printer successfully,printer a test page?</source>
+-        <translation>Принтерди ийгиликтүү кошуу,принтер тест баракчасы?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="313"/>
+-        <source>Print test page</source>
+-        <translation>Тест бетин басып чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="321"/>
+-        <source>Success</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="322"/>
+-        <source>Fail</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <source>Automatic driver configuration failed, please select the driver manually.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="578"/>
+-        <source>Searching for driver...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <source>Failed to search for driver. Do you want to use local driver?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="620"/>
+-        <source>It is detected that the driver comes from the Internet. Do you want to continue the installation?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="625"/>
+-        <source>Install</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="639"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="642"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="659"/>
+-        <source>Installing printer driver...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <source>Driver installation failed. Do you want to use local driver?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>Сыноо баракчасы ийгиликтүү басылып чыктыбы?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>Тест басып чыгаруу ишке ашпады. Принтер драйверин өзгөртүүнү каалайсызбы?</translation>
+-    </message>
+-    <message>
+-        <source>Change Driver</source>
+-        <translation type="vanished">Драйверди өзгөртүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="604"/>
+-        <location filename="../ui/add_printer_window.cpp" line="626"/>
+-        <location filename="../ui/add_printer_window.cpp" line="688"/>
+-        <source>Cancel</source>
+-        <translation>Жокко чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="362"/>
+-        <source>Searching printers...</source>
+-        <translation>Принтерлерди издөө...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <source>Can not find this Printer!</source>
+-        <translation>Бул Принтер таба албайт!</translation>
+-    </message>
+-    <message>
+-        <source>Searching printer driver...</source>
+-        <translation type="vanished">Принтер драйверин издөө...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="432"/>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <location filename="../ui/add_printer_window.cpp" line="622"/>
+-        <location filename="../ui/add_printer_window.cpp" line="645"/>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <location filename="../ui/add_printer_window.cpp" line="747"/>
+-        <source>Warning</source>
+-        <translation>Эскертүү</translation>
+-    </message>
+-    <message>
+-        <source>Install driver package automatically failed,continue?</source>
+-        <translation type="vanished">Драйвер пакетин орнотуу автоматтык түрдө ишке ашпады,улантуу?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="749"/>
+-        <source>Close</source>
+-        <translation>Жабуу</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AutoSearchResultModel</name>
+-    <message>
+-        <location filename="../ui/auto_search_result_model.cpp" line="49"/>
+-        <location filename="../ui/auto_search_result_model.cpp" line="51"/>
+-        <source>network</source>
+-        <translation>тармак</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseInfo</name>
+-    <message>
+-        <location filename="../common/base_info.cpp" line="64"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseNotifyDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="35"/>
+-        <source>Dialog</source>
+-        <translation>Диалог</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="124"/>
+-        <source>TextLabel</source>
+-        <translation>ТекстЛабель</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ChoosePpdComboBox</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="15"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="22"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="137"/>
+-        <source>Choose PPD</source>
+-        <translation>ППД тандоо</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="16"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="25"/>
+-        <source>Choose from the PPD library</source>
+-        <translation>ППД китепканасынан тандоо</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="17"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="29"/>
+-        <source>Add local PPD</source>
+-        <translation>Жергиликтүү ППД кошуу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="48"/>
+-        <source>Please select a deb package.</source>
+-        <translation>Сураныч, дебют пакетин тандаңыз.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="50"/>
+-        <source>Deb File(*.deb)</source>
+-        <translation>Деб Файл (*.deb)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="51"/>
+-        <source>Choose</source>
+-        <translation>Тандоо</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="52"/>
+-        <source>Cancel</source>
+-        <translation>Жокко чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="69"/>
+-        <source>Searching driver...</source>
+-        <translation>Издөө драйвери...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Warning</source>
+-        <translation>Эскертүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Install package failed,please retry.</source>
+-        <translation>Пакетти орнотуу ишке ашпады,сураныч, кайра киргиле.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="92"/>
+-        <source>Yes</source>
+-        <translation>Ооба</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ConfigIPAddressDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="32"/>
+-        <source>Dialog</source>
+-        <translation>Диалог</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="75"/>
+-        <source>Common configuration</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="150"/>
+-        <source>初始地址:api.kylinos.cn</source>
+-        <translation>初始地址:api.kylinos.cn</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="180"/>
+-        <source>Advanced Features</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="30"/>
+-        <source>Configure</source>
+-        <translation>Конфигур</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="31"/>
+-        <source>Service address:</source>
+-        <translation>Кызмат дареги:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="32"/>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="34"/>
+-        <source>Enable</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="33"/>
+-        <source>This printer can be used to convert print files to PDF format</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="35"/>
+-        <source>This printer can be used to convert print files to BRF format</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="36"/>
+-        <source>Displays all serial printers</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="37"/>
+-        <source>Cancel</source>
+-        <translation>Жокко чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="38"/>
+-        <source>Ok</source>
+-        <translation>Макул</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Warning</source>
+-        <translation>Эскертүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Config init failed</source>
+-        <translation>Конфиг ингити ишке ашпады</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="53"/>
+-        <source>Confirm</source>
+-        <translation>Ырастоосу</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CupsDebugLoggingCheckbox</name>
+-    <message>
+-        <location filename="../ui/cups_debug_logging_checkbox.cpp" line="8"/>
+-        <source>Retain debug info for troubleshooting</source>
+-        <translation>Көйгөйлөрдү жоюу үчүн дебуг маалыматын сактагыла</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomAboutDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_about_dialog.cpp" line="12"/>
+-        <source>Version: </source>
+-        <translation type="unfinished">Версиясы: </translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomDoublelineCheckBox</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_doubleline_checkbox.ui" line="14"/>
+-        <source>Form</source>
+-        <translation type="unfinished">Форма</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DebInstallWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>Форма</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="75"/>
+-        <source>Driver</source>
+-        <translation>Драйвер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="143"/>
+-        <source>Cancel</source>
+-        <translation>Жокко чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="162"/>
+-        <source>Confirm</source>
+-        <translation>Ырастоосу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="23"/>
+-        <source>Modify Printer Driver</source>
+-        <translation>Принтер драйверин өзгөртүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Error</source>
+-        <translation>Ката</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Modify PPD failed: no PPD selected!</source>
+-        <translation>ППДны өзгөртүү ишке ашпады: ППД тандалган жок!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceListButton</name>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="32"/>
+-        <source>Idle</source>
+-        <translation>Бош</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="35"/>
+-        <source>Printing</source>
+-        <translation>Басып чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="38"/>
+-        <source>Stopped</source>
+-        <translation>Токтотулган</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="41"/>
+-        <source>Unknow</source>
+-        <translation>Билбестик</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="62"/>
+-        <location filename="../ui/device_list_button.cpp" line="264"/>
+-        <location filename="../ui/device_list_button.cpp" line="296"/>
+-        <source>Default</source>
+-        <translation>Дефолт</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="133"/>
+-        <location filename="../ui/device_list_button.cpp" line="163"/>
+-        <source>Set Default</source>
+-        <translation>Дефолтту орнотуу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="135"/>
+-        <location filename="../ui/device_list_button.cpp" line="166"/>
+-        <source>Enabled</source>
+-        <translation>Иштетилген</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="139"/>
+-        <location filename="../ui/device_list_button.cpp" line="169"/>
+-        <source>Shared</source>
+-        <translation>Бөлүштүрүлгөн</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceMap</name>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="301"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="303"/>
+-        <source>Printers</source>
+-        <translation>Принтерлер</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="305"/>
+-        <source>plug-in:</source>
+-        <translation>плагин:</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="307"/>
+-        <source>unplugged:</source>
+-        <translation>өчүрүлбөгөн:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EmptyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/right_widget.cpp" line="96"/>
+-        <source>Please click &quot;+&quot; button to add a printer.</source>
+-        <translation>Принтер кошуу үчүн &quot;+&quot; баскычын басыңыз.</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EventNotifyMonitor</name>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="430"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="482"/>
+-        <source>Printer </source>
+-        <translation>Принтер </translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="454"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="469"/>
+-        <source>Job:</source>
+-        <translation>Аюб:</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="456"/>
+-        <source>created!</source>
+-        <translation>түзүлгөн!</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="471"/>
+-        <source>completed!</source>
+-        <translation>аяктады!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>InkInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/ink_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation type="unfinished">Форма</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerModel</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="50"/>
+-        <source>Test Page</source>
+-        <translation>Тест баракчасы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="53"/>
+-        <source>untitled</source>
+-        <translation>чексиз</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="64"/>
+-        <source>unknown</source>
+-        <translation>белгисиз</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="70"/>
+-        <source>Printing page %1</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="261"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="412"/>
+-        <source>Cancel print</source>
+-        <translation>Басып чыгарууну жокко чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="415"/>
+-        <source>Delete print</source>
+-        <translation>Басып чыгарууну жоготуу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="418"/>
+-        <source>Hold print</source>
+-        <translation>Басып чыгарууну өткөрүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="421"/>
+-        <source>Release print</source>
+-        <translation>Басып чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="424"/>
+-        <source>Reprint</source>
+-        <translation>Кайра боёлуу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="427"/>
+-        <source>Job properties</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Warning</source>
+-        <translation>Эскертүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <source>Set error: Job status has been updated!</source>
+-        <translation>Катаны коюу: Аюб статусу жаңыланды!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="447"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="453"/>
+-        <source>Sure</source>
+-        <translation>Албетте</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Cannot move job to itself!</source>
+-        <translation>Жумушту өзүнө көчүрүү мүмкүн эмес!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobMenu</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="108"/>
+-        <source>Cancel print</source>
+-        <translation>Басып чыгарууну жокко чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="110"/>
+-        <source>Delete print</source>
+-        <translation>Басып чыгарууну жоготуу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="112"/>
+-        <source>Hold print</source>
+-        <translation>Басып чыгарууну өткөрүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="114"/>
+-        <source>Release print</source>
+-        <translation>Басып чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="116"/>
+-        <source>Reprint</source>
+-        <translation type="unfinished">Кайра боёлуу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="118"/>
+-        <source>Use other printer...</source>
+-        <translation>Башка принтер колдонуу...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="120"/>
+-        <source>Job properties</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobPropertiesWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="15"/>
+-        <source>Job properties</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="35"/>
+-        <source>name</source>
+-        <translation type="unfinished">аты</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="36"/>
+-        <source>value</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LaunchPrinter</name>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation type="unfinished">Сыноо баракчасы ийгиликтүү басылып чыктыбы?</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>%1 print result confirmation</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="94"/>
+-        <source>Yes</source>
+-        <translation type="unfinished">Ооба</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="96"/>
+-        <source>No</source>
+-        <translation type="unfinished">Жок</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LeftWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="47"/>
+-        <source>Device List</source>
+-        <translation>Түзмөк тизмеси</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="212"/>
+-        <source>Are you sure to delete &quot;%1&quot;?</source>
+-        <translation>&quot;%1&quot;-ды жоготосуңарбы?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="216"/>
+-        <source>Delete</source>
+-        <translation>Жоготуу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="217"/>
+-        <source>Cancel</source>
+-        <translation>Жокко чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="360"/>
+-        <source>Set Default Failed!</source>
+-        <translation>Дефолтту орнотуу ишке ашпады!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="362"/>
+-        <source>Warning</source>
+-        <translation>Эскертүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="364"/>
+-        <source>Close</source>
+-        <translation>Жабуу</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWinPropertyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.ui" line="26"/>
+-        <source>Form</source>
+-        <translation>Форма</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="45"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="47"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="71"/>
+-        <source>Property</source>
+-        <translation>Мүлк</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="78"/>
+-        <source>Job List</source>
+-        <translation>Аюб тизмеси</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="85"/>
+-        <source>PrintTest</source>
+-        <translation>PrintTest</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="90"/>
+-        <source>Troubleshooting</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="192"/>
+-        <source>Idle</source>
+-        <translation>Бош</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="194"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="196"/>
+-        <source>Printing</source>
+-        <translation>Басып чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="198"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="200"/>
+-        <source>Stopped</source>
+-        <translation>Токтотулган</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="205"/>
+-        <source>Unknown</source>
+-        <translation>Белгисиз</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="229"/>
+-        <source>Are you sure to rename &quot;%1&quot; ?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="233"/>
+-        <source>Rename</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="234"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished">Жокко чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="230"/>
+-        <source>Warning</source>
+-        <translation>Эскертүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="231"/>
+-        <source>This action will delete the job queue too!</source>
+-        <translation>Бул акция жумуш кезегин да жоготот!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWindow</name>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="91"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="225"/>
+-        <source>Delete Failed!</source>
+-        <translation>Жоготуу ишке ашпады!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="227"/>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Warning</source>
+-        <translation>Эскертүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="229"/>
+-        <location filename="../ui/mainwindow.cpp" line="269"/>
+-        <source>Close</source>
+-        <translation>Жабуу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>Принтер кошуу ишке ашпады,сураныч, бир аз убакыт өткөндөн кийин кайра кирүү.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="326"/>
+-        <source>Try to connect the Printer...</source>
+-        <translation>Принтер туташтырууга аракет...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Error</source>
+-        <translation>Ката</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Open Printer Failed,Please Del And Add Printer, Then Try Again!</source>
+-        <translation>Ачык Принтер ишке ашпады,Сураныч, Дель жана Принтер кошуу, Андан кийин кайра аракет!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="333"/>
+-        <source>Sure</source>
+-        <translation>Албетте</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MenuModule</name>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="44"/>
+-        <location filename="../ui/menumodule.cpp" line="73"/>
+-        <source>Help</source>
+-        <translation>Жардам</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="42"/>
+-        <location filename="../ui/menumodule.cpp" line="70"/>
+-        <source>About</source>
+-        <translation>Жөнүндө</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="38"/>
+-        <location filename="../ui/menumodule.cpp" line="76"/>
+-        <source>Configure</source>
+-        <translation>Конфигур</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="40"/>
+-        <location filename="../ui/menumodule.cpp" line="88"/>
+-        <source>Classic Printer</source>
+-        <translation>Классикалык принтерлер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="46"/>
+-        <location filename="../ui/menumodule.cpp" line="66"/>
+-        <source>Quit</source>
+-        <translation>Чыгуу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.h" line="52"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>NewPopWindow</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>Форма</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="40"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="59"/>
+-        <source>Print Test Page</source>
+-        <translation>Тест бетин басып чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="60"/>
+-        <source>View Device</source>
+-        <translation>Түзмөк көрүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="61"/>
+-        <source>Manual Install</source>
+-        <translation>Кол менен орнотуу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="128"/>
+-        <source>Installing......</source>
+-        <translation>Орнотуу ......</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="143"/>
+-        <source>Successful installation!</source>
+-        <translation>Ийгиликтүү орнотуу!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="164"/>
+-        <source>Installation failed!</source>
+-        <translation>Орнотуу ишке ашпады!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="188"/>
+-        <source>Printer Detected:</source>
+-        <translation>Принтер аныкталды:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Hint</source>
+-        <translation>Хинт</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>Сыноо баракчасы ийгиликтүү басылып чыктыбы?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="206"/>
+-        <source>Yes</source>
+-        <translation>Ооба</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="207"/>
+-        <source>No</source>
+-        <translation>Жок</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>Тест басып чыгаруу ишке ашпады. Принтер драйверин өзгөртүүнү каалайсызбы?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="213"/>
+-        <source>Change Driver</source>
+-        <translation>Драйверди өзгөртүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="214"/>
+-        <source>Cancel</source>
+-        <translation>Жокко чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Error</source>
+-        <translation>Ката</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Failed to start, please try to add the printer again!</source>
+-        <translation>Баштоо ишке ашпады, принтер кошууга аракет кылыңыз!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="229"/>
+-        <source>Ok</source>
+-        <translation>Макул</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PopWindowManager</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Do you want to add a printer?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>The printer was detected:%1</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Add</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="167"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="170"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="172"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="223"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="237"/>
+-        <source>%1 installation failed</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>%1 successful installation</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="222"/>
+-        <source>No printer driver for %1.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>Print test page</source>
+-        <translation type="unfinished">Тест бетин басып чыгаруу</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyListWindow</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.ui" line="26"/>
+-        <source>PropertyListWindow</source>
+-        <translation>PropertyListWindow</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="9"/>
+-        <source>Cancel</source>
+-        <translation>Жокко чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="10"/>
+-        <source>Confirm</source>
+-        <translation>Ырастоосу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="11"/>
+-        <source>Refresh</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyManagerModel</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="139"/>
+-        <source>Model:</source>
+-        <translation>Модели:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="140"/>
+-        <source>Status:</source>
+-        <translation>Абалы:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="141"/>
+-        <source>Location:</source>
+-        <translation>Жайгашкан жери:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="142"/>
+-        <source>Driver:</source>
+-        <translation>Драйвер:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="23"/>
+-        <source>base</source>
+-        <translation>база</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="36"/>
+-        <source>Ink</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="40"/>
+-        <source>advanced</source>
+-        <translation>өнүккөн</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="58"/>
+-        <source>PrinterProperty</source>
+-        <translation>ПринтерПроперти</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="95"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="163"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="327"/>
+-        <source>Name</source>
+-        <translation>Аты-жөнү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="96"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="166"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="331"/>
+-        <source>Location</source>
+-        <translation>Жайгашкан жери</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="97"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="170"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="335"/>
+-        <source>Status</source>
+-        <translation>Абалы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="98"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="339"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="380"/>
+-        <source>Driver</source>
+-        <translation>Драйвер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="101"/>
+-        <source>Modify</source>
+-        <translation>Өзгөртүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="103"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="193"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="343"/>
+-        <source>URI</source>
+-        <translation>URI</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="127"/>
+-        <source> (level: %1%)</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="172"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="174"/>
+-        <source>Idle</source>
+-        <translation>Бош</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="176"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="178"/>
+-        <source>Printing</source>
+-        <translation>Басып чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="180"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="182"/>
+-        <source>Stopped</source>
+-        <translation>Токтотулган</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="187"/>
+-        <source>Unknow</source>
+-        <translation>Билбестик</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="396"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="412"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="423"/>
+-        <source>Warning</source>
+-        <translation>Эскертүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <source>Error happened, all options restored!.</source>
+-        <translation>Ката болду, бардык параметрлери калыбына келтирилди!.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="232"/>
+-        <source>Confirm</source>
+-        <translation>Ырастоосу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="269"/>
+-        <source>Conflict with &quot;%1&quot;</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="395"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>Принтер аты &apos;/&apos;,#&apos;, жана 0-дан ашык кат, 128 каттан аз !</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="398"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="414"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="425"/>
+-        <source>Close</source>
+-        <translation>Жабуу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="411"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>Бар ошол эле аты Принтер!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="422"/>
+-        <source>Printer Name Illegal!</source>
+-        <translation>Принтер аты Мыйзамсыз!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ProperytItemWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="217"/>
+-        <source>Idle</source>
+-        <translation>Бош</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="220"/>
+-        <source>Printing</source>
+-        <translation>Басып чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="223"/>
+-        <source>Stopped</source>
+-        <translation>Токтотулган</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="226"/>
+-        <source>Unknow</source>
+-        <translation>Билбестик</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>QObject</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="32"/>
+-        <source>id</source>
+-        <translation>идентификация</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="33"/>
+-        <source>user</source>
+-        <translation>колдонуучу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="34"/>
+-        <source>title</source>
+-        <translation>аталышы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="35"/>
+-        <source>printer name</source>
+-        <translation>Принтер аты</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="36"/>
+-        <source>size</source>
+-        <translation>өлчөмү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="37"/>
+-        <source>create time</source>
+-        <translation>убакыт түзүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="38"/>
+-        <source>job state</source>
+-        <translation>жумуш абалы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="44"/>
+-        <source>Job is waiting to be printed</source>
+-        <translation>Аюб басып чыгарууну күтүп жатат</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="45"/>
+-        <source>Job is held for printing</source>
+-        <translation>Аюб басып чыгаруу үчүн өткөрүлөт</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="46"/>
+-        <source>Job is currently printing</source>
+-        <translation>Азыркы учурда Аюб басып чыгарууда</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="47"/>
+-        <source>Job has been stopped</source>
+-        <translation>Аюб токтотулган</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="48"/>
+-        <source>Job has been canceled</source>
+-        <translation>Аюб жокко чыгарылган</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="49"/>
+-        <source>Job has aborted due to error</source>
+-        <translation>Аюб катадан улам токтоп калды</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="50"/>
+-        <source>Job has completed successfully</source>
+-        <translation>Аюб ийгиликтүү аяктады</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>RenamePrinterDialog</name>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="26"/>
+-        <source>RenamePrinterDialog</source>
+-        <translation>RenamePrinterDialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="148"/>
+-        <source>Cancel</source>
+-        <translation>Жокко чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="167"/>
+-        <source>Ok</source>
+-        <translation>Макул</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.cpp" line="11"/>
+-        <source>Printer Name</source>
+-        <translation>Принтер аты</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SelectPpdDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="26"/>
+-        <source>SelectPpdDialog</source>
+-        <translation>SelectPpdDialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="203"/>
+-        <source>Cancel</source>
+-        <translation>Жокко чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="247"/>
+-        <source>Apply</source>
+-        <translation>Колдонуу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="23"/>
+-        <source>Select Driver</source>
+-        <translation>Драйверди тандоо</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="56"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="85"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="266"/>
+-        <source>driver</source>
+-        <translation>айдоочу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="57"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="71"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="232"/>
+-        <source>vendor</source>
+-        <translation>сатуучу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="195"/>
+-        <source>Reading Drivers,Please Wait...</source>
+-        <translation>Окуу Драйверлер,Сураныч, күтүү...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="319"/>
+-        <source>Please Choose Model And Vender!</source>
+-        <translation>Сураныч, Модели жана Вердер тандоо!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="320"/>
+-        <source>Warning</source>
+-        <translation>Эскертүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="322"/>
+-        <source>Close</source>
+-        <translation>Жабуу</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbAuthInfoDialog</name>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.ui" line="26"/>
+-        <source>SmbAuthInfoDialog</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="13"/>
+-        <source>Authentication</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="14"/>
+-        <source>Authentication is required to connect to the printer &quot;%1&quot;</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="15"/>
+-        <source>Username</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="16"/>
+-        <source>Password</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="17"/>
+-        <source>Workgroup</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="18"/>
+-        <source>Accept</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="19"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished">Жокко чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="37"/>
+-        <source>Authentication in progress. Please wait...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="58"/>
+-        <source>Warning</source>
+-        <translation type="unfinished">Эскертүү</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="59"/>
+-        <source>Confirm</source>
+-        <translation type="unfinished">Ырастоосу</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbClientHelper</name>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="175"/>
+-        <source>Cannot connect to %1!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="180"/>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="187"/>
+-        <source>Wrong user name or password!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="192"/>
+-        <source>The samba server shared printer list is empty</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SystemNotification</name>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="21"/>
+-        <source>Printer Info</source>
+-        <translation>Принтер Инфо</translation>
+-    </message>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="36"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TrayWin</name>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="33"/>
+-        <source>Minimize</source>
+-        <translation>Минималдуу</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="39"/>
+-        <source>Maximize</source>
+-        <translation>Максималдуу</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="45"/>
+-        <source>Quit</source>
+-        <translation>Чыгуу</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingDialog</name>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.ui" line="14"/>
+-        <source>TroubleshootingDialog</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="24"/>
+-        <source>Troubleshooting</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="25"/>
+-        <source>Accept</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="26"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished">Жокко чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="27"/>
+-        <source>Repair</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="77"/>
+-        <source>Check whether the CUPS service is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="87"/>
+-        <source>CUPS service is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="90"/>
+-        <source>CUPS service is not enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="105"/>
+-        <source>Check CUPS user access rights</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="116"/>
+-        <source>CUPS users can access normally</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="119"/>
+-        <source>CUPS user restricted access rights</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="133"/>
+-        <source>Check whether the printer connection is normal</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="152"/>
+-        <source>Printer connected</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="155"/>
+-        <source>Printer disconnected</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="186"/>
+-        <source>Check whether the printer protocol port configuration is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="194"/>
+-        <source>Printer protocol port configuration is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="197"/>
+-        <source>Printer protocol port is not configured to be enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Error</source>
+-        <translation type="unfinished">Ката</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Automatic repair failed and manual troubleshooting is required.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="208"/>
+-        <source>Confirm</source>
+-        <translation type="unfinished">Ырастоосу</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/troubleshooting_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation type="unfinished">Форма</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>UkuiPrinterManager</name>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="340"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1499"/>
+-        <source>Idle</source>
+-        <translation>Бош</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="342"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1501"/>
+-        <source>Printing</source>
+-        <translation>Басып чыгаруу</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="344"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1503"/>
+-        <source>Stopped</source>
+-        <translation>Токтотулган</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="438"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>Принтер аты &apos;/&apos;,#&apos;, жана 0-дан ашык кат, 128 каттан аз !</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="455"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>Бар ошол эле аты Принтер!</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="458"/>
+-        <source>Printer name is not case sensitive!</source>
+-        <translation>Принтер аты жагдай сезгич эмес!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>WaitingDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="32"/>
+-        <source>Widget</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="87"/>
+-        <source>TextLabel</source>
+-        <translation type="unfinished">ТекстЛабель</translation>
+-    </message>
+-</context>
+-</TS>
+diff --git a/daemons/sessionservice/printerbackend/translations/kylin-printer_mn.ts b/daemons/sessionservice/printerbackend/translations/kylin-printer_mn.ts
+deleted file mode 100644
+index f735942..0000000
+--- a/daemons/sessionservice/printerbackend/translations/kylin-printer_mn.ts
++++ /dev/null
+@@ -1,1739 +0,0 @@
+-<?xml version="1.0" encoding="utf-8"?>
+-<!DOCTYPE TS>
+-<TS version="2.1" language="mn">
+-<context>
+-    <name></name>
+-    <message>
+-        <location filename="../kylin-printer.desktop.in.h" line="1"/>
+-        <source>Printer</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/data/kylin-printer-applet.desktop.in.h" line="1"/>
+-        <source>Printer-backend</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ&#x202f;ᠤᠨ ᠠᠷᠤ ᠳᠠᠪᠴᠠᠩ&#x202f;ᠳᠤ ᠬᠢ ᠠᠬᠢᠴᠠ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AddPrinterWindow</name>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="136"/>
+-        <source>Add Printer</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠨᠡᠮᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="148"/>
+-        <source>Auto</source>
+-        <translation>ᠠᠦ᠋ᠲ᠋ᠤ᠋ ᠡᠷᠢᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="149"/>
+-        <location filename="../ui/add_printer_window.cpp" line="191"/>
+-        <source>Manual</source>
+-        <translation>ᠭᠠᠷ&#x202f;ᠢᠶᠠᠷ ᠨᠡᠮᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="161"/>
+-        <source>Device List</source>
+-        <translation>ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ&#x202f;ᠶᠢᠨ ᠵᠢᠭᠰᠠᠭᠠᠯᠳᠠ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="192"/>
+-        <source>Protocol</source>
+-        <translation>ᠭᠡᠷ᠎ᠡ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="193"/>
+-        <source>Address</source>
+-        <translation>ᠬᠠᠶ᠋ᠢᠭ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="199"/>
+-        <source>Search</source>
+-        <translation>ᠡᠷᠢᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <source>ipp</source>
+-        <translation type="vanished">IPP</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="213"/>
+-        <source>name</source>
+-        <translation>ᠨᠡᠷᠡᠢᠳᠦᠯ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="214"/>
+-        <source>location</source>
+-        <translation>ᠪᠠᠢᠷᠢ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="215"/>
+-        <source>driver</source>
+-        <translation>ᠬᠦᠳᠡᠯᠬᠡᠬᠦᠷ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="321"/>
+-        <source>Success</source>
+-        <translation>ᠰᠢᠨᠡᠴᠢᠯᠡᠪᠡ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="322"/>
+-        <source>Fail</source>
+-        <translation>ᠢᠯᠠᠭᠳᠠᠭᠰᠠᠨ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="220"/>
+-        <source>forward</source>
+-        <translation>ᠨᠡᠮᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Error</source>
+-        <translation>ᠪᠤᠷᠤᠭᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <source>Add printer failed: no PPD selected!</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ&#x202f;ᠢ ᠨᠡᠮᠡᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ: ᠬᠦᠳᠡᠯᠬᠡᠬᠦᠷ&#x202f;ᠢ ᠰᠤᠩᠭᠤᠭᠰᠠᠨ ᠦᠬᠡᠢ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ&#x202f;ᠢ ᠨᠡᠮᠡᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ ᠂ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="304"/>
+-        <location filename="../ui/add_printer_window.cpp" line="314"/>
+-        <location filename="../ui/add_printer_window.cpp" line="333"/>
+-        <location filename="../ui/add_printer_window.cpp" line="433"/>
+-        <location filename="../ui/add_printer_window.cpp" line="443"/>
+-        <location filename="../ui/add_printer_window.cpp" line="561"/>
+-        <location filename="../ui/add_printer_window.cpp" line="603"/>
+-        <location filename="../ui/add_printer_window.cpp" line="648"/>
+-        <location filename="../ui/add_printer_window.cpp" line="687"/>
+-        <source>Confirm</source>
+-        <translation>ᠪᠠᠳᠤᠯᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Hint</source>
+-        <translation>ᠠᠨᠭᠬᠠᠷᠤᠭᠤᠯᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <source>Add printer successfully,printer a test page?</source>
+-        <translation>ᠨᠡᠮᠡᠵᠤ ᠴᠢᠳᠠᠪᠠ ᠂ ᠳᠤᠷᠰᠢᠬᠤ ᠬᠠᠭᠤᠳᠠᠰᠤ&#x202f;ᠶᠢ ᠫᠷᠢᠨᠲ᠋ᠧᠷᠯᠡᠬᠦ ᠤᠤ?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="313"/>
+-        <source>Print test page</source>
+-        <translation>ᠳᠤᠷᠰᠢᠬᠤ ᠬᠠᠭᠤᠳᠠᠰᠤ&#x202f;ᠶᠢ ᠫᠷᠢᠨᠲ᠋ᠧᠷᠯᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>ᠲᠤᠷᠰᠢᠬᠤ ᠬᠠᠭᠤᠳᠠᠰᠤ&#x202f;ᠶᠢ ᠫᠷᠢᠨᠲᠸ᠋ᠷᠯᠡᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠤᠤ?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>ᠲᠤᠷᠰᠢᠵᠤ ᠫᠷᠢᠨᠲᠸ᠋ᠷᠯᠡᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ ᠂ ᠬᠦᠳᠡᠯᠭᠡᠬᠦᠷ&#x202f;ᠦᠨ ᠳᠦᠰᠦᠯ&#x202f;ᠢ ᠦᠭᠡᠷᠡᠴᠢᠯᠡᠬᠦ ᠤᠤ?</translation>
+-    </message>
+-    <message>
+-        <source>Change Driver</source>
+-        <translation type="vanished">ᠬᠦᠳᠡᠯᠭᠡᠬᠦᠷ&#x202f;ᠢ ᠵᠠᠰᠠᠵᠤ ᠦᠭᠡᠷᠡᠴᠢᠯᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="604"/>
+-        <location filename="../ui/add_printer_window.cpp" line="626"/>
+-        <location filename="../ui/add_printer_window.cpp" line="688"/>
+-        <source>Cancel</source>
+-        <translation>ᠦᠬᠡᠢᠰᠬᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="362"/>
+-        <source>Searching printers...</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ&#x202f;ᠢ ᠶᠠᠭ ᠬᠠᠢᠵᠤ ᠪᠠᠢᠨ᠎ᠠ...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <source>Can not find this Printer!</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ&#x202f;ᠢ ᠡᠷᠢᠵᠤ ᠤᠯᠬᠤ&#x202f;ᠶᠢᠨ ᠠᠷᠭ᠎ᠠ ᠦᠭᠡᠢ!</translation>
+-    </message>
+-    <message>
+-        <source>Searching printer driver...</source>
+-        <translation type="vanished">ᠫᠷᠢᠨᠲ᠋ᠧᠷ&#x202f;ᠤᠨ ᠬᠦᠳᠡᠯᠭᠡᠬᠦᠷ&#x202f;ᠢ ᠶᠠᠭ ᠤᠭᠰᠠᠷᠴᠤ ᠪᠠᠢᠨ᠎ᠠ...</translation>
+-    </message>
+-    <message>
+-        <source>Install driver package automatically failed,continue?</source>
+-        <translation type="vanished">ᠦᠢᠯᠡᠴᠢᠯᠡᠬᠦᠷ ᠲᠤ᠌ ᠨᠠᠷᠢᠯᠢᠭ ᠤᠨᠤᠪᠴᠢᠳᠠᠢ ᠠᠪᠴᠠᠯᠳᠤᠭᠰᠠᠨ ᠬᠦᠳᠡᠯᠬᠡᠬᠦᠷ ᠤ᠋ᠨ ᠪᠠᠭᠯᠠᠭ᠎ᠠ ᠪᠠᠢᠬᠤ ᠦᠬᠡᠢ᠂ ᠲᠤᠰ ᠭᠠᠵᠠᠷ ᠲᠤ᠌ ᠬᠦᠳᠡᠯᠬᠡᠬᠦᠷ ᠢ᠋ ᠦᠷᠬᠦᠯᠵᠢᠯᠡᠨ ᠤᠭᠰᠠᠷᠬᠤ ᠤᠤ?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="432"/>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <location filename="../ui/add_printer_window.cpp" line="622"/>
+-        <location filename="../ui/add_printer_window.cpp" line="645"/>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <location filename="../ui/add_printer_window.cpp" line="747"/>
+-        <source>Warning</source>
+-        <translation>ᠰᠡᠷᠡᠮᠵᠢᠯᠡᠬᠦᠯᠦᠯ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <source>Automatic driver configuration failed, please select the driver manually.</source>
+-        <translation>ᠠᠦᠢᠲ᠋ᠣ᠋ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠤᠯᠲᠠ ᠨᠢ ᠢᠯᠠᠭᠳᠠᠵᠠᠢ ᠂ ᠭᠠᠷ ᠢᠶᠠᠷ ᠢᠶᠠᠨ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠪᠣᠯᠭᠠᠬᠤ ᠶᠢ ᠰᠤᠩᠭᠤᠭᠠᠷᠠᠢ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="578"/>
+-        <source>Searching for driver...</source>
+-        <translation>ᠶᠠᠭ ᠡᠷᠢᠵᠦ ᠬᠦᠳᠡᠯᠭᠡᠭᠦᠷ ᠪᠤᠯᠭᠠᠵᠤ ᠪᠠᠶᠢᠨ᠎ᠠ ᠁</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <source>Failed to search for driver. Do you want to use local driver?</source>
+-        <translation>ᠡᠷᠢᠬᠦ ᠪᠡᠷ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠪᠣᠯᠭᠠᠬᠤ ᠳᠤ ᠢᠯᠠᠭᠳᠠᠭᠰᠠᠨ ᠨᠢ ᠲᠤᠰ ᠭᠠᠵᠠᠷ ᠤᠨ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠢ ᠬᠡᠷᠡᠭᠯᠡᠭᠰᠡᠨ ᠦᠦ ?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="620"/>
+-        <source>It is detected that the driver comes from the Internet. Do you want to continue the installation?</source>
+-        <translation>ᠬᠦᠳᠡᠯᠭᠡᠭᠦᠷᠲᠦ ᠫᠷᠦᠭᠷᠠᠮ ᠨᠢ ᠢᠨᠲ᠋ᠸᠷ ᠰᠦᠯᠵᠢᠶ᠎ᠠ ᠡᠴᠡ ᠢᠷᠡᠯᠲᠡ ᠲᠠᠢ ᠂ ᠦᠷᠭᠦᠯᠵᠢᠯᠠᠨ ᠤᠭᠰᠠᠷᠠᠬᠤ ᠤᠤ ソ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="625"/>
+-        <source>Install</source>
+-        <translation>ᠤᠭᠰᠠᠷᠠᠬᠤ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="639"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation>ᠲᠤᠰ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠶᠢᠨ ᠬᠡᠯᠪᠡᠷᠢ ᠪᠡᠷ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠪᠣᠯᠭᠠᠬᠤ ᠳᠤ ᠲᠣᠬᠢᠷᠠᠨ᠎ᠠ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="642"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation>ᠬᠤᠳᠠᠯᠳᠤᠭᠠᠨ ᠤ ᠬᠡᠯᠡᠯᠴᠡᠭᠡᠷ ᠦᠨ ᠬᠢᠵᠠᠭᠠᠷᠯᠠᠯ ᠠᠴᠠ ᠪᠣᠯᠵᠤ ᠂ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠦᠢᠯᠡᠳᠬᠦ ᠬᠤᠳᠠᠯᠳᠤᠭᠠᠴᠢᠨ ᠲᠠᠶ ᠬᠠᠷᠢᠯᠴᠠᠵᠤ ᠲᠤᠰ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠶᠢᠨ ᠬᠡᠯᠪᠡᠷᠢ ᠶᠢᠨ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠦᠨ ᠫᠷᠤᠭ᠍ᠷᠠᠮ ᠢ ᠣᠯᠬᠤ ᠪᠣᠯᠪᠠᠤ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="659"/>
+-        <source>Installing printer driver...</source>
+-        <translation>ᠶᠠᠭ ᠬᠦᠳᠡᠯᠭᠡᠭᠦᠷ ᠤᠭᠰᠠᠷᠠᠵᠤ ᠪᠠᠶᠢᠨ᠎ᠠ᠂ ᠵᠢᠭᠠᠬᠠᠨ ᠠᠷᠤ ᠁</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <source>Driver installation failed. Do you want to use local driver?</source>
+-        <translation>ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠤᠭᠰᠠᠷᠠᠬᠤ ᠳᠤ ᠢᠯᠠᠭᠳᠠᠭᠰᠠᠨ ᠨᠢ ᠲᠤᠰ ᠭᠠᠵᠠᠷ ᠤᠨ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠢ ᠬᠡᠷᠡᠭᠯᠡᠭᠰᠡᠨ ᠦᠦ ?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="749"/>
+-        <source>Close</source>
+-        <translation>ᠪᠤᠴᠠᠵᠤ ᠭᠠᠷᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.ui" line="26"/>
+-        <source>AddPrinterWindow</source>
+-        <translation>addPrinterWindow</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AutoSearchResultModel</name>
+-    <message>
+-        <location filename="../ui/auto_search_result_model.cpp" line="49"/>
+-        <location filename="../ui/auto_search_result_model.cpp" line="51"/>
+-        <source>network</source>
+-        <translation>ᠰᠦᠯᠵᠢᠶ᠎ᠡ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseInfo</name>
+-    <message>
+-        <location filename="../common/base_info.cpp" line="64"/>
+-        <source>Printer</source>
+-        <translation>ᠬᠡᠪᠯᠡᠬᠦ ᠮᠠᠱᠢᠨ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseNotifyDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="35"/>
+-        <source>Dialog</source>
+-        <translation>ᠴᠤᠩᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="124"/>
+-        <source>TextLabel</source>
+-        <translation>ᠱᠤᠰᠢᠭ᠎ᠠ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ChoosePpdComboBox</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="15"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="22"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="137"/>
+-        <source>Choose PPD</source>
+-        <translation>ᠬᠦᠳᠡᠯᠭᠡᠬᠦᠷ&#x202f;ᠢ ᠰᠤᠩᠭᠤᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="16"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="25"/>
+-        <source>Choose from the PPD library</source>
+-        <translation>ᠬᠦᠳᠡᠯᠭᠡᠭᠦᠷ&#x202f;ᠦᠨ ᠬᠦᠮᠦᠷᠭᠡ&#x202f;ᠡᠴᠡ ᠰᠤᠩᠭᠤᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="17"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="29"/>
+-        <source>Add local PPD</source>
+-        <translation>ᠳᠤᠰ ᠭᠠᠵᠠᠷ&#x202f;ᠲᠤ ᠨᠡᠮᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="48"/>
+-        <source>Please select a deb package.</source>
+-        <translation>deb ᠬᠦᠳᠡᠯᠭᠡᠭᠦᠷ&#x202f;ᠦᠨ ᠪᠠᠭᠯᠠᠭ᠎ᠠ&#x202f;ᠶᠢ ᠰᠤᠩᠭᠤᠭᠠᠷᠠᠢ.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="50"/>
+-        <source>Deb File(*.deb)</source>
+-        <translation>ᠤᠭᠰᠠᠷᠬᠤ ᠪᠠᠭᠯᠠᠭ᠎ᠠ(*.deb)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="51"/>
+-        <source>Choose</source>
+-        <translation>ᠰᠤᠩᠭᠤᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="52"/>
+-        <source>Cancel</source>
+-        <translation>ᠦᠬᠡᠢᠰᠬᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="69"/>
+-        <source>Searching driver...</source>
+-        <translation>ᠬᠦᠳᠡᠯᠭᠡᠭᠦᠷ&#x202f;ᠦᠨ ᠫᠷᠦᠭᠷᠡᠮ&#x202f;ᠢ ᠶᠠᠭ ᠬᠠᠢᠵᠤ ᠪᠠᠢᠨ᠎ᠠ...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Warning</source>
+-        <translation>ᠰᠡᠷᠡᠮᠵᠢᠯᠡᠬᠦᠯᠦᠯ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Install package failed,please retry.</source>
+-        <translation>ᠬᠦᠳᠡᠯᠭᠡᠭᠦᠷ&#x202f;ᠦᠨ ᠪᠠᠭᠯᠠᠭ᠎ᠠ&#x202f;ᠶᠢ ᠤᠭᠰᠠᠷᠴᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ ᠂ ᠳᠠᠬᠢᠵᠤ ᠲᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="92"/>
+-        <source>Yes</source>
+-        <translation>ᠮᠦᠨ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ConfigIPAddressDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="32"/>
+-        <source>Dialog</source>
+-        <translation>ᠴᠤᠩᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="75"/>
+-        <source>Common configuration</source>
+-        <translation>ᠨᠡᠶᠢᠳᠡᠮ ᠬᠡᠷᠡᠭᠯᠡᠬᠦ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠤᠯᠲᠠ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="150"/>
+-        <source>初始地址:api.kylinos.cn</source>
+-        <translation>ᠠᠩᠬᠠᠨ&#x202f;ᠤ ᠬᠠᠶ᠋ᠢᠭ:api.kylinos.cn</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="180"/>
+-        <source>Advanced Features</source>
+-        <translation>ᠳᠡᠭᠡᠳᠦ ᠲᠠᠰ ᠤᠨ ᠴᠢᠳᠠᠮᠵᠢ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="38"/>
+-        <source>Ok</source>
+-        <translation>ᠨᠣᠲ᠋ᠠᠯᠠᠨ ᠵᠥᠪᠰᠢᠶᠡᠷᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="37"/>
+-        <source>Cancel</source>
+-        <translation>ᠦᠬᠡᠢᠰᠬᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="30"/>
+-        <source>Configure</source>
+-        <translatorcomment>配置</translatorcomment>
+-        <translation>ᠳᠤᠬᠢᠷᠠᠭᠤᠯᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="31"/>
+-        <source>Service address:</source>
+-        <translatorcomment>服务器地址:</translatorcomment>
+-        <translation>ᠦᠢᠯᠡᠴᠢᠯᠡᠬᠦᠷ&#x202f;ᠦᠨ ᠬᠠᠶᠢᠭ:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="32"/>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="34"/>
+-        <source>Enable</source>
+-        <translation>ᠠᠰᠢᠭᠯᠠᠯᠲᠠ ᠳᠤ ᠣᠷᠣᠬᠤ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="33"/>
+-        <source>This printer can be used to convert print files to PDF format</source>
+-        <translation>ᠲᠤᠰ ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠢ ᠬᠡᠷᠡᠭᠯᠡᠨ ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠢ PDF ᠬᠡᠯᠪᠡᠷᠢ ᠪᠣᠯᠭᠠᠨ ᠬᠤᠪᠢᠷᠠᠭᠤᠯᠵᠤ ᠪᠣᠯᠣᠨ᠎ᠠ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="35"/>
+-        <source>This printer can be used to convert print files to BRF format</source>
+-        <translation>ᠲᠤᠰ ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠢ ᠬᠡᠷᠡᠭᠯᠡᠨ ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠢ BRF ᠬᠡᠯᠪᠡᠷᠢ ᠪᠣᠯᠭᠠᠨ ᠬᠤᠪᠢᠷᠠᠭᠤᠯᠵᠤ ᠪᠣᠯᠣᠨ᠎ᠠ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="36"/>
+-        <source>Displays all serial printers</source>
+-        <translation>ᠪᠤᠢ ᠪᠥᠬᠥᠢ ᠰᠥᠯᠪᠡᠭᠡᠯᠵᠢᠨ ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠢ ᠢᠯᠡᠷᠡᠭᠦᠯᠦᠨ᠎ᠡ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Warning</source>
+-        <translation>ᠰᠡᠷᠡᠮᠵᠢᠯᠡᠬᠦᠯᠦᠯ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Config init failed</source>
+-        <translatorcomment>设置初始化失败!</translatorcomment>
+-        <translation>ᠠᠩᠬᠠᠵᠢᠭᠤᠯᠬᠤ ᠳᠤᠬᠢᠷᠠᠭᠤᠯᠤᠯᠳᠠ ᠢᠯᠠᠭᠳᠠᠪᠠ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="53"/>
+-        <source>Confirm</source>
+-        <translation>ᠪᠠᠳᠤᠯᠠᠬᠤ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CupsDebugLoggingCheckbox</name>
+-    <message>
+-        <location filename="../ui/cups_debug_logging_checkbox.cpp" line="8"/>
+-        <source>Retain debug info for troubleshooting</source>
+-        <translatorcomment>保留调试信息用于故障排查</translatorcomment>
+-        <translation>ᠳᠤᠬᠢᠷᠠᠭᠤᠯᠬᠤ ᠮᠡᠳᠡᠭᠡ ᠵᠠᠩᠬᠢ ᠵᠢ ᠦᠯᠡᠳᠡᠬᠡᠵᠤ ᠬᠡᠮᠳᠦᠯ ᠢ᠋ ᠪᠠᠢᠴᠠᠭᠠᠬᠤ ᠳ᠋ᠤ᠌ ᠬᠡᠷᠡᠭᠯᠡᠨ᠎ᠡ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomAboutDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_about_dialog.cpp" line="12"/>
+-        <source>Version: </source>
+-        <translation>ᠬᠡᠪᠯᠡᠯ ᠄ </translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomDoublelineCheckBox</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_doubleline_checkbox.ui" line="14"/>
+-        <source>Form</source>
+-        <translation>ui ᠭᠠᠷᠴᠠᠭ ᠃</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DebInstallWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>ᠹᠣᠣᠮ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="75"/>
+-        <source>Driver</source>
+-        <translation>ᠬᠦᠳᠡᠯᠬᠡᠬᠦᠷ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="143"/>
+-        <source>Cancel</source>
+-        <translation>ᠦᠬᠡᠢᠰᠬᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="23"/>
+-        <source>Modify Printer Driver</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ&#x202f;ᠤᠨ ᠬᠦᠳᠡᠯᠭᠡᠬᠦᠷ&#x202f;ᠢ ᠦᠭᠡᠷᠡᠴᠢᠯᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Modify PPD failed: no PPD selected!</source>
+-        <translation>ᠬᠦᠳᠡᠯᠬᠡᠬᠦᠷ ᠤ᠋ᠨ ᠹᠠᠢᠯ ᠢ᠋ ᠵᠠᠰᠠᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ: ᠬᠦᠳᠡᠯᠬᠡᠬᠦᠷ ᠤ᠋ᠨ ᠹᠠᠢᠯ ᠢ᠋ ᠰᠤᠩᠭᠤᠭᠰᠠᠨ ᠦᠬᠡᠢ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Error</source>
+-        <translation>ᠪᠤᠷᠤᠭᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="162"/>
+-        <source>Confirm</source>
+-        <translation>ᠪᠠᠳᠤᠯᠠᠬᠤ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceListButton</name>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="32"/>
+-        <source>Idle</source>
+-        <translation>ᠰᠡᠯᠡᠭᠦᠦ ᠰᠡᠯᠡᠭᠦᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="35"/>
+-        <source>Printing</source>
+-        <translation>ᠶᠠᠭᠠᠷᠠᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="38"/>
+-        <source>Stopped</source>
+-        <translation>ᠵᠣᠭᠰᠣᠭᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="41"/>
+-        <source>Unknow</source>
+-        <translation>ᠦᠯᠦ ᠮᠡᠳᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="62"/>
+-        <location filename="../ui/device_list_button.cpp" line="264"/>
+-        <location filename="../ui/device_list_button.cpp" line="296"/>
+-        <source>Default</source>
+-        <translation>ᠠᠶᠠᠳᠠᠯ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="133"/>
+-        <location filename="../ui/device_list_button.cpp" line="163"/>
+-        <source>Set Default</source>
+-        <translation>ᠠᠶᠠᠳᠠᠯ ᠪᠤᠯᠭᠠᠵᠤ ᠳᠤᠬᠢᠷᠠᠭᠤᠯᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="135"/>
+-        <location filename="../ui/device_list_button.cpp" line="166"/>
+-        <source>Enabled</source>
+-        <translatorcomment>启用</translatorcomment>
+-        <translation>ᠡᠬᠢᠯᠡᠬᠦᠯᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="139"/>
+-        <location filename="../ui/device_list_button.cpp" line="169"/>
+-        <source>Shared</source>
+-        <translatorcomment>共享</translatorcomment>
+-        <translation>ᠬᠠᠮᠳᠤᠪᠠᠷ ᠡᠳ᠋ᠯᠡᠬᠦ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceMap</name>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="301"/>
+-        <source>Printer</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="303"/>
+-        <source>Printers</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="305"/>
+-        <source>plug-in:</source>
+-        <translation>ᠬᠠᠪᠴᠢᠭᠤᠯᠬᠤ:</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="307"/>
+-        <source>unplugged:</source>
+-        <translation>ᠰᠤᠭᠤᠯᠵᠤ ᠠᠪᠬᠤ:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EmptyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/right_widget.cpp" line="96"/>
+-        <source>Please click &quot;+&quot; button to add a printer.</source>
+-        <translation>&quot;+&quot; ᠳᠠᠷᠤᠭᠤᠯ ᠢ᠋ ᠳᠠᠷᠤᠵᠤ ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠢ᠋ ᠨᠡᠮᠡᠭᠡᠷᠡᠢ.</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EventNotifyMonitor</name>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="430"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="482"/>
+-        <source>Printer </source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ </translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="454"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="469"/>
+-        <source>Job:</source>
+-        <translation>ᠡᠬᠦᠷᠬᠡ:</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="456"/>
+-        <source>created!</source>
+-        <translation>ᠪᠠᠢᠭᠤᠯᠪᠠ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="471"/>
+-        <source>completed!</source>
+-        <translation>ᠳᠠᠭᠤᠰᠪᠠ!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>InkInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/ink_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation>ui ᠭᠠᠷᠴᠠᠭ ᠃</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerModel</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="50"/>
+-        <source>Test Page</source>
+-        <translation>ᠲᠤᠷᠰᠢᠬᠤ ᠬᠠᠭᠤᠳᠠᠰᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="64"/>
+-        <source>unknown</source>
+-        <translation>ᠦᠯᠦ ᠮᠡᠳᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="70"/>
+-        <source>Printing page %1</source>
+-        <translation>ᠶᠠᠭ 1 ᠳᠤᠭᠠᠷ ᠨᠢᠭᠤᠷ ᠳᠠᠷᠤᠮᠠᠯᠯᠠᠵᠤ ᠪᠠᠶᠢᠨ᠎ᠠ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="53"/>
+-        <source>untitled</source>
+-        <translation>ᠦᠯᠦ ᠮᠡᠳᠡᠬᠦ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="261"/>
+-        <source>Printer</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="412"/>
+-        <source>Cancel print</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷᠯᠡᠬᠦ&#x202f;ᠶᠢ ᠦᠬᠡᠢᠰᠬᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="415"/>
+-        <source>Delete print</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷᠯᠡᠬᠦ&#x202f;ᠶᠢ ᠬᠠᠰᠤᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="418"/>
+-        <source>Hold print</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷᠯᠡᠬᠦ&#x202f;ᠶᠢ ᠲᠦᠷ ᠵᠤᠭᠰᠤᠭᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="421"/>
+-        <source>Release print</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷᠯᠡᠬᠦ&#x202f;ᠶᠢ ᠰᠡᠷᠬᠦᠬᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="424"/>
+-        <source>Reprint</source>
+-        <translation>ᠳᠠᠬᠢᠵᠤ ᠫᠷᠢᠨᠲ᠋ᠧᠷᠯᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="427"/>
+-        <source>Job properties</source>
+-        <translation>ᠡᠭᠦᠷᠭᠡ ᠶᠢᠨ ᠰᠢᠨᠵᠢ ᠴᠢᠨᠠᠷ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Warning</source>
+-        <translation>ᠰᠡᠷᠡᠮᠵᠢᠯᠡᠬᠦᠯᠦᠯ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <source>Set error: Job status has been updated!</source>
+-        <translation>ᠳᠤᠬᠢᠷᠠᠭᠤᠯᠤᠯᠳᠠ ᠪᠤᠷᠤᠭᠤ: ᠡᠩᠨᠡᠭᠡ&#x202f;ᠶᠢ ᠨᠢᠭᠡᠨᠳᠡ ᠰᠢᠨᠡᠴᠢᠯᠡᠪᠡ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="447"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="453"/>
+-        <source>Sure</source>
+-        <translation>ᠪᠤᠯᠤᠨ᠎ᠠ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Cannot move job to itself!</source>
+-        <translation>ᠡᠬᠦᠷᠭᠡ ᠵᠢ ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠲᠤ᠌ ᠰᠢᠯᠵᠢᠬᠦᠯᠬᠦ ᠵᠢᠨ ᠠᠷᠭ᠎ᠠ ᠦᠬᠡᠢ!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobMenu</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="108"/>
+-        <source>Cancel print</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷᠯᠡᠬᠦ&#x202f;ᠶᠢ ᠦᠬᠡᠢᠰᠬᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="110"/>
+-        <source>Delete print</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷᠯᠡᠬᠦ&#x202f;ᠶᠢ ᠬᠠᠰᠤᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="112"/>
+-        <source>Hold print</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷᠯᠡᠬᠦ&#x202f;ᠶᠢ ᠲᠦᠷ ᠵᠤᠭᠰᠤᠭᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="114"/>
+-        <source>Release print</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷᠯᠡᠬᠦ&#x202f;ᠶᠢ ᠰᠡᠷᠬᠦᠬᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="116"/>
+-        <source>Reprint</source>
+-        <translation>ᠳᠠᠬᠢᠵᠤ ᠫᠷᠢᠨᠲ᠋ᠧᠷᠯᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="118"/>
+-        <source>Use other printer...</source>
+-        <translation>ᠪᠤᠰᠤᠳ ᠫᠷᠢᠨᠲ᠋ᠧᠷ&#x202f;ᠢ ᠬᠡᠷᠡᠭᠯᠡᠬᠦ...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="120"/>
+-        <source>Job properties</source>
+-        <translation>ᠡᠭᠦᠷᠭᠡ ᠶᠢᠨ ᠰᠢᠨᠵᠢ ᠴᠢᠨᠠᠷ ᠃</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobPropertiesWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="15"/>
+-        <source>Job properties</source>
+-        <translation>ᠡᠭᠦᠷᠭᠡ ᠶᠢᠨ ᠰᠢᠨᠵᠢ ᠴᠢᠨᠠᠷ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="35"/>
+-        <source>name</source>
+-        <translation>ᠨᠡᠷᠡᠶᠢᠳᠦᠯ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="36"/>
+-        <source>value</source>
+-        <translation>ᠦᠨ᠎ᠡ ᠨᠢ ᠃</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LaunchPrinter</name>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠲᠤᠷᠰᠢᠯᠲᠠ ᠶᠢᠨ ᠨᠢᠭᠤᠷ ᠢ ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠨᠢ ᠠᠮᠵᠢᠯᠲᠠ ᠣᠯᠤᠭᠰᠠᠨ ᠤᠤ ?</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>%1 print result confirmation</source>
+-        <translation>1 ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠦᠷ᠎ᠡ ᠳ᠋ᠦᠩ ᠢ ᠨᠤᠲᠠᠯᠠᠨ ᠲᠣᠭᠲᠠᠭᠠᠬᠤ ᠬᠡᠷᠡᠭᠲᠡᠶ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="94"/>
+-        <source>Yes</source>
+-        <translation>ᠲᠡᠢ᠌ᠮᠦ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="96"/>
+-        <source>No</source>
+-        <translation>ᠦᠭᠡᠢ ᠃</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LeftWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="47"/>
+-        <source>Device List</source>
+-        <translation>ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ&#x202f;ᠶᠢᠨ ᠵᠢᠭᠰᠠᠭᠠᠯᠳᠠ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="216"/>
+-        <source>Delete</source>
+-        <translation>ᠬᠠᠰᠤᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="362"/>
+-        <source>Warning</source>
+-        <translation>ᠰᠡᠷᠡᠮᠵᠢᠯᠡᠬᠦᠯᠦᠯ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="212"/>
+-        <source>Are you sure to delete &quot;%1&quot;?</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ%1 ᠵᠢ/ ᠢ᠋ ᠯᠠᠪᠳᠠᠢ ᠤᠰᠠᠳᠬᠠᠬᠤ ᠤᠤ?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="217"/>
+-        <source>Cancel</source>
+-        <translation>ᠦᠬᠡᠢᠰᠬᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="360"/>
+-        <source>Set Default Failed!</source>
+-        <translation>ᠠᠶᠠᠳᠠᠯ ᠪᠤᠯᠭᠠᠵᠤ ᠳᠤᠬᠢᠷᠠᠭᠤᠯᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="364"/>
+-        <source>Close</source>
+-        <translation>ᠬᠠᠭᠠᠬᠤ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWinPropertyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="45"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="47"/>
+-        <source>Printer</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="71"/>
+-        <source>Property</source>
+-        <translation>ᠬᠠᠷᠢᠶᠠᠳᠤ ᠴᠢᠨᠠᠷ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="78"/>
+-        <source>Job List</source>
+-        <translation>ᠫᠷᠢᠨᠲᠸᠷᠯᠠᠬᠤ ᠡᠩᠨᠡᠭᠡ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="85"/>
+-        <source>PrintTest</source>
+-        <translation>ᠳᠤᠷᠰᠢᠨ ᠫᠷᠢᠨᠲᠸᠷᠯᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="229"/>
+-        <source>Are you sure to rename &quot;%1&quot; ?</source>
+-        <translation>ᠲᠠ % 1&quot;᠎ᠶ᠋ᠢ ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠯᠡᠬᠦ᠎ᠪᠡᠷ ᠲᠣᠭᠲᠠᠭᠰᠠᠨ ᠤᠤ ?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="233"/>
+-        <source>Rename</source>
+-        <translation>ᠬᠦᠨᠳᠦ ᠨᠡᠷᠡᠶᠢᠳᠦᠨ᠎ᠡ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="192"/>
+-        <source>Idle</source>
+-        <translation>ᠰᠤᠯᠠ ᠰᠡᠯᠡᠬᠦᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="90"/>
+-        <source>Troubleshooting</source>
+-        <translation>ᠭᠡᠮ ᠢ ᠵᠢᠭᠰᠠᠭᠠᠨ ᠪᠠᠶᠢᠴᠠᠭᠠᠬᠤ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="194"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="196"/>
+-        <source>Printing</source>
+-        <translation>ᠶᠠᠭᠠᠷᠠᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="198"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="200"/>
+-        <source>Stopped</source>
+-        <translation>ᠵᠤᠭᠰᠤᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="205"/>
+-        <source>Unknown</source>
+-        <translation>ᠦᠯᠦ ᠮᠡᠳᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="230"/>
+-        <source>Warning</source>
+-        <translation>ᠰᠡᠷᠡᠮᠵᠢᠯᠡᠬᠦᠯᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="231"/>
+-        <source>This action will delete the job queue too!</source>
+-        <translation>ᠡᠨᠡᠬᠦ ᠠᠵᠢᠯᠯᠠᠬᠤᠢ ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠤ᠋ᠨ ᠡᠩᠨᠡᠭᠡ ᠵᠢ ᠴᠡᠪᠡᠷᠯᠡᠵᠤ ᠮᠡᠳᠡᠨ᠎ᠡ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="234"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.ui" line="26"/>
+-        <source>Form</source>
+-        <translation>ᠹᠣᠣᠮ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWindow</name>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="91"/>
+-        <source>Printer</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="225"/>
+-        <source>Delete Failed!</source>
+-        <translation>ᠬᠠᠰᠤᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="227"/>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Warning</source>
+-        <translation>ᠰᠡᠷᠡᠮᠵᠢᠯᠡᠬᠦᠯᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="229"/>
+-        <location filename="../ui/mainwindow.cpp" line="269"/>
+-        <source>Close</source>
+-        <translation>ᠬᠠᠭᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠨᠡᠮᠡᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ᠂ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="333"/>
+-        <source>Sure</source>
+-        <translation>ᠪᠠᠳᠤᠯᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Error</source>
+-        <translation>ᠠᠯᠳᠠᠭ᠎ᠠ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="326"/>
+-        <source>Try to connect the Printer...</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠲᠤ᠌ ᠴᠦᠷᠬᠡᠯᠡᠬᠦ ᠪᠡᠷ ᠤᠷᠤᠯᠳᠤᠵᠤ ᠪᠠᠢᠨ᠎ᠠ...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Open Printer Failed,Please Del And Add Printer, Then Try Again!</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠢ᠋ ᠡᠬᠢᠯᠡᠬᠦᠯᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ᠂ ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠢ᠋ ᠳᠠᠬᠢᠵᠤ ᠨᠡᠮᠡᠬᠡᠷᠡᠢ!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MenuModule</name>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="44"/>
+-        <location filename="../ui/menumodule.cpp" line="73"/>
+-        <source>Help</source>
+-        <translation>ᠳᠤᠰᠠᠯᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="42"/>
+-        <location filename="../ui/menumodule.cpp" line="70"/>
+-        <source>About</source>
+-        <translation>ᠲᠤᠬᠠᠢ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="38"/>
+-        <location filename="../ui/menumodule.cpp" line="76"/>
+-        <source>Configure</source>
+-        <translation>ᠳᠤᠬᠢᠷᠠᠭᠤᠯᠤᠯ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="40"/>
+-        <location filename="../ui/menumodule.cpp" line="88"/>
+-        <source>Classic Printer</source>
+-        <translation>ᠰᠣᠩᠭᠣᠳᠠᠭ ᠪᠢᠴᠢᠭᠯᠡᠭᠦᠷ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="46"/>
+-        <location filename="../ui/menumodule.cpp" line="66"/>
+-        <source>Quit</source>
+-        <translation>ᠪᠤᠴᠠᠵᠤ ᠭᠠᠷᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.h" line="52"/>
+-        <source>Printer</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>NewPopWindow</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>ᠹᠣᠣᠮ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="40"/>
+-        <source>Printer</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="59"/>
+-        <source>Print Test Page</source>
+-        <translation>ᠫᠷᠢᠨᠲᠸᠷᠯᠠᠬᠤ ᠳᠤᠷᠰᠢᠯᠳᠠ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="60"/>
+-        <source>View Device</source>
+-        <translation>ᠳᠦᠬᠦᠬᠡᠷᠦᠮᠵᠢ ᠵᠢ ᠪᠠᠢᠴᠠᠭᠠᠵᠤ ᠦᠵᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="61"/>
+-        <source>Manual Install</source>
+-        <translation>ᠬᠦᠳᠡᠯᠬᠡᠬᠦᠷ ᠢ᠋ ᠭᠠᠷ ᠵᠢᠡᠷ ᠤᠭᠰᠠᠷᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="128"/>
+-        <source>Installing......</source>
+-        <translation>ᠤᠭᠰᠠᠷᠴᠤ ᠪᠠᠢᠨ᠎ᠠ......</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="143"/>
+-        <source>Successful installation!</source>
+-        <translation>ᠤᠭᠰᠠᠷᠪᠠ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="164"/>
+-        <source>Installation failed!</source>
+-        <translation>ᠤᠭᠰᠠᠷᠴᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="188"/>
+-        <source>Printer Detected:</source>
+-        <translation>ᠫᠷᠢᠨᠲᠸᠷ ᠢ᠋ ᠬᠢᠨᠠᠨ ᠬᠡᠮᠵᠢᠵᠤ ᠤᠯᠪᠠ:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠤ᠋ᠨ ᠳᠤᠷᠰᠢᠬᠤ ᠬᠠᠭᠤᠳᠠᠰᠤ ᠪᠤᠯᠤᠭᠰᠠᠨ ᠤᠤ?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="207"/>
+-        <source>No</source>
+-        <translation>ᠦᠬᠡᠢ/ ᠪᠢᠰᠢ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="206"/>
+-        <source>Yes</source>
+-        <translation>ᠳᠡᠢᠮᠤ/ ᠮᠦᠨ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Hint</source>
+-        <translation>ᠠᠨᠭᠬᠠᠷᠤᠭᠤᠯᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>ᠲᠤᠷᠰᠢᠵᠤ ᠫᠷᠢᠨᠲᠸᠷᠯᠡᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ᠂ ᠬᠦᠳᠡᠯᠭᠡᠬᠦᠷ ᠤ᠋ᠨ ᠳᠦᠰᠦᠯ ᠢ᠋ ᠦᠭᠡᠷᠡᠴᠢᠯᠡᠬᠦ ᠤᠤ?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="214"/>
+-        <source>Cancel</source>
+-        <translation>ᠦᠬᠡᠢᠰᠬᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="213"/>
+-        <source>Change Driver</source>
+-        <translation>ᠬᠦᠳᠡᠯᠬᠡᠬᠦᠷ ᠢ᠋ ᠵᠠᠰᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Error</source>
+-        <translation>ᠪᠤᠷᠤᠭᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Failed to start, please try to add the printer again!</source>
+-        <translation>ᠫᠠᠷᠢᠨᠲᠸᠷ ᠢ᠋ ᠡᠬᠢᠯᠡᠬᠦᠯᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ᠂ ᠫᠠᠷᠢᠨᠲᠸᠷ ᠢ᠋ ᠳᠠᠬᠢᠵᠤ ᠨᠡᠮᠡᠬᠡᠳ ᠳᠠᠬᠢᠨ ᠨᠡᠬᠡᠬᠡᠵᠤ ᠦᠵᠡᠬᠡᠷᠡᠢ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="229"/>
+-        <source>Ok</source>
+-        <translation>ᠨᠣᠲ᠋ᠠᠯᠠᠨ ᠵᠥᠪᠰᠢᠶᠡᠷᠡᠬᠦ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PopWindowManager</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Do you want to add a printer?</source>
+-        <translation>ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠨᠡᠮᠡᠬᠦ ᠦᠦ ?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>The printer was detected:%1</source>
+-        <translation>ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠬᠦ ᠡᠴᠡ ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠄ 1 ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Add</source>
+-        <translation>ᠨᠡᠮᠡᠯᠲᠡ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="167"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation>ᠲᠤᠰ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠶᠢᠨ ᠬᠡᠯᠪᠡᠷᠢ ᠪᠡᠷ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠪᠣᠯᠭᠠᠬᠤ ᠳᠤ ᠲᠣᠬᠢᠷᠠᠨ᠎ᠠ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="170"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation>ᠬᠤᠳᠠᠯᠳᠤᠭᠠᠨ ᠤ ᠬᠡᠯᠡᠯᠴᠡᠭᠡᠷ ᠦᠨ ᠬᠢᠵᠠᠭᠠᠷᠯᠠᠯ ᠠᠴᠠ ᠪᠣᠯᠵᠤ ᠂ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠦᠢᠯᠡᠳᠬᠦ ᠬᠤᠳᠠᠯᠳᠤᠭᠠᠴᠢᠨ ᠲᠠᠶ ᠬᠠᠷᠢᠯᠴᠠᠵᠤ ᠲᠤᠰ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠶᠢᠨ ᠬᠡᠯᠪᠡᠷᠢ ᠶᠢᠨ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠦᠨ ᠫᠷᠤᠭ᠍ᠷᠠᠮ ᠢ ᠣᠯᠬᠤ ᠪᠣᠯᠪᠠᠤ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="172"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="223"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="237"/>
+-        <source>%1 installation failed</source>
+-        <translation>1 ᠤᠭᠰᠠᠷᠠᠵᠤ ᠢᠯᠠᠭᠳᠠᠭᠰᠠᠨ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>%1 successful installation</source>
+-        <translation>1 ᠤᠭᠰᠠᠷᠠᠵᠤ ᠠᠮᠵᠢᠯᠲᠠ ᠣᠯᠪᠠ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="222"/>
+-        <source>No printer driver for %1.</source>
+-        <translation>1 ᠶᠢᠨ ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠢᠶᠠᠷ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠪᠣᠯᠭᠠᠬᠤ ᠫᠷᠤᠭ᠍ᠷᠠᠮ ᠪᠠᠶᠢᠬᠤ ᠦᠭᠡᠢ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>Print test page</source>
+-        <translation>ᠳᠠᠷᠤᠮᠠᠯᠯᠠᠬᠤ ᠲᠤᠷᠰᠢᠯᠲᠠ ᠶᠢᠨ ᠨᠢᠭᠤᠷ ᠢ ᠳᠠᠷᠤᠮᠠᠯᠯᠠᠬᠤ ᠃</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyListWindow</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="10"/>
+-        <source>Confirm</source>
+-        <translation>ᠪᠠᠳᠤᠯᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="11"/>
+-        <source>Refresh</source>
+-        <translation>ᠰᠢᠨᠡᠳᠬᠡᠨ᠎ᠡ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="9"/>
+-        <source>Cancel</source>
+-        <translation>ᠦᠬᠡᠢᠰᠬᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.ui" line="26"/>
+-        <source>PropertyListWindow</source>
+-        <translation>propertyListWindow</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyManagerModel</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="139"/>
+-        <source>Model:</source>
+-        <translation>ᠨᠤᠮᠸᠷ:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="140"/>
+-        <source>Status:</source>
+-        <translation>ᠪᠠᠢᠳᠠᠯ ᠳᠦᠯᠦᠪ:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="141"/>
+-        <source>Location:</source>
+-        <translation>ᠪᠠᠢᠷᠢᠯᠠᠯ:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="142"/>
+-        <source>Driver:</source>
+-        <translation>ᠬᠦᠳᠡᠯᠬᠡᠬᠦᠷ:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="396"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="412"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="423"/>
+-        <source>Warning</source>
+-        <translation>ᠰᠡᠷᠡᠮᠵᠢᠯᠡᠬᠦᠯᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="23"/>
+-        <source>base</source>
+-        <translation>ᠰᠠᠭᠤᠷᠢ ᠰᠢᠨᠵᠢ ᠴᠢᠨᠠᠷ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="36"/>
+-        <source>Ink</source>
+-        <translation>ᠪᠤᠳᠤᠭᠲᠤ ᠤᠰᠤ ᠪᠤᠳᠤᠭ ᠤᠨ ᠨᠤᠨᠲᠠᠭ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="40"/>
+-        <source>advanced</source>
+-        <translation>ᠦᠨᠳᠦᠷ ᠳᠡᠰ ᠤ᠋ᠨ ᠰᠤᠩᠭᠤᠭᠳᠠᠬᠤᠨ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="58"/>
+-        <source>PrinterProperty</source>
+-        <translation>ᠫᠠᠷᠢᠨᠲᠸᠷ ᠤ᠋ᠨ ᠰᠢᠨᠵᠢ ᠴᠢᠨᠠᠷ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="95"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="163"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="327"/>
+-        <source>Name</source>
+-        <translation>ᠨᠡᠷᠡᠢᠳᠦᠯ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="96"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="166"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="331"/>
+-        <source>Location</source>
+-        <translation>ᠪᠠᠢᠷᠢᠯᠠᠯ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="97"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="170"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="335"/>
+-        <source>Status</source>
+-        <translation>ᠳᠦᠯᠦᠪ ᠪᠠᠢᠳᠠᠯ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="98"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="339"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="380"/>
+-        <source>Driver</source>
+-        <translation>ᠬᠦᠳᠡᠯᠬᠡᠬᠦᠷ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="101"/>
+-        <source>Modify</source>
+-        <translation>ᠵᠠᠰᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="103"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="193"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="343"/>
+-        <source>URI</source>
+-        <translation>uri</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="127"/>
+-        <source> (level: %1%)</source>
+-        <translation> ( ᠦᠯᠡᠳᠡᠪᠦᠷᠢ ᠶᠢᠨ ᠬᠡᠮᠵᠢᠶ᠎ᠡ ᠄ 1% )</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="172"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="174"/>
+-        <source>Idle</source>
+-        <translation>ᠬᠤᠭᠤᠰᠤᠨ ᠰᠡᠯᠡᠬᠦᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="176"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="178"/>
+-        <source>Printing</source>
+-        <translation>ᠶᠠᠭᠠᠷᠠᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="180"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="182"/>
+-        <source>Stopped</source>
+-        <translation>ᠵᠤᠭᠰᠤᠭᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <source>Error happened, all options restored!.</source>
+-        <translation>ᠠᠯᠳᠠᠭ᠎ᠠ ᠭᠠᠷᠪᠠ᠂ ᠪᠦᠬᠦ ᠰᠤᠩᠭᠤᠭᠳᠠᠬᠤᠨ ᠢ᠋ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠬᠢᠷᠠᠭᠤᠯᠤᠭᠠᠷᠠᠢ!.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="232"/>
+-        <source>Confirm</source>
+-        <translation>ᠪᠠᠳᠤᠯᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="269"/>
+-        <source>Conflict with &quot;%1&quot;</source>
+-        <translation>《1》 ᠯᠦᠭᠡ ᠮᠥᠷᠭᠥᠯᠳᠦᠭᠡᠨ ᠪᠠᠶᠢᠷᠢᠯᠠᠭᠤᠯᠤᠨ᠎ᠠ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="395"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠤ᠋ᠨ ᠨᠡᠷᠡᠢᠳᠦᠯ ᠳ᠋ᠤ᠌ &apos;/\&apos;&quot;?#&apos; ᠠᠭᠤᠯᠠᠭᠳᠠᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ ᠮᠦᠷᠳᠡᠭᠡᠨ ᠬᠤᠭᠤᠰᠤᠨ ᠪᠠᠢᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ᠂ 128 ᠠᠪᠢᠶ᠎ᠠ ᠡᠴᠡ ᠴᠦᠬᠡᠨ ᠪᠠᠢᠬᠤ ᠬᠡᠷᠡᠭᠳᠡᠢ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="398"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="414"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="425"/>
+-        <source>Close</source>
+-        <translation>ᠬᠠᠭᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="411"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>ᠠᠳᠠᠯᠢ ᠨᠡᠷ᠎ᠡ ᠲᠠᠢ ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠪᠠᠢᠨ᠎ᠠ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="422"/>
+-        <source>Printer Name Illegal!</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠤ᠋ᠨ ᠨᠡᠷᠡᠢᠳᠦᠯ ᠬᠠᠤᠯᠢ ᠪᠤᠰᠤ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="187"/>
+-        <source>Unknow</source>
+-        <translation>ᠦᠯᠦ ᠮᠡᠳᠡᠬᠦ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ProperytItemWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="217"/>
+-        <source>Idle</source>
+-        <translation>ᠬᠤᠭᠤᠰᠤᠨ ᠰᠡᠯᠡᠬᠦᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="220"/>
+-        <source>Printing</source>
+-        <translation>ᠶᠠᠭᠠᠷᠠᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="223"/>
+-        <source>Stopped</source>
+-        <translation>ᠵᠤᠭᠰᠤᠭᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="226"/>
+-        <source>Unknow</source>
+-        <translation>ᠦᠯᠦ ᠮᠡᠳᠡᠬᠦ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>QObject</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="32"/>
+-        <source>id</source>
+-        <translation>ID</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="33"/>
+-        <source>user</source>
+-        <translation>ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="34"/>
+-        <source>title</source>
+-        <translation>ᠲᠸᠺᠰᠲ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="35"/>
+-        <source>printer name</source>
+-        <translation>ᠫᠠᠷᠢᠨᠲᠸᠷ ᠤ᠋ᠨ ᠨᠡᠷᠡᠢᠳᠦᠯ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="36"/>
+-        <source>size</source>
+-        <translation>ᠶᠡᠬᠡ ᠪᠠᠭ᠎ᠠ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="37"/>
+-        <source>create time</source>
+-        <translation>ᠪᠠᠢᠭᠤᠯᠤᠭᠰᠠᠨ ᠴᠠᠭ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="38"/>
+-        <source>job state</source>
+-        <translation>ᠠᠵᠢᠯ ᠤ᠋ᠨ ᠪᠠᠢᠳᠠᠯ ᠳᠦᠯᠦᠪ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="44"/>
+-        <source>Job is waiting to be printed</source>
+-        <translation>ᠡᠩᠨᠡᠬᠡᠨ ᠳ᠋ᠤ᠌</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="45"/>
+-        <source>Job is held for printing</source>
+-        <translation>ᠫᠠᠷᠢᠨᠲᠸᠷᠯᠠᠬᠤ ᠵᠢ ᠳᠦᠷ ᠵᠤᠭᠰᠤᠭᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="46"/>
+-        <source>Job is currently printing</source>
+-        <translation>ᠫᠠᠷᠢᠨᠲᠸᠷᠯᠠᠵᠤ ᠪᠠᠢᠨ᠎ᠠ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="47"/>
+-        <source>Job has been stopped</source>
+-        <translation>ᠡᠬᠦᠷᠬᠡ ᠵᠤᠭᠰᠤᠭᠠᠭᠳᠠᠪᠠ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="48"/>
+-        <source>Job has been canceled</source>
+-        <translation>ᠡᠬᠦᠷᠬᠡ ᠵᠢ ᠦᠬᠡᠢᠰᠬᠡᠪᠡ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="49"/>
+-        <source>Job has aborted due to error</source>
+-        <translation>ᠡᠬᠦᠷᠭᠡ ᠪᠤᠷᠤᠭᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="50"/>
+-        <source>Job has completed successfully</source>
+-        <translation>ᠫᠠᠷᠢᠨᠲᠸᠷᠯᠠᠵᠤ ᠳᠠᠭᠤᠰᠪᠠ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>RenamePrinterDialog</name>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="26"/>
+-        <source>RenamePrinterDialog</source>
+-        <translation>ᠫᠠᠷᠢᠨᠲᠸᠷ ᠤ᠋ᠨ ᠶᠠᠷᠢᠯᠴᠠᠭ᠎ᠠ ᠵᠢᠨ ᠴᠤᠩᠬᠤ ᠵᠢ ᠳᠠᠬᠢᠨ ᠨᠡᠷᠡᠢᠳᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="148"/>
+-        <source>Cancel</source>
+-        <translation>ᠦᠬᠡᠢᠰᠬᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="167"/>
+-        <source>Ok</source>
+-        <translation>ᠨᠣᠲ᠋ᠠᠯᠠᠨ ᠵᠥᠪᠰᠢᠶᠡᠷᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.cpp" line="11"/>
+-        <source>Printer Name</source>
+-        <translation>ᠫᠠᠷᠢᠨᠲᠸᠷ ᠤ᠋ᠨ ᠨᠡᠷᠡᠢᠳᠦᠯ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SelectPpdDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="23"/>
+-        <source>Select Driver</source>
+-        <translation>ᠬᠥᠳᠡᠯᠭᠡᠬᠦ ᠬᠦᠴᠦ ᠰᠣᠩᠭᠣᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="56"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="85"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="266"/>
+-        <source>driver</source>
+-        <translation>ᠬᠥᠳᠡᠯᠭᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="57"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="71"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="232"/>
+-        <source>vendor</source>
+-        <translation>ᠨᠡᠷᠡᠲᠦ ᠲᠡᠮᠳᠡᠭᠲᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="195"/>
+-        <source>Reading Drivers,Please Wait...</source>
+-        <translation>ᠬᠦᠳᠡᠯᠬᠡᠬᠦᠷ ᠢ᠋ ᠤᠩᠰᠢᠵᠤ ᠪᠠᠢᠨ᠎ᠠ᠂ ᠲᠦᠷ ᠬᠦᠯᠢᠶᠡᠬᠡᠷᠡᠢ...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="319"/>
+-        <source>Please Choose Model And Vender!</source>
+-        <translation>ᠦᠢᠯᠡᠳᠪᠦᠷᠢ ᠪᠤᠯᠤᠨ ᠨᠤᠮᠸᠷ ᠵᠢᠨᠨ ᠰᠤᠩᠭᠤᠭᠠᠷᠠᠢ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="320"/>
+-        <source>Warning</source>
+-        <translation>ᠰᠡᠷᠡᠮᠵᠢᠯᠡᠬᠦᠯᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="322"/>
+-        <source>Close</source>
+-        <translation>ᠬᠠᠭᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="26"/>
+-        <source>SelectPpdDialog</source>
+-        <translation>ui ᠭᠠᠷᠴᠠᠭ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="203"/>
+-        <source>Cancel</source>
+-        <translation>ᠦᠭᠡᠢᠰᠬᠡᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="247"/>
+-        <source>Apply</source>
+-        <translation>ᠪᠠᠳᠤᠯᠠᠬᠤ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbAuthInfoDialog</name>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.ui" line="26"/>
+-        <source>SmbAuthInfoDialog</source>
+-        <translation>SmbAuthInfoDialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="13"/>
+-        <source>Authentication</source>
+-        <translation>ᠪᠡᠶ᠎ᠡ ᠶᠢᠨ ᠭᠠᠷᠤᠯ ᠢ ᠭᠡᠷᠡᠴᠢᠯᠡᠬᠦ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="14"/>
+-        <source>Authentication is required to connect to the printer &quot;%1&quot;</source>
+-        <translation>《 1 》 ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠢ ᠬᠣᠯᠪᠣᠨ ᠰᠤᠷᠪᠤᠯᠵᠢᠯᠠᠬᠤ ᠳᠤ ᠭᠡᠷᠡᠴᠢᠯᠡᠭᠡ ᠬᠢᠬᠦ ᠴᠢᠬᠤᠯᠠᠲᠠᠶ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="15"/>
+-        <source>Username</source>
+-        <translation>ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢ ᠶᠢᠨ ᠨᠡᠷ᠎ᠡ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="16"/>
+-        <source>Password</source>
+-        <translation>ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="17"/>
+-        <source>Workgroup</source>
+-        <translation>ᠣᠷᠣᠨ ᠪᠦᠰᠡ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="18"/>
+-        <source>Accept</source>
+-        <translation>ᠲᠣᠭᠲᠠᠭᠠᠨ᠎ᠠ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="19"/>
+-        <source>Cancel</source>
+-        <translation>ᠬᠦᠴᠦᠨ ᠦᠭᠡᠶ ᠪᠣᠯᠭᠠᠨ᠎ᠠ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="37"/>
+-        <source>Authentication in progress. Please wait...</source>
+-        <translation>ᠶᠠᠭ ᠭᠡᠷᠡᠴᠢᠯᠡᠵᠦ ᠪᠠᠢ᠌ᠨ᠎ᠠ ᠂ ᠵᠢᠭᠠᠬᠠᠨ ᠬᠦᠯᠢᠶᠡᠭᠡᠷᠡᠢ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="58"/>
+-        <source>Warning</source>
+-        <translation>ᠰᠡᠷᠡᠮᠵᠢ ᠥᠭ᠍ᠬᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="59"/>
+-        <source>Confirm</source>
+-        <translation>ᠲᠣᠭᠲᠠᠭᠠᠨ᠎ᠠ᠃</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbClientHelper</name>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="175"/>
+-        <source>Cannot connect to %1!</source>
+-        <translation>ᠬᠣᠯᠪᠣᠬᠤ ᠶᠢᠨ ᠠᠷᠭ᠎ᠠ ᠦᠭᠡᠢ !</translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="180"/>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="187"/>
+-        <source>Wrong user name or password!</source>
+-        <translation>ᠪᠤᠷᠤᠭᠤ ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢ ᠶᠢᠨ ᠨᠡᠷ᠎ᠡ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ !</translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="192"/>
+-        <source>The samba server shared printer list is empty</source>
+-        <translation>sammba ᠦᠢᠯᠡᠴᠢᠯᠡᠭᠦᠷ ᠦᠨ ᠬᠠᠮᠲᠤᠪᠠᠷ ᠬᠦᠷᠲᠡᠬᠦ ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠤ ᠬᠦᠰᠦᠨᠦᠭᠲᠦ ᠨᠢ ᠬᠣᠭᠣᠰᠣᠨ ᠃</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SystemNotification</name>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="21"/>
+-        <source>Printer Info</source>
+-        <translation>ᠫᠠᠷᠢᠨᠲᠸᠷ ᠤ᠋ᠨ ᠮᠡᠳᠡᠭᠡ ᠵᠠᠩᠭᠢ</translation>
+-    </message>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="36"/>
+-        <source>Printer</source>
+-        <translation>ᠫᠠᠷᠢᠨᠲᠸᠷ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TrayWin</name>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="33"/>
+-        <source>Minimize</source>
+-        <translation>ᠬᠠᠮᠤᠭ ᠤ᠋ᠨ ᠪᠠᠭᠠᠴᠢᠯᠠᠯ</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="39"/>
+-        <source>Maximize</source>
+-        <translation>ᠬᠠᠮᠤᠭ ᠎ᠤᠨ ᠶᠡᠬᠡᠴᠢᠯᠡᠯ</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="45"/>
+-        <source>Quit</source>
+-        <translation>ᠪᠤᠴᠠᠵᠤ ᠭᠠᠷᠬᠤ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingDialog</name>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.ui" line="14"/>
+-        <source>TroubleshootingDialog</source>
+-        <translation>TroubleshootingDialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="24"/>
+-        <source>Troubleshooting</source>
+-        <translation>ᠭᠡᠮ ᠢ ᠵᠢᠭᠰᠠᠭᠠᠨ ᠪᠠᠶᠢᠴᠠᠭᠠᠬᠤ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="25"/>
+-        <source>Accept</source>
+-        <translation>ᠲᠣᠭᠲᠠᠭᠠᠨ᠎ᠠ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="26"/>
+-        <source>Cancel</source>
+-        <translation>ᠬᠦᠴᠦᠨ ᠦᠭᠡᠶ ᠪᠣᠯᠭᠠᠨ᠎ᠠ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="27"/>
+-        <source>Repair</source>
+-        <translation>ᠨᠢᠭᠡ ᠲᠠᠷᠤᠭᠤᠯ ᠢ ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠨ ᠰᠡᠷᠭᠦᠭᠡᠨ᠎ᠡ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="77"/>
+-        <source>Check whether the CUPS service is enabled</source>
+-        <translation>CUPS ᠦᠢᠯᠡᠴᠢᠯᠡᠭᠡ ᠨᠡᠭᠡᠭᠡᠭᠰᠡᠨ ᠡᠰᠡᠬᠦ ᠶᠢ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ᠎ᠠ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="87"/>
+-        <source>CUPS service is enabled</source>
+-        <translation>CUPS ᠦᠢᠯᠡᠴᠢᠯᠡᠭᠡ ᠨᠢᠭᠡᠨᠲᠡ ᠡᠬᠢᠯᠡᠵᠡᠢ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="90"/>
+-        <source>CUPS service is not enabled</source>
+-        <translation>CUPS ᠦᠢᠯᠡᠴᠢᠯᠡᠭᠡ ᠨᠡᠭᠡᠭᠡᠭᠰᠡᠨ ᠦᠭᠡᠶ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="105"/>
+-        <source>Check CUPS user access rights</source>
+-        <translation>CUPS ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢᠳ ᠦᠨ ᠰᠤᠷᠪᠤᠯᠵᠢᠯᠠᠬᠤ ᠡᠷᠬᠡ ᠮᠡᠳᠡᠯ ᠢ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ᠎ᠠ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="116"/>
+-        <source>CUPS users can access normally</source>
+-        <translation>CUPS ᠬᠡᠪ ᠦᠨ ᠶᠣᠰᠣᠭᠠᠷ ᠠᠶᠢᠯᠴᠢᠯᠠᠵᠤ ᠪᠣᠯᠣᠨ᠎ᠠ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="119"/>
+-        <source>CUPS user restricted access rights</source>
+-        <translation>CUPS ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢᠳ ᠦᠨ ᠰᠤᠷᠪᠤᠯᠵᠢᠯᠠᠬᠤ ᠡᠷᠬᠡ ᠮᠡᠳᠡᠯ ᠬᠢᠵᠠᠭᠠᠷᠯᠠᠭᠳᠠᠨ᠎ᠠ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="133"/>
+-        <source>Check whether the printer connection is normal</source>
+-        <translation>ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠬᠡᠪ ᠦᠨ ᠪᠠᠶᠢᠳᠠᠯ ᠲᠠᠢ ᠡᠰᠡᠬᠦ ᠶᠢ ᠪᠠᠢ᠌ᠴᠠᠭᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="152"/>
+-        <source>Printer connected</source>
+-        <translation>ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠨᠢᠭᠡᠨᠲᠡ ᠬᠣᠯᠪᠣᠭᠳᠠᠵᠠᠢ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="155"/>
+-        <source>Printer disconnected</source>
+-        <translation>ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠨᠢᠭᠡᠨᠲᠡ ᠬᠣᠯᠪᠣᠭᠳᠠᠵᠠᠢ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="186"/>
+-        <source>Check whether the printer protocol port configuration is enabled</source>
+-        <translation>ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠤ ᠬᠡᠯᠡᠯᠴᠡᠭᠡᠷ ᠦᠨ ᠦᠵᠦᠭᠦᠷ ᠦᠨ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠤᠯᠲᠠ ᠡᠬᠢᠯᠡᠭᠰᠡᠨ ᠡᠰᠡᠬᠦ ᠶᠢ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ᠎ᠠ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="194"/>
+-        <source>Printer protocol port configuration is enabled</source>
+-        <translation>ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠤ ᠬᠡᠯᠡᠯᠴᠡᠭᠡᠷ ᠦᠨ ᠦᠵᠦᠭᠦᠷ ᠦᠨ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠤᠯᠲᠠ ᠨᠢᠭᠡᠨᠲᠡ ᠡᠬᠢᠯᠡᠵᠡᠢ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="197"/>
+-        <source>Printer protocol port is not configured to be enabled</source>
+-        <translation>ᠳᠠᠷᠤᠮᠠᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠤ ᠬᠡᠯᠡᠯᠴᠡᠭᠡᠷ ᠦᠨ ᠦᠵᠦᠭᠦᠷ ᠦᠨ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠤᠯᠲᠠ ᠡᠬᠢᠯᠡᠭᠡᠳᠦᠶ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Error</source>
+-        <translation>ᠪᠤᠷᠤᠭᠤ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Automatic repair failed and manual troubleshooting is required.</source>
+-        <translation>ᠠᠦᠢᠲ᠋ᠣ᠋ ᠵᠠᠰᠠᠨ ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠵᠤ ᠢᠯᠠᠭᠳᠠᠬᠤ ᠳᠤ ᠭᠠᠷ ᠢᠶᠠᠷ ᠢᠶᠠᠨ ᠭᠡᠮ ᠢ ᠠᠷᠢᠯᠭᠠᠬᠤ ᠴᠢᠬᠤᠯᠠᠲᠠᠶ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="208"/>
+-        <source>Confirm</source>
+-        <translation>ᠲᠣᠭᠲᠠᠭᠠᠨ᠎ᠠ᠃</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/troubleshooting_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation>ui ᠭᠠᠷᠴᠠᠭ ᠃</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>UkuiPrinterManager</name>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="340"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1499"/>
+-        <source>Idle</source>
+-        <translation>ᠬᠤᠭᠤᠰᠤᠨ ᠰᠡᠯᠡᠬᠦᠦ</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="342"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1501"/>
+-        <source>Printing</source>
+-        <translation>ᠶᠠᠭᠠᠷᠠᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="344"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1503"/>
+-        <source>Stopped</source>
+-        <translation>ᠵᠤᠭᠰᠤᠭᠠᠬᠤ</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="438"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠤ᠋ᠨ ᠨᠡᠷᠡᠢᠳᠦᠯ ᠳ᠋ᠤ᠌ &apos;/\&apos;&quot;?#&apos; ᠠᠭᠤᠯᠠᠭᠳᠠᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ ᠮᠦᠷᠳᠡᠭᠡᠨ ᠬᠤᠭᠤᠰᠤᠨ ᠪᠠᠢᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ᠂ 128 ᠠᠪᠢᠶ᠎ᠠ ᠡᠴᠡ ᠴᠦᠬᠡᠨ ᠪᠠᠢᠬᠤ ᠬᠡᠷᠡᠭᠳᠡᠢ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="455"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>ᠠᠳᠠᠯᠢ ᠨᠡᠷ᠎ᠡ ᠲᠠᠢ ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠪᠠᠢᠨ᠎ᠠ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="458"/>
+-        <source>Printer name is not case sensitive!</source>
+-        <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠤ᠋ᠨ ᠨᠡᠷᠡᠢᠳᠦᠯ ᠶᠡᠬᠡ ᠪᠠᠭ᠎ᠠ ᠪᠢᠴᠢᠯᠬᠡ ᠬᠤᠪᠢᠶᠠᠬᠤ ᠦᠬᠡᠢ!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>WaitingDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="32"/>
+-        <source>Widget</source>
+-        <translation>ᠵᠢᠵᠢᠭ ᠲᠤᠨᠤᠭᠯᠠᠯ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="87"/>
+-        <source>TextLabel</source>
+-        <translation>ᠲᠧᠺᠰᠲ ᠱᠣᠰᠢᠭ᠎ᠠ</translation>
+-    </message>
+-</context>
+-</TS>
+diff --git a/daemons/sessionservice/printerbackend/translations/kylin-printer_ru.ts b/daemons/sessionservice/printerbackend/translations/kylin-printer_ru.ts
+deleted file mode 100644
+index 74e6e0c..0000000
+--- a/daemons/sessionservice/printerbackend/translations/kylin-printer_ru.ts
++++ /dev/null
+@@ -1,1741 +0,0 @@
+-<?xml version="1.0" encoding="utf-8"?>
+-<!DOCTYPE TS>
+-<TS version="2.1" language="ru">
+-<context>
+-    <name></name>
+-    <message>
+-        <location filename="../kylin-printer.desktop.in.h" line="1"/>
+-        <source>Printer</source>
+-        <translation>Принтеры</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/data/kylin-printer-applet.desktop.in.h" line="1"/>
+-        <source>Printer-backend</source>
+-        <translation>Принтеры-бэкэнд</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AddPrinterWindow</name>
+-    <message>
+-        <location filename="../ui/add_printer_window.ui" line="26"/>
+-        <source>AddPrinterWindow</source>
+-        <translation>ДобавитьПринтерОкно</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="136"/>
+-        <source>Add Printer</source>
+-        <translation>Добавить принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="148"/>
+-        <source>Auto</source>
+-        <translation>Авто</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="149"/>
+-        <location filename="../ui/add_printer_window.cpp" line="191"/>
+-        <source>Manual</source>
+-        <translation>Вручную</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="161"/>
+-        <source>Device List</source>
+-        <translation>Список устройств</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="192"/>
+-        <source>Protocol</source>
+-        <translation>Протокол</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="193"/>
+-        <source>Address</source>
+-        <translation>Адрес</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="199"/>
+-        <source>Search</source>
+-        <translation>Искать</translation>
+-    </message>
+-    <message>
+-        <source>socket</source>
+-        <translation type="vanished">розетка</translation>
+-    </message>
+-    <message>
+-        <source>ipp</source>
+-        <translation type="vanished">ипп</translation>
+-    </message>
+-    <message>
+-        <source>http</source>
+-        <translation type="vanished">http</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="213"/>
+-        <source>name</source>
+-        <translation>имя</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="214"/>
+-        <source>location</source>
+-        <translation>местоположение</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="215"/>
+-        <source>driver</source>
+-        <translation>водитель</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="220"/>
+-        <source>forward</source>
+-        <translation>вперёд</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Error</source>
+-        <translation>Ошибка</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <source>Add printer failed: no PPD selected!</source>
+-        <translation>Сбой добавления принтера: PPD не выбран!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>Добавить принтер не удалось, пожалуйста, повторите попытку через некоторое время.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="304"/>
+-        <location filename="../ui/add_printer_window.cpp" line="314"/>
+-        <location filename="../ui/add_printer_window.cpp" line="333"/>
+-        <location filename="../ui/add_printer_window.cpp" line="433"/>
+-        <location filename="../ui/add_printer_window.cpp" line="443"/>
+-        <location filename="../ui/add_printer_window.cpp" line="561"/>
+-        <location filename="../ui/add_printer_window.cpp" line="603"/>
+-        <location filename="../ui/add_printer_window.cpp" line="648"/>
+-        <location filename="../ui/add_printer_window.cpp" line="687"/>
+-        <source>Confirm</source>
+-        <translation>Подтверждать</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Hint</source>
+-        <translation>Подсказка</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <source>Add printer successfully,printer a test page?</source>
+-        <translation>Успешно добавить принтер, принтер тестовую страницу?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="313"/>
+-        <source>Print test page</source>
+-        <translation>Печать тестовой страницы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="321"/>
+-        <source>Success</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="322"/>
+-        <source>Fail</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <source>Automatic driver configuration failed, please select the driver manually.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="578"/>
+-        <source>Searching for driver...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <source>Failed to search for driver. Do you want to use local driver?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="620"/>
+-        <source>It is detected that the driver comes from the Internet. Do you want to continue the installation?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="625"/>
+-        <source>Install</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="639"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="642"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="659"/>
+-        <source>Installing printer driver...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <source>Driver installation failed. Do you want to use local driver?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>Успешно ли распечатана тестовая страница?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>Не удалось выполнить тестовую печать. Вы хотите изменить драйвер принтера?</translation>
+-    </message>
+-    <message>
+-        <source>Change Driver</source>
+-        <translation type="vanished">Смена драйвера</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="604"/>
+-        <location filename="../ui/add_printer_window.cpp" line="626"/>
+-        <location filename="../ui/add_printer_window.cpp" line="688"/>
+-        <source>Cancel</source>
+-        <translation>Отмена</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="362"/>
+-        <source>Searching printers...</source>
+-        <translation>Поиск принтеров...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <source>Can not find this Printer!</source>
+-        <translation>Не могу найти этот принтер!</translation>
+-    </message>
+-    <message>
+-        <source>Searching printer driver...</source>
+-        <translation type="vanished">Поиск драйвера принтера...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="432"/>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <location filename="../ui/add_printer_window.cpp" line="622"/>
+-        <location filename="../ui/add_printer_window.cpp" line="645"/>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <location filename="../ui/add_printer_window.cpp" line="747"/>
+-        <source>Warning</source>
+-        <translation>Предупреждение</translation>
+-    </message>
+-    <message>
+-        <source>Install driver package automatically failed,continue?</source>
+-        <translation type="vanished">Установка пакета драйверов автоматически не удалась, продолжить?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="749"/>
+-        <source>Close</source>
+-        <translation>Закрывать</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AutoSearchResultModel</name>
+-    <message>
+-        <location filename="../ui/auto_search_result_model.cpp" line="49"/>
+-        <location filename="../ui/auto_search_result_model.cpp" line="51"/>
+-        <source>network</source>
+-        <translation>сеть</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseInfo</name>
+-    <message>
+-        <location filename="../common/base_info.cpp" line="64"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseNotifyDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="35"/>
+-        <source>Dialog</source>
+-        <translation>Диалог</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="124"/>
+-        <source>TextLabel</source>
+-        <translation>Метка текста</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ChoosePpdComboBox</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="15"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="22"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="137"/>
+-        <source>Choose PPD</source>
+-        <translation>Выберите PPD</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="16"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="25"/>
+-        <source>Choose from the PPD library</source>
+-        <translation>Выберите из библиотеки PPD</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="17"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="29"/>
+-        <source>Add local PPD</source>
+-        <translation>Добавление локального PPD</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="48"/>
+-        <source>Please select a deb package.</source>
+-        <translation>Пожалуйста, выберите пакет deb.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="50"/>
+-        <source>Deb File(*.deb)</source>
+-        <translation>Deb Файл(*.deb)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="51"/>
+-        <source>Choose</source>
+-        <translation>Выбирать</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="52"/>
+-        <source>Cancel</source>
+-        <translation>Отмена</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="69"/>
+-        <source>Searching driver...</source>
+-        <translation>Поиск драйвера...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Warning</source>
+-        <translation>Предупреждение</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Install package failed,please retry.</source>
+-        <translation>Установка пакета не удалась, пожалуйста, повторите попытку.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="92"/>
+-        <source>Yes</source>
+-        <translation>Да</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ConfigIPAddressDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="32"/>
+-        <source>Dialog</source>
+-        <translation>Диалог</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="75"/>
+-        <source>Common configuration</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="150"/>
+-        <source>初始地址:api.kylinos.cn</source>
+-        <translation>初始地址:api.kylinos.cn</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="180"/>
+-        <source>Advanced Features</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="30"/>
+-        <source>Configure</source>
+-        <translation>Настроить</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="31"/>
+-        <source>Service address:</source>
+-        <translation>Адрес службы:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="32"/>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="34"/>
+-        <source>Enable</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="33"/>
+-        <source>This printer can be used to convert print files to PDF format</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="35"/>
+-        <source>This printer can be used to convert print files to BRF format</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="36"/>
+-        <source>Displays all serial printers</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="37"/>
+-        <source>Cancel</source>
+-        <translation>Отмена</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="38"/>
+-        <source>Ok</source>
+-        <translation>Хорошо</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Warning</source>
+-        <translation>Предупреждение</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Config init failed</source>
+-        <translation>Сбой инициализации конфигурации</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="53"/>
+-        <source>Confirm</source>
+-        <translation>Подтверждать</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CupsDebugLoggingCheckbox</name>
+-    <message>
+-        <location filename="../ui/cups_debug_logging_checkbox.cpp" line="8"/>
+-        <source>Retain debug info for troubleshooting</source>
+-        <translation>Сохранение отладочной информации для устранения неполадок</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomAboutDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_about_dialog.cpp" line="12"/>
+-        <source>Version: </source>
+-        <translation type="unfinished">Версия: </translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomDoublelineCheckBox</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_doubleline_checkbox.ui" line="14"/>
+-        <source>Form</source>
+-        <translation type="unfinished">Форма</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DebInstallWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>Форма</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="75"/>
+-        <source>Driver</source>
+-        <translation>Водитель</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="143"/>
+-        <source>Cancel</source>
+-        <translation>Отмена</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="162"/>
+-        <source>Confirm</source>
+-        <translation>Подтверждать</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="23"/>
+-        <source>Modify Printer Driver</source>
+-        <translation>Изменение драйвера принтера</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Error</source>
+-        <translation>Ошибка</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Modify PPD failed: no PPD selected!</source>
+-        <translation>Изменить PPD не удалось: PPD не выбран!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceListButton</name>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="32"/>
+-        <source>Idle</source>
+-        <translation>Неработающий</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="35"/>
+-        <source>Printing</source>
+-        <translation>Печатание</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="38"/>
+-        <source>Stopped</source>
+-        <translation>Остановленный</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="41"/>
+-        <source>Unknow</source>
+-        <translation>Неизвестная</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="62"/>
+-        <location filename="../ui/device_list_button.cpp" line="264"/>
+-        <location filename="../ui/device_list_button.cpp" line="296"/>
+-        <source>Default</source>
+-        <translation>По умолчанию</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="133"/>
+-        <location filename="../ui/device_list_button.cpp" line="163"/>
+-        <source>Set Default</source>
+-        <translation>Установить значение по умолчанию</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="135"/>
+-        <location filename="../ui/device_list_button.cpp" line="166"/>
+-        <source>Enabled</source>
+-        <translation>Включен</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="139"/>
+-        <location filename="../ui/device_list_button.cpp" line="169"/>
+-        <source>Shared</source>
+-        <translation>Совместный</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceMap</name>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="301"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="303"/>
+-        <source>Printers</source>
+-        <translation>Принтеры</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="305"/>
+-        <source>plug-in:</source>
+-        <translation>плагин:</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="307"/>
+-        <source>unplugged:</source>
+-        <translation>Отключен:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EmptyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/right_widget.cpp" line="96"/>
+-        <source>Please click &quot;+&quot; button to add a printer.</source>
+-        <translation>Нажмите кнопку &quot;+&quot;, чтобы добавить принтер.</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EventNotifyMonitor</name>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="430"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="482"/>
+-        <source>Printer </source>
+-        <translation>Принтер </translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="454"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="469"/>
+-        <source>Job:</source>
+-        <translation>Работа:</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="456"/>
+-        <source>created!</source>
+-        <translation>созданный!</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="471"/>
+-        <source>completed!</source>
+-        <translation>завершённый!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>InkInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/ink_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation type="unfinished">Форма</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerModel</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="50"/>
+-        <source>Test Page</source>
+-        <translation>Тестовая страница</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="53"/>
+-        <source>untitled</source>
+-        <translation>неозаглавленный</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="64"/>
+-        <source>unknown</source>
+-        <translation>неизвестный</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="70"/>
+-        <source>Printing page %1</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="261"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="412"/>
+-        <source>Cancel print</source>
+-        <translation>Отмена печати</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="415"/>
+-        <source>Delete print</source>
+-        <translation>Удалить печать</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="418"/>
+-        <source>Hold print</source>
+-        <translation>Удержание печати</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="421"/>
+-        <source>Release print</source>
+-        <translation>Печать релиза</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="424"/>
+-        <source>Reprint</source>
+-        <translation>Перекрашивать</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="427"/>
+-        <source>Job properties</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Warning</source>
+-        <translation>Предупреждение</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <source>Set error: Job status has been updated!</source>
+-        <translation>Ошибка установки: Статус задания обновлен!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="447"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="453"/>
+-        <source>Sure</source>
+-        <translation>Уверенный</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Cannot move job to itself!</source>
+-        <translation>Не может перенести работу на себя!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobMenu</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="108"/>
+-        <source>Cancel print</source>
+-        <translation>Отмена печати</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="110"/>
+-        <source>Delete print</source>
+-        <translation>Удалить печать</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="112"/>
+-        <source>Hold print</source>
+-        <translation>Удержание печати</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="114"/>
+-        <source>Release print</source>
+-        <translation>Печать релиза</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="116"/>
+-        <source>Reprint</source>
+-        <translation type="unfinished">Перекрашивать</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="118"/>
+-        <source>Use other printer...</source>
+-        <translation>Используйте другой принтер...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="120"/>
+-        <source>Job properties</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobPropertiesWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="15"/>
+-        <source>Job properties</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="35"/>
+-        <source>name</source>
+-        <translation type="unfinished">имя</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="36"/>
+-        <source>value</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LaunchPrinter</name>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation type="unfinished">Успешно ли распечатана тестовая страница?</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>%1 print result confirmation</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="94"/>
+-        <source>Yes</source>
+-        <translation type="unfinished">Да</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="96"/>
+-        <source>No</source>
+-        <translation type="unfinished">Нет</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LeftWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="47"/>
+-        <source>Device List</source>
+-        <translation>Список устройств</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="212"/>
+-        <source>Are you sure to delete &quot;%1&quot;?</source>
+-        <translation>Вы обязательно удалите &quot;%1&quot;?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="216"/>
+-        <source>Delete</source>
+-        <translation>Удалить</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="217"/>
+-        <source>Cancel</source>
+-        <translation>Отмена</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="360"/>
+-        <source>Set Default Failed!</source>
+-        <translation>Установить значение по умолчанию не удалось!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="362"/>
+-        <source>Warning</source>
+-        <translation>Предупреждение</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="364"/>
+-        <source>Close</source>
+-        <translation>Закрывать</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWinPropertyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.ui" line="26"/>
+-        <source>Form</source>
+-        <translation>Форма</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="45"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="47"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="71"/>
+-        <source>Property</source>
+-        <translation>Свойство</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="78"/>
+-        <source>Job List</source>
+-        <translation>Список вакансий</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="85"/>
+-        <source>PrintTest</source>
+-        <translation>ПринтТест</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="90"/>
+-        <source>Troubleshooting</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="192"/>
+-        <source>Idle</source>
+-        <translation>Неработающий</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="194"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="196"/>
+-        <source>Printing</source>
+-        <translation>Печатание</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="198"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="200"/>
+-        <source>Stopped</source>
+-        <translation>Остановленный</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="205"/>
+-        <source>Unknown</source>
+-        <translation>Неизвестный</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="229"/>
+-        <source>Are you sure to rename &quot;%1&quot; ?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="233"/>
+-        <source>Rename</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="234"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished">Отмена</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="230"/>
+-        <source>Warning</source>
+-        <translation>Предупреждение</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="231"/>
+-        <source>This action will delete the job queue too!</source>
+-        <translation>Это действие также удалит очередь заданий!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWindow</name>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="91"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="225"/>
+-        <source>Delete Failed!</source>
+-        <translation>Удалить не удалось!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="227"/>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Warning</source>
+-        <translation>Предупреждение</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="229"/>
+-        <location filename="../ui/mainwindow.cpp" line="269"/>
+-        <source>Close</source>
+-        <translation>Закрывать</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>Добавить принтер не удалось, пожалуйста, повторите попытку через некоторое время.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="326"/>
+-        <source>Try to connect the Printer...</source>
+-        <translation>Попробуйте подключить принтер...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Error</source>
+-        <translation>Ошибка</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Open Printer Failed,Please Del And Add Printer, Then Try Again!</source>
+-        <translation>Откройте Printer Failed, пожалуйста, Del и добавьте принтер, затем повторите попытку!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="333"/>
+-        <source>Sure</source>
+-        <translation>Уверенный</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MenuModule</name>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="44"/>
+-        <location filename="../ui/menumodule.cpp" line="73"/>
+-        <source>Help</source>
+-        <translation>Справка</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="42"/>
+-        <location filename="../ui/menumodule.cpp" line="70"/>
+-        <source>About</source>
+-        <translation>Около</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="38"/>
+-        <location filename="../ui/menumodule.cpp" line="76"/>
+-        <source>Configure</source>
+-        <translation>Настроить</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="40"/>
+-        <location filename="../ui/menumodule.cpp" line="88"/>
+-        <source>Classic Printer</source>
+-        <translation>классический принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="46"/>
+-        <location filename="../ui/menumodule.cpp" line="66"/>
+-        <source>Quit</source>
+-        <translation>Покидать</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.h" line="52"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>NewPopWindow</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>Форма</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="40"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="59"/>
+-        <source>Print Test Page</source>
+-        <translation>Печать тестовой страницы</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="60"/>
+-        <source>View Device</source>
+-        <translation>Просмотр устройства</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="61"/>
+-        <source>Manual Install</source>
+-        <translation>Установка вручную</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="128"/>
+-        <source>Installing......</source>
+-        <translation>Установка......</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="143"/>
+-        <source>Successful installation!</source>
+-        <translation>Успешная установка!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="164"/>
+-        <source>Installation failed!</source>
+-        <translation>Установка не удалась!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="188"/>
+-        <source>Printer Detected:</source>
+-        <translation>Обнаружен принтер:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Hint</source>
+-        <translation>Подсказка</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>Успешно ли распечатана тестовая страница?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="206"/>
+-        <source>Yes</source>
+-        <translation>Да</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="207"/>
+-        <source>No</source>
+-        <translation>Нет</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>Не удалось выполнить тестовую печать. Вы хотите изменить драйвер принтера?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="213"/>
+-        <source>Change Driver</source>
+-        <translation>Смена драйвера</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="214"/>
+-        <source>Cancel</source>
+-        <translation>Отмена</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Error</source>
+-        <translation>Ошибка</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Failed to start, please try to add the printer again!</source>
+-        <translation>Не удалось запустить, попробуйте добавить принтер еще раз!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="229"/>
+-        <source>Ok</source>
+-        <translation>Хорошо</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PopWindowManager</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Do you want to add a printer?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>The printer was detected:%1</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Add</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="167"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="170"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="172"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="223"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="237"/>
+-        <source>%1 installation failed</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>%1 successful installation</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="222"/>
+-        <source>No printer driver for %1.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>Print test page</source>
+-        <translation type="unfinished">Печать тестовой страницы</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyListWindow</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.ui" line="26"/>
+-        <source>PropertyListWindow</source>
+-        <translation>НедвижимостьСписокОкно</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="9"/>
+-        <source>Cancel</source>
+-        <translation>Отмена</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="10"/>
+-        <source>Confirm</source>
+-        <translation>Подтверждать</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="11"/>
+-        <source>Refresh</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyManagerModel</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="139"/>
+-        <source>Model:</source>
+-        <translation>Модель:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="140"/>
+-        <source>Status:</source>
+-        <translation>Статус:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="141"/>
+-        <source>Location:</source>
+-        <translation>Местоположение:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="142"/>
+-        <source>Driver:</source>
+-        <translation>Водитель:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="23"/>
+-        <source>base</source>
+-        <translation>основа</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="36"/>
+-        <source>Ink</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="40"/>
+-        <source>advanced</source>
+-        <translation>продвинутый</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="58"/>
+-        <source>PrinterProperty</source>
+-        <translation>ПринтерСобственность</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="95"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="163"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="327"/>
+-        <source>Name</source>
+-        <translation>Имя</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="96"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="166"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="331"/>
+-        <source>Location</source>
+-        <translation>Местоположение</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="97"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="170"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="335"/>
+-        <source>Status</source>
+-        <translation>Статус</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="98"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="339"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="380"/>
+-        <source>Driver</source>
+-        <translation>Водитель</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="101"/>
+-        <source>Modify</source>
+-        <translation>Модифицировать</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="103"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="193"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="343"/>
+-        <source>URI</source>
+-        <translation>УРИ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="127"/>
+-        <source> (level: %1%)</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="172"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="174"/>
+-        <source>Idle</source>
+-        <translation>Неработающий</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="176"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="178"/>
+-        <source>Printing</source>
+-        <translation>Печатание</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="180"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="182"/>
+-        <source>Stopped</source>
+-        <translation>Остановленный</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="187"/>
+-        <source>Unknow</source>
+-        <translation>Неизвестная</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="396"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="412"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="423"/>
+-        <source>Warning</source>
+-        <translation>Предупреждение</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <source>Error happened, all options restored!.</source>
+-        <translation>Ошибка произошла, все опции восстановлены!.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="232"/>
+-        <source>Confirm</source>
+-        <translation>Подтверждать</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="269"/>
+-        <source>Conflict with &quot;%1&quot;</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="395"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>Имя принтера не может содержать &apos;/\&apos;&quot;?#&apos;, и более 0 букв, менее 128 букв!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="398"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="414"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="425"/>
+-        <source>Close</source>
+-        <translation>Закрывать</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="411"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>Существуют одноимённый принтер!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="422"/>
+-        <source>Printer Name Illegal!</source>
+-        <translation>Имя принтера незаконно!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ProperytItemWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="217"/>
+-        <source>Idle</source>
+-        <translation>Неработающий</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="220"/>
+-        <source>Printing</source>
+-        <translation>Печатание</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="223"/>
+-        <source>Stopped</source>
+-        <translation>Остановленный</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="226"/>
+-        <source>Unknow</source>
+-        <translation>Неизвестная</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>QObject</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="32"/>
+-        <source>id</source>
+-        <translation>идентификатор</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="33"/>
+-        <source>user</source>
+-        <translation>пользователь</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="34"/>
+-        <source>title</source>
+-        <translation>титул</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="35"/>
+-        <source>printer name</source>
+-        <translation>имя принтера</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="36"/>
+-        <source>size</source>
+-        <translation>размер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="37"/>
+-        <source>create time</source>
+-        <translation>создать время</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="38"/>
+-        <source>job state</source>
+-        <translation>состояние задания</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="44"/>
+-        <source>Job is waiting to be printed</source>
+-        <translation>Задание ожидает печати</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="45"/>
+-        <source>Job is held for printing</source>
+-        <translation>Задание проводится для печати</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="46"/>
+-        <source>Job is currently printing</source>
+-        <translation>Задание в настоящее время печатается</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="47"/>
+-        <source>Job has been stopped</source>
+-        <translation>Задание остановлено</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="48"/>
+-        <source>Job has been canceled</source>
+-        <translation>Задание отменено</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="49"/>
+-        <source>Job has aborted due to error</source>
+-        <translation>Задание прервано из-за ошибки</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="50"/>
+-        <source>Job has completed successfully</source>
+-        <translation>Задание успешно выполнено</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>RenamePrinterDialog</name>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="26"/>
+-        <source>RenamePrinterDialog</source>
+-        <translation>ПереименоватьПечатьДиалог</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="148"/>
+-        <source>Cancel</source>
+-        <translation>Отмена</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="167"/>
+-        <source>Ok</source>
+-        <translation>Хорошо</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.cpp" line="11"/>
+-        <source>Printer Name</source>
+-        <translation>Имя принтера</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SelectPpdDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="26"/>
+-        <source>SelectPpdDialog</source>
+-        <translation>ВыбратьPpdДиалог</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="203"/>
+-        <source>Cancel</source>
+-        <translation>Отмена</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="247"/>
+-        <source>Apply</source>
+-        <translation>Применять</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="23"/>
+-        <source>Select Driver</source>
+-        <translation>Выберите драйвер</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="56"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="85"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="266"/>
+-        <source>driver</source>
+-        <translation>водитель</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="57"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="71"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="232"/>
+-        <source>vendor</source>
+-        <translation>продавец</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="195"/>
+-        <source>Reading Drivers,Please Wait...</source>
+-        <translation>Чтение драйверов, пожалуйста, подождите...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="319"/>
+-        <source>Please Choose Model And Vender!</source>
+-        <translation>Пожалуйста, выберите модель и вендер!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="320"/>
+-        <source>Warning</source>
+-        <translation>Предупреждение</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="322"/>
+-        <source>Close</source>
+-        <translation>Закрывать</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbAuthInfoDialog</name>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.ui" line="26"/>
+-        <source>SmbAuthInfoDialog</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="13"/>
+-        <source>Authentication</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="14"/>
+-        <source>Authentication is required to connect to the printer &quot;%1&quot;</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="15"/>
+-        <source>Username</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="16"/>
+-        <source>Password</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="17"/>
+-        <source>Workgroup</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="18"/>
+-        <source>Accept</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="19"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished">Отмена</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="37"/>
+-        <source>Authentication in progress. Please wait...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="58"/>
+-        <source>Warning</source>
+-        <translation type="unfinished">Предупреждение</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="59"/>
+-        <source>Confirm</source>
+-        <translation type="unfinished">Подтверждать</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbClientHelper</name>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="175"/>
+-        <source>Cannot connect to %1!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="180"/>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="187"/>
+-        <source>Wrong user name or password!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="192"/>
+-        <source>The samba server shared printer list is empty</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SystemNotification</name>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="21"/>
+-        <source>Printer Info</source>
+-        <translation>Сведения о принтере</translation>
+-    </message>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="36"/>
+-        <source>Printer</source>
+-        <translation>Принтер</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TrayWin</name>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="33"/>
+-        <source>Minimize</source>
+-        <translation>Минимизировать</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="39"/>
+-        <source>Maximize</source>
+-        <translation>Максимизировать</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="45"/>
+-        <source>Quit</source>
+-        <translation>Покидать</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingDialog</name>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.ui" line="14"/>
+-        <source>TroubleshootingDialog</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="24"/>
+-        <source>Troubleshooting</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="25"/>
+-        <source>Accept</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="26"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished">Отмена</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="27"/>
+-        <source>Repair</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="77"/>
+-        <source>Check whether the CUPS service is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="87"/>
+-        <source>CUPS service is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="90"/>
+-        <source>CUPS service is not enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="105"/>
+-        <source>Check CUPS user access rights</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="116"/>
+-        <source>CUPS users can access normally</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="119"/>
+-        <source>CUPS user restricted access rights</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="133"/>
+-        <source>Check whether the printer connection is normal</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="152"/>
+-        <source>Printer connected</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="155"/>
+-        <source>Printer disconnected</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="186"/>
+-        <source>Check whether the printer protocol port configuration is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="194"/>
+-        <source>Printer protocol port configuration is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="197"/>
+-        <source>Printer protocol port is not configured to be enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Error</source>
+-        <translation type="unfinished">Ошибка</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Automatic repair failed and manual troubleshooting is required.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="208"/>
+-        <source>Confirm</source>
+-        <translation type="unfinished">Подтверждать</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/troubleshooting_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation type="unfinished">Форма</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>UkuiPrinterManager</name>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="340"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1499"/>
+-        <source>Idle</source>
+-        <translation>Неработающий</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="342"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1501"/>
+-        <source>Printing</source>
+-        <translation>Печатание</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="344"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1503"/>
+-        <source>Stopped</source>
+-        <translation>Остановленный</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="438"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>Имя принтера не может содержать &apos;/\&apos;&quot;?#&apos;, и более 0 букв, менее 128 букв!</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="455"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>Существуют одноимённый принтер!</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="458"/>
+-        <source>Printer name is not case sensitive!</source>
+-        <translation>Имя принтера не учитывает регистр!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>WaitingDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="32"/>
+-        <source>Widget</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="87"/>
+-        <source>TextLabel</source>
+-        <translation type="unfinished">Метка текста</translation>
+-    </message>
+-</context>
+-</TS>
+diff --git a/daemons/sessionservice/printerbackend/translations/kylin-printer_ug.ts b/daemons/sessionservice/printerbackend/translations/kylin-printer_ug.ts
+deleted file mode 100644
+index 0104a4f..0000000
+--- a/daemons/sessionservice/printerbackend/translations/kylin-printer_ug.ts
++++ /dev/null
+@@ -1,1741 +0,0 @@
+-<?xml version="1.0" encoding="utf-8"?>
+-<!DOCTYPE TS>
+-<TS version="2.1" language="ug">
+-<context>
+-    <name></name>
+-    <message>
+-        <location filename="../kylin-printer.desktop.in.h" line="1"/>
+-        <source>Printer</source>
+-        <translation>پرىنتېرلاش</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/data/kylin-printer-applet.desktop.in.h" line="1"/>
+-        <source>Printer-backend</source>
+-        <translation>پرىنتېرلاش-ئارقا قوشۇمچىسى</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AddPrinterWindow</name>
+-    <message>
+-        <location filename="../ui/add_printer_window.ui" line="26"/>
+-        <source>AddPrinterWindow</source>
+-        <translation>AddPrinterWindow</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="136"/>
+-        <source>Add Printer</source>
+-        <translation>پرىنتېرلاش خەت چوڭ-كىچىكلىكىنى قوشۇش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="148"/>
+-        <source>Auto</source>
+-        <translation>ئاپتۇماتىك</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="149"/>
+-        <location filename="../ui/add_printer_window.cpp" line="191"/>
+-        <source>Manual</source>
+-        <translation>قوللانما</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="161"/>
+-        <source>Device List</source>
+-        <translation>ئۈسكۈنە تىزىملىكى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="192"/>
+-        <source>Protocol</source>
+-        <translation>كېلىشىم</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="193"/>
+-        <source>Address</source>
+-        <translation>ئادرېس</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="199"/>
+-        <source>Search</source>
+-        <translation>ئىزدە</translation>
+-    </message>
+-    <message>
+-        <source>socket</source>
+-        <translation type="vanished">socket</translation>
+-    </message>
+-    <message>
+-        <source>ipp</source>
+-        <translation type="vanished">ipp</translation>
+-    </message>
+-    <message>
+-        <source>http</source>
+-        <translation type="vanished">http</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="213"/>
+-        <source>name</source>
+-        <translation>ئىسىم</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="214"/>
+-        <source>location</source>
+-        <translation>ئورنى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="215"/>
+-        <source>driver</source>
+-        <translation>شوپۇر</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="220"/>
+-        <source>forward</source>
+-        <translation>ئالدىغا</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Error</source>
+-        <translation>خاتالىق</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <source>Add printer failed: no PPD selected!</source>
+-        <translation>پرىنتېرنى قوشۇش مەغلۇپ بولدى: PPD تاللانمىدى!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>پرىنتېرنى قوشۇۋالسىڭىز مەغلۇپ بولىدۇ، بىر مەزگىل ئۆتكەندىن كېيىن قايتا قايتا قىلىڭ.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="304"/>
+-        <location filename="../ui/add_printer_window.cpp" line="314"/>
+-        <location filename="../ui/add_printer_window.cpp" line="333"/>
+-        <location filename="../ui/add_printer_window.cpp" line="433"/>
+-        <location filename="../ui/add_printer_window.cpp" line="443"/>
+-        <location filename="../ui/add_printer_window.cpp" line="561"/>
+-        <location filename="../ui/add_printer_window.cpp" line="603"/>
+-        <location filename="../ui/add_printer_window.cpp" line="648"/>
+-        <location filename="../ui/add_printer_window.cpp" line="687"/>
+-        <source>Confirm</source>
+-        <translation>جەزىملەشتۈرۈش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Hint</source>
+-        <translation>ئەسكەرتىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <source>Add printer successfully,printer a test page?</source>
+-        <translation>پرىنتېرنى مۇۋەپپەقىيەتلىك قوشىمىز،پرىنتېردا سىناق بېتى بارمۇ؟</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="313"/>
+-        <source>Print test page</source>
+-        <translation>بېسىپ چىقىرىش سىنىقى بېتى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="321"/>
+-        <source>Success</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="322"/>
+-        <source>Fail</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <source>Automatic driver configuration failed, please select the driver manually.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="578"/>
+-        <source>Searching for driver...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <source>Failed to search for driver. Do you want to use local driver?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="620"/>
+-        <source>It is detected that the driver comes from the Internet. Do you want to continue the installation?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="625"/>
+-        <source>Install</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="639"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="642"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="659"/>
+-        <source>Installing printer driver...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <source>Driver installation failed. Do you want to use local driver?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>سىناق بېتى مۇۋەپپەقىيەتلىك بېسىلىپ بولدىمۇ؟</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>سىناق بېسىپ چىقىرىش مەغلۇپ بولدى. پرىنتېر شوپۇرىنى ئالماشتۇرامسىز؟</translation>
+-    </message>
+-    <message>
+-        <source>Change Driver</source>
+-        <translation type="vanished">قوزغاچىنى ئۆزگەرتىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="604"/>
+-        <location filename="../ui/add_printer_window.cpp" line="626"/>
+-        <location filename="../ui/add_printer_window.cpp" line="688"/>
+-        <source>Cancel</source>
+-        <translation>ئەمەلدىن قالدۇرۇش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="362"/>
+-        <source>Searching printers...</source>
+-        <translation>پرىنتېرلار ئاختۇرۇۋاتىدۇ...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <source>Can not find this Printer!</source>
+-        <translation>بۇ پرىنتېرنى تاپالمىدىم!</translation>
+-    </message>
+-    <message>
+-        <source>Searching printer driver...</source>
+-        <translation type="vanished">پرىنتېر شوپۇرى ئاختۇرۇۋاتىدۇ...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="432"/>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <location filename="../ui/add_printer_window.cpp" line="622"/>
+-        <location filename="../ui/add_printer_window.cpp" line="645"/>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <location filename="../ui/add_printer_window.cpp" line="747"/>
+-        <source>Warning</source>
+-        <translation>دىققەت</translation>
+-    </message>
+-    <message>
+-        <source>Install driver package automatically failed,continue?</source>
+-        <translation type="vanished">شوپۇرلۇق بوغچىسىنى قاچىلاش ئاپتوماتىك مەغلۇپ بولدى، داۋاملاشتۇرامسىز؟</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="749"/>
+-        <source>Close</source>
+-        <translation>ياپ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AutoSearchResultModel</name>
+-    <message>
+-        <location filename="../ui/auto_search_result_model.cpp" line="49"/>
+-        <location filename="../ui/auto_search_result_model.cpp" line="51"/>
+-        <source>network</source>
+-        <translation>تور</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseInfo</name>
+-    <message>
+-        <location filename="../common/base_info.cpp" line="64"/>
+-        <source>Printer</source>
+-        <translation>پرىنتېرلاش</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseNotifyDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="35"/>
+-        <source>Dialog</source>
+-        <translation>دىئالوگ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="124"/>
+-        <source>TextLabel</source>
+-        <translation>TextLabel</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ChoosePpdComboBox</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="15"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="22"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="137"/>
+-        <source>Choose PPD</source>
+-        <translation>PPD نى تاللاش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="16"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="25"/>
+-        <source>Choose from the PPD library</source>
+-        <translation>PPD ئامبىرىدىن تاللاش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="17"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="29"/>
+-        <source>Add local PPD</source>
+-        <translation>يەرلىك PPD قوشۇش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="48"/>
+-        <source>Please select a deb package.</source>
+-        <translation>Deb يۈرۈشلۈكىنى تاللاڭ.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="50"/>
+-        <source>Deb File(*.deb)</source>
+-        <translation>Deb ھۆججىتى(*.deb)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="51"/>
+-        <source>Choose</source>
+-        <translation>تاللاش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="52"/>
+-        <source>Cancel</source>
+-        <translation>ئەمەلدىن قالدۇرۇش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="69"/>
+-        <source>Searching driver...</source>
+-        <translation>ئىزدەۋاتقان شوپۇر...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Warning</source>
+-        <translation>دىققەت</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Install package failed,please retry.</source>
+-        <translation>قاچىلاش بوغچىسى مەغلۇپ بولدى، قايتا قايتا قاچىلاڭ.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="92"/>
+-        <source>Yes</source>
+-        <translation>شۇنداق</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ConfigIPAddressDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="32"/>
+-        <source>Dialog</source>
+-        <translation>دىئالوگ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="75"/>
+-        <source>Common configuration</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="150"/>
+-        <source>初始地址:api.kylinos.cn</source>
+-        <translation>初始址:api.kylinos.cn</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="180"/>
+-        <source>Advanced Features</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="30"/>
+-        <source>Configure</source>
+-        <translation>سەپلىمە</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="31"/>
+-        <source>Service address:</source>
+-        <translation>مۇلازىمەت ئادرېسى:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="32"/>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="34"/>
+-        <source>Enable</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="33"/>
+-        <source>This printer can be used to convert print files to PDF format</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="35"/>
+-        <source>This printer can be used to convert print files to BRF format</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="36"/>
+-        <source>Displays all serial printers</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="37"/>
+-        <source>Cancel</source>
+-        <translation>ئەمەلدىن قالدۇرۇش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="38"/>
+-        <source>Ok</source>
+-        <translation>ماقۇل</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Warning</source>
+-        <translation>دىققەت</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Config init failed</source>
+-        <translation>سەپلىمە init مەغلۇپ بولدى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="53"/>
+-        <source>Confirm</source>
+-        <translation>جەزىملەشتۈرۈش</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CupsDebugLoggingCheckbox</name>
+-    <message>
+-        <location filename="../ui/cups_debug_logging_checkbox.cpp" line="8"/>
+-        <source>Retain debug info for troubleshooting</source>
+-        <translation>چاتاق يوقلاش ئۈچۈن دېففېكت ئۇچۇرىنى ساقلاپ قېلىش</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomAboutDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_about_dialog.cpp" line="12"/>
+-        <source>Version: </source>
+-        <translation type="unfinished">نەشرى: </translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomDoublelineCheckBox</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_doubleline_checkbox.ui" line="14"/>
+-        <source>Form</source>
+-        <translation type="unfinished">جەدۋەل</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DebInstallWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>جەدۋەل</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="75"/>
+-        <source>Driver</source>
+-        <translation>شوپۇر</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="143"/>
+-        <source>Cancel</source>
+-        <translation>ئەمەلدىن قالدۇرۇش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="162"/>
+-        <source>Confirm</source>
+-        <translation>جەزىملەشتۈرۈش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="23"/>
+-        <source>Modify Printer Driver</source>
+-        <translation>پرىنتېر قوزغاغۇچنى ئۆزگەرتىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Error</source>
+-        <translation>خاتالىق</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Modify PPD failed: no PPD selected!</source>
+-        <translation>PPD نى ئۆزگەرتىش مەغلۇپ بولدى: PPD تاللانمىدى!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceListButton</name>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="32"/>
+-        <source>Idle</source>
+-        <translation>بىكارچىلىق</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="35"/>
+-        <source>Printing</source>
+-        <translation>بېسىپ چىقىرىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="38"/>
+-        <source>Stopped</source>
+-        <translation>توختى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="41"/>
+-        <source>Unknow</source>
+-        <translation>ئۇقۇشمىغانلار</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="62"/>
+-        <location filename="../ui/device_list_button.cpp" line="264"/>
+-        <location filename="../ui/device_list_button.cpp" line="296"/>
+-        <source>Default</source>
+-        <translation>كۆڭۈلدىكى سۆز</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="133"/>
+-        <location filename="../ui/device_list_button.cpp" line="163"/>
+-        <source>Set Default</source>
+-        <translation>كۆڭۈلدىكىنى بەلگىلەش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="135"/>
+-        <location filename="../ui/device_list_button.cpp" line="166"/>
+-        <source>Enabled</source>
+-        <translation>قوزغىتىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="139"/>
+-        <location filename="../ui/device_list_button.cpp" line="169"/>
+-        <source>Shared</source>
+-        <translation>ئورتاق بەھرىلىنىش</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceMap</name>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="301"/>
+-        <source>Printer</source>
+-        <translation>پرىنتېرلاش</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="303"/>
+-        <source>Printers</source>
+-        <translation>پرىنتېرلاش</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="305"/>
+-        <source>plug-in:</source>
+-        <translation>قىستۇرما:</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="307"/>
+-        <source>unplugged:</source>
+-        <translation>توك مەنبەسىدىن ئايرىلدى:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EmptyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/right_widget.cpp" line="96"/>
+-        <source>Please click &quot;+&quot; button to add a printer.</source>
+-        <translation>پرىنتېر قوشۇش ئۈچۈن «+» كونۇپكىسىنى چېكىڭ.</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EventNotifyMonitor</name>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="430"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="482"/>
+-        <source>Printer </source>
+-        <translation>پرىنتېرلاش </translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="454"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="469"/>
+-        <source>Job:</source>
+-        <translation>خىزمەت ئورنى:</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="456"/>
+-        <source>created!</source>
+-        <translation>يارىتىلغان!</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="471"/>
+-        <source>completed!</source>
+-        <translation>تاماملاندى!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>InkInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/ink_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation type="unfinished">جەدۋەل</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerModel</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="50"/>
+-        <source>Test Page</source>
+-        <translation>سىنا بېتى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="53"/>
+-        <source>untitled</source>
+-        <translation>خەتسىز</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="64"/>
+-        <source>unknown</source>
+-        <translation>نامەلۇم</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="70"/>
+-        <source>Printing page %1</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="261"/>
+-        <source>Printer</source>
+-        <translation>پرىنتېرلاش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="412"/>
+-        <source>Cancel print</source>
+-        <translation>بېسىپ چىقىرىشنى بىكار قىلىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="415"/>
+-        <source>Delete print</source>
+-        <translation>بېسىپ چىقىرىشنى ئۆچۈرۈش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="418"/>
+-        <source>Hold print</source>
+-        <translation>بېسىپ چىقىرىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="421"/>
+-        <source>Release print</source>
+-        <translation>بېسىپ چىقىرىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="424"/>
+-        <source>Reprint</source>
+-        <translation>قايتا قاز</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="427"/>
+-        <source>Job properties</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Warning</source>
+-        <translation>دىققەت</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <source>Set error: Job status has been updated!</source>
+-        <translation>بەلگىلەش خاتالىقى: خىزمەت ھالىتى يېڭىلاندى!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="447"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="453"/>
+-        <source>Sure</source>
+-        <translation>ئەلۋەتتە</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Cannot move job to itself!</source>
+-        <translation>خىزمەتنى ئۆزىگە يۆتكىيەلمەيدۇ!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobMenu</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="108"/>
+-        <source>Cancel print</source>
+-        <translation>بېسىپ چىقىرىشنى بىكار قىلىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="110"/>
+-        <source>Delete print</source>
+-        <translation>بېسىپ چىقىرىشنى ئۆچۈرۈش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="112"/>
+-        <source>Hold print</source>
+-        <translation>بېسىپ چىقىرىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="114"/>
+-        <source>Release print</source>
+-        <translation>بېسىپ چىقىرىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="116"/>
+-        <source>Reprint</source>
+-        <translation type="unfinished">قايتا قاز</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="118"/>
+-        <source>Use other printer...</source>
+-        <translation>باشقا پرىنتېرنى ئىشلىتىڭ...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="120"/>
+-        <source>Job properties</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobPropertiesWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="15"/>
+-        <source>Job properties</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="35"/>
+-        <source>name</source>
+-        <translation type="unfinished">ئىسىم</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="36"/>
+-        <source>value</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LaunchPrinter</name>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation type="unfinished">سىناق بېتى مۇۋەپپەقىيەتلىك بېسىلىپ بولدىمۇ؟</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>%1 print result confirmation</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="94"/>
+-        <source>Yes</source>
+-        <translation type="unfinished">شۇنداق</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="96"/>
+-        <source>No</source>
+-        <translation type="unfinished">ياق</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LeftWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="47"/>
+-        <source>Device List</source>
+-        <translation>ئۈسكۈنە تىزىملىكى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="212"/>
+-        <source>Are you sure to delete &quot;%1&quot;?</source>
+-        <translation>«٪1»نى چوقۇم ئۆچۈرەمسىز؟</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="216"/>
+-        <source>Delete</source>
+-        <translation>ئۆچۈر</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="217"/>
+-        <source>Cancel</source>
+-        <translation>ئەمەلدىن قالدۇرۇش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="360"/>
+-        <source>Set Default Failed!</source>
+-        <translation>كۆڭۈلدىكىنى بەلگىلەش مەغلۇپ بولدى!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="362"/>
+-        <source>Warning</source>
+-        <translation>دىققەت</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="364"/>
+-        <source>Close</source>
+-        <translation>ياپ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWinPropertyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.ui" line="26"/>
+-        <source>Form</source>
+-        <translation>جەدۋەل</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="45"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="47"/>
+-        <source>Printer</source>
+-        <translation>پرىنتېرلاش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="71"/>
+-        <source>Property</source>
+-        <translation>مال-مۈلۈك</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="78"/>
+-        <source>Job List</source>
+-        <translation>خىزمەت تىزىملىكى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="85"/>
+-        <source>PrintTest</source>
+-        <translation>PrintTest</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="90"/>
+-        <source>Troubleshooting</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="192"/>
+-        <source>Idle</source>
+-        <translation>بىكارچىلىق</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="194"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="196"/>
+-        <source>Printing</source>
+-        <translation>بېسىپ چىقىرىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="198"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="200"/>
+-        <source>Stopped</source>
+-        <translation>توختى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="205"/>
+-        <source>Unknown</source>
+-        <translation>نامەلۇم</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="229"/>
+-        <source>Are you sure to rename &quot;%1&quot; ?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="233"/>
+-        <source>Rename</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="234"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished">ئەمەلدىن قالدۇرۇش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="230"/>
+-        <source>Warning</source>
+-        <translation>دىققەت</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="231"/>
+-        <source>This action will delete the job queue too!</source>
+-        <translation>بۇ ھەرىكەتمۇ خىزمەت قاتارىنى ئۆچۈرىۋېتىدۇ!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWindow</name>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="91"/>
+-        <source>Printer</source>
+-        <translation>پرىنتېرلاش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="225"/>
+-        <source>Delete Failed!</source>
+-        <translation>ئۆچۈرۈش مەغلۇپ بولدى!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="227"/>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Warning</source>
+-        <translation>دىققەت</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="229"/>
+-        <location filename="../ui/mainwindow.cpp" line="269"/>
+-        <source>Close</source>
+-        <translation>ياپ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>پرىنتېرنى قوشۇۋالسىڭىز مەغلۇپ بولىدۇ، بىر مەزگىل ئۆتكەندىن كېيىن قايتا قايتا قىلىڭ.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="326"/>
+-        <source>Try to connect the Printer...</source>
+-        <translation>پرىنتېرنى ئۇلاشقا تىرىشىڭ...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Error</source>
+-        <translation>خاتالىق</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Open Printer Failed,Please Del And Add Printer, Then Try Again!</source>
+-        <translation>پرىنتېرنى ئېچىش مەغلۇپ بولدى، Del دىن خەت باسقۇچىنى قوشۇۋېلىڭ، ئاندىن قايتا سىناپ بېقىڭ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="333"/>
+-        <source>Sure</source>
+-        <translation>ئەلۋەتتە</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MenuModule</name>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="44"/>
+-        <location filename="../ui/menumodule.cpp" line="73"/>
+-        <source>Help</source>
+-        <translation>ياردەم</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="42"/>
+-        <location filename="../ui/menumodule.cpp" line="70"/>
+-        <source>About</source>
+-        <translation>ھەققىدە</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="38"/>
+-        <location filename="../ui/menumodule.cpp" line="76"/>
+-        <source>Configure</source>
+-        <translation>سەپلىمە</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="40"/>
+-        <location filename="../ui/menumodule.cpp" line="88"/>
+-        <source>Classic Printer</source>
+-        <translation>كلاسسىك پرىنتېر</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="46"/>
+-        <location filename="../ui/menumodule.cpp" line="66"/>
+-        <source>Quit</source>
+-        <translation>چېكىنىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.h" line="52"/>
+-        <source>Printer</source>
+-        <translation>پرىنتېرلاش</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>NewPopWindow</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>جەدۋەل</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="40"/>
+-        <source>Printer</source>
+-        <translation>پرىنتېرلاش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="59"/>
+-        <source>Print Test Page</source>
+-        <translation>بېسىپ چىقىرىش سىناق بېتى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="60"/>
+-        <source>View Device</source>
+-        <translation>ئۈسكۈنىنى كۆرۈش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="61"/>
+-        <source>Manual Install</source>
+-        <translation>قولدا قاچىلاش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="128"/>
+-        <source>Installing......</source>
+-        <translation>قاچىلاش ......</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="143"/>
+-        <source>Successful installation!</source>
+-        <translation>مۇۋەپپىقىيەتلىك قاچىلاش!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="164"/>
+-        <source>Installation failed!</source>
+-        <translation>قاچىلاش مەغلۇپ بولدى!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="188"/>
+-        <source>Printer Detected:</source>
+-        <translation>پرىنتېر بايقالدى:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Hint</source>
+-        <translation>ئەسكەرتىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>سىناق بېتى مۇۋەپپەقىيەتلىك بېسىلىپ بولدىمۇ؟</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="206"/>
+-        <source>Yes</source>
+-        <translation>شۇنداق</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="207"/>
+-        <source>No</source>
+-        <translation>ياق</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>سىناق بېسىپ چىقىرىش مەغلۇپ بولدى. پرىنتېر شوپۇرىنى ئالماشتۇرامسىز؟</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="213"/>
+-        <source>Change Driver</source>
+-        <translation>قوزغاچىنى ئۆزگەرتىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="214"/>
+-        <source>Cancel</source>
+-        <translation>ئەمەلدىن قالدۇرۇش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Error</source>
+-        <translation>خاتالىق</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Failed to start, please try to add the printer again!</source>
+-        <translation>باشلانمىدى، پرىنتېرنى يەنە بىر قېتىم قوشۇشنى سىناپ بېقىڭ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="229"/>
+-        <source>Ok</source>
+-        <translation>ماقۇل</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PopWindowManager</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Do you want to add a printer?</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>The printer was detected:%1</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Add</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="167"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="170"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="172"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="223"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="237"/>
+-        <source>%1 installation failed</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>%1 successful installation</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="222"/>
+-        <source>No printer driver for %1.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>Print test page</source>
+-        <translation type="unfinished">بېسىپ چىقىرىش سىنىقى بېتى</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyListWindow</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.ui" line="26"/>
+-        <source>PropertyListWindow</source>
+-        <translation>PropertyListWindow</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="9"/>
+-        <source>Cancel</source>
+-        <translation>ئەمەلدىن قالدۇرۇش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="10"/>
+-        <source>Confirm</source>
+-        <translation>جەزىملەشتۈرۈش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="11"/>
+-        <source>Refresh</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyManagerModel</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="139"/>
+-        <source>Model:</source>
+-        <translation>مودېل:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="140"/>
+-        <source>Status:</source>
+-        <translation>ئەھۋالى:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="141"/>
+-        <source>Location:</source>
+-        <translation>ئورنى:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="142"/>
+-        <source>Driver:</source>
+-        <translation>شوپۇر:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="23"/>
+-        <source>base</source>
+-        <translation>بازا</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="36"/>
+-        <source>Ink</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="40"/>
+-        <source>advanced</source>
+-        <translation>ئىلغار</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="58"/>
+-        <source>PrinterProperty</source>
+-        <translation>پرىنتېرلاشProperty</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="95"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="163"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="327"/>
+-        <source>Name</source>
+-        <translation>ئىسىم-فامىلىسى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="96"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="166"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="331"/>
+-        <source>Location</source>
+-        <translation>ئورنى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="97"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="170"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="335"/>
+-        <source>Status</source>
+-        <translation>ھالەت</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="98"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="339"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="380"/>
+-        <source>Driver</source>
+-        <translation>شوپۇر</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="101"/>
+-        <source>Modify</source>
+-        <translation>ئۆزگەرتىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="103"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="193"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="343"/>
+-        <source>URI</source>
+-        <translation>URI</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="127"/>
+-        <source> (level: %1%)</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="172"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="174"/>
+-        <source>Idle</source>
+-        <translation>بىكارچىلىق</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="176"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="178"/>
+-        <source>Printing</source>
+-        <translation>بېسىپ چىقىرىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="180"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="182"/>
+-        <source>Stopped</source>
+-        <translation>توختى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="187"/>
+-        <source>Unknow</source>
+-        <translation>ئۇقۇشمىغانلار</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="396"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="412"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="423"/>
+-        <source>Warning</source>
+-        <translation>دىققەت</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <source>Error happened, all options restored!.</source>
+-        <translation>خاتالىق يۈز بەردى، بارلىق تاللاشلار ئەسلىگە كەلدى!.</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="232"/>
+-        <source>Confirm</source>
+-        <translation>جەزىملەشتۈرۈش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="269"/>
+-        <source>Conflict with &quot;%1&quot;</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="395"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>پرىنتېر نامى &apos;/\&apos;?#&apos;, 0 دىن ئارتۇق ھەرىپى، 128 ھەرپتىن كىچىك بولالمايدۇ !</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="398"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="414"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="425"/>
+-        <source>Close</source>
+-        <translation>ياپ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="411"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>مەۋجۇتلۇق ئوخشاش ئىسىمدىكى پرىنتېرلاش ماشىنىسى!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="422"/>
+-        <source>Printer Name Illegal!</source>
+-        <translation>پرىنتېرلاش نامى قانۇنسىز!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ProperytItemWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="217"/>
+-        <source>Idle</source>
+-        <translation>بىكارچىلىق</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="220"/>
+-        <source>Printing</source>
+-        <translation>بېسىپ چىقىرىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="223"/>
+-        <source>Stopped</source>
+-        <translation>توختى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="226"/>
+-        <source>Unknow</source>
+-        <translation>ئۇقۇشمىغانلار</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>QObject</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="32"/>
+-        <source>id</source>
+-        <translation>id</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="33"/>
+-        <source>user</source>
+-        <translation>ئىشلەتكۈچى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="34"/>
+-        <source>title</source>
+-        <translation>تېما</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="35"/>
+-        <source>printer name</source>
+-        <translation>پرىنتېرلاش نامى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="36"/>
+-        <source>size</source>
+-        <translation>چوڭ - كىچىكلىكى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="37"/>
+-        <source>create time</source>
+-        <translation>ۋاقىت يارىتىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="38"/>
+-        <source>job state</source>
+-        <translation>خىزمەت ھالىتى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="44"/>
+-        <source>Job is waiting to be printed</source>
+-        <translation>خىزمەت بىسىلىشنى كۈتمەكتە</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="45"/>
+-        <source>Job is held for printing</source>
+-        <translation>باسمىچىلىق خىزمىتى ئېلىپ بېرىلىدۇ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="46"/>
+-        <source>Job is currently printing</source>
+-        <translation>خىزمەت ھازىر باستۇرىۋاتىدۇ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="47"/>
+-        <source>Job has been stopped</source>
+-        <translation>خىزمەت توختىتىلدى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="48"/>
+-        <source>Job has been canceled</source>
+-        <translation>خىزمەت ئەمەلدىن قالدۇرۇلدى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="49"/>
+-        <source>Job has aborted due to error</source>
+-        <translation>خاتالىق سەۋەبىدىن خىزمەتتىن توختىدى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="50"/>
+-        <source>Job has completed successfully</source>
+-        <translation>خىزمەت مۇۋەپپەقىيەتلىك تاماملاندى</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>RenamePrinterDialog</name>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="26"/>
+-        <source>RenamePrinterDialog</source>
+-        <translation>RenamePrinterDialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="148"/>
+-        <source>Cancel</source>
+-        <translation>ئەمەلدىن قالدۇرۇش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="167"/>
+-        <source>Ok</source>
+-        <translation>ماقۇل</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.cpp" line="11"/>
+-        <source>Printer Name</source>
+-        <translation>پرىنتېرلاش نامى</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SelectPpdDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="26"/>
+-        <source>SelectPpdDialog</source>
+-        <translation>SelectPpdDialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="203"/>
+-        <source>Cancel</source>
+-        <translation>ئەمەلدىن قالدۇرۇش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="247"/>
+-        <source>Apply</source>
+-        <translation>ئىلتىماس قىلىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="23"/>
+-        <source>Select Driver</source>
+-        <translation>شوپۇر تاللاش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="56"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="85"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="266"/>
+-        <source>driver</source>
+-        <translation>شوپۇر</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="57"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="71"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="232"/>
+-        <source>vendor</source>
+-        <translation>تىخنىكچى</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="195"/>
+-        <source>Reading Drivers,Please Wait...</source>
+-        <translation>كۆرۈش شوپۇرلار،كۈتۈڭ...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="319"/>
+-        <source>Please Choose Model And Vender!</source>
+-        <translation>Model And Vender نى تاللاڭ!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="320"/>
+-        <source>Warning</source>
+-        <translation>دىققەت</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="322"/>
+-        <source>Close</source>
+-        <translation>ياپ</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbAuthInfoDialog</name>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.ui" line="26"/>
+-        <source>SmbAuthInfoDialog</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="13"/>
+-        <source>Authentication</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="14"/>
+-        <source>Authentication is required to connect to the printer &quot;%1&quot;</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="15"/>
+-        <source>Username</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="16"/>
+-        <source>Password</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="17"/>
+-        <source>Workgroup</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="18"/>
+-        <source>Accept</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="19"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished">ئەمەلدىن قالدۇرۇش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="37"/>
+-        <source>Authentication in progress. Please wait...</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="58"/>
+-        <source>Warning</source>
+-        <translation type="unfinished">دىققەت</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="59"/>
+-        <source>Confirm</source>
+-        <translation type="unfinished">جەزىملەشتۈرۈش</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbClientHelper</name>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="175"/>
+-        <source>Cannot connect to %1!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="180"/>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="187"/>
+-        <source>Wrong user name or password!</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="192"/>
+-        <source>The samba server shared printer list is empty</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SystemNotification</name>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="21"/>
+-        <source>Printer Info</source>
+-        <translation>پرىنتېرلاش ئۇچۇرى</translation>
+-    </message>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="36"/>
+-        <source>Printer</source>
+-        <translation>پرىنتېرلاش</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TrayWin</name>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="33"/>
+-        <source>Minimize</source>
+-        <translation>كىچىكلىتىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="39"/>
+-        <source>Maximize</source>
+-        <translation>ئەڭ چوڭ چەككە</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="45"/>
+-        <source>Quit</source>
+-        <translation>چېكىنىش</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingDialog</name>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.ui" line="14"/>
+-        <source>TroubleshootingDialog</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="24"/>
+-        <source>Troubleshooting</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="25"/>
+-        <source>Accept</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="26"/>
+-        <source>Cancel</source>
+-        <translation type="unfinished">ئەمەلدىن قالدۇرۇش</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="27"/>
+-        <source>Repair</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="77"/>
+-        <source>Check whether the CUPS service is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="87"/>
+-        <source>CUPS service is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="90"/>
+-        <source>CUPS service is not enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="105"/>
+-        <source>Check CUPS user access rights</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="116"/>
+-        <source>CUPS users can access normally</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="119"/>
+-        <source>CUPS user restricted access rights</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="133"/>
+-        <source>Check whether the printer connection is normal</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="152"/>
+-        <source>Printer connected</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="155"/>
+-        <source>Printer disconnected</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="186"/>
+-        <source>Check whether the printer protocol port configuration is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="194"/>
+-        <source>Printer protocol port configuration is enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="197"/>
+-        <source>Printer protocol port is not configured to be enabled</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Error</source>
+-        <translation type="unfinished">خاتالىق</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Automatic repair failed and manual troubleshooting is required.</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="208"/>
+-        <source>Confirm</source>
+-        <translation type="unfinished">جەزىملەشتۈرۈش</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/troubleshooting_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation type="unfinished">جەدۋەل</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>UkuiPrinterManager</name>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="340"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1499"/>
+-        <source>Idle</source>
+-        <translation>بىكارچىلىق</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="342"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1501"/>
+-        <source>Printing</source>
+-        <translation>بېسىپ چىقىرىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="344"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1503"/>
+-        <source>Stopped</source>
+-        <translation>توختى</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="438"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>پرىنتېر نامى &apos;/\&apos;?#&apos;, 0 دىن ئارتۇق ھەرىپى، 128 ھەرپتىن كىچىك بولالمايدۇ !</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="455"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>مەۋجۇتلۇق ئوخشاش ئىسىمدىكى پرىنتېرلاش ماشىنىسى!</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="458"/>
+-        <source>Printer name is not case sensitive!</source>
+-        <translation>پرىنتېرلاش نامى دىلرابا سەزگۈر ئەمەس!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>WaitingDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="32"/>
+-        <source>Widget</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="87"/>
+-        <source>TextLabel</source>
+-        <translation type="unfinished">TextLabel</translation>
+-    </message>
+-</context>
+-</TS>
+diff --git a/daemons/sessionservice/printerbackend/translations/kylin-printer_zh_CN.ts b/daemons/sessionservice/printerbackend/translations/kylin-printer_zh_CN.ts
+deleted file mode 100644
+index 9b8e3b4..0000000
+--- a/daemons/sessionservice/printerbackend/translations/kylin-printer_zh_CN.ts
++++ /dev/null
+@@ -1,1838 +0,0 @@
+-<?xml version="1.0" encoding="utf-8"?>
+-<!DOCTYPE TS>
+-<TS version="2.1" language="zh_CN">
+-<context>
+-    <name></name>
+-    <message>
+-        <location filename="../kylin-printer.desktop.in.h" line="1"/>
+-        <source>Printer</source>
+-        <translation>打印机</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/data/kylin-printer-applet.desktop.in.h" line="1"/>
+-        <source>Printer-backend</source>
+-        <translation>打印机后台进程</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AddPrinterWindow</name>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="136"/>
+-        <source>Add Printer</source>
+-        <translation>添加打印机</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="148"/>
+-        <source>Auto</source>
+-        <translation>自动查找</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="149"/>
+-        <location filename="../ui/add_printer_window.cpp" line="191"/>
+-        <source>Manual</source>
+-        <translation>手动添加</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="161"/>
+-        <source>Device List</source>
+-        <translation>设备列表</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="192"/>
+-        <source>Protocol</source>
+-        <translation>协议</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="193"/>
+-        <source>Address</source>
+-        <translation>地址</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="199"/>
+-        <source>Search</source>
+-        <translation>查找</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="213"/>
+-        <source>name</source>
+-        <translation>名称</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="214"/>
+-        <source>location</source>
+-        <translation>位置</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="215"/>
+-        <source>driver</source>
+-        <translation>驱动</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="321"/>
+-        <source>Success</source>
+-        <translation>成功</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="322"/>
+-        <source>Fail</source>
+-        <translation>失败</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="578"/>
+-        <source>Searching for driver...</source>
+-        <translation>正在搜索驱动...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <source>Failed to search for driver. Do you want to use local driver?</source>
+-        <translation>搜索驱动失败,是否使用本地驱动?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="220"/>
+-        <source>forward</source>
+-        <translation>添加</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Error</source>
+-        <translation>错误</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <source>Add printer failed: no PPD selected!</source>
+-        <translation>添加打印机失败:没有选择驱动!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>添加打印机失败,请重试!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="304"/>
+-        <location filename="../ui/add_printer_window.cpp" line="314"/>
+-        <location filename="../ui/add_printer_window.cpp" line="333"/>
+-        <location filename="../ui/add_printer_window.cpp" line="433"/>
+-        <location filename="../ui/add_printer_window.cpp" line="443"/>
+-        <location filename="../ui/add_printer_window.cpp" line="561"/>
+-        <location filename="../ui/add_printer_window.cpp" line="603"/>
+-        <location filename="../ui/add_printer_window.cpp" line="648"/>
+-        <location filename="../ui/add_printer_window.cpp" line="687"/>
+-        <source>Confirm</source>
+-        <translation>确定</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Hint</source>
+-        <translation>提示</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <source>Add printer successfully,printer a test page?</source>
+-        <translation>打印机安装成功!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="313"/>
+-        <source>Print test page</source>
+-        <translation>打印测试页</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>打印测试是否成功?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>打印测试失败,请检查打印机是否连接或修改驱动后重试。</translation>
+-    </message>
+-    <message>
+-        <source>Change Driver</source>
+-        <translation type="vanished">修改驱动</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="604"/>
+-        <location filename="../ui/add_printer_window.cpp" line="626"/>
+-        <location filename="../ui/add_printer_window.cpp" line="688"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="362"/>
+-        <source>Searching printers...</source>
+-        <translation>正在搜索打印机...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <source>Can not find this Printer!</source>
+-        <translation>无法找到打印机</translation>
+-    </message>
+-    <message>
+-        <source>Searching printer driver...</source>
+-        <translation type="vanished">正在安装打印机驱动...</translation>
+-    </message>
+-    <message>
+-        <source>Install driver package automatically failed,continue?</source>
+-        <translation type="vanished">服务器无精准匹配驱动包,是否继续本地驱动安装?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="432"/>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <location filename="../ui/add_printer_window.cpp" line="622"/>
+-        <location filename="../ui/add_printer_window.cpp" line="645"/>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <location filename="../ui/add_printer_window.cpp" line="747"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <source>Automatic driver configuration failed, please select the driver manually.</source>
+-        <translation>自动配置驱动失败,请手动选择驱动。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="620"/>
+-        <source>It is detected that the driver comes from the Internet. Do you want to continue the installation?</source>
+-        <translation>检测到驱动程序来源于互联网,是否继续安装?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="625"/>
+-        <source>Install</source>
+-        <translation>安装</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="639"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation>该设备型号驱动适配中。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="642"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation>由于商业协议限制,请联系设备制造商以获取该设备型号驱动程序。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="659"/>
+-        <source>Installing printer driver...</source>
+-        <translation>正在安装驱动,请稍后...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <source>Driver installation failed. Do you want to use local driver?</source>
+-        <translation>安装驱动失败,是否使用本地驱动?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="749"/>
+-        <source>Close</source>
+-        <translation>关闭</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.ui" line="26"/>
+-        <source>AddPrinterWindow</source>
+-        <translation></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AutoSearchResultModel</name>
+-    <message>
+-        <location filename="../ui/auto_search_result_model.cpp" line="49"/>
+-        <location filename="../ui/auto_search_result_model.cpp" line="51"/>
+-        <source>network</source>
+-        <translation>网络</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseInfo</name>
+-    <message>
+-        <location filename="../common/base_info.cpp" line="64"/>
+-        <source>Printer</source>
+-        <translation>打印机</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseNotifyDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="35"/>
+-        <source>Dialog</source>
+-        <translation>Dialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="124"/>
+-        <source>TextLabel</source>
+-        <translation>ui标签</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ChoosePpdComboBox</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="15"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="22"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="137"/>
+-        <source>Choose PPD</source>
+-        <translation>选择驱动</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="16"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="25"/>
+-        <source>Choose from the PPD library</source>
+-        <translation>从驱动库中选择</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="17"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="29"/>
+-        <source>Add local PPD</source>
+-        <translation>本地添加</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="48"/>
+-        <source>Please select a deb package.</source>
+-        <translation>请选择deb驱动包</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="50"/>
+-        <source>Deb File(*.deb)</source>
+-        <translation>安装包(*.deb)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="51"/>
+-        <source>Choose</source>
+-        <translation>选择</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="52"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="69"/>
+-        <source>Searching driver...</source>
+-        <translation>正在搜索驱动程序...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Install package failed,please retry.</source>
+-        <translation>安装驱动包失败,请重试!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="92"/>
+-        <source>Yes</source>
+-        <translation>确认</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ConfigIPAddressDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="32"/>
+-        <source>Dialog</source>
+-        <translation>Dialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="75"/>
+-        <source>Common configuration</source>
+-        <translation>通用配置</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="150"/>
+-        <source>初始地址:api.kylinos.cn</source>
+-        <translation>初始地址:api.kylinos.cn</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="180"/>
+-        <source>Advanced Features</source>
+-        <translation>高级功能</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="38"/>
+-        <source>Ok</source>
+-        <translation>确认</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="37"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="30"/>
+-        <source>Configure</source>
+-        <translatorcomment>配置</translatorcomment>
+-        <translation>配置</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="31"/>
+-        <source>Service address:</source>
+-        <translatorcomment>服务器地址:</translatorcomment>
+-        <translation>服务器地址:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="32"/>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="34"/>
+-        <source>Enable</source>
+-        <translation>启用</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="33"/>
+-        <source>This printer can be used to convert print files to PDF format</source>
+-        <translation>可使用该打印机将打印文件转换为 PDF 格式</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="35"/>
+-        <source>This printer can be used to convert print files to BRF format</source>
+-        <translation>可使用该打印机将打印文件转换为 BRF 格式</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="36"/>
+-        <source>Displays all serial printers</source>
+-        <translation>显示所有串口打印机</translation>
+-    </message>
+-    <message>
+-        <source>Show all protocols</source>
+-        <translation type="vanished">显示所有协议</translation>
+-    </message>
+-    <message>
+-        <source>Show virtual protocols</source>
+-        <translation type="vanished">显示虚拟打印机</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Config init failed</source>
+-        <translatorcomment>设置初始化失败!</translatorcomment>
+-        <translation>设置初始化失败!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="53"/>
+-        <source>Confirm</source>
+-        <translation>确定</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CupsDebugLoggingCheckbox</name>
+-    <message>
+-        <location filename="../ui/cups_debug_logging_checkbox.cpp" line="8"/>
+-        <source>Retain debug info for troubleshooting</source>
+-        <translatorcomment>保留调试信息用于故障排查</translatorcomment>
+-        <translation>保留调试信息用于故障排查</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomAboutDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_about_dialog.cpp" line="12"/>
+-        <source>Version: </source>
+-        <translation>版本: </translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomDoublelineCheckBox</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_doubleline_checkbox.ui" line="14"/>
+-        <source>Form</source>
+-        <translation>ui标题</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DebInstallWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>ui标题</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="75"/>
+-        <source>Driver</source>
+-        <translation>驱动</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="143"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="23"/>
+-        <source>Modify Printer Driver</source>
+-        <translation>修改打印机驱动</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Modify PPD failed: no PPD selected!</source>
+-        <translation>修改驱动文件失败:没有选择驱动文件</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Error</source>
+-        <translation>错误</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="162"/>
+-        <source>Confirm</source>
+-        <translation>确定</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceListButton</name>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="32"/>
+-        <source>Idle</source>
+-        <translation>空闲</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="35"/>
+-        <source>Printing</source>
+-        <translation>忙碌</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="38"/>
+-        <source>Stopped</source>
+-        <translation>停止</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="41"/>
+-        <source>Unknow</source>
+-        <translation>未知</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="62"/>
+-        <location filename="../ui/device_list_button.cpp" line="264"/>
+-        <location filename="../ui/device_list_button.cpp" line="296"/>
+-        <source>Default</source>
+-        <translation>默认</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="133"/>
+-        <location filename="../ui/device_list_button.cpp" line="163"/>
+-        <source>Set Default</source>
+-        <translation>设为默认</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="135"/>
+-        <location filename="../ui/device_list_button.cpp" line="166"/>
+-        <source>Enabled</source>
+-        <translatorcomment>启用</translatorcomment>
+-        <translation>启用</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="139"/>
+-        <location filename="../ui/device_list_button.cpp" line="169"/>
+-        <source>Shared</source>
+-        <translatorcomment>共享</translatorcomment>
+-        <translation>共享</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceMap</name>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="301"/>
+-        <source>Printer</source>
+-        <translation>打印机</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="303"/>
+-        <source>Printers</source>
+-        <translation>打印机</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="305"/>
+-        <source>plug-in:</source>
+-        <translation>插入:</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="307"/>
+-        <source>unplugged:</source>
+-        <translation>拔出:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EmptyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/right_widget.cpp" line="96"/>
+-        <source>Please click &quot;+&quot; button to add a printer.</source>
+-        <translation>请点击按钮“+”添加一个打印机。</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EventNotifyMonitor</name>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="430"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="482"/>
+-        <source>Printer </source>
+-        <translation>打印机</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="454"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="469"/>
+-        <source>Job:</source>
+-        <translation>任务:</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="456"/>
+-        <source>created!</source>
+-        <translation>创建!</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="471"/>
+-        <source>completed!</source>
+-        <translation>完成!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>InkInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/ink_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation>ui标题</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerModel</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="50"/>
+-        <source>Test Page</source>
+-        <translation>测试页</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="64"/>
+-        <source>unknown</source>
+-        <translation>未知</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="70"/>
+-        <source>Printing page %1</source>
+-        <translation>正在打印第%1页</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="53"/>
+-        <source>untitled</source>
+-        <translation>未知</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="261"/>
+-        <source>Printer</source>
+-        <translation>打印机</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="412"/>
+-        <source>Cancel print</source>
+-        <translation>取消打印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="415"/>
+-        <source>Delete print</source>
+-        <translation>删除打印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="418"/>
+-        <source>Hold print</source>
+-        <translation>暂停打印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="421"/>
+-        <source>Release print</source>
+-        <translation>恢复打印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="424"/>
+-        <source>Reprint</source>
+-        <translation>重新打印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="427"/>
+-        <source>Job properties</source>
+-        <translation>任务属性</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <source>Set error: Job status has been updated!</source>
+-        <translation>设置错误:队列已更新!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="447"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="453"/>
+-        <source>Sure</source>
+-        <translation>确认</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Cannot move job to itself!</source>
+-        <translation>无法将任务移动到打印机本身!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobMenu</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="108"/>
+-        <source>Cancel print</source>
+-        <translation>取消打印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="110"/>
+-        <source>Delete print</source>
+-        <translation>删除打印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="112"/>
+-        <source>Hold print</source>
+-        <translation>暂停打印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="114"/>
+-        <source>Release print</source>
+-        <translation>恢复打印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="116"/>
+-        <source>Reprint</source>
+-        <translation>重新打印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="118"/>
+-        <source>Use other printer...</source>
+-        <translation>使用其他打印机...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="120"/>
+-        <source>Job properties</source>
+-        <translation>任务属性</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobPropertiesWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="15"/>
+-        <source>Job properties</source>
+-        <translation>任务属性</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="35"/>
+-        <source>name</source>
+-        <translation>名称</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="36"/>
+-        <source>value</source>
+-        <translation>值</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LaunchPrinter</name>
+-    <message>
+-        <source>Print test page</source>
+-        <translation type="obsolete">打印测试页</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>打印测试页是否成功?</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>%1 print result confirmation</source>
+-        <translation>%1 打印结果确认</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="94"/>
+-        <source>Yes</source>
+-        <translation>是</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="96"/>
+-        <source>No</source>
+-        <translation>否</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LeftWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="47"/>
+-        <source>Device List</source>
+-        <translation>设备列表</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="216"/>
+-        <source>Delete</source>
+-        <translation>移除</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="362"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="212"/>
+-        <source>Are you sure to delete &quot;%1&quot;?</source>
+-        <translation>您确定要移除打印机 “%1”吗?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="217"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="360"/>
+-        <source>Set Default Failed!</source>
+-        <translation>设为默认失败!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="364"/>
+-        <source>Close</source>
+-        <translation>关闭</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWinPropertyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="45"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="47"/>
+-        <source>Printer</source>
+-        <translation>打印机</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="71"/>
+-        <source>Property</source>
+-        <translation>属性</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="78"/>
+-        <source>Job List</source>
+-        <translation>打印队列</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="85"/>
+-        <source>PrintTest</source>
+-        <translation>打印测试</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="229"/>
+-        <source>Are you sure to rename &quot;%1&quot; ?</source>
+-        <translation>确定要重命名 “%1” 么?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="233"/>
+-        <source>Rename</source>
+-        <translation>重命名</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="192"/>
+-        <source>Idle</source>
+-        <translation>空闲</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="90"/>
+-        <source>Troubleshooting</source>
+-        <translation>故障排查</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="194"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="196"/>
+-        <source>Printing</source>
+-        <translation>忙碌</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="198"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="200"/>
+-        <source>Stopped</source>
+-        <translation>停止</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="205"/>
+-        <source>Unknown</source>
+-        <translation>未知</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="230"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="231"/>
+-        <source>This action will delete the job queue too!</source>
+-        <translation>重命名会清空该设备的打印队列内容。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="234"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.ui" line="26"/>
+-        <source>Form</source>
+-        <translation>ui标题</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWindow</name>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="91"/>
+-        <source>Printer</source>
+-        <translation>打印机</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="225"/>
+-        <source>Delete Failed!</source>
+-        <translation>删除失败!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="227"/>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="229"/>
+-        <location filename="../ui/mainwindow.cpp" line="269"/>
+-        <source>Close</source>
+-        <translation>关闭</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>添加打印机失败,请重试!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="333"/>
+-        <source>Sure</source>
+-        <translation>确认</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Error</source>
+-        <translation>错误</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="326"/>
+-        <source>Try to connect the Printer...</source>
+-        <translation>正在尝试连接打印机...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Open Printer Failed,Please Del And Add Printer, Then Try Again!</source>
+-        <translation>启动打印机失败,请重新添加打印机!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MenuModule</name>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="44"/>
+-        <location filename="../ui/menumodule.cpp" line="73"/>
+-        <source>Help</source>
+-        <translation>帮助</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="42"/>
+-        <location filename="../ui/menumodule.cpp" line="70"/>
+-        <source>About</source>
+-        <translation>关于</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="38"/>
+-        <location filename="../ui/menumodule.cpp" line="76"/>
+-        <source>Configure</source>
+-        <translation>配置</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="40"/>
+-        <location filename="../ui/menumodule.cpp" line="88"/>
+-        <source>Classic Printer</source>
+-        <translation>经典打印机</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="46"/>
+-        <location filename="../ui/menumodule.cpp" line="66"/>
+-        <source>Quit</source>
+-        <translation>退出</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.h" line="52"/>
+-        <source>Printer</source>
+-        <translation>打印机</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>NewPopWindow</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>ui标题</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="40"/>
+-        <source>Printer</source>
+-        <translation>打印机</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="59"/>
+-        <source>Print Test Page</source>
+-        <translation>打印测试</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="60"/>
+-        <source>View Device</source>
+-        <translation>查看设备</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="61"/>
+-        <source>Manual Install</source>
+-        <translation>手动安装驱动</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="128"/>
+-        <source>Installing......</source>
+-        <translation>正在安装...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="143"/>
+-        <source>Successful installation!</source>
+-        <translation>安装成功!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="164"/>
+-        <source>Installation failed!</source>
+-        <translation>安装失败!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="188"/>
+-        <source>Printer Detected:</source>
+-        <translation>检测到打印机:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>打印测试页是否成功?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="207"/>
+-        <source>No</source>
+-        <translation>否</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="206"/>
+-        <source>Yes</source>
+-        <translation>是</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Hint</source>
+-        <translation>提示</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>打印测试失败,请检查打印机是否连接或修改驱动后重试。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="214"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="213"/>
+-        <source>Change Driver</source>
+-        <translation>修改驱动</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Error</source>
+-        <translation>错误</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Failed to start, please try to add the printer again!</source>
+-        <translation>打印机启动失败,尝试重新添加打印机再次打开!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="229"/>
+-        <source>Ok</source>
+-        <translation>确认</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PopWindowManager</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Do you want to add a printer?</source>
+-        <translation>是否添加打印机?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>The printer was detected:%1</source>
+-        <translation>检测到打印机:%1</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Add</source>
+-        <translation>添加</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="172"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="223"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="237"/>
+-        <source>%1 installation failed</source>
+-        <translation>%1 安装失败</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>%1 successful installation</source>
+-        <translation>%1 安装成功</translation>
+-    </message>
+-    <message>
+-        <source>Installing...</source>
+-        <translation type="vanished">正在安装...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="167"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation>该设备型号驱动适配中。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="170"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation>由于商业协议限制,请联系设备制造商以获取该设备型号驱动程序。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="222"/>
+-        <source>No printer driver for %1.</source>
+-        <translation> 没有 %1 的打印机驱动程序。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>Print test page</source>
+-        <translation>打印测试页</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyListWindow</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="10"/>
+-        <source>Confirm</source>
+-        <translation>确定</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="11"/>
+-        <source>Refresh</source>
+-        <translation>刷新</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="9"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.ui" line="26"/>
+-        <source>PropertyListWindow</source>
+-        <translation></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyManagerModel</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="139"/>
+-        <source>Model:</source>
+-        <translation>型号:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="140"/>
+-        <source>Status:</source>
+-        <translation>状态:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="141"/>
+-        <source>Location:</source>
+-        <translation>位置:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="142"/>
+-        <source>Driver:</source>
+-        <translation>驱动:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="396"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="412"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="423"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="23"/>
+-        <source>base</source>
+-        <translation>基础属性</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="36"/>
+-        <source>Ink</source>
+-        <translation>墨水/墨粉</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="40"/>
+-        <source>advanced</source>
+-        <translation>高级选项</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="58"/>
+-        <source>PrinterProperty</source>
+-        <translation>打印机属性</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="95"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="163"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="327"/>
+-        <source>Name</source>
+-        <translation>名称</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="96"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="166"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="331"/>
+-        <source>Location</source>
+-        <translation>位置</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="97"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="170"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="335"/>
+-        <source>Status</source>
+-        <translation>状态</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="98"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="339"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="380"/>
+-        <source>Driver</source>
+-        <translation>驱动</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="101"/>
+-        <source>Modify</source>
+-        <translation>修改</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="103"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="193"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="343"/>
+-        <source>URI</source>
+-        <translation>URI</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="127"/>
+-        <source> (level: %1%)</source>
+-        <translation> (余量: %1%)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="172"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="174"/>
+-        <source>Idle</source>
+-        <translation>空闲</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="176"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="178"/>
+-        <source>Printing</source>
+-        <translation>忙碌</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="180"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="182"/>
+-        <source>Stopped</source>
+-        <translation>停止</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <source>Error happened, all options restored!.</source>
+-        <translation>错误发生,所有选项重置!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="232"/>
+-        <source>Confirm</source>
+-        <translation>确定</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="269"/>
+-        <source>Conflict with &quot;%1&quot;</source>
+-        <translation>与 “%1” 设置冲突</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="395"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>打印机名称不能包含‘%1’,而且不能为空,且少于128个字母!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="398"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="414"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="425"/>
+-        <source>Close</source>
+-        <translation>关闭</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="411"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>存在同名打印机!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="422"/>
+-        <source>Printer Name Illegal!</source>
+-        <translation>打印机名称不合法!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="187"/>
+-        <source>Unknow</source>
+-        <translation>未知</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ProperytItemWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="217"/>
+-        <source>Idle</source>
+-        <translation>空闲</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="220"/>
+-        <source>Printing</source>
+-        <translation>忙碌</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="223"/>
+-        <source>Stopped</source>
+-        <translation>停止</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="226"/>
+-        <source>Unknow</source>
+-        <translation>未知</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>QObject</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="32"/>
+-        <source>id</source>
+-        <translation>任务</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="33"/>
+-        <source>user</source>
+-        <translation>用户</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="34"/>
+-        <source>title</source>
+-        <translation>文档</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="35"/>
+-        <source>printer name</source>
+-        <translation>打印机名称</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="36"/>
+-        <source>size</source>
+-        <translation>大小</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="37"/>
+-        <source>create time</source>
+-        <translation>创建时间</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="38"/>
+-        <source>job state</source>
+-        <translation>工作状态</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="44"/>
+-        <source>Job is waiting to be printed</source>
+-        <translation>队列中</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="45"/>
+-        <source>Job is held for printing</source>
+-        <translation>暂停打印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="46"/>
+-        <source>Job is currently printing</source>
+-        <translation>正在打印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="47"/>
+-        <source>Job has been stopped</source>
+-        <translation>任务被停止</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="48"/>
+-        <source>Job has been canceled</source>
+-        <translation>任务取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="49"/>
+-        <source>Job has aborted due to error</source>
+-        <translation>任务错误</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="50"/>
+-        <source>Job has completed successfully</source>
+-        <translation>打印完成</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>RenamePrinterDialog</name>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="26"/>
+-        <source>RenamePrinterDialog</source>
+-        <translation>重命名打印机对话框</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="148"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="167"/>
+-        <source>Ok</source>
+-        <translation>确定</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.cpp" line="11"/>
+-        <source>Printer Name</source>
+-        <translation>打印机名称</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SelectPpdDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="23"/>
+-        <source>Select Driver</source>
+-        <translation>选择驱动</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="56"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="85"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="266"/>
+-        <source>driver</source>
+-        <translation>驱动</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="57"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="71"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="232"/>
+-        <source>vendor</source>
+-        <translation>品牌</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="195"/>
+-        <source>Reading Drivers,Please Wait...</source>
+-        <translation>正在读取驱动文件,请稍后…</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="319"/>
+-        <source>Please Choose Model And Vender!</source>
+-        <translation>请选择厂商和型号!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="320"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="322"/>
+-        <source>Close</source>
+-        <translation>关闭</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="26"/>
+-        <source>SelectPpdDialog</source>
+-        <translation>ui标题</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="203"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="247"/>
+-        <source>Apply</source>
+-        <translation>确定</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbAuthInfoDialog</name>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.ui" line="26"/>
+-        <source>SmbAuthInfoDialog</source>
+-        <translation>SmbAuthInfoDialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="13"/>
+-        <source>Authentication</source>
+-        <translation>身份认证</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="14"/>
+-        <source>Authentication is required to connect to the printer &quot;%1&quot;</source>
+-        <translation>连接访问“%1”打印机需要认证</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="15"/>
+-        <source>Username</source>
+-        <translation>用户名</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="16"/>
+-        <source>Password</source>
+-        <translation>密码</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="17"/>
+-        <source>Workgroup</source>
+-        <translation>域</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="18"/>
+-        <source>Accept</source>
+-        <translation>确定</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="19"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="37"/>
+-        <source>Authentication in progress. Please wait...</source>
+-        <translation>正在认证,请稍等</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="58"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="59"/>
+-        <source>Confirm</source>
+-        <translation>确定</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbClientHelper</name>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="175"/>
+-        <source>Cannot connect to %1!</source>
+-        <translation>无法连接到 %1!</translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="180"/>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="187"/>
+-        <source>Wrong user name or password!</source>
+-        <translation>错误的用户名或密码!</translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="192"/>
+-        <source>The samba server shared printer list is empty</source>
+-        <translation>samba服务器共享打印机列表为空</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SystemNotification</name>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="21"/>
+-        <source>Printer Info</source>
+-        <translation>打印机信息</translation>
+-    </message>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="36"/>
+-        <source>Printer</source>
+-        <translation>打印机</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ToubleshootingDialog</name>
+-    <message>
+-        <source>Toubleshooting</source>
+-        <translation type="vanished">故障排查</translation>
+-    </message>
+-    <message>
+-        <source>Accept</source>
+-        <translation type="vanished">确定</translation>
+-    </message>
+-    <message>
+-        <source>Cancel</source>
+-        <translation type="vanished">取消</translation>
+-    </message>
+-    <message>
+-        <source>Repair</source>
+-        <translation type="vanished">一键修复</translation>
+-    </message>
+-    <message>
+-        <source>Check whether the CUPS service is enabled</source>
+-        <translation type="vanished">检查 CUPS 服务是否开启</translation>
+-    </message>
+-    <message>
+-        <source>CUPS service is enabled</source>
+-        <translation type="vanished">CUPS 服务已开启</translation>
+-    </message>
+-    <message>
+-        <source>CUPS service is not enabled</source>
+-        <translation type="vanished">CUPS 服务未开启</translation>
+-    </message>
+-    <message>
+-        <source>Check CUPS user access rights</source>
+-        <translation type="vanished">检查 CUPS 用户访问权限</translation>
+-    </message>
+-    <message>
+-        <source>CUPS users can access normally</source>
+-        <translation type="vanished">CUPS 用户可正常访问</translation>
+-    </message>
+-    <message>
+-        <source>CUPS user restricted access rights</source>
+-        <translation type="vanished">CUPS 用户访问权限受限</translation>
+-    </message>
+-    <message>
+-        <source>Check whether the printer connection is normal</source>
+-        <translation type="vanished">检查打印机连接是否正常</translation>
+-    </message>
+-    <message>
+-        <source>Idle</source>
+-        <translation type="vanished">空闲</translation>
+-    </message>
+-    <message>
+-        <source>Printing</source>
+-        <translation type="vanished">忙碌</translation>
+-    </message>
+-    <message>
+-        <source>Printer connected</source>
+-        <translation type="vanished">打印机已连接</translation>
+-    </message>
+-    <message>
+-        <source>Printer disconnected</source>
+-        <translation type="vanished">打印机已断开连接</translation>
+-    </message>
+-    <message>
+-        <source>Check whether the printer protocol port configuration is enabled</source>
+-        <translation type="vanished">检查打印机协议端口配置是否开启</translation>
+-    </message>
+-    <message>
+-        <source>Printer protocol port configuration is enabled</source>
+-        <translation type="vanished">打印机协议端口配置已开启</translation>
+-    </message>
+-    <message>
+-        <source>Printer protocol port is not configured to be enabled</source>
+-        <translation type="vanished">打印机协议端口配置未开启</translation>
+-    </message>
+-    <message>
+-        <source>Error</source>
+-        <translation type="vanished">错误</translation>
+-    </message>
+-    <message>
+-        <source>Automatic repair failed and manual troubleshooting is required.</source>
+-        <translation type="vanished">自动修复失败,需要手动排除故障。</translation>
+-    </message>
+-    <message>
+-        <source>Confirm</source>
+-        <translation type="obsolete">确定</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TrayWin</name>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="33"/>
+-        <source>Minimize</source>
+-        <translation>最小化</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="39"/>
+-        <source>Maximize</source>
+-        <translation>最大化</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="45"/>
+-        <source>Quit</source>
+-        <translation>退出</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingDialog</name>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.ui" line="14"/>
+-        <source>TroubleshootingDialog</source>
+-        <translation></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="24"/>
+-        <source>Troubleshooting</source>
+-        <translation>故障排查</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="25"/>
+-        <source>Accept</source>
+-        <translation>确定</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="26"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="27"/>
+-        <source>Repair</source>
+-        <translation>一键修复</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="77"/>
+-        <source>Check whether the CUPS service is enabled</source>
+-        <translation>检查 CUPS 服务是否开启</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="87"/>
+-        <source>CUPS service is enabled</source>
+-        <translation>CUPS 服务已开启</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="90"/>
+-        <source>CUPS service is not enabled</source>
+-        <translation>CUPS 服务未开启</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="105"/>
+-        <source>Check CUPS user access rights</source>
+-        <translation>检查 CUPS 用户访问权限</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="116"/>
+-        <source>CUPS users can access normally</source>
+-        <translation>CUPS 用户可正常访问</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="119"/>
+-        <source>CUPS user restricted access rights</source>
+-        <translation>CUPS 用户访问权限受限</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="133"/>
+-        <source>Check whether the printer connection is normal</source>
+-        <translation>检查打印机连接是否正常</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="152"/>
+-        <source>Printer connected</source>
+-        <translation>打印机已连接</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="155"/>
+-        <source>Printer disconnected</source>
+-        <translation>打印机已断开连接</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="186"/>
+-        <source>Check whether the printer protocol port configuration is enabled</source>
+-        <translation>检查打印机协议端口配置是否开启</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="194"/>
+-        <source>Printer protocol port configuration is enabled</source>
+-        <translation>打印机协议端口配置已开启</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="197"/>
+-        <source>Printer protocol port is not configured to be enabled</source>
+-        <translation>打印机协议端口配置未开启</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Error</source>
+-        <translation>错误</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Automatic repair failed and manual troubleshooting is required.</source>
+-        <translation>自动修复失败,需要手动排除故障。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="208"/>
+-        <source>Confirm</source>
+-        <translation>确定</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/troubleshooting_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation>ui标题</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>UkuiPrinterManager</name>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="340"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1499"/>
+-        <source>Idle</source>
+-        <translation>空闲</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="342"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1501"/>
+-        <source>Printing</source>
+-        <translation>忙碌</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="344"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1503"/>
+-        <source>Stopped</source>
+-        <translation>停止</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="438"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>打印机名称不能包含‘%1’,而且不能为空,且少于128个字母!</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="455"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>存在同名打印机!</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="458"/>
+-        <source>Printer name is not case sensitive!</source>
+-        <translation>打印机名称不区分大小写!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>WaitingDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="32"/>
+-        <source>Widget</source>
+-        <translation>控件</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="87"/>
+-        <source>TextLabel</source>
+-        <translation>文本框</translation>
+-    </message>
+-</context>
+-</TS>
+diff --git a/daemons/sessionservice/printerbackend/translations/kylin-printer_zh_HK.ts b/daemons/sessionservice/printerbackend/translations/kylin-printer_zh_HK.ts
+deleted file mode 100644
+index 2b26e9e..0000000
+--- a/daemons/sessionservice/printerbackend/translations/kylin-printer_zh_HK.ts
++++ /dev/null
+@@ -1,1743 +0,0 @@
+-<?xml version="1.0" encoding="utf-8"?>
+-<!DOCTYPE TS>
+-<TS version="2.1" language="zh_HK">
+-<context>
+-    <name></name>
+-    <message>
+-        <location filename="../kylin-printer.desktop.in.h" line="1"/>
+-        <source>Printer</source>
+-        <translation>印表機</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/data/kylin-printer-applet.desktop.in.h" line="1"/>
+-        <source>Printer-backend</source>
+-        <translation>印表機後台進程</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AddPrinterWindow</name>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="136"/>
+-        <source>Add Printer</source>
+-        <translation>添加印表機</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="148"/>
+-        <source>Auto</source>
+-        <translation>自動查找</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="149"/>
+-        <location filename="../ui/add_printer_window.cpp" line="191"/>
+-        <source>Manual</source>
+-        <translation>手動添加</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="161"/>
+-        <source>Device List</source>
+-        <translation>設備清單</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="192"/>
+-        <source>Protocol</source>
+-        <translation>協定</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="193"/>
+-        <source>Address</source>
+-        <translation>位址</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="199"/>
+-        <source>Search</source>
+-        <translation>查找</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="213"/>
+-        <source>name</source>
+-        <translation>名稱</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="214"/>
+-        <source>location</source>
+-        <translation>位置</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="215"/>
+-        <source>driver</source>
+-        <translation>驅動</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="321"/>
+-        <source>Success</source>
+-        <translation>成功</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="322"/>
+-        <source>Fail</source>
+-        <translation>失敗</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="220"/>
+-        <source>forward</source>
+-        <translation>添加</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Error</source>
+-        <translation>錯誤</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="250"/>
+-        <source>Add printer failed: no PPD selected!</source>
+-        <translation>添加印表機失敗:沒有選擇驅動!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="301"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>添加印表機失敗,請重試!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="304"/>
+-        <location filename="../ui/add_printer_window.cpp" line="314"/>
+-        <location filename="../ui/add_printer_window.cpp" line="333"/>
+-        <location filename="../ui/add_printer_window.cpp" line="433"/>
+-        <location filename="../ui/add_printer_window.cpp" line="443"/>
+-        <location filename="../ui/add_printer_window.cpp" line="561"/>
+-        <location filename="../ui/add_printer_window.cpp" line="603"/>
+-        <location filename="../ui/add_printer_window.cpp" line="648"/>
+-        <location filename="../ui/add_printer_window.cpp" line="687"/>
+-        <source>Confirm</source>
+-        <translation>確定</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Hint</source>
+-        <translation>提示</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="311"/>
+-        <source>Add printer successfully,printer a test page?</source>
+-        <translation>印表機安裝成功!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="313"/>
+-        <source>Print test page</source>
+-        <translation>列印測試頁</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="319"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>列印測試是否成功?</translation>
+-    </message>
+-    <message>
+-        <source>Test print failed.Do you want to change a printer driver?</source>
+-        <translation type="vanished">列印測試失敗,建議修改驅動后重試。</translation>
+-    </message>
+-    <message>
+-        <source>Change Driver</source>
+-        <translation type="vanished">修改驅動</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="604"/>
+-        <location filename="../ui/add_printer_window.cpp" line="626"/>
+-        <location filename="../ui/add_printer_window.cpp" line="688"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="362"/>
+-        <source>Searching printers...</source>
+-        <translation>正在搜索印表機......</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="331"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>印表測試失敗,請檢查印表機是否連接或修改驅動後重試。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <source>Can not find this Printer!</source>
+-        <translation>無法找到印表機</translation>
+-    </message>
+-    <message>
+-        <source>Searching printer driver...</source>
+-        <translation type="vanished">安裝印表機驅動......</translation>
+-    </message>
+-    <message>
+-        <source>Install driver package automatically failed,continue?</source>
+-        <translation type="vanished">伺服器無精準匹配驅動包,是否繼續本地驅動安裝?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="432"/>
+-        <location filename="../ui/add_printer_window.cpp" line="442"/>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <location filename="../ui/add_printer_window.cpp" line="622"/>
+-        <location filename="../ui/add_printer_window.cpp" line="645"/>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <location filename="../ui/add_printer_window.cpp" line="747"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="559"/>
+-        <source>Automatic driver configuration failed, please select the driver manually.</source>
+-        <translation>自動配置驅動失敗,請手動選擇驅動。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="578"/>
+-        <source>Searching for driver...</source>
+-        <translation>搜尋驅動...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="601"/>
+-        <source>Failed to search for driver. Do you want to use local driver?</source>
+-        <translation>搜索驅動失敗,是否使用本地驅動?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="620"/>
+-        <source>It is detected that the driver comes from the Internet. Do you want to continue the installation?</source>
+-        <translation>檢測到驅動程式來源於互聯網,是否繼續安裝?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="625"/>
+-        <source>Install</source>
+-        <translation>安裝</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="639"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation>該設備型號驅動適配中。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="642"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation>由於商業協定限制,請聯繫設備製造商以獲取該設備型號驅動程式。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="659"/>
+-        <source>Installing printer driver...</source>
+-        <translation>安裝驅動,請稍後...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="685"/>
+-        <source>Driver installation failed. Do you want to use local driver?</source>
+-        <translation>安裝驅動失敗,是否使用本地驅動?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.cpp" line="749"/>
+-        <source>Close</source>
+-        <translation>關閉</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/add_printer_window.ui" line="26"/>
+-        <source>AddPrinterWindow</source>
+-        <translation></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>AutoSearchResultModel</name>
+-    <message>
+-        <location filename="../ui/auto_search_result_model.cpp" line="49"/>
+-        <location filename="../ui/auto_search_result_model.cpp" line="51"/>
+-        <source>network</source>
+-        <translation>網路</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseInfo</name>
+-    <message>
+-        <location filename="../common/base_info.cpp" line="64"/>
+-        <source>Printer</source>
+-        <translation>印表機</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BaseNotifyDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="35"/>
+-        <source>Dialog</source>
+-        <translation>Dialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/base_notify_dialog.ui" line="124"/>
+-        <source>TextLabel</source>
+-        <translation>ui標籤</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ChoosePpdComboBox</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="15"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="22"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="137"/>
+-        <source>Choose PPD</source>
+-        <translation>選擇驅動</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="16"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="25"/>
+-        <source>Choose from the PPD library</source>
+-        <translation>從驅動庫中選擇</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="17"/>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="29"/>
+-        <source>Add local PPD</source>
+-        <translation>本地添加</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="48"/>
+-        <source>Please select a deb package.</source>
+-        <translation>請選擇deb驅動包</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="50"/>
+-        <source>Deb File(*.deb)</source>
+-        <translation>安裝套件(*.deb)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="51"/>
+-        <source>Choose</source>
+-        <translation>選擇</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="52"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="69"/>
+-        <source>Searching driver...</source>
+-        <translation>搜尋驅動程式...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="91"/>
+-        <source>Install package failed,please retry.</source>
+-        <translation>安裝驅動包失敗,請重試!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/choose_ppd_combo_box.cpp" line="92"/>
+-        <source>Yes</source>
+-        <translation>確認</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ConfigIPAddressDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="32"/>
+-        <source>Dialog</source>
+-        <translation>Dialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="75"/>
+-        <source>Common configuration</source>
+-        <translation>通用配置</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="150"/>
+-        <source>初始地址:api.kylinos.cn</source>
+-        <translation>初始位址:api.kylinos.cn</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.ui" line="180"/>
+-        <source>Advanced Features</source>
+-        <translation>高級功能</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="38"/>
+-        <source>Ok</source>
+-        <translation>確認</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="37"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="30"/>
+-        <source>Configure</source>
+-        <translatorcomment>配置</translatorcomment>
+-        <translation>配置</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="31"/>
+-        <source>Service address:</source>
+-        <translatorcomment>服务器地址:</translatorcomment>
+-        <translation>伺服器位址:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="32"/>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="34"/>
+-        <source>Enable</source>
+-        <translation>啟用</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="33"/>
+-        <source>This printer can be used to convert print files to PDF format</source>
+-        <translation>可使用該印表機將列印檔案轉換為 PDF 格式</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="35"/>
+-        <source>This printer can be used to convert print files to BRF format</source>
+-        <translation>可使用該印表機將列印檔轉換為 BRF 格式</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="36"/>
+-        <source>Displays all serial printers</source>
+-        <translation>顯示所有串口印表機</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="50"/>
+-        <source>Config init failed</source>
+-        <translatorcomment>设置初始化失败!</translatorcomment>
+-        <translation>設置初始化失敗!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/config_ip_address_dialog.cpp" line="53"/>
+-        <source>Confirm</source>
+-        <translation>確定</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CupsDebugLoggingCheckbox</name>
+-    <message>
+-        <location filename="../ui/cups_debug_logging_checkbox.cpp" line="8"/>
+-        <source>Retain debug info for troubleshooting</source>
+-        <translatorcomment>保留调试信息用于故障排查</translatorcomment>
+-        <translation>保留調試資訊用於故障排查</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomAboutDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_about_dialog.cpp" line="12"/>
+-        <source>Version: </source>
+-        <translation>版本: </translation>
+-    </message>
+-</context>
+-<context>
+-    <name>CustomDoublelineCheckBox</name>
+-    <message>
+-        <location filename="../ui/custom_ui/custom_doubleline_checkbox.ui" line="14"/>
+-        <source>Form</source>
+-        <translation>ui標題</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DebInstallWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>ui標題</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="75"/>
+-        <source>Driver</source>
+-        <translation>驅動</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="143"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="23"/>
+-        <source>Modify Printer Driver</source>
+-        <translation>修改印表機驅動</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Modify PPD failed: no PPD selected!</source>
+-        <translation>修改驅動檔失敗:沒有選擇驅動檔</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.cpp" line="54"/>
+-        <source>Error</source>
+-        <translation>錯誤</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/deb_install_window.ui" line="162"/>
+-        <source>Confirm</source>
+-        <translation>確定</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceListButton</name>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="32"/>
+-        <source>Idle</source>
+-        <translation>空閒</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="35"/>
+-        <source>Printing</source>
+-        <translation>忙碌</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="38"/>
+-        <source>Stopped</source>
+-        <translation>停止</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="41"/>
+-        <source>Unknow</source>
+-        <translation>未知</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="62"/>
+-        <location filename="../ui/device_list_button.cpp" line="264"/>
+-        <location filename="../ui/device_list_button.cpp" line="296"/>
+-        <source>Default</source>
+-        <translation>預設</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="133"/>
+-        <location filename="../ui/device_list_button.cpp" line="163"/>
+-        <source>Set Default</source>
+-        <translation>設為預設</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="135"/>
+-        <location filename="../ui/device_list_button.cpp" line="166"/>
+-        <source>Enabled</source>
+-        <translatorcomment>启用</translatorcomment>
+-        <translation>啟用</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/device_list_button.cpp" line="139"/>
+-        <location filename="../ui/device_list_button.cpp" line="169"/>
+-        <source>Shared</source>
+-        <translatorcomment>共享</translatorcomment>
+-        <translation>共用</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DeviceMap</name>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="301"/>
+-        <source>Printer</source>
+-        <translation>印表機</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="303"/>
+-        <source>Printers</source>
+-        <translation>印表機</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="305"/>
+-        <source>plug-in:</source>
+-        <translation>插入:</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/device_map.cpp" line="307"/>
+-        <source>unplugged:</source>
+-        <translation>拔出:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EmptyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/right_widget.cpp" line="96"/>
+-        <source>Please click &quot;+&quot; button to add a printer.</source>
+-        <translation>請點擊按鈕“+”添加一個印表機。</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>EventNotifyMonitor</name>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="430"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="482"/>
+-        <source>Printer </source>
+-        <translation>印表機 </translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="454"/>
+-        <location filename="../backend/event_notify_monitor.cpp" line="469"/>
+-        <source>Job:</source>
+-        <translation>工作:</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="456"/>
+-        <source>created!</source>
+-        <translation>創建!</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/event_notify_monitor.cpp" line="471"/>
+-        <source>completed!</source>
+-        <translation>完成!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>InkInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/ink_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation>ui標題</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerModel</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="50"/>
+-        <source>Test Page</source>
+-        <translation>測試頁</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="64"/>
+-        <source>unknown</source>
+-        <translation>未知</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="70"/>
+-        <source>Printing page %1</source>
+-        <translation>正在列印第%1頁</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="53"/>
+-        <source>untitled</source>
+-        <translation>未知</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobManagerWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="261"/>
+-        <source>Printer</source>
+-        <translation>印表機</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="412"/>
+-        <source>Cancel print</source>
+-        <translation>取消列印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="415"/>
+-        <source>Delete print</source>
+-        <translation>刪除列印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="418"/>
+-        <source>Hold print</source>
+-        <translation>暫停列印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="421"/>
+-        <source>Release print</source>
+-        <translation>恢復列印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="424"/>
+-        <source>Reprint</source>
+-        <translation>重新列印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="427"/>
+-        <source>Job properties</source>
+-        <translation>任務屬性</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="445"/>
+-        <source>Set error: Job status has been updated!</source>
+-        <translation>設置錯誤:佇列已更新!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="447"/>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="453"/>
+-        <source>Sure</source>
+-        <translation>確認</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="451"/>
+-        <source>Cannot move job to itself!</source>
+-        <translation>無法將任務移動到印表機本身!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobMenu</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="108"/>
+-        <source>Cancel print</source>
+-        <translation>取消列印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="110"/>
+-        <source>Delete print</source>
+-        <translation>刪除列印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="112"/>
+-        <source>Hold print</source>
+-        <translation>暫停列印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="114"/>
+-        <source>Release print</source>
+-        <translation>恢復列印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="116"/>
+-        <source>Reprint</source>
+-        <translation>重新列印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="118"/>
+-        <source>Use other printer...</source>
+-        <translation>使用其他印表機...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.cpp" line="120"/>
+-        <source>Job properties</source>
+-        <translation>任務屬性</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>JobPropertiesWindow</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="15"/>
+-        <source>Job properties</source>
+-        <translation>任務屬性</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="35"/>
+-        <source>name</source>
+-        <translation>名稱</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_properties_window.cpp" line="36"/>
+-        <source>value</source>
+-        <translation>值</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LaunchPrinter</name>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>列印測試頁是否成功?</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="92"/>
+-        <source>%1 print result confirmation</source>
+-        <translation>%1 列印結果確認</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="94"/>
+-        <source>Yes</source>
+-        <translation>是</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/launch_printer.cpp" line="96"/>
+-        <source>No</source>
+-        <translation>否</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>LeftWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="47"/>
+-        <source>Device List</source>
+-        <translation>設備清單</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="216"/>
+-        <source>Delete</source>
+-        <translation>拿掉</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="362"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="212"/>
+-        <source>Are you sure to delete &quot;%1&quot;?</source>
+-        <translation>您確定要移除印表機%1 嗎?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="217"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="360"/>
+-        <source>Set Default Failed!</source>
+-        <translation>設為默認失敗!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/left_widget.cpp" line="364"/>
+-        <source>Close</source>
+-        <translation>關閉</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWinPropertyWidget</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="45"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="47"/>
+-        <source>Printer</source>
+-        <translation>印表機</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="71"/>
+-        <source>Property</source>
+-        <translation>屬性</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="78"/>
+-        <source>Job List</source>
+-        <translation>列印佇列</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="85"/>
+-        <source>PrintTest</source>
+-        <translation>列印測試</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="229"/>
+-        <source>Are you sure to rename &quot;%1&quot; ?</source>
+-        <translation>確定要重命名 「%1」 嗎?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="233"/>
+-        <source>Rename</source>
+-        <translation>重新命名</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="192"/>
+-        <source>Idle</source>
+-        <translation>空閒</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="90"/>
+-        <source>Troubleshooting</source>
+-        <translation>故障排查</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="194"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="196"/>
+-        <source>Printing</source>
+-        <translation>忙碌</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="198"/>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="200"/>
+-        <source>Stopped</source>
+-        <translation>停止</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="205"/>
+-        <source>Unknown</source>
+-        <translation>未知</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="230"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="231"/>
+-        <source>This action will delete the job queue too!</source>
+-        <translation>重命名會清空該設備的列印佇列內容。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="234"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.ui" line="26"/>
+-        <source>Form</source>
+-        <translation>ui標題</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWindow</name>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="91"/>
+-        <source>Printer</source>
+-        <translation>印表機</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="225"/>
+-        <source>Delete Failed!</source>
+-        <translation>刪除失敗!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="227"/>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="229"/>
+-        <location filename="../ui/mainwindow.cpp" line="269"/>
+-        <source>Close</source>
+-        <translation>關閉</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="267"/>
+-        <source>Add printer failed,please retry after a while.</source>
+-        <translation>添加印表機失敗,請重試!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="333"/>
+-        <source>Sure</source>
+-        <translation>確認</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Error</source>
+-        <translation>錯誤</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="326"/>
+-        <source>Try to connect the Printer...</source>
+-        <translation>正在嘗試連接印表機......</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="331"/>
+-        <source>Open Printer Failed,Please Del And Add Printer, Then Try Again!</source>
+-        <translation>啟動印表機失敗,請重新添加印表機!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MenuModule</name>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="44"/>
+-        <location filename="../ui/menumodule.cpp" line="73"/>
+-        <source>Help</source>
+-        <translation>説明</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="42"/>
+-        <location filename="../ui/menumodule.cpp" line="70"/>
+-        <source>About</source>
+-        <translation>關於</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="38"/>
+-        <location filename="../ui/menumodule.cpp" line="76"/>
+-        <source>Configure</source>
+-        <translation>配置</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="40"/>
+-        <location filename="../ui/menumodule.cpp" line="88"/>
+-        <source>Classic Printer</source>
+-        <translation>經典印表機</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.cpp" line="46"/>
+-        <location filename="../ui/menumodule.cpp" line="66"/>
+-        <source>Quit</source>
+-        <translation>退出</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/menumodule.h" line="52"/>
+-        <source>Printer</source>
+-        <translation>印表機</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>NewPopWindow</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.ui" line="32"/>
+-        <source>Form</source>
+-        <translation>ui標題</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="40"/>
+-        <source>Printer</source>
+-        <translation>印表機</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="59"/>
+-        <source>Print Test Page</source>
+-        <translation>列印測試</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="60"/>
+-        <source>View Device</source>
+-        <translation>查看設備</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="61"/>
+-        <source>Manual Install</source>
+-        <translation>手動安裝驅動</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="128"/>
+-        <source>Installing......</source>
+-        <translation>安裝...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="143"/>
+-        <source>Successful installation!</source>
+-        <translation>安裝成功!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="164"/>
+-        <source>Installation failed!</source>
+-        <translation>安裝失敗!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="188"/>
+-        <source>Printer Detected:</source>
+-        <translation>偵測到印表機:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <source>Is the test page printed successfully?</source>
+-        <translation>列印測試頁是否成功?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="207"/>
+-        <source>No</source>
+-        <translation>否</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="206"/>
+-        <source>Yes</source>
+-        <translation>是</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="205"/>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Hint</source>
+-        <translation>提示</translation>
+-    </message>
+-    <message>
+-        <source>Test print failed.Do you want to change a printer driver?</source>
+-        <translation type="vanished">測試列印失敗,是否更改驅動方案?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="214"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="213"/>
+-        <source>Change Driver</source>
+-        <translation>修改驅動</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="212"/>
+-        <source>Test print failed.Please check whether the printer is connected or modify the driver and try again.</source>
+-        <translation>印表測試失敗,請檢查印表機是否連接或修改驅動後重試。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Error</source>
+-        <translation>錯誤</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="226"/>
+-        <source>Failed to start, please try to add the printer again!</source>
+-        <translation>印表機啟動失敗,嘗試重新添加印表機再次打開!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/new_pop_window.cpp" line="229"/>
+-        <source>Ok</source>
+-        <translation>確認</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PopWindowManager</name>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Do you want to add a printer?</source>
+-        <translation>是否添加印表機?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>The printer was detected:%1</source>
+-        <translation>檢測到印表機:%1</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="48"/>
+-        <source>Add</source>
+-        <translation>添加</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="167"/>
+-        <source>The device driver is being adapted.</source>
+-        <translation>該設備型號驅動適配中。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="170"/>
+-        <source>Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.</source>
+-        <translation>由於商業協定限制,請聯繫設備製造商以獲取該設備型號驅動程式。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="172"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="223"/>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="237"/>
+-        <source>%1 installation failed</source>
+-        <translation>%1 安裝失敗</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>%1 successful installation</source>
+-        <translation>%1 安裝成功</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="222"/>
+-        <source>No printer driver for %1.</source>
+-        <translation>沒有 %1 的印表機驅動程式。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_pop_window/pop_window_manager.cpp" line="247"/>
+-        <source>Print test page</source>
+-        <translation>列印測試頁</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyListWindow</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="10"/>
+-        <source>Confirm</source>
+-        <translation>確定</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="11"/>
+-        <source>Refresh</source>
+-        <translation>刷新</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.cpp" line="9"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_list_window.ui" line="26"/>
+-        <source>PropertyListWindow</source>
+-        <translation></translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyManagerModel</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="139"/>
+-        <source>Model:</source>
+-        <translation>型號:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="140"/>
+-        <source>Status:</source>
+-        <translation>狀態:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="141"/>
+-        <source>Location:</source>
+-        <translation>位置:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/main_win_property_widget.cpp" line="142"/>
+-        <source>Driver:</source>
+-        <translation>驅動:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>PropertyWindow</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="396"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="412"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="423"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="23"/>
+-        <source>base</source>
+-        <translation>基礎屬性</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="36"/>
+-        <source>Ink</source>
+-        <translation>墨水/墨粉</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="40"/>
+-        <source>advanced</source>
+-        <translation>高級選項</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="58"/>
+-        <source>PrinterProperty</source>
+-        <translation>印表機屬性</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="95"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="163"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="327"/>
+-        <source>Name</source>
+-        <translation>名稱</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="96"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="166"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="331"/>
+-        <source>Location</source>
+-        <translation>位置</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="97"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="170"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="335"/>
+-        <source>Status</source>
+-        <translation>狀態</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="98"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="190"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="339"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="380"/>
+-        <source>Driver</source>
+-        <translation>驅動</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="101"/>
+-        <source>Modify</source>
+-        <translation>修改</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="103"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="193"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="343"/>
+-        <source>URI</source>
+-        <translation>URI</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="127"/>
+-        <source> (level: %1%)</source>
+-        <translation> (餘量: %1%)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="172"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="174"/>
+-        <source>Idle</source>
+-        <translation>空閒</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="176"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="178"/>
+-        <source>Printing</source>
+-        <translation>忙碌</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="180"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="182"/>
+-        <source>Stopped</source>
+-        <translation>停止</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="230"/>
+-        <source>Error happened, all options restored!.</source>
+-        <translation>錯誤發生,所有選項重置!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="232"/>
+-        <source>Confirm</source>
+-        <translation>確定</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="269"/>
+-        <source>Conflict with &quot;%1&quot;</source>
+-        <translation>與%1 設定衝突</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="395"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>印表機名稱不能包含『%1』,而且不能為空,且少於128個字母!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="398"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="414"/>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="425"/>
+-        <source>Close</source>
+-        <translation>關閉</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="411"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>存在同名印表機!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="422"/>
+-        <source>Printer Name Illegal!</source>
+-        <translation>印表機名稱不合法!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/property_window.cpp" line="187"/>
+-        <source>Unknow</source>
+-        <translation>未知</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ProperytItemWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="217"/>
+-        <source>Idle</source>
+-        <translation>空閒</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="220"/>
+-        <source>Printing</source>
+-        <translation>忙碌</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="223"/>
+-        <source>Stopped</source>
+-        <translation>停止</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/new_property_window/property_itemwidget.cpp" line="226"/>
+-        <source>Unknow</source>
+-        <translation>未知</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>QObject</name>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="32"/>
+-        <source>id</source>
+-        <translation>任務</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="33"/>
+-        <source>user</source>
+-        <translation>使用者</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="34"/>
+-        <source>title</source>
+-        <translation>文件</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="35"/>
+-        <source>printer name</source>
+-        <translation>印表機名稱</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="36"/>
+-        <source>size</source>
+-        <translation>大小</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="37"/>
+-        <source>create time</source>
+-        <translation>創建時間</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="38"/>
+-        <source>job state</source>
+-        <translation>工作狀態</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="44"/>
+-        <source>Job is waiting to be printed</source>
+-        <translation>佇列中</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="45"/>
+-        <source>Job is held for printing</source>
+-        <translation>暫停列印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="46"/>
+-        <source>Job is currently printing</source>
+-        <translation>正在列印</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="47"/>
+-        <source>Job has been stopped</source>
+-        <translation>任務被停止</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="48"/>
+-        <source>Job has been canceled</source>
+-        <translation>任務取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="49"/>
+-        <source>Job has aborted due to error</source>
+-        <translation>任務錯誤</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/job_manager/job_manager_window.h" line="50"/>
+-        <source>Job has completed successfully</source>
+-        <translation>列印完成</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>RenamePrinterDialog</name>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="26"/>
+-        <source>RenamePrinterDialog</source>
+-        <translation>重新命名印表機對話框</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="148"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.ui" line="167"/>
+-        <source>Ok</source>
+-        <translation>確定</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/rename_printer_dialog.cpp" line="11"/>
+-        <source>Printer Name</source>
+-        <translation>印表機名稱</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SelectPpdDialog</name>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="23"/>
+-        <source>Select Driver</source>
+-        <translation>選擇驅動</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="56"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="85"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="266"/>
+-        <source>driver</source>
+-        <translation>驅動</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="57"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="71"/>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="232"/>
+-        <source>vendor</source>
+-        <translation>品牌</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="195"/>
+-        <source>Reading Drivers,Please Wait...</source>
+-        <translation>讀取驅動檔,請稍後...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="319"/>
+-        <source>Please Choose Model And Vender!</source>
+-        <translation>請選擇廠商和型號!</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="320"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.cpp" line="322"/>
+-        <source>Close</source>
+-        <translation>關閉</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="26"/>
+-        <source>SelectPpdDialog</source>
+-        <translation>ui標題</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="203"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/main_win_ui/select_ppd_dialog.ui" line="247"/>
+-        <source>Apply</source>
+-        <translation>確定</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbAuthInfoDialog</name>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.ui" line="26"/>
+-        <source>SmbAuthInfoDialog</source>
+-        <translation>SmbAuthInfoDialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="13"/>
+-        <source>Authentication</source>
+-        <translation>身份認證</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="14"/>
+-        <source>Authentication is required to connect to the printer &quot;%1&quot;</source>
+-        <translation>連接訪問「%1」 印表機需要認證</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="15"/>
+-        <source>Username</source>
+-        <translation>使用者名</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="16"/>
+-        <source>Password</source>
+-        <translation>密碼</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="17"/>
+-        <source>Workgroup</source>
+-        <translation>域</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="18"/>
+-        <source>Accept</source>
+-        <translation>確定</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="19"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="37"/>
+-        <source>Authentication in progress. Please wait...</source>
+-        <translation>正在認證,請稍等</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="58"/>
+-        <source>Warning</source>
+-        <translation>警告</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/smb_auth_info_dialog.cpp" line="59"/>
+-        <source>Confirm</source>
+-        <translation>確定</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SmbClientHelper</name>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="175"/>
+-        <source>Cannot connect to %1!</source>
+-        <translation>無法連線到 %1!</translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="180"/>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="187"/>
+-        <source>Wrong user name or password!</source>
+-        <translation>錯誤的使用者名或密碼!</translation>
+-    </message>
+-    <message>
+-        <location filename="../device_manager/smbclient_helper.cpp" line="192"/>
+-        <source>The samba server shared printer list is empty</source>
+-        <translation>samba伺服器共用印表機清單為空</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SystemNotification</name>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="21"/>
+-        <source>Printer Info</source>
+-        <translation>印表機資訊</translation>
+-    </message>
+-    <message>
+-        <location filename="../util/system_notification.cpp" line="36"/>
+-        <source>Printer</source>
+-        <translation>印表機</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TrayWin</name>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="33"/>
+-        <source>Minimize</source>
+-        <translation>最小化</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="39"/>
+-        <source>Maximize</source>
+-        <translation>最大化</translation>
+-    </message>
+-    <message>
+-        <location filename="../backend/ui/tray_win.cpp" line="45"/>
+-        <source>Quit</source>
+-        <translation>退出</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingDialog</name>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.ui" line="14"/>
+-        <source>TroubleshootingDialog</source>
+-        <translation>TroubleshootingDialog</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="24"/>
+-        <source>Troubleshooting</source>
+-        <translation>故障排查</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="25"/>
+-        <source>Accept</source>
+-        <translation>確定</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="26"/>
+-        <source>Cancel</source>
+-        <translation>取消</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="27"/>
+-        <source>Repair</source>
+-        <translation>一鍵修復</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="77"/>
+-        <source>Check whether the CUPS service is enabled</source>
+-        <translation>檢查 CUPS 服務是否開啟</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="87"/>
+-        <source>CUPS service is enabled</source>
+-        <translation>CUPS 服務已開啟</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="90"/>
+-        <source>CUPS service is not enabled</source>
+-        <translation>CUPS 服務未開啟</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="105"/>
+-        <source>Check CUPS user access rights</source>
+-        <translation>檢查 CUPS 使用者存取許可權</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="116"/>
+-        <source>CUPS users can access normally</source>
+-        <translation>CUPS 用戶可正常訪問</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="119"/>
+-        <source>CUPS user restricted access rights</source>
+-        <translation>CUPS 使用者訪問許可權受限</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="133"/>
+-        <source>Check whether the printer connection is normal</source>
+-        <translation>檢查印表機連接是否正常</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="152"/>
+-        <source>Printer connected</source>
+-        <translation>印表機已連接</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="155"/>
+-        <source>Printer disconnected</source>
+-        <translation>印表機已斷開連接</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="186"/>
+-        <source>Check whether the printer protocol port configuration is enabled</source>
+-        <translation>檢查印表機協定埠配置是否開啟</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="194"/>
+-        <source>Printer protocol port configuration is enabled</source>
+-        <translation>印表機協定埠配置已開啟</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="197"/>
+-        <source>Printer protocol port is not configured to be enabled</source>
+-        <translation>印表機協定埠配置未開啟</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Error</source>
+-        <translation>錯誤</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="205"/>
+-        <source>Automatic repair failed and manual troubleshooting is required.</source>
+-        <translation>自動修復失敗,需要手動排除故障。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/troubleshooting_dialog.cpp" line="208"/>
+-        <source>Confirm</source>
+-        <translation>確定</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>TroubleshootingInfoWidget</name>
+-    <message>
+-        <location filename="../ui/new_property_window/troubleshooting_info_widget.ui" line="14"/>
+-        <source>Form</source>
+-        <translation>ui標題</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>UkuiPrinterManager</name>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="340"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1499"/>
+-        <source>Idle</source>
+-        <translation>空閒</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="342"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1501"/>
+-        <source>Printing</source>
+-        <translation>忙碌</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="344"/>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="1503"/>
+-        <source>Stopped</source>
+-        <translation>停止</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="438"/>
+-        <source>Printer Name Cannot Contains &apos;%1&apos;, And More Than 0 Letter, Less Than 128 Letters !</source>
+-        <translation>印表機名稱不能包含『%1』,而且不能為空,且少於128個字母!</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="455"/>
+-        <source>Exist Same Name Printer!</source>
+-        <translation>存在同名印表機!</translation>
+-    </message>
+-    <message>
+-        <location filename="../printer_manager/ukui_printer.cpp" line="458"/>
+-        <source>Printer name is not case sensitive!</source>
+-        <translation>印表機名稱不區分大小寫!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>WaitingDialog</name>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="32"/>
+-        <source>Widget</source>
+-        <translation>控件</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/custom_ui/waiting_dialog.ui" line="87"/>
+-        <source>TextLabel</source>
+-        <translation>文字框</translation>
+-    </message>
+-</context>
+-</TS>
+diff --git a/daemons/sessionservice/printerbackend/ui/gsettings_monitor.cpp b/daemons/sessionservice/printerbackend/ui/gsettings_monitor.cpp
+deleted file mode 100644
+index b5ff276..0000000
+--- a/daemons/sessionservice/printerbackend/ui/gsettings_monitor.cpp
++++ /dev/null
+@@ -1,328 +0,0 @@
+-#include "gsettings_monitor.h"
+-#include <QVariant>
+-#include <QDebug>
+-#include <QFontDatabase>
+-#include <QFont>
+-#include "global_variable.h"
+-#include <QDateTime>
+-#include "libkydate.h"
+-#include <QDBusConnection>
+-#include "kom-configure.h"
+-
+-const double SYSTEM_DEFAULT_FONT_SIZE = 11;
+-const double SYSTEM_DEFAULT_FONT_SIZE_PIXELS = 9;
+-QMutex GsettingsMonitor:: m_mutex;
+-GsettingsMonitor::GsettingsMonitor()
+-{
+-    if (gsettingsCheck()) {
+-        initGsettings();
+-    }
+-}
+-GsettingsMonitor::~GsettingsMonitor(/* args */) { qDebug() << "GsettingsMonitor destroy.."; }
+-GsettingsMonitor* GsettingsMonitor::getInstance()
+-{
+-    static GsettingsMonitor instance;
+-    return &instance;
+-}
+-
+-bool GsettingsMonitor::gsettingsCheck()
+-{
+-    if(!QGSettings::isSchemaInstalled(UKUI_STYLE)) {
+-        qCritical() << QString("gsettings Error: %1 not found!").arg(UKUI_STYLE);
+-        return false;
+-    }
+-    if(!QGSettings::isSchemaInstalled(KYLIN_PRINTER_SETTINGS)) {
+-        qCritical() << QString("gsettings Error: %1 not found!").arg(KYLIN_PRINTER_SETTINGS);
+-        return false;
+-    }
+-    return true;
+-}
+-
+-QFont GsettingsMonitor::update()
+-{
+-    if (gsettingsCheck()) {
+-        return getFontSize();
+-    }
+-    return QFont();
+-}
+-
+-void GsettingsMonitor::initGsettings()
+-{
+-    if(QGSettings::isSchemaInstalled(UKUI_STYLE)) {
+-        m_ukuiStyle = new QGSettings(UKUI_STYLE);
+-        connect(m_ukuiStyle, &QGSettings::changed, this, [=] (const QString &key) {
+-            if(key == UKUI_FONT_SIZE ||
+-               key == UKUI_FONT ) {
+-                //获取字号的值
+-                QString fontStyle = m_ukuiStyle->get(UKUI_FONT).toString();
+-                double fontSizeKey = m_ukuiStyle->get(UKUI_FONT_SIZE).toString().toDouble();
+-                QFontDatabase db;
+-                //发送改变信号
+-                if (fontSizeKey > 0 &&
+-                    db.families().contains(fontStyle))
+-                {
+-                    getFontSize();
+-                }
+-            }
+-            else if (key == UKUI_MENU_TRANSPARENCY) {
+-                sysTransparencyGet();
+-                }
+-            else if (key == UKUI_STYLE_NAME) {
+-                sysStyleNameGet();
+-            }
+-        });
+-        getFontSize();
+-    }
+-
+-    m_kylinPrinterSettings = new QGSettings(KYLIN_PRINTER_SETTINGS);
+-    QObject::connect(m_kylinPrinterSettings , &QGSettings::changed, [=] (const QString &key){
+-        if (key == KYLIN_PRINTER_IP) {
+-            apiServerAddressGet();
+-        }
+-        else if (key == KYLIN_PRINTER_PRINTERS) {
+-            printerDevicesGet();
+-        }
+-        else if (key == KYLIN_PRINTER_SHOW_PROTOCOLS) {
+-            showProtocolsGet();
+-        }
+-    });
+-
+-    if(QGSettings::isSchemaInstalled(PANEL_CONTROL_IN_CALENDAR)) {
+-        m_calendarSettings = new QGSettings(PANEL_CONTROL_IN_CALENDAR);
+-        connect(m_calendarSettings, &QGSettings::changed, this, [=] (const QString &key){
+-            if(key == "hoursystem") {
+-                sysDateStyleGet();
+-            }
+-        });
+-        QDBusConnection::sessionBus().connect("",
+-                                              "/com/kylin/kysdk/Date",
+-                                              "com.kylin.kysdk.DateInterface",
+-                                              "ShortDateSignal",
+-                                              this,
+-                                              SIGNAL(getDateSignal(QString)));
+-        connect(this, &GsettingsMonitor::getDateSignal, this, [=](QString date){
+-            sysDateStyleGet();
+-        });
+-
+-        sysDateStyleGet();
+-    }
+-
+-    return ;
+-}
+-
+-QString getSystemTimeFormat()
+-{
+-    QString format;
+-    char *res = kdk_system_get_shortformat();
+-    if (!res) {
+-        qDebug() << "kdk_system_get_shortformat failed!";
+-        format = "yyyy/MM/dd";
+-    }
+-    else {
+-        format = QString(res);
+-        free(res);
+-    }
+-    return format;
+-}
+-
+-
+-QString GsettingsMonitor::sysDateStyleGet()
+-{
+-    if(!QGSettings::isSchemaInstalled(PANEL_CONTROL_IN_CALENDAR)) {
+-        return m_timeStyle;
+-    }
+-
+-    QString tmpDate = getSystemTimeFormat() + " dddd";
+-
+-    QLocale locale = (QLocale::system().name() == "zh_CN" ? (QLocale::Chinese) : (QLocale::English));
+-    QString tmpTime;
+-    QString timemodel = m_calendarSettings->get("hoursystem").toString();
+-    if(timemodel == "12") {
+-        if(locale.language() == QLocale::English){
+-            tmpTime = "hh:mm:ss A";
+-        } else {
+-            tmpTime = "A hh:mm:ss";
+-        }
+-    } else {
+-        tmpTime = "hh:mm:ss";
+-    }
+-
+-    QString tmpTimeStyle = tmpDate + " " + tmpTime;
+-    if (tmpTimeStyle != m_timeStyle) {
+-        m_timeStyle = tmpTimeStyle;
+-        sysDateStyleUpdate(m_timeStyle);
+-    }
+-    return m_timeStyle;
+-}
+-
+-QString GsettingsMonitor::sysDateStyleGet(time_t time)
+-{
+-    if (m_timeStyle.isEmpty()) {
+-        return  QDateTime::fromTime_t(time).toString();
+-    }
+-    return QDateTime::fromTime_t(time).toString(m_timeStyle);
+-}
+-
+-QFont GsettingsMonitor::getFontSize()
+-{
+-    //启动时设置字号
+-    double fontSizeKey = SYSTEM_DEFAULT_FONT_SIZE;
+-    QString fontStyle = m_ukuiStyle->get(UKUI_FONT).toString();
+-    if (m_ukuiStyle != nullptr) {
+-        double fontSizeKeyTmp = m_ukuiStyle->get(UKUI_FONT_SIZE).toString().toDouble();
+-
+-        if (fontSizeKeyTmp > 0) {
+-            fontSizeKey = fontSizeKeyTmp;
+-        }
+-    }
+-    if(fontSizeKey >= 15.0)
+-    {
+-        fontSizeKey = 15.0;
+-    }
+-
+-    double baseFontSize = SYSTEM_DEFAULT_FONT_SIZE_PIXELS;
+-    double nowFontSize = baseFontSize * double(fontSizeKey) / SYSTEM_DEFAULT_FONT_SIZE;
+-    qDebug() << nowFontSize;
+-
+-    QFont font;
+-
+-    font.setFamily(fontStyle);
+-
+-    emit sysFontSizeUpdate(font);
+-    return font;
+-}
+-
+-int GsettingsMonitor::sysTransparencyGet()
+-{
+-    if(!QGSettings::isSchemaInstalled(UKUI_STYLE)) {
+-        return m_menuTrans;
+-        }
+-
+-    int tmpMenuTrans = m_ukuiStyle->get(UKUI_MENU_TRANSPARENCY).toInt();
+-    if (tmpMenuTrans != m_menuTrans) {
+-        m_menuTrans = tmpMenuTrans;
+-        sysTransparencyUpdate(m_menuTrans);
+-    }
+-
+-    return m_menuTrans;
+-}
+-
+-QString GsettingsMonitor::sysStyleNameGet()
+-{
+-    if(!QGSettings::isSchemaInstalled(UKUI_STYLE)) {
+-        return m_styleName;
+-    }
+-
+-    QString tmpStyleName = m_ukuiStyle->get(UKUI_STYLE_NAME).toString();
+-    if (tmpStyleName != m_styleName) {
+-        m_styleName = tmpStyleName;
+-        sysStyleNameUpdate(m_styleName);
+-    }
+-
+-    return m_styleName;
+-}
+-
+-QString GsettingsMonitor::apiServerAddressGet()
+-{
+-    // if(!QGSettings::isSchemaInstalled(KYLIN_PRINTER_SETTINGS)) {
+-    //     return m_apiServerAddress;
+-    // }
+-
+-    // QString tmpApiServerAddress = "";
+-    // QStringList keys = m_kylinPrinterSettings->keys();
+-    // for (auto key : keys)
+-    // {
+-    //     if (KYLIN_PRINTER_IP == key)
+-    //     {
+-    //         tmpApiServerAddress = m_kylinPrinterSettings->get(KYLIN_PRINTER_IP).toString();
+-    //         break;
+-    //     }
+-    //     else
+-    //     {
+-    //         continue;
+-    //     }
+-    // }
+-
+-    // if (tmpApiServerAddress.isEmpty())
+-    // {
+-    //     tmpApiServerAddress = "api.kylinos.cn";
+-    // }
+-    // else
+-    // {
+-    //     if (tmpApiServerAddress != m_apiServerAddress)
+-    //     {
+-    //         m_apiServerAddress = tmpApiServerAddress;
+-    //         apiServerAddressUpdate(m_apiServerAddress);
+-    //     }
+-    //     else
+-    //     {
+-    //     }
+-    // }
+-
+-    // return m_apiServerAddress;
+-
+-    kom::Configure conf;
+-    QString customize = conf.value(CONFIG_PLUGIN_GLOBAL, CONFIG_PLUGIN_GLOBAL_CUSTOMIZE).toString();
+-    if (customize ==  "icbc") {
+-        return "kysoftshopclient.kylin.icbc:30234";
+-    } else {
+-        return "api.kylinos.cn";
+-    }
+-}
+-
+-QByteArray GsettingsMonitor::printerDevicesGet()
+-{
+-    if(!QGSettings::isSchemaInstalled(KYLIN_PRINTER_SETTINGS)) {
+-        return m_devices;
+-    }
+-
+-    QByteArray tmpDevices = m_kylinPrinterSettings->get(KYLIN_PRINTER_PRINTERS).toByteArray();
+-    if (tmpDevices != m_devices) {
+-        m_devices = tmpDevices;
+-        printerDevicesUpdate(m_devices);
+-    }
+-
+-    return m_devices;
+-}
+-
+-QStringList GsettingsMonitor::showProtocolsGet()
+-{
+-    if(!QGSettings::isSchemaInstalled(KYLIN_PRINTER_SETTINGS)) {
+-        return m_showProtocols;
+-    }
+-
+-    QStringList tmpShowProtocols = m_kylinPrinterSettings->get(KYLIN_PRINTER_SHOW_PROTOCOLS).toStringList();
+-    if (tmpShowProtocols != m_showProtocols) {
+-        m_showProtocols = tmpShowProtocols;
+-        showProtocolsUpdate(m_showProtocols);
+-    }
+-
+-    return m_showProtocols;
+-}
+-
+-void GsettingsMonitor::printerDevicesSet(const QByteArray& devices)
+-{
+-    if(!QGSettings::isSchemaInstalled(KYLIN_PRINTER_SETTINGS)) {
+-        return ;
+-    }
+-    m_kylinPrinterSettings->set(KYLIN_PRINTER_PRINTERS, devices);
+-    return ;
+-}
+-
+-void GsettingsMonitor::apiServerAddressSet(const QString &address)
+-{
+-    if(!QGSettings::isSchemaInstalled(KYLIN_PRINTER_SETTINGS)) {
+-        return ;
+-    }
+-    m_kylinPrinterSettings->set(KYLIN_PRINTER_IP, address);
+-    return ;
+-}
+-
+-void GsettingsMonitor::showProtocolsSet(const QStringList &showProtocols)
+-{
+-    if(!QGSettings::isSchemaInstalled(KYLIN_PRINTER_SETTINGS)) {
+-        return ;
+-    }
+-    m_kylinPrinterSettings->set(KYLIN_PRINTER_SHOW_PROTOCOLS, showProtocols);
+-    return ;
+-}
+diff --git a/daemons/sessionservice/printerbackend/ui/gsettings_monitor.h b/daemons/sessionservice/printerbackend/ui/gsettings_monitor.h
+deleted file mode 100644
+index 5242c24..0000000
+--- a/daemons/sessionservice/printerbackend/ui/gsettings_monitor.h
++++ /dev/null
+@@ -1,80 +0,0 @@
+-#ifndef GSETTINGS_MONITOR_H
+-#define GSETTINGS_MONITOR_H
+-
+-#include <QObject>
+-#include <QGSettings>
+-#include <QMutex>
+-#include <QFont>
+-
+-
+-class GsettingsMonitor : public QObject
+-{
+-    Q_OBJECT
+-private:
+-    const char *UKUI_STYLE = "org.ukui.style";
+-    const char *UKUI_FONT_SIZE = "systemFontSize";
+-    const char *UKUI_FONT = "systemFont";
+-    const char *UKUI_MENU_TRANSPARENCY = "menuTransparency";
+-    const char *UKUI_STYLE_NAME = "styleName";
+-
+-    const char *KYLIN_PRINTER_SETTINGS = "kylin.os.manager.printer.settings";
+-    const char *KYLIN_PRINTER_IP = "ip";
+-    const char *KYLIN_PRINTER_PRINTERS = "printers";
+-    const char *KYLIN_PRINTER_SHOW_PROTOCOLS = "show-protocols";
+-
+-    const char *PANEL_CONTROL_IN_CALENDAR = "org.ukui.control-center.panel.plugins";
+-
+-public:
+-    static GsettingsMonitor* getInstance();
+-    bool gsettingsCheck();
+-    QFont getFontSize();
+-    int sysTransparencyGet();
+-    QString sysStyleNameGet();
+-    QString sysDateStyleGet();
+-    QString sysDateStyleGet(time_t time);
+-    QString apiServerAddressGet();
+-    QByteArray printerDevicesGet();
+-    QStringList showProtocolsGet();
+-
+-    void apiServerAddressSet(const QString &address);
+-    void printerDevicesSet(const QByteArray &devices);
+-    void showProtocolsSet(const QStringList &showProtocols);
+-
+-signals:
+-    QFont sysFontSizeUpdate(QFont currentFont);
+-    void sysTransparencyUpdate(int transparency);
+-    void sysStyleNameUpdate(const QString &styleName);
+-    void sysDateStyleUpdate(const QString &dateStyle);
+-    void printerDevicesUpdate(const QByteArray &devices);
+-    void apiServerAddressUpdate(const QString &host);
+-    void showProtocolsUpdate(const QStringList &showProtocols);
+-    void getDateSignal(QString);
+-
+-public slots:
+-    QFont update();
+-private:
+-    void initGsettings();
+-
+-
+-private:
+-    GsettingsMonitor(/* args */);
+-    GsettingsMonitor(GsettingsMonitor const&) = delete;
+-    GsettingsMonitor& operator=(GsettingsMonitor const&) = delete;
+-    ~GsettingsMonitor();
+-
+-    static QMutex m_mutex;
+-
+-    QGSettings *m_ukuiStyle;
+-    QGSettings *m_kylinPrinterSettings;
+-    QGSettings *m_calendarSettings;
+-
+-    QString m_timeStyle = QString();
+-    int m_menuTrans = -1;
+-    QString m_styleName = QString();
+-    QByteArray m_devices = QByteArray();
+-    QString m_apiServerAddress = "api.kylinos.cn";
+-    QStringList m_showProtocols{QStringList()};
+-
+-};
+-
+-#endif // GSETTINGS_MONITOR_H
+diff --git a/daemons/sessionservice/printerbackend/ui/new_pop_window/pop_window_manager.cpp b/daemons/sessionservice/printerbackend/ui/new_pop_window/pop_window_manager.cpp
+deleted file mode 100644
+index f0c0642..0000000
+--- a/daemons/sessionservice/printerbackend/ui/new_pop_window/pop_window_manager.cpp
++++ /dev/null
+@@ -1,273 +0,0 @@
+-#include <QString>
+-#include <QStringList>
+-#include <QPushButton>
+-#include <QEventLoop>
+-
+-#include "pop_window_manager.h"
+-#include "device_monitor.h"
+-#include "system_notification.h"
+-#include "common.h"
+-#include "find_and_match_ppds.h"
+-#include "ukui_printer.h"
+-#include "ukui_apt.h"
+-#include "package_helper.h"
+-#include "information_collector.h"
+-
+-PopWindowManager::PopWindowManager()
+-{
+-    connect(DeviceMonitorBackend::getInstance(), &DeviceMonitorBackend::findUsbConnect,
+-            this, &PopWindowManager::addNewPrinterDevice, Qt::QueuedConnection);
+-    connect(DeviceMonitorBackend::getInstance(), &DeviceMonitorBackend::findUsbDisconnect,
+-            this, &PopWindowManager::modifyInfoList, Qt::QueuedConnection);
+-    connect(this, &PopWindowManager::installPrinter,
+-            this, &PopWindowManager::getDevInfo);
+-    connect(this, &PopWindowManager::showNextRequest,
+-            this, &PopWindowManager::showNext);
+-}
+-
+-void PopWindowManager::addNewPrinterDevice(DeviceInformation devInfo)
+-{
+-    if (m_devMp.contains(devInfo.sysPath)) {
+-        return;
+-    }
+-
+-    // 判断一下是否重复了
+-    QList<UkuiUsbPrinter> printers;
+-    UkuiPrinterManager::getInstance().enumPrinters(printers);
+-    foreach (auto printer, printers) {
+-        if (printer.device_uri == devInfo.uri) {
+-            qDebug() << "In Installing: " << devInfo.name;
+-            qDebug()<<"The Printer: "<<devInfo.uri << " has already installed!";
+-            return ;
+-        }
+-    }
+-
+-    m_devMp.insert(devInfo.sysPath, devInfo);
+-
+-    QString desc = devInfo.vendor + " " + devInfo.model;
+-    SystemNotification().sendMessage(tr("Do you want to add a printer?"), tr("The printer was detected:%1").arg(desc), -1, QStringList() << QString("kylin-printer-add-printer:%1").arg(devInfo.sysPath) << tr("Add"));
+-}
+-
+-void PopWindowManager::getDevInfo(QString sysPath)
+-{
+-    if (!m_devMp.contains(sysPath)) {
+-        return ;
+-    }
+-    DeviceInformation devInfo = m_devMp[sysPath];
+-
+-    if (m_infoList.isEmpty()) {
+-        m_infoList.enqueue(devInfo);
+-        showPopWindow(m_infoList.last());
+-    }
+-    else {
+-        // 先判断之前有没有处理过
+-        for (int i = 0; i < m_infoList.size(); ++i) {
+-            if (devInfo.sysPath == m_infoList.at(i).sysPath) {
+-                return ;
+-            }
+-        }
+-        m_infoList.enqueue(devInfo);
+-    }
+-    return ;
+-}
+-
+-void PopWindowManager::modifyInfoList(QString path)
+-{
+-    if (m_devMp.isEmpty()) {
+-        return ;
+-    }
+-    m_devMp.remove(path);
+-    return ;
+-}
+-
+-void PopWindowManager::showNext()
+-{
+-    if (m_infoList.isEmpty()) {
+-        return ;
+-    }
+-    m_infoList.dequeue();
+-    if (m_infoList.isEmpty()) {
+-        qDebug() << "popwindow show all finished!";
+-        return ;
+-    }
+-    
+-    showPopWindow(m_infoList.first());
+-    return ;
+-}
+-
+-void PopWindowManager::showPopWindow(const DeviceInformation &devInfo)
+-{
+-    qDebug() << "Installing: " <<devInfo.name;
+-
+-    DeviceInformation info(devInfo);
+-    // 判断一下是否重复了
+-    QList<UkuiUsbPrinter> printers;
+-    UkuiPrinterManager::getInstance().enumPrinters(printers);
+-    foreach (auto printer, printers) {
+-        if (printer.device_uri == info.uri) {
+-            qDebug() << "In Installing: " << info.name;
+-            qDebug()<<"The Printer: "<<info.uri << " has already installed!";
+-            showNextRequest();
+-            return ;
+-        }
+-    }
+-
+-    QMap<QString, QString> messages;
+-    messages.insert("uri", devInfo.uri);
+-    messages.insert("pid", devInfo.PID);
+-    messages.insert("vid", devInfo.VID);
+-    messages.insert("vendor", devInfo.vendor);
+-    messages.insert("model", devInfo.model);
+-
+-    QString desc = getNameFromDeviceInformation(info);
+-    int nameCount=1;
+-    QString textDesc(desc);
+-    while(1) {
+-        auto res = UkuiPrinterManager::getInstance().printerNameCheck(textDesc, false, printers);
+-
+-        if (res.status == CommonStatusFlag::ERROR_EXIST_SAME_PRINTER) {
+-            textDesc = QString("%1-%2").arg(desc).arg(nameCount);
+-            nameCount++;
+-        } else {
+-            break ;
+-        }
+-    }
+-    desc = textDesc;
+-    // SystemNotification().sendMessage(tr("Installing..."), tr("The printer was detected:%1").arg(desc), -1);
+-    QEventLoop loop;
+-    PackageHelper* pkgHelper = new PackageHelper(info);
+-    m_needInstall = false;
+-    m_pkgHelperFlag = false;
+-    connect(pkgHelper, &PackageHelper::finished, &loop, &QEventLoop::quit);
+-    connect(pkgHelper, &PackageHelper::succeed, [=](bool needInstall) {
+-        m_needInstall = needInstall;
+-        pkgHelper->finished();
+-        m_pkgHelperFlag = true;
+-    });
+-    connect(pkgHelper, &PackageHelper::failed, [=]() {
+-        qDebug() << "Install failed";
+-        pkgHelper->finished();
+-        m_pkgHelperFlag = false;
+-    });
+-    pkgHelper->startWorker();
+-    loop.exec();
+-
+-    if (!m_pkgHelperFlag) {
+-        qDebug () << "搜索驱动失败,使用本地驱动!";
+-    }
+-
+-    if (m_needInstall == true && !info.packageLevel.isEmpty() && info.packageLevel != "1") {
+-        QString tipStr;
+-        if (info.packageLevel == "2") {
+-
+-        } else {
+-            m_needInstall = false;
+-            if (info.packageLevel == "3") {
+-                // tipStr = "该设备型号驱动适配中。";
+-                tipStr = tr("The device driver is being adapted.");
+-            } else {
+-                // tipStr = "由于商业协议限制,请联系设备制造商以获取该设备型号驱动程序。";
+-                tipStr = tr("Due to commercial agreement restrictions, please contact the device manufacturer to obtain drivers for this device model.");
+-            }
+-            SystemNotification().sendMessage(tipStr, tr("%1 installation failed").arg(desc), -1);
+-            
+-            messages.insert("result", "auto fail");
+-            messages.insert("resultString", QString("the packageLevel is %1!").arg(info.packageLevel));
+-            InformationCollector::getInstance().addMessageMap("add_printer", messages);
+-            return;
+-        }
+-    }
+-
+-    if (m_needInstall) {
+-        m_installOk = 1;
+-        QEventLoop loop;
+-        connect(g_findAndMatchWorkThread, &FindAndMatchPPDs::updateFinished, &loop, &QEventLoop::quit);
+-        connect(g_findAndMatchWorkThread, &FindAndMatchPPDs::updateFailed, &loop, &QEventLoop::quit);
+-        connect(this, &PopWindowManager::installEnd, &loop, &QEventLoop::quit);
+-        AptUtilHelper *aptHelper = new AptUtilHelper(info);
+-        connect(aptHelper, &AptUtilHelper::succeed, [ = ]() {
+-            qDebug() << "Install succeed";
+-            m_installOk = 0;
+-            g_findAndMatchWorkThread->updatePPDsMap();
+-        });
+-        connect(aptHelper, &AptUtilHelper::failed, [ = ]() {
+-            qDebug() << "Install failed";
+-            m_installOk = 1;
+-            emit installEnd();
+-        });
+-        aptHelper->startWorker();
+-        loop.exec();
+-        if (m_installOk == 1) {
+-            // QString msg = "安装驱动失败!";
+-            // SystemNotification().sendMessage(msg);
+-            // return;
+-        }
+-        aptHelper->finished();
+-    }
+-
+-    QString ppd;
+-    QStringList ppdList;
+-
+-    while (true == g_findAndMatchWorkThread->isBusy() || !g_findAndMatchWorkThread->hasPPDsMap()) {
+-        delay_msec(1000);
+-    }
+-
+-    int ret = g_findAndMatchWorkThread->matchPPDToPrinter(info.vendor, info.model, info.suggestPpdName, ppd, ppdList);
+-    if (ret != 0) {
+-        qDebug() << ret;
+-    }
+-
+-    if (ppd.isEmpty()) {
+-        if (ppdList.isEmpty()) {
+-            QString msg = tr("No printer driver for %1.").arg(desc);
+-            SystemNotification().sendMessage(msg, tr("%1 installation failed").arg(desc), -1);
+-
+-            messages.insert("result", "auto fail");
+-            messages.insert("resultString", QString("No printer driver"));
+-            InformationCollector::getInstance().addMessageMap("add_printer", messages);
+-            return;
+-        } else {
+-            ppd = ppdList.at(0);
+-        }
+-    }
+-
+-    QString errorString;
+-    ret = UkuiPrinterManager::getInstance().addPrinter(info.uri, desc, ppd, "", errorString);
+-    if (ret == false) {
+-        SystemNotification().sendMessage(errorString, tr("%1 installation failed").arg(desc), -1);
+-        messages.insert("result", "auto fail");
+-        messages.insert("resultString", "add printer failed!");
+-        messages.insert("cupsErrorString", errorString);
+-        InformationCollector::getInstance().addMessageMap("add_printer", messages);
+-        return;
+-    }
+-    info.displayName = desc;
+-    info.userChoosePpdName = ppd;
+-
+-    SystemNotification().sendMessage("", tr("%1 successful installation").arg(desc), -1, QStringList() << QString("kylin-printer-print-test-page:%1").arg(info.serialize()) << tr("Print test page"));
+-    
+-    emit showNextRequest();
+-    messages.insert("result", "auto success");
+-    InformationCollector::getInstance().addMessageMap("add_printer", messages);
+-    return ;
+-}
+-
+-PopWindowManager *PopWindowManager::getInstance()
+-{
+-    static PopWindowManager *instance = nullptr;
+-    static QThread *thread;
+-    if (nullptr == instance) {
+-        instance = new PopWindowManager();
+-        thread = new QThread();
+-        thread->setObjectName("PopWindowManager");
+-        instance->moveToThread(thread);
+-
+-        thread->start();
+-    }
+-    return instance;
+-}
+-
+-PopWindowManager::~PopWindowManager()
+-{
+-
+-}
+diff --git a/daemons/sessionservice/printerbackend/ui/new_pop_window/pop_window_manager.h b/daemons/sessionservice/printerbackend/ui/new_pop_window/pop_window_manager.h
+deleted file mode 100644
+index 2e5ae80..0000000
+--- a/daemons/sessionservice/printerbackend/ui/new_pop_window/pop_window_manager.h
++++ /dev/null
+@@ -1,39 +0,0 @@
+-#ifndef POP_WINDOW_MANAGER_H
+-#define POP_WINDOW_MANAGER_H
+-
+-#include <QObject>
+-#include "device_information.h"
+-#include <QQueue>
+-
+-
+-class PopWindowManager : public QObject
+-{
+-    Q_OBJECT
+-private:
+-    QQueue<DeviceInformation> m_infoList;
+-    QMap<QString, DeviceInformation> m_devMp;
+-    explicit PopWindowManager();
+-    ~PopWindowManager();
+-    void showPopWindow(const DeviceInformation &info);
+-    void getDevInfo(QString);
+-    void modifyInfoList(QString);
+-    void showNext();
+-    void addNewPrinterDevice(DeviceInformation devInfo);
+-    //安装状态,0:安装成功,1:安装失败,2:已经安装
+-    int m_installOk = -1;
+-    bool m_needInstall = false;
+-    bool m_pkgHelperFlag = false;
+-public:
+-    static PopWindowManager *getInstance();
+-signals:
+-    void installPrinter(QString);
+-    void manualInstallShowRequest(DeviceInformation &);
+-    void deviceViewShowRequest(QString &);
+-    void showNextRequest();
+-    void installEnd();
+-};
+-
+-
+-
+-
+-#endif // POP_WINDOW_MANAGER_H
+diff --git a/daemons/sessionservice/printerbackend/util/information_collector.cpp b/daemons/sessionservice/printerbackend/util/information_collector.cpp
+deleted file mode 100644
+index 091745c..0000000
+--- a/daemons/sessionservice/printerbackend/util/information_collector.cpp
++++ /dev/null
+@@ -1,109 +0,0 @@
+-#include <QDebug>
+-
+-#include <libkydatacollect.h>
+-
+-#include "common.h"
+-#include "information_collector.h"
+-
+-InformationCollector::InformationCollector(/* args */)
+-{
+-    connect(this, &InformationCollector::addMessage, [=](const QString &str){
+-        if (str.isEmpty()) {
+-            return ;
+-        }
+-        sendMessage("message", str);
+-    });
+-
+-    connect(this, &InformationCollector::addMessageMap, this, &InformationCollector::sendMessageMap, Qt::QueuedConnection);
+-}
+-
+-InformationCollector::~InformationCollector(/* args */)
+-{
+-
+-}
+-void InformationCollector::addPoint(P point) const
+-{
+-    QString str;
+-    switch (point)
+-    {
+-    case InformationCollector::P::ManuallyInstallPrinter : str = "ManuallyInstallPrinter"; break;
+-    case InformationCollector::P::SetResolution          : str = "SetResolution";          break;
+-    case InformationCollector::P::SetPaperSize           : str = "SetPaperSize";           break;
+-    case InformationCollector::P::SetPaperType           : str = "SetPaperType";           break;
+-    case InformationCollector::P::SetCationSource        : str = "SetCationSource";        break;
+-    case InformationCollector::P::SetDuplexPrint         : str = "SetDuplexPrint";         break;
+-    case InformationCollector::P::SetInkType             : str = "SetInkType";             break;
+-    case InformationCollector::P::ADDRemovePrinter       : str = "ADDRemovePrinter";       break;
+-    case InformationCollector::P::SetShareStartup        : str = "SetShareStartup";        break;
+-    case InformationCollector::P::PrintTestPage          : str = "PrintTestPage";          break;
+-    case InformationCollector::P::CancelPrintJob         : str = "CancelPrintJob";         break;
+-    case InformationCollector::P::DeletePrintJob         : str = "DeletePrintJob";         break;
+-    case InformationCollector::P::RePrint                : str = "RePrint";                break;
+-    case InformationCollector::P::ManualyModifyDrive     : str = "ManualyModifyDrive";     break;
+-    case InformationCollector::P::Rename                 : str = "Rename";                 break;
+-    default:
+-        return;
+-    }
+-    sendMessage("point", str);
+-}
+-
+-void InformationCollector::sendMessageMap(const QString &messageType, const QMap<QString, QString> &messageMap) const
+-{
+-#ifndef TEST_DEBUG
+-    auto *p = new KCustomProperty[messageMap.size()];
+-
+-    QByteArrayList buff;
+-    for (int i = 0; i < messageMap.keys().size(); i++) {
+-        QString key = messageMap.keys().at(i);
+-        QString value = messageMap[key];
+-
+-        if (value.size() > 5000) {
+-            qDebug() << "InformationCollector::sendMessage value too long !" << value;
+-        }
+-
+-        buff.append(key.toLocal8Bit());
+-        p[i].key = buff.back().data();
+-
+-        buff.append(value.toLocal8Bit());
+-        p[i].value = buff.back().data();
+-    }
+-
+-    KTrackData *node = kdk_dia_data_init(KEVENTSOURCE_DESKTOP, KEVENT_CUSTOM);
+-    kdk_dia_append_custom_property(node, p, messageMap.size());
+-    kdk_dia_upload_default(node, QTC(messageType), const_cast<char *>("mainPage"));
+-    kdk_dia_data_free(node);
+-
+-
+-    delete []p;
+-#endif
+-}
+-
+-void InformationCollector::sendMessage(const QString &key, const QString &value) const
+-{
+-    QMap<QString, QString> messages;
+-    messages.insert(key, value);
+-    InformationCollector::getInstance().addMessageMap("function_type", messages);
+-}
+-
+-#ifdef TEST_DEBUG
+-const char *test_qtc(const QString &qstr)
+-{
+-    if (qstr.isEmpty())
+-        return nullptr;
+-    QByteArray ba = qstr.toLatin1();
+-    return ba.data();
+-}
+-
+-void InformationCollector::test() const
+-{
+-    KCustomProperty p[1];
+-    p[0].key = "test";
+-    QString value = QString(100000, 'a');
+-    p[0].value = const_cast<char *>(test_qtc(value));
+-
+-    KTrackData *node = kdk_dia_data_init(KEVENTSOURCE_DESKTOP,KEVENT_CUSTOM);
+-    kdk_dia_append_custom_property(node,p,1);
+-    kdk_dia_upload_default(node, const_cast<char *>("function_type"), const_cast<char *>("mainPage"));
+-    kdk_dia_data_free(node);
+-}
+-#endif
+diff --git a/daemons/sessionservice/printerbackend/util/information_collector.h b/daemons/sessionservice/printerbackend/util/information_collector.h
+deleted file mode 100644
+index 45d6258..0000000
+--- a/daemons/sessionservice/printerbackend/util/information_collector.h
++++ /dev/null
+@@ -1,54 +0,0 @@
+-#ifndef INFORMATION_COLLECTOR_H
+-#define INFORMATION_COLLECTOR_H
+-
+-#include <QString>
+-
+-namespace kdk::kabase{
+-    class BuriedPoint;
+-}
+-
+-class InformationCollector : public QObject
+-{
+-    Q_OBJECT
+-public:
+-    enum P {
+-        ManuallyInstallPrinter, /* 手动安装打印机 */
+-        SetResolution,          /* 设置分辨率 */
+-        SetPaperSize,           /* 设置纸张大小 */
+-        SetPaperType,           /* 设置纸张类型 */
+-        SetCationSource,        /* 设置纸盒来源 */
+-        SetDuplexPrint,         /* 设置双面打印 */
+-        SetInkType,             /* 设置墨水类型 */
+-        ADDRemovePrinter,       /* 添加删除打印机 */
+-        SetShareStartup,        /* 设置共享启动 */
+-        PrintTestPage,          /* 打印测试页 */
+-        CancelPrintJob,         /* 取消打印任务 */
+-        DeletePrintJob,         /* 删除打印任务 */
+-        RePrint,                /* 重新打印 */
+-        ManualyModifyDrive,     /* 手动修改驱动 */
+-        Rename,                 /* 重命名 */
+-    };
+-    static InformationCollector& getInstance()
+-    {
+-        static InformationCollector instance;
+-        return instance;
+-    }
+-    void addPoint(P point) const;
+-signals:
+-    void addMessage(const QString &str) const;
+-    void addMessageMap(const QString &messageType, const QMap<QString, QString> &messageMap) const;
+-
+-#ifdef TEST_DEBUG
+-public:
+-    void test() const;
+-#endif
+-private:
+-    void sendMessage(const QString &key, const QString &value) const;
+-    void sendMessageMap(const QString &messageType, const QMap<QString, QString> &messageMap) const;
+-    InformationCollector(/* args */);
+-    InformationCollector(InformationCollector const&);
+-    InformationCollector& operator=(InformationCollector const&);
+-    ~InformationCollector();
+-};
+-
+-#endif // INFORMATION_COLLECTOR_H
+diff --git a/daemons/sessionservice/printerbackend/util/system_notification.cpp b/daemons/sessionservice/printerbackend/util/system_notification.cpp
+deleted file mode 100644
+index 785da61..0000000
+--- a/daemons/sessionservice/printerbackend/util/system_notification.cpp
++++ /dev/null
+@@ -1,46 +0,0 @@
+-#include "system_notification.h"
+-#include <QApplication>
+-#include <QUrl>
+-#include <QDBusConnection>
+-#include <QDBusMessage>
+-#include <QDBusInterface>
+-#include <QDebug>
+-
+-
+-SystemNotification::SystemNotification(QObject *parent) : QObject(parent)
+-{
+-    m_interface = new QDBusInterface(QStringLiteral("org.freedesktop.Notifications"),
+-                                     QStringLiteral("/org/freedesktop/Notifications"),
+-                                     QStringLiteral("org.freedesktop.Notifications"),
+-                                     QDBusConnection::sessionBus(),
+-                                     this);
+-}
+-
+-void SystemNotification::sendMessage(const QString &text)
+-{
+-    sendMessage(text, tr("Printer Info"), 5000, QStringList());
+-}
+-
+-void SystemNotification::sendMessage(const QString &text, const QString &title, int timeout)
+-{
+-    sendMessage(text, title, 5000, QStringList());
+-}
+-
+-void SystemNotification::sendMessage(const QString &text, const QString &title, int timeout, const QStringList &actions)
+-{
+-    QList<QVariant> args;
+-    // QVariantMap hintsMap;
+-    QMap<QString, QVariant> hintsMap;
+-    hintsMap.insert("x-ukui-popup-timeout", timeout);
+-
+-    args << tr("Printer")                 // appname
+-         << static_cast<unsigned int>(0) // id
+-         << "kylin-printer"              // icon
+-         << title                        // summary
+-         << text                         // body
+-         << actions                      // actions
+-         << hintsMap                     // hints
+-         << (timeout == -1 ? 0 : -1);    // timeout
+-    auto s = m_interface->callWithArgumentList(QDBus::AutoDetect, QStringLiteral("Notify"), args);
+-    qDebug() << s;
+-}
+diff --git a/daemons/sessionservice/printerbackend/util/system_notification.h b/daemons/sessionservice/printerbackend/util/system_notification.h
+deleted file mode 100644
+index d2c7b20..0000000
+--- a/daemons/sessionservice/printerbackend/util/system_notification.h
++++ /dev/null
+@@ -1,28 +0,0 @@
+-#ifndef SYSTEM_NOTIFICATION_H
+-#define SYSTEM_NOTIFICATION_H
+-
+-#include <QObject>
+-
+-class QDBusInterface;
+-
+-class SystemNotification : public QObject
+-{
+-    Q_OBJECT
+-public:
+-    explicit SystemNotification(QObject *parent = nullptr);
+-
+-    void sendMessage(const QString &text);
+-
+-    // timeout :
+-    // -1 : 表示消息通知常驻,不会收纳进通知中心
+-    //  0 : 表示通知将直接进入侧边栏通知中心,不会弹窗
+-    // >0 : 表示通知弹窗持续时间
+-    void sendMessage(const QString &text, const QString &title, int timeout);
+-
+-    void sendMessage(const QString &text, const QString &title, int timeout, const QStringList &actions);
+-
+-private:
+-    QDBusInterface *m_interface;
+-};
+-
+-#endif // SYSTEM_NOTIFICATION_H
+\ No newline at end of file
+diff --git a/daemons/sessionservice/service_support_popup.cpp b/daemons/sessionservice/service_support_popup.cpp
+index 17ed258..1274272 100644
+--- a/daemons/sessionservice/service_support_popup.cpp
++++ b/daemons/sessionservice/service_support_popup.cpp
+@@ -6,22 +6,29 @@
+ #include <QProcess>
+ #include <QDesktopServices>
+ #include <QUrl>
++#include <kwindowinfo.h>
++#include <kwindowsystem.h>
+ #include <kborderlessbutton.h>
+ #include <kbackgroundgroup.h>
+ #include "text_label.h"
+ 
+-ServiceSupportPopup::ServiceSupportPopup() {
++ServiceSupportPopup::ServiceSupportPopup(QWidget *parent)
++    : kdk::KWidget(parent)
++{
++    setAttribute(Qt::WA_DeleteOnClose);
++
+     setFixedSize(455, 328);
+     setIcon(QIcon::fromTheme("kylin-os-manager"));
+     setWidgetName(tr("Kylin Os Manager"));
+     windowButtonBar()->minimumButton()->hide();
+     windowButtonBar()->maximumButton()->hide();
+     windowButtonBar()->menuButton()->hide();
+-    // 移除关闭按钮上绑定的所有信号和槽
+-    windowButtonBar()->closeButton()->disconnect();
+-    connect(windowButtonBar()->closeButton(), &QPushButton::clicked, this, [this]() {
+-        hide();
+-    });
++
++    // 隐藏任务栏图标
++    const KWindowInfo window_info(winId(), NET::WMState);
++    if (!window_info.hasState(NET::SkipTaskbar) || !window_info.hasState(NET::SkipPager)) {
++        KWindowSystem::setState(winId(), NET::SkipTaskbar | NET::SkipPager);
++    }
+ 
+     // 图标
+     auto *icon_label = new QLabel(this);
+@@ -123,9 +130,9 @@ ServiceSupportPopup::ServiceSupportPopup() {
+ 
+     // 按钮
+     auto *cache_btn = new QPushButton(this);
+-    cache_btn->setText(tr("Cache"));
++    cache_btn->setText(tr("Cancel"));
+     connect(cache_btn, &QPushButton::clicked, this, [this]() {
+-        hide();
++        close();
+     });
+ 
+     auto *clean_btn = new QPushButton(this);
+@@ -136,7 +143,7 @@ ServiceSupportPopup::ServiceSupportPopup() {
+         process.setProgram("kylin-os-manager");
+         process.setArguments({"--jumpTab=JunkClean", "--pluginMessage=MaxDiskCapacity"});
+         process.startDetached();
+-        hide();
++        close();
+     });
+ 
+     auto *btn_hbox_layout = new QHBoxLayout;
+diff --git a/daemons/sessionservice/service_support_popup.h b/daemons/sessionservice/service_support_popup.h
+index 0041750..2f6d1ea 100644
+--- a/daemons/sessionservice/service_support_popup.h
++++ b/daemons/sessionservice/service_support_popup.h
+@@ -6,7 +6,7 @@
+ class ServiceSupportPopup: public kdk::KWidget {
+     Q_OBJECT
+ public:
+-    ServiceSupportPopup();
++    ServiceSupportPopup(QWidget *parent = nullptr);
+     ~ServiceSupportPopup();
+ };
+ 
+diff --git a/daemons/sessionservice/sessionclient.cpp b/daemons/sessionservice/sessionclient.cpp
+index c8e493b..bd5e524 100644
+--- a/daemons/sessionservice/sessionclient.cpp
++++ b/daemons/sessionservice/sessionclient.cpp
+@@ -12,7 +12,10 @@
+ #include "../service/dbus_args.h"
+ 
+ #define SECURITY_LIB "/usr/lib/kysdk/kysdk-security/libkyprocesssec.so"
++#define LOG_SIZE_EXCEPTION_POPUP_CONFIG_FILE_NAME "log_size_exception_popup.conf"
++#define DISK_SPACE_FULL_POPUP_CONFIG_FILE_NAME "disk_space_full_popup.conf"
+ typedef int (*func)(const char *filepath);
++
+ SessionClient::SessionClient(QObject *parent)
+     : QObject(parent)
+ {
+@@ -301,129 +304,190 @@ void SessionClient::on_RunGlobalFeedback(int mode, QString error_code, QString e
+ }
+ 
+ void SessionClient::on_NotifyPopupLogFileSizeToplimit() {
+-    auto message = QDBusMessage::createMethodCall("org.freedesktop.Notifications",
+-                                                  "/org/freedesktop/Notifications",
+-                                                  "org.freedesktop.Notifications",
+-                                                  "Notify");
+-    QList<QVariant> args;
+-    args.push_back(tr("Kylin Os Manager"));
+-    args.push_back((quint32)0);
+-    args.push_back("kylin-os-manager");
+-    args.push_back(tr("Kylin Os Manager"));
+-    args.push_back(tr("Abnormal writing of terminal log, please contact the administrator"));
+-    QStringList actions;
+-    actions.push_back("kylin-os-manager-junk-clean-one-click-clean");
+-    actions.push_back("One click cleaning");
+-    args.push_back(actions);
+-    args.push_back(QMap<QString, QVariant>());
+-    args.push_back((qint32)-1);
+-    message.setArguments(args);
+-
+-    auto pending = QDBusConnection::sessionBus().asyncCall(message);
+-    auto *watcher = new QDBusPendingCallWatcher(pending);
+-    connect(watcher, &QDBusPendingCallWatcher::finished, this, [](QDBusPendingCallWatcher *watcher) {
+-        watcher->deleteLater();
+-
+-        if (watcher->isError() || !watcher->isValid()) {
+-            qCritical() << "Log file exception popup window fail: interface call fail.";
+-            return;
++    bool more_than_three{false};
++    do {
++        QFile file("/etc/kylin-os-manager/size_exception_files.conf");
++        if (!file.open(QIODevice::ReadOnly)) {
++            qCritical() << "Log file size toplimit open conf file fail";
++            break;
+         }
+-        QDBusPendingReply<quint32> reply = *watcher;
+-        if (reply.isError() || !reply.isValid()) {
+-            qCritical() << "Log file exception popup window fail: get interface return value fail.";
+-            return;
++        const auto data = file.readAll();
++        file.close();
++
++        // 反序列化
++        const auto doc = QJsonDocument::fromJson(data);
++        if (doc.isNull()) {
++            qCritical() << "Log file size toplimit unmarshal fail";
++            break;
+         }
+-        if (reply.count() <= 0) {
+-            qCritical() << "Log file exception popup window fail: interface return value count error.";
+-            return;
++        if (!doc.isObject()) {
++            qCritical() << "Log file size toplimit json format error";
++            break;
+         }
+ 
+-        auto id = reply.argumentAt<0>();
+-        qInfo() << "Popup log file exception notify window(id = " << id << ")";
+-    });
+-}
++        // 获取异常次数
++        const auto root = doc.object();
++        if (!root.contains("exception_count")) {
++            qCritical() << "Log file size toplimit exception_count field miss";
++            break;
++        }
++        const auto exception_count = root.value("exception_count").toInt();
++        exception_count > 3? more_than_three = true: more_than_three = false;
++    } while (0);
+ 
+-void SessionClient::on_NotifyPopupLogFileException() {
+-    auto message = QDBusMessage::createMethodCall("org.freedesktop.Notifications",
+-                                                  "/org/freedesktop/Notifications",
+-                                                  "org.freedesktop.Notifications",
+-                                                  "Notify");
+-    QList<QVariant> args;
+-    args.push_back(tr("Kylin Os Manager"));
+-    args.push_back((quint32)0);
+-    args.push_back("kylin-os-manager");
+-    args.push_back(tr("Kylin Os Manager"));
+-    args.push_back(tr("Detected system abnormality, please contact the technical service immediately or call 400!"));
+-    args.push_back(QStringList());
+-    args.push_back(QMap<QString, QVariant>());
+-    args.push_back((qint32)-1);
+-    message.setArguments(args);
++    if (!more_than_three) {
++        // 小于等于 3 次弹气泡弹窗
++        auto message = QDBusMessage::createMethodCall("org.freedesktop.Notifications",
++                                                      "/org/freedesktop/Notifications",
++                                                      "org.freedesktop.Notifications",
++                                                      "Notify");
++        QList<QVariant> args;
++        args.push_back(tr("Kylin Os Manager"));
++        args.push_back((quint32)0);
++        args.push_back("kylin-os-manager");
++        args.push_back(tr("Kylin Os Manager"));
++        args.push_back(tr("Abnormal writing of terminal log, please contact the administrator"));
++        QStringList actions;
++        actions.push_back("kylin-os-manager-junk-clean-cancel");
++        actions.push_back(tr("Cancel"));
++        actions.push_back("kylin-os-manager-junk-clean-one-click-clean");
++        actions.push_back(tr("One click cleaning"));
++        args.push_back(actions);
++        args.push_back(QMap<QString, QVariant>());
++        args.push_back((qint32)-1);
++        message.setArguments(args);
+ 
+-    auto pending = QDBusConnection::sessionBus().asyncCall(message);
+-    auto *watcher = new QDBusPendingCallWatcher(pending);
+-    connect(watcher, &QDBusPendingCallWatcher::finished, this, [](QDBusPendingCallWatcher *watcher) {
+-        watcher->deleteLater();
++        auto pending = QDBusConnection::sessionBus().asyncCall(message);
++        auto *watcher = new QDBusPendingCallWatcher(pending);
++        connect(watcher, &QDBusPendingCallWatcher::finished, this, [](QDBusPendingCallWatcher *watcher) {
++            watcher->deleteLater();
+ 
+-        if (watcher->isError() || !watcher->isValid()) {
+-            qCritical() << "Log file exception popup window fail: interface call fail";
+-            return;
+-        }
+-        QDBusPendingReply<quint32> reply = *watcher;
+-        if (reply.isError() || !reply.isValid()) {
+-            qCritical() << "Log file exception popup window fail: get interface return value fail";
+-            return;
+-        }
+-        if (reply.count() <= 0) {
+-            qCritical() << "Log file exception popup window fail: interface return value count error";
+-            return;
++            if (watcher->isError() || !watcher->isValid()) {
++                qCritical() << "Log file exception popup window fail: interface call fail.";
++                return;
++            }
++            QDBusPendingReply<quint32> reply = *watcher;
++            if (reply.isError() || !reply.isValid()) {
++                qCritical() << "Log file exception popup window fail: get interface return value fail.";
++                return;
++            }
++            if (reply.count() <= 0) {
++                qCritical() << "Log file exception popup window fail: interface return value count error.";
++                return;
++            }
++
++            auto id = reply.argumentAt<0>();
++            qInfo() << "Popup log file exception notify window(id = " << id << ")";
++        });
++    } else {
++        // 大于 3 次弹独立弹窗
++        if (log_size_exception_popup_.isNull()) {
++            log_size_exception_popup_ = new DiskMonitorExceptionPopup(LOG_SIZE_EXCEPTION_POPUP_CONFIG_FILE_NAME);
++            log_size_exception_popup_->SetTitle(tr("There is an abnormal writing of logs in the system. Please go to Kylin Os Manager for cleaning!"));
++            log_size_exception_popup_->Show();
++        } else {
++            log_size_exception_popup_->Show();
+         }
++    }
++}
+ 
+-        auto id = reply.argumentAt<0>();
+-        qInfo() << "Popup log exception notify window(id = " << id << ")";
+-    });
++void SessionClient::on_NotifyPopupLogFileException() {
++    if (service_support_popup_.isNull()) {
++        service_support_popup_ = new ServiceSupportPopup;
++        service_support_popup_->show();
++    } else {
++        service_support_popup_->show();
++    }
+ }
+ 
+ void SessionClient::on_NotifyPopupDiskUsageRateToplimit() {
+-    auto message = QDBusMessage::createMethodCall("org.freedesktop.Notifications",
+-                                                  "/org/freedesktop/Notifications",
+-                                                  "org.freedesktop.Notifications",
+-                                                  "Notify");
+-    QList<QVariant> args;
+-    args.push_back(tr("Kylin Os Manager"));
+-    args.push_back((quint32)0);
+-    args.push_back("kylin-os-manager");
+-    args.push_back(tr("Kylin Os Manager"));
+-    args.push_back(tr("The avaliable disk space is less than 20%, please clean it up in a timely manner"));
+-    QStringList actions;
+-    actions.push_back("kylin-os-manager-junk-clean-one-click-clean");
+-    actions.push_back("One click cleaning");
+-    args.push_back(actions);
+-    args.push_back(QMap<QString, QVariant>());
+-    args.push_back((qint32)-1);
+-    message.setArguments(args);
+-
+-    auto pending = QDBusConnection::sessionBus().asyncCall(message);
+-    auto *watcher = new QDBusPendingCallWatcher(pending);
+-    connect(watcher, &QDBusPendingCallWatcher::finished, this, [](QDBusPendingCallWatcher *watcher) {
+-        watcher->deleteLater();
+-
+-        if (watcher->isError() || !watcher->isValid()) {
+-            qCritical() << "Disk usage rate toplimit popup window fail: interface call fail.";
+-            return;
++    // 判断是否大于 3 次
++    bool more_than_three{false};
++    do {
++        // 读取文件内容
++        QFile file("/etc/kylin-os-manager/disk_capacity_exception.conf");
++        if (!file.open(QIODevice::ReadOnly)) {
++            qCritical() << "Disk usage rate toplimit open config file fail";
++            break;
+         }
+-        QDBusPendingReply<quint32> reply = *watcher;
+-        if (reply.isError() || !reply.isValid()) {
+-            qCritical() << "Disk usage rate toplimit popup window fail: get interface return value fail.";
+-            return;
++        const auto data = file.readAll();
++        file.close();
++
++        // 反序列化
++        const auto doc = QJsonDocument::fromJson(data);
++        if (doc.isNull()) {
++            qCritical() << "Disk usage rate toplimit unmarshal fail";
++            break;
+         }
+-        if (reply.count() <= 0) {
+-            qCritical() << "Disk usage rate toplimit popup window fail: interface return value count error.";
+-            return;
++        if (!doc.isObject()) {
++            qCritical() << "Disk usage rate toplimit config file format error";
++            break;
+         }
+ 
+-        auto id = reply.argumentAt<0>();
+-        qInfo() << "Popup disk usage rate toplimit notify window(id = " << id << ")";
+-    });
++        const auto root = doc.object();
++        if (!root.contains("exception_count")) {
++            qCritical() << "Disk usage rate toplimit exception_count field miss";
++            break;
++        }
++
++        const auto exception_count = root.value("exception_count").toInt();
++        exception_count > 3? more_than_three = true: more_than_three = false;
++    } while (0);
++
++    if (!more_than_three) {
++        // 小于 3 次
++        auto message = QDBusMessage::createMethodCall("org.freedesktop.Notifications",
++                                                      "/org/freedesktop/Notifications",
++                                                      "org.freedesktop.Notifications",
++                                                      "Notify");
++        QList<QVariant> args;
++        args.push_back(tr("Kylin Os Manager"));
++        args.push_back((quint32)0);
++        args.push_back("kylin-os-manager");
++        args.push_back(tr("Kylin Os Manager"));
++        args.push_back(tr("The avaliable disk space is less than 20%, please clean it up in a timely manner"));
++        QStringList actions;
++        actions.push_back("kylin-os-manager-junk-clean-cancel");
++        actions.push_back(tr("Cancel"));
++        actions.push_back("kylin-os-manager-junk-clean-one-click-clean");
++        actions.push_back(tr("One click cleaning"));
++        args.push_back(actions);
++        args.push_back(QMap<QString, QVariant>());
++        args.push_back((qint32)-1);
++        message.setArguments(args);
++
++        auto pending = QDBusConnection::sessionBus().asyncCall(message);
++        auto *watcher = new QDBusPendingCallWatcher(pending);
++        connect(watcher, &QDBusPendingCallWatcher::finished, this, [](QDBusPendingCallWatcher *watcher) {
++            watcher->deleteLater();
++
++            if (watcher->isError() || !watcher->isValid()) {
++                qCritical() << "Disk usage rate toplimit popup window fail: interface call fail.";
++                return;
++            }
++            QDBusPendingReply<quint32> reply = *watcher;
++            if (reply.isError() || !reply.isValid()) {
++                qCritical() << "Disk usage rate toplimit popup window fail: get interface return value fail.";
++                return;
++            }
++            if (reply.count() <= 0) {
++                qCritical() << "Disk usage rate toplimit popup window fail: interface return value count error.";
++                return;
++            }
++
++            auto id = reply.argumentAt<0>();
++            qInfo() << "Popup disk usage rate toplimit notify window(id = " << id << ")";
++        });
++    } else {
++        // 大于 3 次
++        if (disk_space_full_popup_.isNull()) {
++            disk_space_full_popup_ = new DiskMonitorExceptionPopup(DISK_SPACE_FULL_POPUP_CONFIG_FILE_NAME);
++            disk_space_full_popup_->SetTitle(tr("The System disk space is tight, please go to Kylin Os Manager for cleaning!"));
++            disk_space_full_popup_->Show();
++        } else {
++            disk_space_full_popup_->Show();
++        }
++    }
+ }
+ void SessionClient::addWhiteToNetCtlFile()
+ {
+@@ -469,20 +533,20 @@ void SessionClient::addWhiteToNetCtlFile()
+     if (!toolDataDeletefile.exists()) {
+         if (!toolDataDeletefile.open(QIODevice::ReadWrite)) {
+             qDebug() << " open kom-rc.ini file error ";
+-        } 
++        }
+         toolDataDeletefile.close();
+     }
+-    
+-    if (!toolDatafile.exists()) {    
++
++    if (!toolDatafile.exists()) {
+         if (!toolDatafile.open(QIODevice::ReadWrite)) {
+             qDebug() << " open kom-rc.ini file error ";
+-        } 
++        }
+         toolDatafile.close();
+     }
+ 
+     addWhiteToKysecNetctl(toolDataPath);
+     addWhiteToKysecNetctl(toolDataPathDelete);
+-    
++
+     toolDatafile.remove();
+     toolDataDeletefile.remove();
+ }
+@@ -500,7 +564,7 @@ void SessionClient::addWhiteToKysecNetctl(QString filePath)
+ 
+         std::string str = filePath.toStdString();
+         const char * filePathChar = str.c_str();
+-        
++
+         qDebug() << " filePath : " << filePath;
+         qDebug() << " kom-rc-tool-data filePath : " << filePathChar;
+ 
+diff --git a/daemons/sessionservice/sessionclient.h b/daemons/sessionservice/sessionclient.h
+index ce84d1c..7b9adf8 100644
+--- a/daemons/sessionservice/sessionclient.h
++++ b/daemons/sessionservice/sessionclient.h
+@@ -9,7 +9,10 @@
+ #include <QtDBus/QDBusReply>
+ #include <QProcess>
+ #include <QString>
++#include <QPointer>
+ #include "driverinstall/aptinstaller.h"
++#include "service_support_popup.h"
++#include "disk_monitor_exception_popup.h"
+ 
+ class SessionClient: public QObject {
+     Q_OBJECT
+@@ -26,6 +29,9 @@ private:
+     QString m_driverSize;
+     AptInstaller *m_installer = nullptr;
+     QString oninstall = "";
++    QPointer<DiskMonitorExceptionPopup> log_size_exception_popup_;
++    QPointer<DiskMonitorExceptionPopup> disk_space_full_popup_;
++    QPointer<ServiceSupportPopup> service_support_popup_;
+ 
+     void initHotplugClient();
+ 
+@@ -48,8 +54,8 @@ private Q_SLOTS:
+     void on_NotifyPopupLogFileSizeToplimit();
+     void on_NotifyPopupDiskUsageRateToplimit();
+     void on_NotifyPopupLogFileException();
+-    void addWhiteToNetCtlFile(); /* 添加白名单 */ 
+-    void addWhiteToKysecNetctl(QString filePath); /* 添加白名单 */ 
++    void addWhiteToNetCtlFile(); /* 添加白名单 */
++    void addWhiteToKysecNetctl(QString filePath); /* 添加白名单 */
+ };
+ 
+ #endif
+diff --git a/daemons/sessionservice/sessionservice-config.desktop b/daemons/sessionservice/sessionservice-config.desktop
+index 84c3997..f4a17c7 100644
+--- a/daemons/sessionservice/sessionservice-config.desktop
++++ b/daemons/sessionservice/sessionservice-config.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Name=kylin-os-manager-session-service
+-Exec=/usr/share/kylin-os-manager/kylin-os-manager-session-service/kylin-os-manager-session-service
++Exec=/usr/lib/kylin-os-manager/bin/kylin-os-manager-session-service
+ Terminal=false
+ Type=Application
+ NoDisplay=true
+diff --git a/daemons/sessionservice/translations/kylin-os-manager-session-service_bo_CN.ts b/daemons/sessionservice/translations/kylin-os-manager-session-service_bo_CN.ts
+index d4f1036..e3c69aa 100644
+--- a/daemons/sessionservice/translations/kylin-os-manager-session-service_bo_CN.ts
++++ b/daemons/sessionservice/translations/kylin-os-manager-session-service_bo_CN.ts
+@@ -1,6 +1,29 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+ <TS version="2.1" language="bo_CN">
++<context>
++    <name>DiskMonitorExceptionPopup</name>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="25"/>
++        <source>Kylin Os Manager</source>
++        <translation type="unfinished">ཅི་ལིན་ཨའོ་སི་ཅིང་ལི་</translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="54"/>
++        <source>Not prompted within 3 days</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="66"/>
++        <source>Cache</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="73"/>
++        <source>Clean up immediately</source>
++        <translation type="unfinished"></translation>
++    </message>
++</context>
+ <context>
+     <name>QObject</name>
+     <message>
+@@ -12,122 +35,137 @@
+ <context>
+     <name>ServiceSupportPopup</name>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="16"/>
++        <location filename="../service_support_popup.cpp" line="22"/>
+         <source>Kylin Os Manager</source>
+         <translation type="unfinished">ཅི་ལིན་ཨའོ་སི་ཅིང་ལི་</translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="33"/>
++        <location filename="../service_support_popup.cpp" line="40"/>
+         <source>Detected system abnormality, please contact the technical service immediately or call 400!</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="50"/>
++        <location filename="../service_support_popup.cpp" line="57"/>
+         <source>Or contact us</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="54"/>
++        <location filename="../service_support_popup.cpp" line="61"/>
+         <source>Telephone</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="60"/>
++        <location filename="../service_support_popup.cpp" line="67"/>
+         <source>Mail</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="82"/>
++        <location filename="../service_support_popup.cpp" line="89"/>
+         <source>For common questions, please refer to</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="85"/>
++        <location filename="../service_support_popup.cpp" line="92"/>
+         <source>KylinOs offical website</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="126"/>
+-        <source>Cache</source>
++        <location filename="../service_support_popup.cpp" line="133"/>
++        <source>Cancel</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="133"/>
++        <location filename="../service_support_popup.cpp" line="140"/>
+         <source>Clean</source>
+         <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+     <name>SessionClient</name>
+-    <message>
+-        <location filename="../sessionclient.cpp" line="115"/>
+-        <location filename="../sessionclient.cpp" line="164"/>
+-        <location filename="../sessionclient.cpp" line="210"/>
+-        <location filename="../sessionclient.cpp" line="264"/>
+-        <location filename="../sessionclient.cpp" line="309"/>
+-        <location filename="../sessionclient.cpp" line="312"/>
+-        <location filename="../sessionclient.cpp" line="352"/>
+-        <location filename="../sessionclient.cpp" line="355"/>
+-        <location filename="../sessionclient.cpp" line="392"/>
+-        <location filename="../sessionclient.cpp" line="395"/>
+-        <source>Kylin Os Manager</source>
+-        <translation>ཅི་ལིན་ཨའོ་སི་ཅིང་ལི་</translation>
+-    </message>
+     <message>
+         <location filename="../sessionclient.cpp" line="118"/>
+         <location filename="../sessionclient.cpp" line="167"/>
+         <location filename="../sessionclient.cpp" line="213"/>
+         <location filename="../sessionclient.cpp" line="267"/>
++        <location filename="../sessionclient.cpp" line="345"/>
++        <location filename="../sessionclient.cpp" line="348"/>
++        <location filename="../sessionclient.cpp" line="444"/>
++        <location filename="../sessionclient.cpp" line="447"/>
++        <source>Kylin Os Manager</source>
++        <translation>ཅི་ལིན་ཨའོ་སི་ཅིང་ལི་</translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="121"/>
++        <location filename="../sessionclient.cpp" line="170"/>
++        <location filename="../sessionclient.cpp" line="216"/>
++        <location filename="../sessionclient.cpp" line="270"/>
+         <source>Device Manager</source>
+         <translation>སྒྲིག་ཆས་དོ་དམ་ཆས།</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="119"/>
++        <location filename="../sessionclient.cpp" line="122"/>
+         <source>The system detects that a new device has an installable driver. Do you want to install?</source>
+         <translation>མ་ལག་གིས་སྒྲིག་ཆས་གསར་བ་ལ་སྒྲིག་སྦྱོར་བྱེད་ཆོག་པའི་སྐུལ་སྒུལ་གོ་རིམ་ཞིག་ཡོད་པ་ཞིབ་བཤེར་བྱས། ཁྱོད་ཀྱིས་སྒྲིག་སྦྱོར་བྱེད་དམ།</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="120"/>
++        <location filename="../sessionclient.cpp" line="123"/>
+         <source>Close</source>
+         <translation>སྒོ་རྒྱག་པ་</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="120"/>
++        <location filename="../sessionclient.cpp" line="123"/>
+         <source>Install</source>
+         <translation>སྒྲིག་སྦྱོར་བྱེད་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="168"/>
++        <location filename="../sessionclient.cpp" line="171"/>
+         <source>Start installing the corresponding driver</source>
+         <translation>དེ་དང་བསྟུན་པའི་སྐུལ་སྒུལ་གོ་རིམ་སྒྲིག་སྦྱོར་བྱེད་འགོ་བརྩམས་།</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="214"/>
++        <location filename="../sessionclient.cpp" line="217"/>
+         <source>Driver Installed</source>
+         <translation>སྐུལ་སྒུལ་གོ་རིམ་སྒྲིག་སྦྱོར་བྱས་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="216"/>
++        <location filename="../sessionclient.cpp" line="219"/>
+         <source>Open Scanner</source>
+         <translation>ཕྱེ་འདེབས།བཤར་འབེབས་ཆས།</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="268"/>
++        <location filename="../sessionclient.cpp" line="271"/>
+         <source>Driver install failed.</source>
+         <translation>ཕྱེ་འདེབས།བཤར་འབེབས་ཆས།</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="313"/>
++        <location filename="../sessionclient.cpp" line="349"/>
+         <source>Abnormal writing of terminal log, please contact the administrator</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="356"/>
+-        <source>Detected system abnormality, please contact the technical service immediately or call 400!</source>
++        <location filename="../sessionclient.cpp" line="352"/>
++        <location filename="../sessionclient.cpp" line="451"/>
++        <source>Cancel</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="354"/>
++        <location filename="../sessionclient.cpp" line="453"/>
++        <source>One click cleaning</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="386"/>
++        <source>There is an abnormal writing of logs in the system. Please go to Kylin Os Manager for cleaning!</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="485"/>
++        <source>The System disk space is tight, please go to Kylin Os Manager for cleaning!</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="396"/>
++        <location filename="../sessionclient.cpp" line="448"/>
+         <source>The avaliable disk space is less than 20%, please clean it up in a timely manner</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/daemons/sessionservice/translations/kylin-os-manager-session-service_kk.ts b/daemons/sessionservice/translations/kylin-os-manager-session-service_kk.ts
+index 8e0c123..b05f7d5 100644
+--- a/daemons/sessionservice/translations/kylin-os-manager-session-service_kk.ts
++++ b/daemons/sessionservice/translations/kylin-os-manager-session-service_kk.ts
+@@ -1,6 +1,29 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+ <TS version="2.1" language="kk_KZ">
++<context>
++    <name>DiskMonitorExceptionPopup</name>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="25"/>
++        <source>Kylin Os Manager</source>
++        <translation type="unfinished">Kylin Os باسقارۋشٸسٸ</translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="54"/>
++        <source>Not prompted within 3 days</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="66"/>
++        <source>Cache</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="73"/>
++        <source>Clean up immediately</source>
++        <translation type="unfinished"></translation>
++    </message>
++</context>
+ <context>
+     <name>QObject</name>
+     <message>
+@@ -12,122 +35,137 @@
+ <context>
+     <name>ServiceSupportPopup</name>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="16"/>
++        <location filename="../service_support_popup.cpp" line="22"/>
+         <source>Kylin Os Manager</source>
+         <translation type="unfinished">Kylin Os باسقارۋشٸسٸ</translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="33"/>
++        <location filename="../service_support_popup.cpp" line="40"/>
+         <source>Detected system abnormality, please contact the technical service immediately or call 400!</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="50"/>
++        <location filename="../service_support_popup.cpp" line="57"/>
+         <source>Or contact us</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="54"/>
++        <location filename="../service_support_popup.cpp" line="61"/>
+         <source>Telephone</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="60"/>
++        <location filename="../service_support_popup.cpp" line="67"/>
+         <source>Mail</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="82"/>
++        <location filename="../service_support_popup.cpp" line="89"/>
+         <source>For common questions, please refer to</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="85"/>
++        <location filename="../service_support_popup.cpp" line="92"/>
+         <source>KylinOs offical website</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="126"/>
+-        <source>Cache</source>
++        <location filename="../service_support_popup.cpp" line="133"/>
++        <source>Cancel</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="133"/>
++        <location filename="../service_support_popup.cpp" line="140"/>
+         <source>Clean</source>
+         <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+     <name>SessionClient</name>
+-    <message>
+-        <location filename="../sessionclient.cpp" line="115"/>
+-        <location filename="../sessionclient.cpp" line="164"/>
+-        <location filename="../sessionclient.cpp" line="210"/>
+-        <location filename="../sessionclient.cpp" line="264"/>
+-        <location filename="../sessionclient.cpp" line="309"/>
+-        <location filename="../sessionclient.cpp" line="312"/>
+-        <location filename="../sessionclient.cpp" line="352"/>
+-        <location filename="../sessionclient.cpp" line="355"/>
+-        <location filename="../sessionclient.cpp" line="392"/>
+-        <location filename="../sessionclient.cpp" line="395"/>
+-        <source>Kylin Os Manager</source>
+-        <translation>Kylin Os باسقارۋشٸسٸ</translation>
+-    </message>
+     <message>
+         <location filename="../sessionclient.cpp" line="118"/>
+         <location filename="../sessionclient.cpp" line="167"/>
+         <location filename="../sessionclient.cpp" line="213"/>
+         <location filename="../sessionclient.cpp" line="267"/>
++        <location filename="../sessionclient.cpp" line="345"/>
++        <location filename="../sessionclient.cpp" line="348"/>
++        <location filename="../sessionclient.cpp" line="444"/>
++        <location filename="../sessionclient.cpp" line="447"/>
++        <source>Kylin Os Manager</source>
++        <translation>Kylin Os باسقارۋشٸسٸ</translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="121"/>
++        <location filename="../sessionclient.cpp" line="170"/>
++        <location filename="../sessionclient.cpp" line="216"/>
++        <location filename="../sessionclient.cpp" line="270"/>
+         <source>Device Manager</source>
+         <translation>اسباب باسقارۋشى</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="119"/>
++        <location filename="../sessionclient.cpp" line="122"/>
+         <source>The system detects that a new device has an installable driver. Do you want to install?</source>
+         <translation>سەستيما جاڭا اسبابٸتٸڭ تۇسىرۋگە بولاتٸن شوپۇرى بارلٸعٸن بايقادٸ. قاچىلىغۇڭىز بارما؟</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="120"/>
++        <location filename="../sessionclient.cpp" line="123"/>
+         <source>Close</source>
+         <translation>تاقاۋ</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="120"/>
++        <location filename="../sessionclient.cpp" line="123"/>
+         <source>Install</source>
+         <translation>تۇسىرۋ</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="168"/>
++        <location filename="../sessionclient.cpp" line="171"/>
+         <source>Start installing the corresponding driver</source>
+         <translation>ۇيلەسىمدى شوپەر تۇسىرۋدى باستا</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="214"/>
++        <location filename="../sessionclient.cpp" line="217"/>
+         <source>Driver Installed</source>
+         <translation>اسباب تۇسىرىلدى</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="216"/>
++        <location filename="../sessionclient.cpp" line="219"/>
+         <source>Open Scanner</source>
+         <translation>جايمالاۋىشنى ٸشٸۋ</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="268"/>
++        <location filename="../sessionclient.cpp" line="271"/>
+         <source>Driver install failed.</source>
+         <translation>شوپەر تۇسىرۋ جەڭىلىپ قالدى.</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="313"/>
++        <location filename="../sessionclient.cpp" line="349"/>
+         <source>Abnormal writing of terminal log, please contact the administrator</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="356"/>
+-        <source>Detected system abnormality, please contact the technical service immediately or call 400!</source>
++        <location filename="../sessionclient.cpp" line="352"/>
++        <location filename="../sessionclient.cpp" line="451"/>
++        <source>Cancel</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="354"/>
++        <location filename="../sessionclient.cpp" line="453"/>
++        <source>One click cleaning</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="386"/>
++        <source>There is an abnormal writing of logs in the system. Please go to Kylin Os Manager for cleaning!</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="485"/>
++        <source>The System disk space is tight, please go to Kylin Os Manager for cleaning!</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="396"/>
++        <location filename="../sessionclient.cpp" line="448"/>
+         <source>The avaliable disk space is less than 20%, please clean it up in a timely manner</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/daemons/sessionservice/translations/kylin-os-manager-session-service_ky.ts b/daemons/sessionservice/translations/kylin-os-manager-session-service_ky.ts
+index bd6158c..aba4e4c 100644
+--- a/daemons/sessionservice/translations/kylin-os-manager-session-service_ky.ts
++++ b/daemons/sessionservice/translations/kylin-os-manager-session-service_ky.ts
+@@ -1,6 +1,29 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+ <TS version="2.1" language="ky_KG">
++<context>
++    <name>DiskMonitorExceptionPopup</name>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="25"/>
++        <source>Kylin Os Manager</source>
++        <translation type="unfinished">Kylin Os باشقارۇۇچۇسۇ</translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="54"/>
++        <source>Not prompted within 3 days</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="66"/>
++        <source>Cache</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="73"/>
++        <source>Clean up immediately</source>
++        <translation type="unfinished"></translation>
++    </message>
++</context>
+ <context>
+     <name>QObject</name>
+     <message>
+@@ -12,122 +35,137 @@
+ <context>
+     <name>ServiceSupportPopup</name>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="16"/>
++        <location filename="../service_support_popup.cpp" line="22"/>
+         <source>Kylin Os Manager</source>
+         <translation type="unfinished">Kylin Os باشقارۇۇچۇسۇ</translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="33"/>
++        <location filename="../service_support_popup.cpp" line="40"/>
+         <source>Detected system abnormality, please contact the technical service immediately or call 400!</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="50"/>
++        <location filename="../service_support_popup.cpp" line="57"/>
+         <source>Or contact us</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="54"/>
++        <location filename="../service_support_popup.cpp" line="61"/>
+         <source>Telephone</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="60"/>
++        <location filename="../service_support_popup.cpp" line="67"/>
+         <source>Mail</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="82"/>
++        <location filename="../service_support_popup.cpp" line="89"/>
+         <source>For common questions, please refer to</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="85"/>
++        <location filename="../service_support_popup.cpp" line="92"/>
+         <source>KylinOs offical website</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="126"/>
+-        <source>Cache</source>
++        <location filename="../service_support_popup.cpp" line="133"/>
++        <source>Cancel</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="133"/>
++        <location filename="../service_support_popup.cpp" line="140"/>
+         <source>Clean</source>
+         <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+     <name>SessionClient</name>
+-    <message>
+-        <location filename="../sessionclient.cpp" line="115"/>
+-        <location filename="../sessionclient.cpp" line="164"/>
+-        <location filename="../sessionclient.cpp" line="210"/>
+-        <location filename="../sessionclient.cpp" line="264"/>
+-        <location filename="../sessionclient.cpp" line="309"/>
+-        <location filename="../sessionclient.cpp" line="312"/>
+-        <location filename="../sessionclient.cpp" line="352"/>
+-        <location filename="../sessionclient.cpp" line="355"/>
+-        <location filename="../sessionclient.cpp" line="392"/>
+-        <location filename="../sessionclient.cpp" line="395"/>
+-        <source>Kylin Os Manager</source>
+-        <translation>Kylin Os باشقارۇۇچۇسۇ</translation>
+-    </message>
+     <message>
+         <location filename="../sessionclient.cpp" line="118"/>
+         <location filename="../sessionclient.cpp" line="167"/>
+         <location filename="../sessionclient.cpp" line="213"/>
+         <location filename="../sessionclient.cpp" line="267"/>
++        <location filename="../sessionclient.cpp" line="345"/>
++        <location filename="../sessionclient.cpp" line="348"/>
++        <location filename="../sessionclient.cpp" line="444"/>
++        <location filename="../sessionclient.cpp" line="447"/>
++        <source>Kylin Os Manager</source>
++        <translation>Kylin Os باشقارۇۇچۇسۇ</translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="121"/>
++        <location filename="../sessionclient.cpp" line="170"/>
++        <location filename="../sessionclient.cpp" line="216"/>
++        <location filename="../sessionclient.cpp" line="270"/>
+         <source>Device Manager</source>
+         <translation>شايمان باشقارعىچ</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="119"/>
++        <location filename="../sessionclient.cpp" line="122"/>
+         <source>The system detects that a new device has an installable driver. Do you want to install?</source>
+         <translation>ساامالىق  جاڭى  جابدۇۇسۇنۇن ورنوتۇۇعا  بولوتۇرعان شوپۇرى باردىعىن بايقادى. قاچىلىغۇڭىز باربى؟</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="120"/>
++        <location filename="../sessionclient.cpp" line="123"/>
+         <source>Close</source>
+         <translation>بەكىتىش</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="120"/>
++        <location filename="../sessionclient.cpp" line="123"/>
+         <source>Install</source>
+         <translation>قاچالوو</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="168"/>
++        <location filename="../sessionclient.cpp" line="171"/>
+         <source>Start installing the corresponding driver</source>
+         <translation>دال  ،ىلايىق  شوپۇر قاچالوونۇ باشتاڭ</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="214"/>
++        <location filename="../sessionclient.cpp" line="217"/>
+         <source>Driver Installed</source>
+         <translation>شايمان قاچالاندى</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="216"/>
++        <location filename="../sessionclient.cpp" line="219"/>
+         <source>Open Scanner</source>
+         <translation>ىسكانىردى اچۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="268"/>
++        <location filename="../sessionclient.cpp" line="271"/>
+         <source>Driver install failed.</source>
+         <translation>شوپۇر قاچالوو جەڭىلۉۉ بولدۇ .</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="313"/>
++        <location filename="../sessionclient.cpp" line="349"/>
+         <source>Abnormal writing of terminal log, please contact the administrator</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="356"/>
+-        <source>Detected system abnormality, please contact the technical service immediately or call 400!</source>
++        <location filename="../sessionclient.cpp" line="352"/>
++        <location filename="../sessionclient.cpp" line="451"/>
++        <source>Cancel</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="354"/>
++        <location filename="../sessionclient.cpp" line="453"/>
++        <source>One click cleaning</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="386"/>
++        <source>There is an abnormal writing of logs in the system. Please go to Kylin Os Manager for cleaning!</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="485"/>
++        <source>The System disk space is tight, please go to Kylin Os Manager for cleaning!</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="396"/>
++        <location filename="../sessionclient.cpp" line="448"/>
+         <source>The avaliable disk space is less than 20%, please clean it up in a timely manner</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/daemons/sessionservice/translations/kylin-os-manager-session-service_mn.ts b/daemons/sessionservice/translations/kylin-os-manager-session-service_mn.ts
+index e1f2a6a..add391b 100644
+--- a/daemons/sessionservice/translations/kylin-os-manager-session-service_mn.ts
++++ b/daemons/sessionservice/translations/kylin-os-manager-session-service_mn.ts
+@@ -1,6 +1,29 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+ <TS version="2.1" language="mn_MN">
++<context>
++    <name>DiskMonitorExceptionPopup</name>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="25"/>
++        <source>Kylin Os Manager</source>
++        <translation type="unfinished">ᠾᠦ ᠯᠢᠨ Os ᠳᠠᠭᠠᠭᠠᠮᠠᠯ ᠃</translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="54"/>
++        <source>Not prompted within 3 days</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="66"/>
++        <source>Cache</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="73"/>
++        <source>Clean up immediately</source>
++        <translation type="unfinished"></translation>
++    </message>
++</context>
+ <context>
+     <name>QObject</name>
+     <message>
+@@ -12,122 +35,137 @@
+ <context>
+     <name>ServiceSupportPopup</name>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="16"/>
++        <location filename="../service_support_popup.cpp" line="22"/>
+         <source>Kylin Os Manager</source>
+         <translation type="unfinished">ᠾᠦ ᠯᠢᠨ Os ᠳᠠᠭᠠᠭᠠᠮᠠᠯ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="33"/>
++        <location filename="../service_support_popup.cpp" line="40"/>
+         <source>Detected system abnormality, please contact the technical service immediately or call 400!</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="50"/>
++        <location filename="../service_support_popup.cpp" line="57"/>
+         <source>Or contact us</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="54"/>
++        <location filename="../service_support_popup.cpp" line="61"/>
+         <source>Telephone</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="60"/>
++        <location filename="../service_support_popup.cpp" line="67"/>
+         <source>Mail</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="82"/>
++        <location filename="../service_support_popup.cpp" line="89"/>
+         <source>For common questions, please refer to</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="85"/>
++        <location filename="../service_support_popup.cpp" line="92"/>
+         <source>KylinOs offical website</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="126"/>
+-        <source>Cache</source>
++        <location filename="../service_support_popup.cpp" line="133"/>
++        <source>Cancel</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="133"/>
++        <location filename="../service_support_popup.cpp" line="140"/>
+         <source>Clean</source>
+         <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+     <name>SessionClient</name>
+-    <message>
+-        <location filename="../sessionclient.cpp" line="115"/>
+-        <location filename="../sessionclient.cpp" line="164"/>
+-        <location filename="../sessionclient.cpp" line="210"/>
+-        <location filename="../sessionclient.cpp" line="264"/>
+-        <location filename="../sessionclient.cpp" line="309"/>
+-        <location filename="../sessionclient.cpp" line="312"/>
+-        <location filename="../sessionclient.cpp" line="352"/>
+-        <location filename="../sessionclient.cpp" line="355"/>
+-        <location filename="../sessionclient.cpp" line="392"/>
+-        <location filename="../sessionclient.cpp" line="395"/>
+-        <source>Kylin Os Manager</source>
+-        <translation>ᠾᠦ ᠯᠢᠨ Os ᠳᠠᠭᠠᠭᠠᠮᠠᠯ ᠃</translation>
+-    </message>
+     <message>
+         <location filename="../sessionclient.cpp" line="118"/>
+         <location filename="../sessionclient.cpp" line="167"/>
+         <location filename="../sessionclient.cpp" line="213"/>
+         <location filename="../sessionclient.cpp" line="267"/>
++        <location filename="../sessionclient.cpp" line="345"/>
++        <location filename="../sessionclient.cpp" line="348"/>
++        <location filename="../sessionclient.cpp" line="444"/>
++        <location filename="../sessionclient.cpp" line="447"/>
++        <source>Kylin Os Manager</source>
++        <translation>ᠾᠦ ᠯᠢᠨ Os ᠳᠠᠭᠠᠭᠠᠮᠠᠯ ᠃</translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="121"/>
++        <location filename="../sessionclient.cpp" line="170"/>
++        <location filename="../sessionclient.cpp" line="216"/>
++        <location filename="../sessionclient.cpp" line="270"/>
+         <source>Device Manager</source>
+         <translation>ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠶᠢᠨ ᠬᠠᠮᠢᠶᠠᠷᠤᠯᠲᠠ ᠶᠢᠨ ᠪᠠᠭᠠᠵᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="119"/>
++        <location filename="../sessionclient.cpp" line="122"/>
+         <source>The system detects that a new device has an installable driver. Do you want to install?</source>
+         <translation>ᠰᠢᠰᠲ᠋ᠧᠮ ᠦᠨ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠰᠢᠯᠭᠠᠵᠤ ᠣᠯᠪᠠᠯ ᠰᠢᠨ᠎ᠡ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠤᠭᠰᠠᠷᠠᠵᠤ ᠪᠣᠯᠬᠤ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷᠲᠦ ᠫᠷᠤᠭ᠍ᠷᠠᠮ ᠲᠠᠶ ᠪᠠᠶᠢᠬᠤ ᠶᠢ ᠰᠢᠰᠲ᠋ᠧᠮ ᠲᠡᠶ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠰᠢᠯᠭᠠᠨ᠎ᠠ ᠃ ᠤᠭᠰᠠᠷᠠᠬᠤ ᠤᠤ ?</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="120"/>
++        <location filename="../sessionclient.cpp" line="123"/>
+         <source>Close</source>
+         <translation>ᠬᠠᠭᠠᠬᠤ</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="120"/>
++        <location filename="../sessionclient.cpp" line="123"/>
+         <source>Install</source>
+         <translation>ᠤᠭᠰᠠᠷᠠᠬᠤ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="168"/>
++        <location filename="../sessionclient.cpp" line="171"/>
+         <source>Start installing the corresponding driver</source>
+         <translation>ᠵᠣᠬᠢᠴᠠᠩᠭᠤᠶ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠪᠣᠯᠭᠠᠬᠤ ᠫᠷᠤᠭ᠍ᠷᠠᠮ ᠤᠭᠰᠠᠷᠠᠵᠤ ᠡᠬᠢᠯᠡᠵᠡᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="214"/>
++        <location filename="../sessionclient.cpp" line="217"/>
+         <source>Driver Installed</source>
+         <translation>ᠬᠦᠳᠡᠯᠭᠡᠭᠦᠷ ᠦᠨ ᠫᠷᠦᠭᠷᠠᠮ ᠢ ᠨᠢᠭᠡᠨᠲᠡ ᠤᠭᠰᠠᠷᠠᠵᠠᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="216"/>
++        <location filename="../sessionclient.cpp" line="219"/>
+         <source>Open Scanner</source>
+         <translation>ᠰᠢᠷᠪᠡᠯᠲᠡ ᠶᠢᠨ ᠪᠠᠭᠠᠵᠢ ᠶᠢ ᠨᠡᠭᠡᠭᠡᠨ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="268"/>
++        <location filename="../sessionclient.cpp" line="271"/>
+         <source>Driver install failed.</source>
+         <translation>ᠬᠦᠳᠡᠯᠭᠡᠭᠦᠷ ᠢᠯᠠᠭᠳᠠᠬᠤ ᠫᠷᠤᠭ᠍ᠷᠠᠮ ᠤᠭᠰᠠᠷᠠᠪᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="313"/>
++        <location filename="../sessionclient.cpp" line="349"/>
+         <source>Abnormal writing of terminal log, please contact the administrator</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="356"/>
+-        <source>Detected system abnormality, please contact the technical service immediately or call 400!</source>
++        <location filename="../sessionclient.cpp" line="352"/>
++        <location filename="../sessionclient.cpp" line="451"/>
++        <source>Cancel</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="354"/>
++        <location filename="../sessionclient.cpp" line="453"/>
++        <source>One click cleaning</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="386"/>
++        <source>There is an abnormal writing of logs in the system. Please go to Kylin Os Manager for cleaning!</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="485"/>
++        <source>The System disk space is tight, please go to Kylin Os Manager for cleaning!</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="396"/>
++        <location filename="../sessionclient.cpp" line="448"/>
+         <source>The avaliable disk space is less than 20%, please clean it up in a timely manner</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/daemons/sessionservice/translations/kylin-os-manager-session-service_ug.ts b/daemons/sessionservice/translations/kylin-os-manager-session-service_ug.ts
+index a1efc75..12d26fe 100644
+--- a/daemons/sessionservice/translations/kylin-os-manager-session-service_ug.ts
++++ b/daemons/sessionservice/translations/kylin-os-manager-session-service_ug.ts
+@@ -1,6 +1,29 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+ <TS version="2.1" language="ug_CN">
++<context>
++    <name>DiskMonitorExceptionPopup</name>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="25"/>
++        <source>Kylin Os Manager</source>
++        <translation type="unfinished">Kylin Os باشقۇرغۇچىسى</translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="54"/>
++        <source>Not prompted within 3 days</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="66"/>
++        <source>Cache</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="73"/>
++        <source>Clean up immediately</source>
++        <translation type="unfinished"></translation>
++    </message>
++</context>
+ <context>
+     <name>QObject</name>
+     <message>
+@@ -12,122 +35,137 @@
+ <context>
+     <name>ServiceSupportPopup</name>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="16"/>
++        <location filename="../service_support_popup.cpp" line="22"/>
+         <source>Kylin Os Manager</source>
+         <translation type="unfinished">Kylin Os باشقۇرغۇچىسى</translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="33"/>
++        <location filename="../service_support_popup.cpp" line="40"/>
+         <source>Detected system abnormality, please contact the technical service immediately or call 400!</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="50"/>
++        <location filename="../service_support_popup.cpp" line="57"/>
+         <source>Or contact us</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="54"/>
++        <location filename="../service_support_popup.cpp" line="61"/>
+         <source>Telephone</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="60"/>
++        <location filename="../service_support_popup.cpp" line="67"/>
+         <source>Mail</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="82"/>
++        <location filename="../service_support_popup.cpp" line="89"/>
+         <source>For common questions, please refer to</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="85"/>
++        <location filename="../service_support_popup.cpp" line="92"/>
+         <source>KylinOs offical website</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="126"/>
+-        <source>Cache</source>
++        <location filename="../service_support_popup.cpp" line="133"/>
++        <source>Cancel</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="133"/>
++        <location filename="../service_support_popup.cpp" line="140"/>
+         <source>Clean</source>
+         <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+     <name>SessionClient</name>
+-    <message>
+-        <location filename="../sessionclient.cpp" line="115"/>
+-        <location filename="../sessionclient.cpp" line="164"/>
+-        <location filename="../sessionclient.cpp" line="210"/>
+-        <location filename="../sessionclient.cpp" line="264"/>
+-        <location filename="../sessionclient.cpp" line="309"/>
+-        <location filename="../sessionclient.cpp" line="312"/>
+-        <location filename="../sessionclient.cpp" line="352"/>
+-        <location filename="../sessionclient.cpp" line="355"/>
+-        <location filename="../sessionclient.cpp" line="392"/>
+-        <location filename="../sessionclient.cpp" line="395"/>
+-        <source>Kylin Os Manager</source>
+-        <translation>Kylin Os باشقۇرغۇچىسى</translation>
+-    </message>
+     <message>
+         <location filename="../sessionclient.cpp" line="118"/>
+         <location filename="../sessionclient.cpp" line="167"/>
+         <location filename="../sessionclient.cpp" line="213"/>
+         <location filename="../sessionclient.cpp" line="267"/>
++        <location filename="../sessionclient.cpp" line="345"/>
++        <location filename="../sessionclient.cpp" line="348"/>
++        <location filename="../sessionclient.cpp" line="444"/>
++        <location filename="../sessionclient.cpp" line="447"/>
++        <source>Kylin Os Manager</source>
++        <translation>Kylin Os باشقۇرغۇچىسى</translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="121"/>
++        <location filename="../sessionclient.cpp" line="170"/>
++        <location filename="../sessionclient.cpp" line="216"/>
++        <location filename="../sessionclient.cpp" line="270"/>
+         <source>Device Manager</source>
+         <translation>ئۈسكۈنە باشقۇرغۇچ</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="119"/>
++        <location filename="../sessionclient.cpp" line="122"/>
+         <source>The system detects that a new device has an installable driver. Do you want to install?</source>
+         <translation>سىستېما يېڭى ئۈسكۈنىنىڭ قاچىلاشقا بولىدىغان شوپۇرى بارلىقىنى بايقىدى. قاچىلىغۇڭىز بارمۇ؟</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="120"/>
++        <location filename="../sessionclient.cpp" line="123"/>
+         <source>Close</source>
+         <translation>تاقاش</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="120"/>
++        <location filename="../sessionclient.cpp" line="123"/>
+         <source>Install</source>
+         <translation>قاچىلاش</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="168"/>
++        <location filename="../sessionclient.cpp" line="171"/>
+         <source>Start installing the corresponding driver</source>
+         <translation>مۇناسىپ شوپۇر قاچىلاشنى باشلاڭ</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="214"/>
++        <location filename="../sessionclient.cpp" line="217"/>
+         <source>Driver Installed</source>
+         <translation>ئۈسكۈنە قاچىلاندى</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="216"/>
++        <location filename="../sessionclient.cpp" line="219"/>
+         <source>Open Scanner</source>
+         <translation>سكاننېرنى ئېچىش</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="268"/>
++        <location filename="../sessionclient.cpp" line="271"/>
+         <source>Driver install failed.</source>
+         <translation>شوپۇر قاچىلاش مەغلۇپ بولدى.</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="313"/>
++        <location filename="../sessionclient.cpp" line="349"/>
+         <source>Abnormal writing of terminal log, please contact the administrator</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="356"/>
+-        <source>Detected system abnormality, please contact the technical service immediately or call 400!</source>
++        <location filename="../sessionclient.cpp" line="352"/>
++        <location filename="../sessionclient.cpp" line="451"/>
++        <source>Cancel</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="354"/>
++        <location filename="../sessionclient.cpp" line="453"/>
++        <source>One click cleaning</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="386"/>
++        <source>There is an abnormal writing of logs in the system. Please go to Kylin Os Manager for cleaning!</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="485"/>
++        <source>The System disk space is tight, please go to Kylin Os Manager for cleaning!</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="396"/>
++        <location filename="../sessionclient.cpp" line="448"/>
+         <source>The avaliable disk space is less than 20%, please clean it up in a timely manner</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/daemons/sessionservice/translations/kylin-os-manager-session-service_zh_CN.ts b/daemons/sessionservice/translations/kylin-os-manager-session-service_zh_CN.ts
+index 0c64c2e..08375f0 100644
+--- a/daemons/sessionservice/translations/kylin-os-manager-session-service_zh_CN.ts
++++ b/daemons/sessionservice/translations/kylin-os-manager-session-service_zh_CN.ts
+@@ -1,6 +1,29 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+ <TS version="2.1" language="zh_CN">
++<context>
++    <name>DiskMonitorExceptionPopup</name>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="25"/>
++        <source>Kylin Os Manager</source>
++        <translation>麒麟管家</translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="54"/>
++        <source>Not prompted within 3 days</source>
++        <translation>3天内不再弹出提示</translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="66"/>
++        <source>Cache</source>
++        <translation>取消</translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="73"/>
++        <source>Clean up immediately</source>
++        <translation>立即清理</translation>
++    </message>
++</context>
+ <context>
+     <name>QObject</name>
+     <message>
+@@ -12,122 +35,137 @@
+ <context>
+     <name>ServiceSupportPopup</name>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="16"/>
++        <location filename="../service_support_popup.cpp" line="22"/>
+         <source>Kylin Os Manager</source>
+         <translation>麒麟管家</translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="33"/>
++        <location filename="../service_support_popup.cpp" line="40"/>
+         <source>Detected system abnormality, please contact the technical service immediately or call 400!</source>
+         <translation>检测到系统异常,请立即联系技服或拨打400电话!</translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="50"/>
++        <location filename="../service_support_popup.cpp" line="57"/>
+         <source>Or contact us</source>
+         <translation>或联系我们</translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="54"/>
++        <location filename="../service_support_popup.cpp" line="61"/>
+         <source>Telephone</source>
+         <translation>电话</translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="60"/>
++        <location filename="../service_support_popup.cpp" line="67"/>
+         <source>Mail</source>
+         <translation>邮件</translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="82"/>
++        <location filename="../service_support_popup.cpp" line="89"/>
+         <source>For common questions, please refer to</source>
+         <translation>常见问题请见</translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="85"/>
++        <location filename="../service_support_popup.cpp" line="92"/>
+         <source>KylinOs offical website</source>
+         <translation>KylinOs 官网</translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="126"/>
+-        <source>Cache</source>
++        <location filename="../service_support_popup.cpp" line="133"/>
++        <source>Cancel</source>
+         <translation>取消</translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="133"/>
++        <location filename="../service_support_popup.cpp" line="140"/>
+         <source>Clean</source>
+         <translation>立即清理</translation>
+     </message>
+ </context>
+ <context>
+     <name>SessionClient</name>
+-    <message>
+-        <location filename="../sessionclient.cpp" line="115"/>
+-        <location filename="../sessionclient.cpp" line="164"/>
+-        <location filename="../sessionclient.cpp" line="210"/>
+-        <location filename="../sessionclient.cpp" line="264"/>
+-        <location filename="../sessionclient.cpp" line="309"/>
+-        <location filename="../sessionclient.cpp" line="312"/>
+-        <location filename="../sessionclient.cpp" line="352"/>
+-        <location filename="../sessionclient.cpp" line="355"/>
+-        <location filename="../sessionclient.cpp" line="392"/>
+-        <location filename="../sessionclient.cpp" line="395"/>
+-        <source>Kylin Os Manager</source>
+-        <translation>麒麟管家</translation>
+-    </message>
+     <message>
+         <location filename="../sessionclient.cpp" line="118"/>
+         <location filename="../sessionclient.cpp" line="167"/>
+         <location filename="../sessionclient.cpp" line="213"/>
+         <location filename="../sessionclient.cpp" line="267"/>
++        <location filename="../sessionclient.cpp" line="345"/>
++        <location filename="../sessionclient.cpp" line="348"/>
++        <location filename="../sessionclient.cpp" line="444"/>
++        <location filename="../sessionclient.cpp" line="447"/>
++        <source>Kylin Os Manager</source>
++        <translation>麒麟管家</translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="121"/>
++        <location filename="../sessionclient.cpp" line="170"/>
++        <location filename="../sessionclient.cpp" line="216"/>
++        <location filename="../sessionclient.cpp" line="270"/>
+         <source>Device Manager</source>
+         <translation>设备管理</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="119"/>
++        <location filename="../sessionclient.cpp" line="122"/>
+         <source>The system detects that a new device has an installable driver. Do you want to install?</source>
+         <translation>检测到新的可安装驱动设备,是否安装驱动?</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="120"/>
++        <location filename="../sessionclient.cpp" line="123"/>
+         <source>Close</source>
+         <translation>取消</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="120"/>
++        <location filename="../sessionclient.cpp" line="123"/>
+         <source>Install</source>
+         <translation>去安装</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="168"/>
++        <location filename="../sessionclient.cpp" line="171"/>
+         <source>Start installing the corresponding driver</source>
+         <translation>开始安装对应驱动</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="214"/>
++        <location filename="../sessionclient.cpp" line="217"/>
+         <source>Driver Installed</source>
+         <translation>驱动已安装</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="216"/>
++        <location filename="../sessionclient.cpp" line="219"/>
+         <source>Open Scanner</source>
+         <translation>打开扫描</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="268"/>
++        <location filename="../sessionclient.cpp" line="271"/>
+         <source>Driver install failed.</source>
+         <translation>驱动安装失败。</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="313"/>
++        <location filename="../sessionclient.cpp" line="349"/>
+         <source>Abnormal writing of terminal log, please contact the administrator</source>
+         <translation>终端日志异常写入,请联系管理员</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="356"/>
+-        <source>Detected system abnormality, please contact the technical service immediately or call 400!</source>
+-        <translation>检测到系统异常,请立即联系技服或拨打400电话!</translation>
++        <location filename="../sessionclient.cpp" line="352"/>
++        <location filename="../sessionclient.cpp" line="451"/>
++        <source>Cancel</source>
++        <translation>取消</translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="354"/>
++        <location filename="../sessionclient.cpp" line="453"/>
++        <source>One click cleaning</source>
++        <translation>清理</translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="386"/>
++        <source>There is an abnormal writing of logs in the system. Please go to Kylin Os Manager for cleaning!</source>
++        <translation>系统存在日志异常写入,请前往麒麟管家进行清理!</translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="485"/>
++        <source>The System disk space is tight, please go to Kylin Os Manager for cleaning!</source>
++        <translation>系统磁盘空间紧张,请前往麒麟管家进行清理!</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="396"/>
++        <location filename="../sessionclient.cpp" line="448"/>
+         <source>The avaliable disk space is less than 20%, please clean it up in a timely manner</source>
+         <translation>磁盘可用空间低于 20%,请及时清理</translation>
+     </message>
+diff --git a/daemons/sessionservice/translations/kylin-os-manager-session-service_zh_HK.ts b/daemons/sessionservice/translations/kylin-os-manager-session-service_zh_HK.ts
+index 945bb43..a0cab66 100644
+--- a/daemons/sessionservice/translations/kylin-os-manager-session-service_zh_HK.ts
++++ b/daemons/sessionservice/translations/kylin-os-manager-session-service_zh_HK.ts
+@@ -1,6 +1,29 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+ <TS version="2.1" language="zh_CN">
++<context>
++    <name>DiskMonitorExceptionPopup</name>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="25"/>
++        <source>Kylin Os Manager</source>
++        <translation type="unfinished">麒麟管家</translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="54"/>
++        <source>Not prompted within 3 days</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="66"/>
++        <source>Cache</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../disk_monitor_exception_popup.cpp" line="73"/>
++        <source>Clean up immediately</source>
++        <translation type="unfinished"></translation>
++    </message>
++</context>
+ <context>
+     <name>QObject</name>
+     <message>
+@@ -12,122 +35,137 @@
+ <context>
+     <name>ServiceSupportPopup</name>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="16"/>
++        <location filename="../service_support_popup.cpp" line="22"/>
+         <source>Kylin Os Manager</source>
+         <translation type="unfinished">麒麟管家</translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="33"/>
++        <location filename="../service_support_popup.cpp" line="40"/>
+         <source>Detected system abnormality, please contact the technical service immediately or call 400!</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="50"/>
++        <location filename="../service_support_popup.cpp" line="57"/>
+         <source>Or contact us</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="54"/>
++        <location filename="../service_support_popup.cpp" line="61"/>
+         <source>Telephone</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="60"/>
++        <location filename="../service_support_popup.cpp" line="67"/>
+         <source>Mail</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="82"/>
++        <location filename="../service_support_popup.cpp" line="89"/>
+         <source>For common questions, please refer to</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="85"/>
++        <location filename="../service_support_popup.cpp" line="92"/>
+         <source>KylinOs offical website</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="126"/>
+-        <source>Cache</source>
++        <location filename="../service_support_popup.cpp" line="133"/>
++        <source>Cancel</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../service_support_popup.cpp" line="133"/>
++        <location filename="../service_support_popup.cpp" line="140"/>
+         <source>Clean</source>
+         <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+     <name>SessionClient</name>
+-    <message>
+-        <location filename="../sessionclient.cpp" line="115"/>
+-        <location filename="../sessionclient.cpp" line="164"/>
+-        <location filename="../sessionclient.cpp" line="210"/>
+-        <location filename="../sessionclient.cpp" line="264"/>
+-        <location filename="../sessionclient.cpp" line="309"/>
+-        <location filename="../sessionclient.cpp" line="312"/>
+-        <location filename="../sessionclient.cpp" line="352"/>
+-        <location filename="../sessionclient.cpp" line="355"/>
+-        <location filename="../sessionclient.cpp" line="392"/>
+-        <location filename="../sessionclient.cpp" line="395"/>
+-        <source>Kylin Os Manager</source>
+-        <translation>麒麟管家</translation>
+-    </message>
+     <message>
+         <location filename="../sessionclient.cpp" line="118"/>
+         <location filename="../sessionclient.cpp" line="167"/>
+         <location filename="../sessionclient.cpp" line="213"/>
+         <location filename="../sessionclient.cpp" line="267"/>
++        <location filename="../sessionclient.cpp" line="345"/>
++        <location filename="../sessionclient.cpp" line="348"/>
++        <location filename="../sessionclient.cpp" line="444"/>
++        <location filename="../sessionclient.cpp" line="447"/>
++        <source>Kylin Os Manager</source>
++        <translation>麒麟管家</translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="121"/>
++        <location filename="../sessionclient.cpp" line="170"/>
++        <location filename="../sessionclient.cpp" line="216"/>
++        <location filename="../sessionclient.cpp" line="270"/>
+         <source>Device Manager</source>
+         <translation>設備管理</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="119"/>
++        <location filename="../sessionclient.cpp" line="122"/>
+         <source>The system detects that a new device has an installable driver. Do you want to install?</source>
+         <translation>檢測到新的可安裝驅動設備,是否安裝驅動?</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="120"/>
++        <location filename="../sessionclient.cpp" line="123"/>
+         <source>Close</source>
+         <translation>取消</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="120"/>
++        <location filename="../sessionclient.cpp" line="123"/>
+         <source>Install</source>
+         <translation>去安裝</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="168"/>
++        <location filename="../sessionclient.cpp" line="171"/>
+         <source>Start installing the corresponding driver</source>
+         <translation>開始安裝對應驅動</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="214"/>
++        <location filename="../sessionclient.cpp" line="217"/>
+         <source>Driver Installed</source>
+         <translation>驅動已安裝</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="216"/>
++        <location filename="../sessionclient.cpp" line="219"/>
+         <source>Open Scanner</source>
+         <translation>打開掃描</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="268"/>
++        <location filename="../sessionclient.cpp" line="271"/>
+         <source>Driver install failed.</source>
+         <translation>驅動安裝失敗</translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="313"/>
++        <location filename="../sessionclient.cpp" line="349"/>
+         <source>Abnormal writing of terminal log, please contact the administrator</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="356"/>
+-        <source>Detected system abnormality, please contact the technical service immediately or call 400!</source>
++        <location filename="../sessionclient.cpp" line="352"/>
++        <location filename="../sessionclient.cpp" line="451"/>
++        <source>Cancel</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="354"/>
++        <location filename="../sessionclient.cpp" line="453"/>
++        <source>One click cleaning</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="386"/>
++        <source>There is an abnormal writing of logs in the system. Please go to Kylin Os Manager for cleaning!</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../sessionclient.cpp" line="485"/>
++        <source>The System disk space is tight, please go to Kylin Os Manager for cleaning!</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../sessionclient.cpp" line="396"/>
++        <location filename="../sessionclient.cpp" line="448"/>
+         <source>The avaliable disk space is less than 20%, please clean it up in a timely manner</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/kom/kom-configure.h b/kom/kom-configure.h
+index f2bb6fc..c2f6a40 100644
+--- a/kom/kom-configure.h
++++ b/kom/kom-configure.h
+@@ -34,9 +34,6 @@
+ #define CONFIG_PLUGIN_GENERAL_NAME "Name"
+ #define CONFIG_PLUGIN_GENERAL_ICON "Icon"
+ 
+-#define CONFIG_PLUGIN_REPLACEMENT_ASSISTANT "ReplacementAssistant"
+-#define CONFIG_PLUGIN_REPLACEMENT_ASSISTANT_CODE "Code"
+-
+ #define CONFIG_CHEST_WIN_DATA_MIGRATION "WinDataMigration"
+ #define CONFIG_CHEST_WIN_DATA_MIGRATION_FIRST_OPEN "FirstOpen"
+ #define CONFIG_CHEST_WIN_DATA_MIGRATION_READ_DIR_CHILD "ReadDirChild"
+@@ -67,6 +64,24 @@
+ #define CONFIG_DEVICE_MANAGER "DeviceControl"
+ #define CONFIG_DEVICE_MANAGER_PROTOCOL "Protocol"
+ #define CONFIG_DEVICE_MANAGER_DOMAIN "Domain"
++#define CONFIG_DEVICE_MANAGER_CPU "CPU"
++#define CONFIG_DEVICE_MANAGER_MEMORY "Memory"
++#define CONFIG_DEVICE_MANAGER_GRAPHICCARD "GraphicCard"
++#define CONFIG_DEVICE_MANAGER_BASEBOARD "BaseBoard"
++#define CONFIG_DEVICE_MANAGER_NETWORKCARD "NetworkCard"
++#define CONFIG_DEVICE_MANAGER_DISK "Disk"
++#define CONFIG_DEVICE_MANAGER_MONITOR "Monitor"
++#define CONFIG_DEVICE_MANAGER_SOUNDCARD "SoundCard"
++#define CONFIG_DEVICE_MANAGER_KEYBOARD "Keyboard"
++#define CONFIG_DEVICE_MANAGER_MOUSE "Mouse"
++#define CONFIG_DEVICE_MANAGER_BLUETOOTH "Bluetooth"
++#define CONFIG_DEVICE_MANAGER_CD "Cd"
++#define CONFIG_DEVICE_MANAGER_BATTERY "Battery"
++#define CONFIG_DEVICE_MANAGER_FAN "Fan"
++#define CONFIG_DEVICE_MANAGER_CAMERA "Camera"
++
++#define CONFIG_PLUGIN_REPLACEMENT_ASSISTANT "ReplacementAssistant"
++#define CONFIG_PLUGIN_REPLACEMENT_ASSISTANT_CODE "Code"
+ 
+ namespace kom
+ {
+diff --git a/kom/kom-label.cpp b/kom/kom-label.cpp
+index 20a3827..b4955f1 100644
+--- a/kom/kom-label.cpp
++++ b/kom/kom-label.cpp
+@@ -21,9 +21,10 @@ KomLabelPrivate::KomLabelPrivate(KomLabel *q)
+       m_fontPixelSize(14),   // 默认 14 pixel size
+       m_transparency(1)      // 默认不透明
+ {
+-    QHBoxLayout *bl = new QHBoxLayout(q_ptr);
+-    bl->setMargin(0);
+-    bl->addWidget(m_label);
++    QHBoxLayout *hbox_layout = new QHBoxLayout(q_ptr);
++    hbox_layout->setContentsMargins(0, 0, 0, 0);
++    hbox_layout->setSpacing(0);
++    hbox_layout->addWidget(m_label);
+ }
+ 
+ KomLabelPrivate::~KomLabelPrivate()
+@@ -62,9 +63,6 @@ void KomLabelPrivate::fitText(void) {
+ 
+     QString html = transHtml(showText);
+     m_label->QLabel::setText(html);
+-
+-    // 根据字体高度设置控件高度,避免上下截断
+-    q->setFixedHeight(fm.height());
+ }
+ 
+ QString KomLabelPrivate::transHtml(QString &text)
+@@ -190,6 +188,8 @@ void KomLabel::setTransparency(float t)
+ void KomLabel::setText(const QString &text) {
+     Q_D(KomLabel);
+ 
++    d->m_text = text;
++
+     // 设置底层 label 的属性,使底层和上层 label 的属性保持一致
+     // 设置字体
+     QFont font;
+@@ -206,8 +206,6 @@ void KomLabel::setText(const QString &text) {
+ 
+     // 设置文本
+     QLabel::setText(text);
+-
+-    d->m_text = text;
+     d->fitText();
+ }
+ 
+diff --git a/kom/kom-utils.cpp b/kom/kom-utils.cpp
+index e82557d..cab0d13 100644
+--- a/kom/kom-utils.cpp
++++ b/kom/kom-utils.cpp
+@@ -1,14 +1,21 @@
++#include "kom-utils.h"
++#include <unistd.h>
++#include <dlfcn.h>
++#include <stdio.h>
+ #include <QWidget>
+ #include <QDebug>
++#include <QDir>
++#include <QFile>
++#include <QFileInfo>
++#include <QSettings>
++#include <QJsonDocument>
++#include <QJsonParseError>
++#include <QJsonObject>
+ #include "kom-ukui-gsettings.h"
+-#include "kom-utils.h"
+ 
+-//安全中心联网加白
+-#include <stdio.h>
+-#include <dlfcn.h>
+-#include <unistd.h>
+-#include <QDir>
+ #define PKG_NAME_MAX 128
++
++//安全中心联网加白
+ struct kysec_netctl_pkg {
+     char pkg[PKG_NAME_MAX];
+     int type;
+@@ -16,11 +23,11 @@ struct kysec_netctl_pkg {
+     char desktop[PATH_MAX];
+     int server_type;
+ };
++
+ typedef int (*EnableNetworkingFunc)(uid_t uid, char *pkg, int type, char *ico, char *desktop, int server_type);
+ typedef struct kysec_netctl_pkg*(*CheckNetworkingFunc)(uid_t uid, char *pkg);
+ 
+-namespace kom
+-{
++namespace kom {
+ 
+ double KomUtils::adaptFontSize(double pixelSize)
+ {
+@@ -108,4 +115,89 @@ void KomUtils::setNetworkWhiteListFromPackage(WhiteListType p)
+     qDebug() << "添加网络控制白名单失败" << pkginfo->type;
+ }
+ 
+-} // namespace kom
++/*
++ * 先从 /etc/kylin-version/kylin-system-version.conf 文件中获取
++ *     os_version     字段为系统版本
++ *     update_version 字段为补丁版本
++ *
++ * 如果上述文件不存在则从 /etc/os-release 文件中获取系统版本
++ *     KYLIN_RELEASE_ID 字段为系统版本
++ * 从 /usr/share/kylin-update-desktop-config/config/kylin-update-desktop-system.json
++ * 或 /usr/share/kylin-update-desktop-config/data/kylin-update-desktop-system.json 文件中获取补丁版本
++ *     version 字段为补丁版本
++ *
++ * 从 /etc/.kyinfo 文件中获取授权版本
++ *     milestone 字段为授权版本
++ *
++ * 从 /etc/kylin-build 文件中获取 build id
++ *     buildid 字段为 build id
++ */
++struct SystemVersion KomUtils::SystemVersion() {
++    QString os_version;
++    QString update_version;
++    QString authorize_version;
++    QString build_id;
++
++    if (QFileInfo("/etc/kylin-version/kylin-system-version.conf").exists()) {
++        QSettings settings("/etc/kylin-version/kylin-system-version.conf", QSettings::Format::IniFormat);
++        os_version = settings.value("SYSTEM/os_version", "").toString();
++        update_version = settings.value("SYSTEM/update_version", "").toString();
++    }
++
++    if (os_version.isEmpty() && QFileInfo("/etc/os-release").exists()) {
++        QSettings settings("/etc/os-release", QSettings::Format::IniFormat);
++        os_version = settings.value("KYLIN_RELEASE_ID", "").toString();
++    }
++    if (update_version.isEmpty()) {
++        QFile file;
++        if (QFileInfo("/usr/share/kylin-update-desktop-config/config/kylin-update-desktop-system.json").exists()) {
++            file.setFileName("/usr/share/kylin-update-desktop-config/config/kylin-update-desktop-system.json");
++        } else if (QFileInfo("/usr/share/kylin-update-config/data/kylin-update-desktop-system.json").exists()) {
++            file.setFileName("/usr/share/kylin-update-desktop-config/data/kylin-update-desktop-system.json");
++        } else {
++            file.setFileName("");
++        }
++        if (file.open(QIODevice::ReadOnly)) {
++            const auto data = file.readAll();
++            file.close();
++
++            QJsonParseError error;
++            const auto doc = QJsonDocument::fromJson(data, &error);
++            if (!doc.isNull()) {
++                if (doc.isObject()) {
++                    const auto root = doc.object();
++                    if (root.contains("version")) {
++                        update_version = root.value("version").toString();
++                    }
++                }
++            }
++        }
++    }
++
++    if (QFileInfo("/etc/.kyinfo").exists()) {
++        QSettings settings("/etc/.kyinfo", QSettings::Format::IniFormat);
++        authorize_version = settings.value("dist/milestone", "").toString();
++    }
++
++    QFile file("/etc/kylin-build");
++    if (file.open(QIODevice::ReadOnly)) {
++        while (!file.atEnd()) {
++            auto data = QString::fromUtf8(file.readLine());
++            if (data.contains("buildid:")) {
++                build_id = data.remove("buildid:").trimmed();
++                break;
++            }
++        }
++        file.close();
++    }
++
++    struct SystemVersion system_version;
++    system_version.os_version = os_version;
++    system_version.update_version = update_version;
++    system_version.authorize_version = authorize_version;
++    system_version.build_id = build_id;
++
++    return system_version;
++}
++
++}
+diff --git a/kom/kom-utils.h b/kom/kom-utils.h
+index f5763f0..d321a61 100644
+--- a/kom/kom-utils.h
++++ b/kom/kom-utils.h
+@@ -1,19 +1,32 @@
+-#ifndef KYLIN_OS_MANAGER_KOM_UTILS_H
+-#define KYLIN_OS_MANAGER_KOM_UTILS_H
+-namespace kom
+-{
++#ifndef KYLIN_OS_MANAGER_KOM_KOM_UTILS_H
++#define KYLIN_OS_MANAGER_KOM_KOM_UTILS_H
+ 
+-class KomUtils
+-{
++#include <QString>
++
++namespace kom {
++
++struct SystemVersion {
++    QString os_version;           // 系统版本
++    QString update_version;       // 补丁版本
++    QString authorize_version;    // 授权版本
++    QString build_id;             // 构建 id
++};
++
++class KomUtils {
+ public:
+-    static double adaptFontSize(double pixelSize = 14.0);
+-    enum WhiteListType{
++    enum WhiteListType {
+         Service = 2,
+         Application = 3
+     };
++
++    static double adaptFontSize(double pixelSize = 14.0);
+     static void setNetworkWhiteListFromPackage(WhiteListType p);
++    /**
++     * @brief 获取系统版本
++     */
++    static struct SystemVersion SystemVersion();
+ };
+ 
+-} // namespace kom
++}
+ 
+ #endif
+diff --git a/kyasDbus/sessiondaemon/kacmdtool.py b/kyasDbus/sessiondaemon/kacmdtool.py
+index 6b1b9e3..ac1def7 100644
+--- a/kyasDbus/sessiondaemon/kacmdtool.py
++++ b/kyasDbus/sessiondaemon/kacmdtool.py
+@@ -132,136 +132,136 @@ class KACmdTool():
+         return summary
+ 
+     def loadDiskInfoFromSmart(self, devName, mapInfo) :
+-        # indexName = ""
+-        #
+-        # args = ["smartctl", "--all", "/dev/"+devName]
+-        # pipe = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+-        # output = pipe.stdout.readlines()
+-        #
+-        # allinfo = ""
+-        # for l in output:
+-        #     allinfo += bytes.decode(l,"utf-8","ignore")
+-        #
+-        # infos = allinfo.split("\n")
+-        # for line in infos:
+-        #     if len(line) > 0 :
+-        #         index = line.find(": ")
+-        #         if index > 0 and not re.findall("^[\s\S]*[\d]:[\d][\s\S]*$", line) and "Error" not in line and "hh:mm:SS" not in line :
+-        #             if line.find("(") < index and line.find(")") > index :
+-        #                 continue
+-        #             if line.find("[") < index and line.find("]") > index :
+-        #                 continue
+-        #             words = line.split(": ")
+-        #             if len(words) != 2 and "SATA Version is" not in words :
+-        #                 continue
+-        #             indexName = words[0].strip().replace(" is", "")
+-        #             if indexName in mapInfo :
+-        #                 mapInfo[indexName] += ", "
+-        #                 mapInfo[indexName] += words[1].strip()
+-        #             else :
+-        #                 mapInfo[indexName] = words[1].strip()
+-        #             continue
+-        #
+-        #         if len(indexName) > 0 and (line.startswith("\t\t") or line.startswith("    ")) and ":" not in line :
+-        #             if indexName in mapInfo :
+-        #                 mapInfo[indexName] += ", "
+-        #                 mapInfo[indexName] += line.strip()
+-        #             else :
+-        #                 mapInfo[indexName] = line.strip()
+-        #             continue
+-        #
+-        #         indexName = ""
+-        #         # 1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       0
+-        #         result = re.findall("\s*[0-9]+\s+([\w\_]+)\s+0x[0-9a-fA-F\-]+\s+[0-9]+\s+[0-9]+\s+[0-9]+\s+[\w]+\s+[\w]+\s+[\w\-]+\s+([0-9]+)$", line)
+-        #         if result and len(result) > 0:
+-        #             mapInfo[result[0][0]] = result[0][1]
+-        #             continue;
+-        #
+-        #         strList = []
+-        #         if line.endswith(")") :
+-        #             leftBracket = line.find("(")
+-        #             if leftBracket > 0 :
+-        #                 key = line[:leftBracket].strip()
+-        #                 strList = key.split(" ")
+-        #                 if len(strList) > 2 :
+-        #                     strList[-1] += line[leftBracket:]
+-        #         elif len(strList) == 0 :
+-        #             strList = line.strip().split(" ")
+-        #
+-        #         if len(strList) < 5 :
+-        #             continue
+-        #
+-        #         if "Power_On_Hours" in line :
+-        #             mapInfo["Power_On_Hours"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Power_Cycle_Count" in line :
+-        #             mapInfo["Power_Cycle_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Raw_Read_Error_Rate" in line :
+-        #             mapInfo["Raw_Read_Error_Rate"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Spin_Up_Time" in line :
+-        #             mapInfo["Spin_Up_Time"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Start_Stop_Count" in line :
+-        #             mapInfo["Start_Stop_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Reallocated_Sector_Ct" in line :
+-        #             mapInfo["Reallocated_Sector_Ct"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Seek_Error_Rate" in line :
+-        #             mapInfo["Seek_Error_Rate"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Spin_Retry_Count" in line :
+-        #             mapInfo["Spin_Retry_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Calibration_Retry_Count" in line :
+-        #             mapInfo["Calibration_Retry_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "G-Sense_Error_Rate" in line :
+-        #             mapInfo["G-Sense_Error_Rate"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Power-Off_Retract_Count" in line :
+-        #             mapInfo["Power-Off_Retract_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Load_Cycle_Count" in line :
+-        #             mapInfo["Load_Cycle_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Temperature_Celsius" in line :
+-        #             mapInfo["Temperature_Celsius"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Reallocated_Event_Count" in line :
+-        #             mapInfo["Reallocated_Event_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Current_Pending_Sector" in line :
+-        #             mapInfo["Current_Pending_Sector"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Offline_Uncorrectable" in line :
+-        #             mapInfo["Offline_Uncorrectable"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "UDMA_CRC_Error_Count" in line :
+-        #             mapInfo["UDMA_CRC_Error_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Multi_Zone_Error_Rate" in line :
+-        #             mapInfo["Multi_Zone_Error_Rate"] = strList[-1];
+-        #             continue
++        indexName = ""
++
++        args = ["smartctl", "--all", "/dev/"+devName]
++        pipe = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
++        output = pipe.stdout.readlines()
++
++        allinfo = ""
++        for l in output:
++            allinfo += bytes.decode(l,"utf-8","ignore")
++
++        infos = allinfo.split("\n")
++        for line in infos:
++            if len(line) > 0 :
++                index = line.find(": ")
++                if index > 0 and not re.findall("^[\s\S]*[\d]:[\d][\s\S]*$", line) and "Error" not in line and "hh:mm:SS" not in line :
++                    if line.find("(") < index and line.find(")") > index :
++                        continue
++                    if line.find("[") < index and line.find("]") > index :
++                        continue
++                    words = line.split(": ")
++                    if len(words) != 2 and "SATA Version is" not in words :
++                        continue
++                    indexName = words[0].strip().replace(" is", "")
++                    if indexName in mapInfo :
++                        mapInfo[indexName] += ", "
++                        mapInfo[indexName] += words[1].strip()
++                    else :
++                        mapInfo[indexName] = words[1].strip()
++                    continue
++
++                if len(indexName) > 0 and (line.startswith("\t\t") or line.startswith("    ")) and ":" not in line :
++                    if indexName in mapInfo :
++                        mapInfo[indexName] += ", "
++                        mapInfo[indexName] += line.strip()
++                    else :
++                        mapInfo[indexName] = line.strip()
++                    continue
++
++                indexName = ""
++                # 1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       0
++                result = re.findall("\s*[0-9]+\s+([\w\_]+)\s+0x[0-9a-fA-F\-]+\s+[0-9]+\s+[0-9]+\s+[0-9]+\s+[\w]+\s+[\w]+\s+[\w\-]+\s+([0-9]+)$", line)
++                if result and len(result) > 0:
++                    mapInfo[result[0][0]] = result[0][1]
++                    continue;
++
++                strList = []
++                if line.endswith(")") :
++                    leftBracket = line.find("(")
++                    if leftBracket > 0 :
++                        key = line[:leftBracket].strip()
++                        strList = key.split(" ")
++                        if len(strList) > 2 :
++                            strList[-1] += line[leftBracket:]
++                elif len(strList) == 0 :
++                    strList = line.strip().split(" ")
++
++                if len(strList) < 5 :
++                    continue
++
++                if "Power_On_Hours" in line :
++                    mapInfo["Power_On_Hours"] = strList[-1];
++                    continue
++
++                if "Power_Cycle_Count" in line :
++                    mapInfo["Power_Cycle_Count"] = strList[-1];
++                    continue
++
++                if "Raw_Read_Error_Rate" in line :
++                    mapInfo["Raw_Read_Error_Rate"] = strList[-1];
++                    continue
++
++                if "Spin_Up_Time" in line :
++                    mapInfo["Spin_Up_Time"] = strList[-1];
++                    continue
++
++                if "Start_Stop_Count" in line :
++                    mapInfo["Start_Stop_Count"] = strList[-1];
++                    continue
++
++                if "Reallocated_Sector_Ct" in line :
++                    mapInfo["Reallocated_Sector_Ct"] = strList[-1];
++                    continue
++
++                if "Seek_Error_Rate" in line :
++                    mapInfo["Seek_Error_Rate"] = strList[-1];
++                    continue
++
++                if "Spin_Retry_Count" in line :
++                    mapInfo["Spin_Retry_Count"] = strList[-1];
++                    continue
++
++                if "Calibration_Retry_Count" in line :
++                    mapInfo["Calibration_Retry_Count"] = strList[-1];
++                    continue
++
++                if "G-Sense_Error_Rate" in line :
++                    mapInfo["G-Sense_Error_Rate"] = strList[-1];
++                    continue
++
++                if "Power-Off_Retract_Count" in line :
++                    mapInfo["Power-Off_Retract_Count"] = strList[-1];
++                    continue
++
++                if "Load_Cycle_Count" in line :
++                    mapInfo["Load_Cycle_Count"] = strList[-1];
++                    continue
++
++                if "Temperature_Celsius" in line :
++                    mapInfo["Temperature_Celsius"] = strList[-1];
++                    continue
++
++                if "Reallocated_Event_Count" in line :
++                    mapInfo["Reallocated_Event_Count"] = strList[-1];
++                    continue
++
++                if "Current_Pending_Sector" in line :
++                    mapInfo["Current_Pending_Sector"] = strList[-1];
++                    continue
++
++                if "Offline_Uncorrectable" in line :
++                    mapInfo["Offline_Uncorrectable"] = strList[-1];
++                    continue
++
++                if "UDMA_CRC_Error_Count" in line :
++                    mapInfo["UDMA_CRC_Error_Count"] = strList[-1];
++                    continue
++
++                if "Multi_Zone_Error_Rate" in line :
++                    mapInfo["Multi_Zone_Error_Rate"] = strList[-1];
++                    continue
+ 
+         return mapInfo
+ 
+diff --git a/kyasDbus/systemdaemon/kacmdtool.py b/kyasDbus/systemdaemon/kacmdtool.py
+index 48390f0..fface26 100644
+--- a/kyasDbus/systemdaemon/kacmdtool.py
++++ b/kyasDbus/systemdaemon/kacmdtool.py
+@@ -213,136 +213,136 @@ class KACmdTool():
+         return summary
+ 
+     def loadDiskInfoFromSmart(self, devName, mapInfo) :
+-        # indexName = ""
+-        #
+-        # args = ["smartctl", "--all", "/dev/"+devName]
+-        # pipe = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+-        # output = pipe.stdout.readlines()
+-        #
+-        # allinfo = ""
+-        # for l in output:
+-        #     allinfo += bytes.decode(l,"utf-8","ignore")
+-        #
+-        # infos = allinfo.split("\n")
+-        # for line in infos:
+-        #     if len(line) > 0 :
+-        #         index = line.find(": ")
+-        #         if index > 0 and not re.findall("^[\s\S]*[\d]:[\d][\s\S]*$", line) and "Error" not in line and "hh:mm:SS" not in line :
+-        #             if line.find("(") < index and line.find(")") > index :
+-        #                 continue
+-        #             if line.find("[") < index and line.find("]") > index :
+-        #                 continue
+-        #             words = line.split(": ")
+-        #             if len(words) != 2 and "SATA Version is" not in words :
+-        #                 continue
+-        #             indexName = words[0].strip().replace(" is", "")
+-        #             if indexName in mapInfo :
+-        #                 mapInfo[indexName] += ", "
+-        #                 mapInfo[indexName] += words[1].strip()
+-        #             else :
+-        #                 mapInfo[indexName] = words[1].strip()
+-        #             continue
+-        #
+-        #         if len(indexName) > 0 and (line.startswith("\t\t") or line.startswith("    ")) and ":" not in line :
+-        #             if indexName in mapInfo :
+-        #                 mapInfo[indexName] += ", "
+-        #                 mapInfo[indexName] += line.strip()
+-        #             else :
+-        #                 mapInfo[indexName] = line.strip()
+-        #             continue
+-        #
+-        #         indexName = ""
+-        #         # 1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       0
+-        #         result = re.findall("\s*[0-9]+\s+([\w\_]+)\s+0x[0-9a-fA-F\-]+\s+[0-9]+\s+[0-9]+\s+[0-9]+\s+[\w]+\s+[\w]+\s+[\w\-]+\s+([0-9]+)$", line)
+-        #         if result and len(result) > 0:
+-        #             mapInfo[result[0][0]] = result[0][1]
+-        #             continue;
+-        #
+-        #         strList = []
+-        #         if line.endswith(")") :
+-        #             leftBracket = line.find("(")
+-        #             if leftBracket > 0 :
+-        #                 key = line[:leftBracket].strip()
+-        #                 strList = key.split(" ")
+-        #                 if len(strList) > 2 :
+-        #                     strList[-1] += line[leftBracket:]
+-        #         elif len(strList) == 0 :
+-        #             strList = line.strip().split(" ")
+-        #
+-        #         if len(strList) < 5 :
+-        #             continue
+-        #
+-        #         if "Power_On_Hours" in line :
+-        #             mapInfo["Power_On_Hours"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Power_Cycle_Count" in line :
+-        #             mapInfo["Power_Cycle_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Raw_Read_Error_Rate" in line :
+-        #             mapInfo["Raw_Read_Error_Rate"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Spin_Up_Time" in line :
+-        #             mapInfo["Spin_Up_Time"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Start_Stop_Count" in line :
+-        #             mapInfo["Start_Stop_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Reallocated_Sector_Ct" in line :
+-        #             mapInfo["Reallocated_Sector_Ct"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Seek_Error_Rate" in line :
+-        #             mapInfo["Seek_Error_Rate"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Spin_Retry_Count" in line :
+-        #             mapInfo["Spin_Retry_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Calibration_Retry_Count" in line :
+-        #             mapInfo["Calibration_Retry_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "G-Sense_Error_Rate" in line :
+-        #             mapInfo["G-Sense_Error_Rate"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Power-Off_Retract_Count" in line :
+-        #             mapInfo["Power-Off_Retract_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Load_Cycle_Count" in line :
+-        #             mapInfo["Load_Cycle_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Temperature_Celsius" in line :
+-        #             mapInfo["Temperature_Celsius"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Reallocated_Event_Count" in line :
+-        #             mapInfo["Reallocated_Event_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Current_Pending_Sector" in line :
+-        #             mapInfo["Current_Pending_Sector"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Offline_Uncorrectable" in line :
+-        #             mapInfo["Offline_Uncorrectable"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "UDMA_CRC_Error_Count" in line :
+-        #             mapInfo["UDMA_CRC_Error_Count"] = strList[-1];
+-        #             continue
+-        #
+-        #         if "Multi_Zone_Error_Rate" in line :
+-        #             mapInfo["Multi_Zone_Error_Rate"] = strList[-1];
+-        #             continue
++        indexName = ""
++
++        args = ["smartctl", "--all", "/dev/"+devName]
++        pipe = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
++        output = pipe.stdout.readlines()
++
++        allinfo = ""
++        for l in output:
++            allinfo += bytes.decode(l,"utf-8","ignore")
++
++        infos = allinfo.split("\n")
++        for line in infos:
++            if len(line) > 0 :
++                index = line.find(": ")
++                if index > 0 and not re.findall("^[\s\S]*[\d]:[\d][\s\S]*$", line) and "Error" not in line and "hh:mm:SS" not in line :
++                    if line.find("(") < index and line.find(")") > index :
++                        continue
++                    if line.find("[") < index and line.find("]") > index :
++                        continue
++                    words = line.split(": ")
++                    if len(words) != 2 and "SATA Version is" not in words :
++                        continue
++                    indexName = words[0].strip().replace(" is", "")
++                    if indexName in mapInfo :
++                        mapInfo[indexName] += ", "
++                        mapInfo[indexName] += words[1].strip()
++                    else :
++                        mapInfo[indexName] = words[1].strip()
++                    continue
++
++                if len(indexName) > 0 and (line.startswith("\t\t") or line.startswith("    ")) and ":" not in line :
++                    if indexName in mapInfo :
++                        mapInfo[indexName] += ", "
++                        mapInfo[indexName] += line.strip()
++                    else :
++                        mapInfo[indexName] = line.strip()
++                    continue
++
++                indexName = ""
++                # 1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       0
++                result = re.findall("\s*[0-9]+\s+([\w\_]+)\s+0x[0-9a-fA-F\-]+\s+[0-9]+\s+[0-9]+\s+[0-9]+\s+[\w]+\s+[\w]+\s+[\w\-]+\s+([0-9]+)$", line)
++                if result and len(result) > 0:
++                    mapInfo[result[0][0]] = result[0][1]
++                    continue;
++
++                strList = []
++                if line.endswith(")") :
++                    leftBracket = line.find("(")
++                    if leftBracket > 0 :
++                        key = line[:leftBracket].strip()
++                        strList = key.split(" ")
++                        if len(strList) > 2 :
++                            strList[-1] += line[leftBracket:]
++                elif len(strList) == 0 :
++                    strList = line.strip().split(" ")
++
++                if len(strList) < 5 :
++                    continue
++
++                if "Power_On_Hours" in line :
++                    mapInfo["Power_On_Hours"] = strList[-1];
++                    continue
++
++                if "Power_Cycle_Count" in line :
++                    mapInfo["Power_Cycle_Count"] = strList[-1];
++                    continue
++
++                if "Raw_Read_Error_Rate" in line :
++                    mapInfo["Raw_Read_Error_Rate"] = strList[-1];
++                    continue
++
++                if "Spin_Up_Time" in line :
++                    mapInfo["Spin_Up_Time"] = strList[-1];
++                    continue
++
++                if "Start_Stop_Count" in line :
++                    mapInfo["Start_Stop_Count"] = strList[-1];
++                    continue
++
++                if "Reallocated_Sector_Ct" in line :
++                    mapInfo["Reallocated_Sector_Ct"] = strList[-1];
++                    continue
++
++                if "Seek_Error_Rate" in line :
++                    mapInfo["Seek_Error_Rate"] = strList[-1];
++                    continue
++
++                if "Spin_Retry_Count" in line :
++                    mapInfo["Spin_Retry_Count"] = strList[-1];
++                    continue
++
++                if "Calibration_Retry_Count" in line :
++                    mapInfo["Calibration_Retry_Count"] = strList[-1];
++                    continue
++
++                if "G-Sense_Error_Rate" in line :
++                    mapInfo["G-Sense_Error_Rate"] = strList[-1];
++                    continue
++
++                if "Power-Off_Retract_Count" in line :
++                    mapInfo["Power-Off_Retract_Count"] = strList[-1];
++                    continue
++
++                if "Load_Cycle_Count" in line :
++                    mapInfo["Load_Cycle_Count"] = strList[-1];
++                    continue
++
++                if "Temperature_Celsius" in line :
++                    mapInfo["Temperature_Celsius"] = strList[-1];
++                    continue
++
++                if "Reallocated_Event_Count" in line :
++                    mapInfo["Reallocated_Event_Count"] = strList[-1];
++                    continue
++
++                if "Current_Pending_Sector" in line :
++                    mapInfo["Current_Pending_Sector"] = strList[-1];
++                    continue
++
++                if "Offline_Uncorrectable" in line :
++                    mapInfo["Offline_Uncorrectable"] = strList[-1];
++                    continue
++
++                if "UDMA_CRC_Error_Count" in line :
++                    mapInfo["UDMA_CRC_Error_Count"] = strList[-1];
++                    continue
++
++                if "Multi_Zone_Error_Rate" in line :
++                    mapInfo["Multi_Zone_Error_Rate"] = strList[-1];
++                    continue
+ 
+         return mapInfo
+ 
+diff --git a/kyasDbus/systemdaemon/kagraphicscardinfo.py b/kyasDbus/systemdaemon/kagraphicscardinfo.py
+index 3b5fb4b..b923a61 100644
+--- a/kyasDbus/systemdaemon/kagraphicscardinfo.py
++++ b/kyasDbus/systemdaemon/kagraphicscardinfo.py
+@@ -382,9 +382,13 @@ class KAGraphicsCardInfo() :
+                                                 totalMem = int(sizeN[0])*1024
+ 
+                             if totalMem > 0 :
+-                                if totalMem > 1024 :
++                                for lines in output3:
++                                    if "Zhaoxin".encode('utf-8') in lines:
++                                        summary["list"][index][GSI_CAPCITY] = "2GB"
++                                        break
++                                if totalMem >= 1024 and GSI_CAPCITY not in summary["list"][index]:
+                                     summary["list"][index][GSI_CAPCITY] = str(float("%0.1f"%(float(totalMem)/1024)))+"GB"
+-                                else :
++                                elif totalMem < 1024 and GSI_CAPCITY not in summary["list"][index]:
+                                     summary["list"][index][GSI_CAPCITY] = str(totalMem)+"MB"
+                 if "nvidia_mem" in mapInfo and len(mapInfo["nvidia_mem"]) > 0 :
+                     summary["list"][index][GSI_CAPCITY] = mapInfo["nvidia_mem"]
+diff --git a/kyasDbus/systemdaemon/kaharddiskinfo.py b/kyasDbus/systemdaemon/kaharddiskinfo.py
+index f2fd8f3..232b8bb 100644
+--- a/kyasDbus/systemdaemon/kaharddiskinfo.py
++++ b/kyasDbus/systemdaemon/kaharddiskinfo.py
+@@ -316,7 +316,7 @@ class KAHarddiskInfo() :
+                 if len(DiskVendor) > 0 and DiskVendor != "USB" :
+                     disk[HDI_MANUFACTURER] = DiskVendor
+                 if len(DiskSerial) > 0 :
+-                    disk[HDI_SERIALNUM] = DiskSerial;
++                    disk[HDI_SERIALNUM] = DiskSerial
+                 if len(DiskFw) > 0 :
+                     disk[HDI_FIRMWAREVER] = DiskFw
+                 disk[HDI_ISMAINDISK] = IsMainDisk
+diff --git a/kyasDbus/systemdaemon/kamonitorthread.py b/kyasDbus/systemdaemon/kamonitorthread.py
+index 4f9b269..66d8efc 100644
+--- a/kyasDbus/systemdaemon/kamonitorthread.py
++++ b/kyasDbus/systemdaemon/kamonitorthread.py
+@@ -55,6 +55,9 @@ class KAMonitor() :
+             if Judgment_HW990():
+                 if "eDP-1" == monitor:
+                     continue
++            if Judgment_M900():
++                if "DSI-1" == monitor:
++                    continue
+             p = re.compile(r'\n%s connected' % monitor)
+             for m in p.finditer(xrandrDat):
+                 #去重
+@@ -111,10 +114,14 @@ class KAMonitor() :
+                                 nMaxRes = tempRes
+                                 for line in localinfo.split('\n'):
+                                     if line.strip().startswith(item[0]+"x"+item[1]):
++                                        if '*' in line:
++                                            line = line.replace('*', "")
++                                        if '+' in line:
++                                            line = line.replace('+', "")
+                                         tmp = line.strip().split(" ")
+                                         tmp = [i for i in tmp if i != '']
+                                         if(len(tmp) > 1):
+-                                            refreshRateMax = tmp[1]
++                                            refreshRateMax = self.getMaxRefreshRate(tmp)
+                                 mnMaxResolution = (item[0] + "X" + item[1])
+ 
+                 if refreshRateMax != "":
+@@ -225,6 +232,15 @@ class KAMonitor() :
+                     result = re.findall("Display Product Name:\s*(\S*)", ediddecret)
+                     if result and "" == mnModel:
+                         mnModel = result[0]
++                else:
++                    match = re.search(r'(\d+)mm x (\d+)mm', localinfo)
++                    if match:
++                        width_mm = int(match.group(1))
++                        height_mm = int(match.group(2))
++                        diagonal_mm = math.sqrt(width_mm**2 + height_mm**2)
++                        # 将毫米转换为英寸
++                        diagonal_inches = diagonal_mm / 25.4
++                        mnSize = str("%.1f" %diagonal_inches)
+ 
+                 if len(mnManufacturer) > 0 :
+                     monitorOne[MNI_MANUFACTURER] = mnManufacturer
+@@ -274,21 +290,30 @@ class KAMonitor() :
+                     infoList["list"].append(monitorOne)
+ 
+         if Judgment_HW990():
+-            # for i in range(len(infoList["list"])-1, -1, -1):
+-            #     if MNI_MANUFACTURER not in infoList["list"][i] :
+-            #         infoList["list"].pop(i)
+-
+             if os.path.exists("/sys/class/drm"):
+                 edid_files = glob.glob("/sys/class/drm/*/edid")
+                 for edid_file in edid_files:
+-                    if edid_file.find("card0-eDP-1") != -1 :
++                    if edid_file.find("card0-eDP-1") != -1:
+                         monitorOne = {}
+                         monitorOne[MNI_SIZE] = "14"
+                         monitorOne[MNI_MAXAVARES] = "2160X1440"
+                         monitorOne[MNI_MANUFACTURER] = "LCD"
+                         monitorOne[MNI_INTERFACE] = "eDP"
+                         infoList["list"].append(monitorOne)
+-        
++
++        if Judgment_M900():
++            if os.path.exists("/sys/class/drm"):
++                 edid_files = glob.glob("/sys/class/drm/*/edid")
++                 for edid_file in edid_files:
++                    if edid_file.find("card0-DSI-1") != -1:
++                        monitorOne = {}
++                        monitorOne[MNI_SIZE] = "23.8"
++                        monitorOne[MNI_MAXAVARES] = "2160X1440"
++                        monitorOne[MNI_MANUFACTURER] = "HKC"
++                        monitorOne[MNI_INTERFACE] = "DSI"
++                        infoList["list"].append(monitorOne)
++
++
+         if "list" in infoList and len(infoList["list"]) == 1 :
+             infoList["list"][0][MNI_ISMAIN] = "1"
+ 
+@@ -328,6 +353,19 @@ class KAMonitor() :
+                 nIndex = nIndex + 1
+         return outLine
+ 
++    def getMaxRefreshRate(self, refreshrates):
++        try:
++            max_value = float(refreshrates[1])
++        except (ValueError, IndexError, TypeError):
++            return '0'
++
++        for value in refreshrates[1:]:
++            if float(value) > max_value:
++                max_value = float(value)
++
++        formatted_num = "%.2f" % max_value
++        return str(formatted_num)
++
+ if __name__ == "__main__":
+     cmdtool = KACmdTool()
+     cc = KAMonitor(cmdtool)
+diff --git a/kyasDbus/systemdaemon/utils.py b/kyasDbus/systemdaemon/utils.py
+index ac6f282..9cc5cb0 100644
+--- a/kyasDbus/systemdaemon/utils.py
++++ b/kyasDbus/systemdaemon/utils.py
+@@ -82,6 +82,17 @@ def Judgment_HW990():
+     else:
+         return False
+ 
++def Judgment_M900():
++    if os.path.exists("/proc/hardware"):
++        with open("/proc/hardware",'r') as fd:
++            info = fd.readline()
++            if 'M900' in info :
++                return True
++            else:
++                return False
++    else:
++        return False
++
+ def Judgment_HW9A0():
+     if os.path.exists("/proc/hardware"):
+         with open("/proc/hardware",'r') as fd:
+diff --git a/plugins/device-controller/CMakeLists.txt b/plugins/device-controller/CMakeLists.txt
+index ce72833..3e058b2 100644
+--- a/plugins/device-controller/CMakeLists.txt
++++ b/plugins/device-controller/CMakeLists.txt
+@@ -46,6 +46,7 @@ set(SRCS
+         ${CMAKE_CURRENT_LIST_DIR}/src/deviceitem.cpp
+         ${CMAKE_CURRENT_LIST_DIR}/src/getinfothread.cpp
+         ${CMAKE_CURRENT_LIST_DIR}/src/include/customlabel.cpp
++        ${CMAKE_CURRENT_LIST_DIR}/src/include/hwinfostorage.cpp
+         ${CMAKE_CURRENT_LIST_DIR}/src/driveroperation/aptinstaller.cpp
+         ${CMAKE_CURRENT_LIST_DIR}/src/uninstallitem.cpp
+         ${CMAKE_CURRENT_LIST_DIR}/src/driveroperation/uninstaller.cpp
+@@ -99,6 +100,7 @@ set(HEADERS
+         ${CMAKE_CURRENT_LIST_DIR}/src/deviceitem.h
+         ${CMAKE_CURRENT_LIST_DIR}/src/getinfothread.h
+         ${CMAKE_CURRENT_LIST_DIR}/src/include/customlabel.h
++        ${CMAKE_CURRENT_LIST_DIR}/src/include/hwinfostorage.h
+         ${CMAKE_CURRENT_LIST_DIR}/src/driveroperation/aptinstaller.h
+         ${CMAKE_CURRENT_LIST_DIR}/src/uninstallitem.h
+         ${CMAKE_CURRENT_LIST_DIR}/src/driveroperation/uninstaller.h
+@@ -169,7 +171,7 @@ endfunction()
+ find_kysdk_package(${PROJECT_NAME} kysdk-qtwidgets)
+ find_kysdk_package(${PROJECT_NAME} kysdk-ukenv)
+ find_kysdk_package(${PROJECT_NAME} kysdk-diagnostics)
+-#find_kysdk_package(${PROJECT_NAME} kysdk-devicesec)
++# find_kysdk_package(${PROJECT_NAME} kysdk-devicesec)
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /opt/kylin-os-manager/plugins/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/plugins/)
+ install(FILES ${QM_FILES} DESTINATION  /usr/share/kylin-os-manager/translations/)
+diff --git a/plugins/device-controller/src/basiccontentwidget.cpp b/plugins/device-controller/src/basiccontentwidget.cpp
+index 833fe16..783312c 100644
+--- a/plugins/device-controller/src/basiccontentwidget.cpp
++++ b/plugins/device-controller/src/basiccontentwidget.cpp
+@@ -4,7 +4,7 @@
+ 
+ BasicContentWidget::BasicContentWidget(QWidget *parent)
+     : QWidget(parent),
+-    m_menu(new QMenu()),
++    m_menu(new QMenu(this)),
+     m_actionExport(new QAction){
+ 
+ }
+diff --git a/plugins/device-controller/src/driverinstallwidget.cpp b/plugins/device-controller/src/driverinstallwidget.cpp
+index 5e4baf3..6c0ddd0 100644
+--- a/plugins/device-controller/src/driverinstallwidget.cpp
++++ b/plugins/device-controller/src/driverinstallwidget.cpp
+@@ -2,6 +2,8 @@
+ #include <QPushButton>
+ #include <gsettingmonitor.h>
+ #include <QVersionNumber>
++#include <QScrollArea>
++#include <QScrollBar>
+ #include "include/globalsignal.h"
+ #include "include/common.h"
+ #include "database/drivermanagerdatabase.h"
+@@ -1039,6 +1041,17 @@ void DriverInstallWidget::installDriverSlot(DeviceItem *item, QStringList driver
+ 
+     m_tempupdateitem = item;
+     m_tempDriverName = driverName;
++
++    QWidget *currentWidget = this;
++    while (currentWidget) {
++        if (QScrollArea *scrollArea = qobject_cast<QScrollArea *>(currentWidget->parentWidget())) {
++            // 找到了 m_driverInstallSrollArea
++            scrollArea->verticalScrollBar()->setValue(scrollArea->verticalScrollBar()->minimum());
++            break;
++        }
++        currentWidget = currentWidget->parentWidget();
++    }
++
+     connect(m_installer, &AptInstaller::succeed, this, &DriverInstallWidget::installSuccessSlot);
+     connect(m_installer, &AptInstaller::succeed, item, &DeviceItem::installSucceed);
+     connect(m_installer, &AptInstaller::failed, this, &DriverInstallWidget::installFailSlot);
+diff --git a/plugins/device-controller/src/hardwareinfo/baseboardinfo.cpp b/plugins/device-controller/src/hardwareinfo/baseboardinfo.cpp
+index aff40e7..c5386ac 100644
+--- a/plugins/device-controller/src/hardwareinfo/baseboardinfo.cpp
++++ b/plugins/device-controller/src/hardwareinfo/baseboardinfo.cpp
+@@ -31,3 +31,25 @@ QString BaseboardInfo::getValue(QString value) {
+         return ""; // 如果传入的 value 不是以上列出的任何一个,返回空字符串
+     }
+ }
++
++void BaseboardInfo::setValue(QString key, QString value) {
++    if (key == "model") {
++        model = value;
++    } else if (key == "vendor") {
++        vendor = value;
++    } else if (key == "version") {
++        version = value;
++    } else if (key == "chassishandle") {
++        chassishandle = value;
++    } else if (key == "biosvendor") {
++        biosvendor = value;
++    } else if (key == "biosversion") {
++        biosversion = value;
++    } else if (key == "chipset") {
++        chipset = value;
++    } else if (key == "serial_num") {
++        serial_num = value;
++    } else if (key == "publish_date") {
++        publish_date = value;
++    }
++}
+diff --git a/plugins/device-controller/src/hardwareinfo/baseboardinfo.h b/plugins/device-controller/src/hardwareinfo/baseboardinfo.h
+index 33a4668..fd87622 100644
+--- a/plugins/device-controller/src/hardwareinfo/baseboardinfo.h
++++ b/plugins/device-controller/src/hardwareinfo/baseboardinfo.h
+@@ -19,6 +19,8 @@ public:
+     QString publish_date{QString{}};
+ 
+     QString getValue(QString value);
++
++    void setValue(QString key, QString value);
+ };
+ 
+ 
+diff --git a/plugins/device-controller/src/hardwareinfo/batteryinfo.cpp b/plugins/device-controller/src/hardwareinfo/batteryinfo.cpp
+index 4406ece..4c6c2ed 100644
+--- a/plugins/device-controller/src/hardwareinfo/batteryinfo.cpp
++++ b/plugins/device-controller/src/hardwareinfo/batteryinfo.cpp
+@@ -97,3 +97,25 @@ QString BatteryInfo::getState() {
+     }
+     return state;
+ }
++
++void BatteryInfo::setValue(QString key, QString value) {
++    if (key == "vendor") {
++        vendor = value;
++    } else if (key == "model") {
++        model = value;
++    } else if (key == "serailnum") {
++        serailnum = value;
++    } else if (key == "state") {
++        state = value;
++    } else if (key == "energy") {
++        energy = value;
++    } else if (key == "used_times") {
++        used_times = value;
++    } else if (key == "energy_full") {
++        energy_full = value;
++    } else if (key == "time_to_empty") {
++        time_to_empty = value;
++    } else if (key == "percentage") {
++        percentage = value;
++    }
++}
+diff --git a/plugins/device-controller/src/hardwareinfo/batteryinfo.h b/plugins/device-controller/src/hardwareinfo/batteryinfo.h
+index fd60e4c..a7d256a 100644
+--- a/plugins/device-controller/src/hardwareinfo/batteryinfo.h
++++ b/plugins/device-controller/src/hardwareinfo/batteryinfo.h
+@@ -21,6 +21,8 @@ public:
+ 
+     QString getValue(QString value);
+ 
++    void setValue(QString key, QString value);
++
+     QString getEnergy();
+ 
+     QString getPercentage();
+diff --git a/plugins/device-controller/src/hardwareinfo/bluetoothinfo.cpp b/plugins/device-controller/src/hardwareinfo/bluetoothinfo.cpp
+index 8908aeb..874cd53 100755
+--- a/plugins/device-controller/src/hardwareinfo/bluetoothinfo.cpp
++++ b/plugins/device-controller/src/hardwareinfo/bluetoothinfo.cpp
+@@ -1,7 +1,24 @@
+ #include "bluetoothinfo.h"
++// #include <libkydevicesec_bluetooth.h>
++#include <QDebug>
+ 
+-BluetoothInfo::BluetoothInfo()
+-{
++BluetoothInfo::BluetoothInfo() {
++
++}
++
++BluetoothInfo::BluetoothInfo(BluetoothInfo *others) {
++//    address = others->address;
++    alcmtu = others->alcmtu;
++    bus = others->bus;
++    dev_version = others->dev_version;
++    features = others->features;
++    link_mode = others->link_mode;
++    link_policy = others->link_policy;
++    dev_name = others->dev_name;
++    packettype = others->packettype;
++    scomtu = others->scomtu;
++    speed = others->speed;
++    modeinfo = others->modeinfo;
+ 
+ }
+ 
+@@ -9,9 +26,9 @@ QString BluetoothInfo::getValue(QString value) {
+     if (value == "vendor") {
+         return vendor;
+     } else if (value == "model") {
+-        if(model == ""){
++        if (model == "") {
+             return "Bluetooth Device";
+-        }else{
++        } else {
+             return model;
+         }
+     } else if (value == "serial") {
+@@ -23,7 +40,7 @@ QString BluetoothInfo::getValue(QString value) {
+     } else if (value == "driver_now") {
+         return driver_now;
+     } else if (value == "version") {
+-        return  modeinfo.version;
++        return modeinfo.version;
+     } else if (value == "address") {
+         return address;
+     } else if (value == "bus") {
+@@ -32,7 +49,7 @@ QString BluetoothInfo::getValue(QString value) {
+         return dev_version;
+     } else if (value == "link_mode") {
+         return link_mode;
+-    }else if (value == "link_policy") {
++    } else if (value == "link_policy") {
+         return link_policy;
+     } else if (value == "packettype") {
+         return packettype;
+@@ -46,3 +63,57 @@ QString BluetoothInfo::getValue(QString value) {
+         return ""; // 如果传入的 value 不是以上列出的任何一个,返回空字符串
+     }
+ }
++
++bool BluetoothInfo::checkStatus() {
++    //int status = kdk_device_get_bluetooth_status();
++    //if (status == 0){
++    //    return false;
++    //}
++    //if(status == 1){
++    //    return true;
++    //}
++    //if (status == -1){
++    //    qWarning() << "获取蓝牙状态失败";
++    //}
++    return true;
++}
++
++void BluetoothInfo::setValue(QString key, QString value) {
++    if (key == "vendor") {
++        vendor = value;
++    } else if (key == "model") {
++        model = value;
++    } else if (key == "vendor") {
++        vendor = value;
++    } else if (key == "serial") {
++        serial = value;
++    } else if (key == "model") {
++        model = value;
++    } else if (key == "name") {
++        name = value;
++    } else if (key == "deviceId") {
++        deviceId = value;
++    } else if (key == "driver_now") {
++        driver_now = value;
++    } else if (key == "version") {
++        modeinfo.version = value;
++    } else if (key == "address") {
++        address = value;
++    } else if (key == "bus") {
++        bus = value;
++    } else if (key == "dev_version") {
++        dev_version = value;
++    } else if (key == "link_mode") {
++        link_mode = value;
++    } else if (key == "link_policy") {
++        link_policy = value;
++    } else if (key == "packettype") {
++        packettype = value;
++    } else if (key == "scomtu") {
++        scomtu = value;
++    } else if (key == "aclmtu") {
++        alcmtu = value;
++    } else if (key == "features") {
++        features = value;
++    }
++}
+diff --git a/plugins/device-controller/src/hardwareinfo/bluetoothinfo.h b/plugins/device-controller/src/hardwareinfo/bluetoothinfo.h
+index 6fb04e3..63a5a6a 100755
+--- a/plugins/device-controller/src/hardwareinfo/bluetoothinfo.h
++++ b/plugins/device-controller/src/hardwareinfo/bluetoothinfo.h
+@@ -8,6 +8,7 @@
+ class BluetoothInfo : public HardWareInfo, public DeviceInfo {
+ public:
+     BluetoothInfo();
++    BluetoothInfo(BluetoothInfo *others);
+ 
+     QString address{QString()};
+     QString alcmtu{QString()};
+@@ -24,6 +25,9 @@ public:
+ 
+     QString getValue(QString value);
+ 
++    void setValue(QString key, QString value);
++
++    bool checkStatus();
+ };
+ 
+ #endif // BLUETOOTHINFO_H
+diff --git a/plugins/device-controller/src/hardwareinfo/camerainfo.cpp b/plugins/device-controller/src/hardwareinfo/camerainfo.cpp
+index c8f6868..3de7343 100644
+--- a/plugins/device-controller/src/hardwareinfo/camerainfo.cpp
++++ b/plugins/device-controller/src/hardwareinfo/camerainfo.cpp
+@@ -26,3 +26,23 @@ QString CameraInfo::getValue(QString value) {
+         return ""; // 如果传入的 value 不是以上列出的任何一个,返回空字符串
+     }
+ }
++
++void CameraInfo::setValue(QString key, QString value) {
++    if (key == "vendor") {
++        vendor = value;
++    } else if (key == "model") {
++        model = value;
++    } else if (key == "name") {
++        name = value;
++    } else if (key == "interface") {
++        interface = value;
++    } else if (key == "driver") {
++        driver = value;
++    } else if (key == "version") {
++        version = value;
++    } else if (key == "businfo") {
++        businfo = value;
++    }else if (key == "speed") {
++        speed = value;
++    }
++}
+diff --git a/plugins/device-controller/src/hardwareinfo/camerainfo.h b/plugins/device-controller/src/hardwareinfo/camerainfo.h
+index 327e4d1..0031275 100644
+--- a/plugins/device-controller/src/hardwareinfo/camerainfo.h
++++ b/plugins/device-controller/src/hardwareinfo/camerainfo.h
+@@ -19,6 +19,7 @@ public:
+ 
+     QString getValue(QString value);
+ 
++    void setValue(QString key, QString value);
+ };
+ 
+ #endif //CAMERAINFO_H
+diff --git a/plugins/device-controller/src/hardwareinfo/cdinfo.cpp b/plugins/device-controller/src/hardwareinfo/cdinfo.cpp
+index 647ce72..32c6db5 100644
+--- a/plugins/device-controller/src/hardwareinfo/cdinfo.cpp
++++ b/plugins/device-controller/src/hardwareinfo/cdinfo.cpp
+@@ -29,3 +29,25 @@ QString CDInfo::getValue(QString value) {
+     }
+ }
+ 
++void CDInfo::setValue(QString key, QString value) {
++    if (key == "vendor") {
++        vendor = value;
++    } else if (key == "model") {
++        model = value;
++    } else if (key == "businfo") {
++        businfo = value;
++    } else if (key == "name") {
++        name = value;
++    } else if (key == "version") {
++        version = value;
++    } else if (key == "driver") {
++        driver = value;
++    } else if (key == "devicenum") {
++        devicenum = value;
++    } else if (key == "speed") {
++        speed = value;
++    } else if (key == "serialnum") {
++        serialnum = value;
++    }
++}
++
+diff --git a/plugins/device-controller/src/hardwareinfo/cdinfo.h b/plugins/device-controller/src/hardwareinfo/cdinfo.h
+index f51e6ba..b4ab905 100644
+--- a/plugins/device-controller/src/hardwareinfo/cdinfo.h
++++ b/plugins/device-controller/src/hardwareinfo/cdinfo.h
+@@ -20,6 +20,7 @@ public:
+ 
+     QString getValue(QString value);
+ 
++    void setValue(QString key, QString value);
+ };
+ 
+ 
+diff --git a/plugins/device-controller/src/hardwareinfo/cpuinfo.cpp b/plugins/device-controller/src/hardwareinfo/cpuinfo.cpp
+index 68340a4..8ac589a 100644
+--- a/plugins/device-controller/src/hardwareinfo/cpuinfo.cpp
++++ b/plugins/device-controller/src/hardwareinfo/cpuinfo.cpp
+@@ -76,13 +76,29 @@ QString CpuInfo::getFrequency() {
+                 }
+             }
+         }
+-        double min = 0;
++        if(currentFrequencies.length() == 0){
++            QProcess process2;
++            process2.start("cat /tmp/kylin-os-manager-cpu.dat");
++            process2.waitForFinished();
++
++            QString output2 = process2.readAllStandardOutput();
++            process2.close();
++            QStringList lines2 = output2.split("\n");
++            for (int i = 0; i < lines2.length(); ++i) {
++                if (lines2[i].contains("Current Speed:")){
++                    QString freq = lines2[i].split(":")[1].trimmed();
++                    return freq;
++                }
++            }
++            return QObject::tr("This CPU model does not support frequency display function");
++        }
++        double min = currentFrequencies[0].toDouble();
+         for (int i = 0; i < currentFrequencies.length(); ++i) {
+             if (min > currentFrequencies[i].toDouble()) {
+                 min = currentFrequencies[i].toDouble();
+             }
+         }
+-        QString frequency = QString::number(min, 'f', 2) + " MHz";
++        QString frequency = QString::number(int(min)) + " MHz";
+         if (frequency == "0.00 MHz") {
+             frequency = QObject::tr("This CPU model does not support frequency display function");
+         }
+@@ -116,7 +132,25 @@ QString CpuInfo::getFrequency() {
+                 max = currentFrequencies[i].toDouble();
+             }
+         }
+-        QString frequency = QString::number(max, 'f', 2) + " MHz";
++
++        if(currentFrequencies.length() == 0){
++            QProcess process2;
++            process2.start("cat /tmp/kylin-os-manager-cpu.dat");
++            process2.waitForFinished();
++
++            QString output2 = process2.readAllStandardOutput();
++            process2.close();
++            QStringList lines2 = output2.split("\n");
++            for (int i = 0; i < lines2.length(); ++i) {
++                if (lines2[i].contains("Current Speed:")){
++                    QString freq = lines2[i].split(":")[1].trimmed();
++                    return freq;
++                }
++            }
++            return QObject::tr("This CPU model does not support frequency display function");
++        }
++
++        QString frequency = QString::number(int(max)) + " MHz";
+         if (frequency == "0.00 MHz") {
+             frequency = QObject::tr("This CPU model does not support frequency display function");
+         }
+@@ -163,25 +197,7 @@ QString CpuInfo::getUsageRate() {
+ 
+ QString CpuInfo::getTemprature() {
+     // CPU 温度
+-    int i = 0;
+-    double temperature = 0;
+-    QString path = "/sys/class/thermal/thermal_zone" + QString::number(i) + "/temp";
+-    while (QFile(path).exists()) {
+-        QProcess process;
+-        process.start("cat", QStringList() << path);
+-        process.waitForFinished();
+-        QTextStream stream(&process);
+-        QString temperatureStr = stream.readAll().trimmed();
+-        temperature += temperatureStr.toFloat() / 1000;
+-        i++;
+-        path = "/sys/class/thermal/thermal_zone" + QString::number(i) + "/temp";
+-    }
+-    temperature = temperature / i;
+-    QString temp = QString::number(temperature, 'f', 1) + "°C";
+-    if (temp != "nan°C"){
+-        return temp;
+-    }
+-    temp = "nan°C";
++    QString temp = "nan°C";
+     // 尝试使用sensors获取一下
+     QProcess process;
+     process.start("sensors");
+@@ -213,5 +229,33 @@ QString CpuInfo::getTemprature() {
+     }
+ }
+ 
++void CpuInfo::setValue(QString key, QString value) {
++    if (key == "vendor") {
++        vendor = value;
++    } else if (key == "model") {
++        model = value;
++    } else if (key == "arch") {
++        arch = value;
++    } else if (key == "cores") {
++        cores = value;
++    } else if (key == "onlinecores") {
++        onlinecores = value;
++    } else if (key == "threadprecore") {
++        threadprecore = value;
++    } else if (key == "maxMHz") {
++        maxMHz = value;
++    } else if (key == "L1dcache") {
++        L1dcache = value;
++    } else if (key == "L1icache") {
++        L1icache = value;
++    } else if (key == "L2cache") {
++        L2cache = value;
++    } else if (key == "L3cache") {
++        L3cache = value;
++    } else if (key == "L4cache") {
++        L4cache = value;
++    }
++}
++
+ 
+ 
+diff --git a/plugins/device-controller/src/hardwareinfo/cpuinfo.h b/plugins/device-controller/src/hardwareinfo/cpuinfo.h
+index e054cee..500bed5 100644
+--- a/plugins/device-controller/src/hardwareinfo/cpuinfo.h
++++ b/plugins/device-controller/src/hardwareinfo/cpuinfo.h
+@@ -23,6 +23,8 @@ public:
+ 
+     QString getValue(QString value);
+ 
++    void setValue(QString key, QString value);
++
+     QString getFrequency();
+ 
+     QString getUsageRate();
+diff --git a/plugins/device-controller/src/hardwareinfo/diskinfo.cpp b/plugins/device-controller/src/hardwareinfo/diskinfo.cpp
+index 0c133a7..da69824 100644
+--- a/plugins/device-controller/src/hardwareinfo/diskinfo.cpp
++++ b/plugins/device-controller/src/hardwareinfo/diskinfo.cpp
+@@ -21,26 +21,62 @@ QString DiskInfo::getValue(QString value) {
+     }else if (value == "interface") {
+         return interface;
+     } else if (value == "type") {
+-        if (type.toInt() == 1) {
++        if (type.toInt() == 1 || type == "SSD") {
+             return "SSD";
+-        } else if (type.toInt() == 0){
++        } else if (type.toInt() == 0 || type == "HDD"){
+             return "HDD";
+         } if (type.toInt() == 2){
+             return QApplication::tr("Removable storage devices");
+-        } if (type.toInt() == 3){
++        } if (type.toInt() == 3 || type == "UFS"){
+             return "UFS";
++        }else{
++            return type;
+         }
+     } else if (value == "is_main") {
+         if (is_main == 0) {
+             return QApplication::tr("No");
+-        } else {
++        } else if (is_main == 1){
+             return QApplication::tr("Yes");
+         }
+     } else if (value == "ufs") {
+         return ufs;
+     } else if (value == "ufsrevision") {
+         return ufsrevision;
++    }else if (value == "rota") {
++        return rota;
+     }else {
+         return ""; // 如果传入的 value 不是以上列出的任何一个,返回空字符串
+     }
+ }
++
++void DiskInfo::setValue(QString key, QString value) {
++    if (key == "model") {
++        model = value;
++    } else if (key == "vendor") {
++        vendor = value;
++    } else if (key == "name") {
++        name = value;
++    } else if (key == "size") {
++        size = value;
++    } else if (key == "serial") {
++        serial = value;
++    } else if (key == "frimwareversion") {
++        frimwareversion = value;
++    } else if (key == "interface") {
++        interface = value;
++    } else if (key == "type") {
++        type = value;
++    } else if (key == "is_main") {
++        if( value.contains("No") || value.contains("否") ){
++            is_main = 0;
++        }else{
++            is_main = 1;
++        }
++    }else if (key == "ufs") {
++        ufs = value;
++    }else if (key == "ufsrevision") {
++        ufsrevision = value;
++    }else if (key == "rota") {
++        rota = value;
++    }
++}
+diff --git a/plugins/device-controller/src/hardwareinfo/diskinfo.h b/plugins/device-controller/src/hardwareinfo/diskinfo.h
+index d161611..ba9e67d 100644
+--- a/plugins/device-controller/src/hardwareinfo/diskinfo.h
++++ b/plugins/device-controller/src/hardwareinfo/diskinfo.h
+@@ -19,8 +19,11 @@ public:
+     QString interface{QString{}};
+     QString ufs{QString()};
+     QString ufsrevision{QString{}};
++    QString rota{QString{}};
+ 
+     QString getValue(QString value);
++
++    void setValue(QString key, QString value);
+ };
+ 
+ 
+diff --git a/plugins/device-controller/src/hardwareinfo/faninfo.cpp b/plugins/device-controller/src/hardwareinfo/faninfo.cpp
+index 4351feb..f4e7443 100644
+--- a/plugins/device-controller/src/hardwareinfo/faninfo.cpp
++++ b/plugins/device-controller/src/hardwareinfo/faninfo.cpp
+@@ -19,3 +19,11 @@ QString FanInfo::getValue(QString value) {
+     }
+ }
+ 
++void FanInfo::setValue(QString key, QString value) {
++    if (key == "name") {
++        name = value;
++    } else if (key == "speed") {
++        speed = value;
++    }
++}
++
+diff --git a/plugins/device-controller/src/hardwareinfo/faninfo.h b/plugins/device-controller/src/hardwareinfo/faninfo.h
+index bec51e9..7d4671d 100644
+--- a/plugins/device-controller/src/hardwareinfo/faninfo.h
++++ b/plugins/device-controller/src/hardwareinfo/faninfo.h
+@@ -12,6 +12,8 @@ public:
+     QString speed{QString()};
+ 
+     QString getValue(QString value);
++
++    void setValue(QString key, QString value);
+ };
+ 
+ 
+diff --git a/plugins/device-controller/src/hardwareinfo/graphiccardinfo.cpp b/plugins/device-controller/src/hardwareinfo/graphiccardinfo.cpp
+index 19b123f..f47c0eb 100755
+--- a/plugins/device-controller/src/hardwareinfo/graphiccardinfo.cpp
++++ b/plugins/device-controller/src/hardwareinfo/graphiccardinfo.cpp
+@@ -152,3 +152,47 @@ QString GraphicCardInfo::getGpuType() {
+     }
+     return "";
+ }
++
++void GraphicCardInfo::setValue(QString key, QString value) {
++    if (key == "vendor") {
++        vendor = value;
++    } else if (key == "model") {
++        model = value;
++    } else if (key == "serial") {
++        serial = value;
++    } else if (key == "name") {
++        name = value;
++    } else if (key == "deviceId") {
++        deviceId = value;
++    } else if (key == "driver_now") {
++        driver_now = value;
++    } else if (key == "driver_version_now") {
++        driver_version_now = value;
++    } else if (key == "modalias") {
++        modalias = value;
++    } else if (key == "subsystem") {
++        subsystem = value;
++    } else if (key == "memorysize") {
++        memorysize = value;
++    } else if (key == "businfo") {
++        businfo = value;
++    } else if (key == "clock") {
++        clock = value;
++    }else if (key == "physid") {
++        physid = value;
++    }else if (key == "version") {
++        version = value;
++    }else if (key == "width") {
++        width = value;
++    }else if (key == "gddrsize") {
++        gddrsize = value;
++    }else if (key == "egl_version") {
++        egl_version = value;
++    }else if (key == "egl_apis") {
++        egl_apis = value;
++    }else if (key == "gl_version") {
++        gl_version = value;
++    }else if (key == "glsl_version") {
++        glsl_version = value;
++    }
++}
+diff --git a/plugins/device-controller/src/hardwareinfo/graphiccardinfo.h b/plugins/device-controller/src/hardwareinfo/graphiccardinfo.h
+index 7deeb0e..d7f92d9 100755
+--- a/plugins/device-controller/src/hardwareinfo/graphiccardinfo.h
++++ b/plugins/device-controller/src/hardwareinfo/graphiccardinfo.h
+@@ -25,6 +25,8 @@ public:
+ 
+     QString getValue(QString value);
+ 
++    void setValue(QString key, QString value);
++
+     QString getGpuBusWidth();
+ 
+     QString getGpuType();
+diff --git a/plugins/device-controller/src/hardwareinfo/keyboardinfo.cpp b/plugins/device-controller/src/hardwareinfo/keyboardinfo.cpp
+index 826458a..80a1707 100644
+--- a/plugins/device-controller/src/hardwareinfo/keyboardinfo.cpp
++++ b/plugins/device-controller/src/hardwareinfo/keyboardinfo.cpp
+@@ -22,3 +22,19 @@ QString KeyboardInfo::getValue(QString value) {
+     }
+ }
+ 
++void KeyboardInfo::setValue(QString key, QString value) {
++    if (key == "name") {
++        name = value;
++    } else if (key == "devtype") {
++        devtype = value;
++    } else if (key == "vendor") {
++        vendor = value;
++    } else if (key == "interface") {
++        interface = value;
++    } else if (key == "model") {
++        model = value;
++    } else if (key == "driver") {
++        driver = value;
++    }
++}
++
+diff --git a/plugins/device-controller/src/hardwareinfo/keyboardinfo.h b/plugins/device-controller/src/hardwareinfo/keyboardinfo.h
+index 5481372..aee7d73 100644
+--- a/plugins/device-controller/src/hardwareinfo/keyboardinfo.h
++++ b/plugins/device-controller/src/hardwareinfo/keyboardinfo.h
+@@ -17,6 +17,7 @@ public:
+ 
+     QString getValue(QString value);
+ 
++    void setValue(QString key, QString value);
+ };
+ 
+ #endif //KEYBOARDINFO_H
+diff --git a/plugins/device-controller/src/hardwareinfo/memoryinfo.cpp b/plugins/device-controller/src/hardwareinfo/memoryinfo.cpp
+index e596967..34acc68 100644
+--- a/plugins/device-controller/src/hardwareinfo/memoryinfo.cpp
++++ b/plugins/device-controller/src/hardwareinfo/memoryinfo.cpp
+@@ -66,3 +66,31 @@ QString MemoryInfo::getUsage() {
+         }
+     }
+ }
++
++void MemoryInfo::setValue(QString key, QString value) {
++    if (key == "locator") {
++        locator = value;
++    } else if (key == "totalwidth") {
++        totalwidth = value;
++    } else if (key == "size") {
++        size = value;
++    } else if (key == "serial") {
++        serial = value;
++    } else if (key == "verdor") {
++        verdor = value;
++    } else if (key == "datawidth") {
++        datawidth = value;
++    } else if (key == "type") {
++        type = value;
++    } else if (key == "speed") {
++        speed = value;
++    } else if (key == "configuredspeed") {
++        configuredspeed = value;
++    } else if (key == "banklocator") {
++        banklocator = value;
++    } else if (key == "partnumber") {
++        partnumber = value;
++    } else if (key == "displayname") {
++        displayname = value;
++    }
++}
+diff --git a/plugins/device-controller/src/hardwareinfo/memoryinfo.h b/plugins/device-controller/src/hardwareinfo/memoryinfo.h
+index b365130..03e02de 100644
+--- a/plugins/device-controller/src/hardwareinfo/memoryinfo.h
++++ b/plugins/device-controller/src/hardwareinfo/memoryinfo.h
+@@ -23,6 +23,8 @@ public:
+ 
+     QString getValue(QString value);
+ 
++    void setValue(QString key, QString value);
++
+     QString getUsage();
+ };
+ 
+diff --git a/plugins/device-controller/src/hardwareinfo/monitorinfo.cpp b/plugins/device-controller/src/hardwareinfo/monitorinfo.cpp
+index cbc4f7a..3af01a3 100644
+--- a/plugins/device-controller/src/hardwareinfo/monitorinfo.cpp
++++ b/plugins/device-controller/src/hardwareinfo/monitorinfo.cpp
+@@ -123,4 +123,36 @@ bool MonitorInfo::isMainMonitor(){
+ MonitorInfo::~MonitorInfo() {
+ }
+ 
++void MonitorInfo::setValue(QString key, QString value) {
++    if (key == "vendor") {
++        model = value;
++    } else if (key == "name") {
++        vendor = value;
++    } else if (key == "ratio") {
++        ratio = value;
++    } else if (key == "size") {
++        size = value;
++    } else if (key == "ratio") {
++        ratio = value;
++    } else if (key == "resolution") {
++        resolution = value;
++    } else if (key == "max_resolution") {
++        max_resolution = value;
++    } else if (key == "gamma") {
++        gamma = value;
++    } else if (key == "is_main") {
++        is_main = value;
++    }else if (key == "interface") {
++        interface = value;
++    }else if (key == "model") {
++        model = value;
++    }else if (key == "visible_area") {
++        visible_area = value;
++    }else if (key == "year") {
++        year = value;
++    }else if (key == "week") {
++        week = value;
++    }
++}
++
+ 
+diff --git a/plugins/device-controller/src/hardwareinfo/monitorinfo.h b/plugins/device-controller/src/hardwareinfo/monitorinfo.h
+index 92c40a0..25407d0 100644
+--- a/plugins/device-controller/src/hardwareinfo/monitorinfo.h
++++ b/plugins/device-controller/src/hardwareinfo/monitorinfo.h
+@@ -4,9 +4,10 @@
+ #include <QString>
+ #include "deviceinfo.h"
+ 
+-class MonitorInfo : public DeviceInfo{
++class MonitorInfo : public DeviceInfo {
+ public:
+     MonitorInfo();
++
+     ~MonitorInfo();
+ 
+     QString vendor{QString()}; // 供应商
+@@ -24,7 +25,11 @@ public:
+     QString week{QString{}};
+ 
+     QString getValue(QString value);
++
++    void setValue(QString key, QString value);
++
+     QString getResolution();
++
+     bool isMainMonitor();
+ };
+ 
+diff --git a/plugins/device-controller/src/hardwareinfo/mouseinfo.cpp b/plugins/device-controller/src/hardwareinfo/mouseinfo.cpp
+index 3ca6ef9..892e2f1 100644
+--- a/plugins/device-controller/src/hardwareinfo/mouseinfo.cpp
++++ b/plugins/device-controller/src/hardwareinfo/mouseinfo.cpp
+@@ -22,3 +22,19 @@ QString MouseInfo::getValue(QString value) {
+     }
+ }
+ 
++void MouseInfo::setValue(QString key, QString value) {
++    if (key == "name") {
++        name = value;
++    } else if (key == "devtype") {
++        devtype = value;
++    } else if (key == "vendor") {
++        vendor = value;
++    } else if (key == "interface") {
++        interface = value;
++    } else if (key == "model") {
++        model = value;
++    } else if (key == "driver") {
++        driver = value;
++    }
++}
++
+diff --git a/plugins/device-controller/src/hardwareinfo/mouseinfo.h b/plugins/device-controller/src/hardwareinfo/mouseinfo.h
+index 572f5e3..f7d03ef 100644
+--- a/plugins/device-controller/src/hardwareinfo/mouseinfo.h
++++ b/plugins/device-controller/src/hardwareinfo/mouseinfo.h
+@@ -17,6 +17,7 @@ public:
+ 
+     QString getValue(QString value);
+ 
++    void setValue(QString key, QString value);
+ };
+ 
+ 
+diff --git a/plugins/device-controller/src/hardwareinfo/networkcardinfo.cpp b/plugins/device-controller/src/hardwareinfo/networkcardinfo.cpp
+index cb1f4ad..00e986e 100755
+--- a/plugins/device-controller/src/hardwareinfo/networkcardinfo.cpp
++++ b/plugins/device-controller/src/hardwareinfo/networkcardinfo.cpp
+@@ -1,11 +1,26 @@
+ #include "networkcardinfo.h"
+ #include <QProcess>
+ #include <QDebug>
++#include <QDBusConnection>
++#include <QDBusInterface>
++#include "../include/common.h"
+ 
+ NetworkCardInfo::NetworkCardInfo() {
+ 
+ }
+ 
++NetworkCardInfo::NetworkCardInfo(NetworkCardInfo *others) {
++    bus = others->bus;
++    MAC_addr = others->MAC_addr;
++    isWireless = others->isWireless;
++    ip_addr = others->ip_addr;
++    net_musk = others->net_musk;
++    send_bytes = others->send_bytes;
++    recv_bytes = others->recv_bytes;
++    MTU = others->MTU;
++    modeinfo = others->modeinfo;
++}
++
+ QString NetworkCardInfo::getValue(QString value) {
+     if (value == "vendor") {
+         return vendor;
+@@ -35,6 +50,8 @@ QString NetworkCardInfo::getValue(QString value) {
+         return getNetWorkStatus()[1];
+     } else if (value == "recv_bytes") {
+         return getNetWorkStatus()[0];
++    }else if (value == "size") {
++        return size;
+     } else if (value == "isWireless") {
+         if (isWireless) {
+             return QObject::tr("Wireless");
+@@ -59,18 +76,76 @@ QStringList NetworkCardInfo::getNetWorkStatus() {
+ 
+     QString recv = "0 kb";
+     QString send = "0 kb";
+-    foreach (const QString &line, lines) {
+-        if (line.contains("RX packets")){
+-            recv = line.split("(")[1].split(")")[0];
+-            continue;
++            foreach (const QString &line, lines) {
++            if (line.contains("RX packets")) {
++                recv = line.split("(")[1].split(")")[0];
++                continue;
++            }
++            if (line.contains("TX packets")) {
++                send = line.split("(")[1].split(")")[0];
++                continue;
++            }
+         }
+-        if (line.contains("TX packets")){
+-            send = line.split("(")[1].split(")")[0];
+-            continue;
+-        }
+-    }
+     QStringList list;
+     list.append(recv);
+     list.append(send);
+     return list;
+ }
++
++bool NetworkCardInfo::checkStatus() {
++    if (isWireless == 1) {
++        QDBusConnection bus = QDBusConnection::systemBus();
++        QDBusInterface manager(DBUS_SERVICENAME, DBUS_DRIVER_INFO_TOOL, DBUS_DRIVER_INFO_INTERFACE_TOOL, bus);
++        QDBusMessage response = manager.call("getWirelessNetworkCardStatus");
++        QString result = response.arguments().at(0).toString();
++        if (result == "disabled") {
++            return false;
++        }else{
++            return true;
++        }
++    } else {
++        QDBusConnection bus = QDBusConnection::systemBus();
++        QDBusInterface manager(DBUS_SERVICENAME, DBUS_DRIVER_INFO_TOOL, DBUS_DRIVER_INFO_INTERFACE_TOOL, bus);
++        QDBusMessage response = manager.call("getWiredNetworkCardStatus");
++        QString result = response.arguments().at(0).toString();
++        if (result == "disabled") {
++            return false;
++        }else{
++            return true;
++        }
++    }
++}
++
++void NetworkCardInfo::setValue(QString key, QString value) {
++    if (key == "vendor") {
++        vendor = value;
++    } else if (key == "model") {
++        model = value;
++    } else if (key == "serial") {
++        serial = value;
++    } else if (key == "name") {
++        name = value;
++    } else if (key == "deviceId") {
++        deviceId = value;
++    } else if (key == "driver_now") {
++        driver_now = value;
++    } else if (key == "driver_version_now") {
++        driver_version_now = value;
++    } else if (key == "MAC_addr") {
++        MAC_addr = value;
++    } else if (key == "bus") {
++        bus = value;
++    }else if (key == "ip_addr") {
++        ip_addr = value;
++    }else if (key == "MTU") {
++        MTU = value;
++    }else if (key == "net_musk") {
++        net_musk = value;
++    }else if (key == "send_bytes") {
++        send_bytes = value;
++    }else if (key == "recv_bytes") {
++        recv_bytes = value;
++    }else if (key == "size") {
++        size = value;
++    }
++}
+diff --git a/plugins/device-controller/src/hardwareinfo/networkcardinfo.h b/plugins/device-controller/src/hardwareinfo/networkcardinfo.h
+index c1fe378..21d236c 100755
+--- a/plugins/device-controller/src/hardwareinfo/networkcardinfo.h
++++ b/plugins/device-controller/src/hardwareinfo/networkcardinfo.h
+@@ -5,11 +5,10 @@
+ #include "deviceinfo.h"
+ #include "../driverinfo/drivermodeinfo.h"
+ 
+-class NetworkCardInfo : public HardWareInfo, public DeviceInfo
+-{
++class NetworkCardInfo : public HardWareInfo, public DeviceInfo {
+ public:
+     NetworkCardInfo();
+-
++    NetworkCardInfo(NetworkCardInfo *others);
+     QString bus{QString()};
+     QString MAC_addr{QString()};
+     int isWireless = 0;      // 是否为无线网卡,是(1),否(0)
+@@ -18,10 +17,16 @@ public:
+     QString send_bytes{QString{}};
+     QString recv_bytes{QString{}};
+     QString MTU{QString{}};
++    QString size{QString{}};
+     DriverModeInfo modeinfo;
+ 
+     QString getValue(QString value);
++
++    void setValue(QString key, QString value);
++
+     QStringList getNetWorkStatus();
++
++    bool checkStatus();
+ };
+ 
+ #endif // NETWORKCARDINFO_H
+diff --git a/plugins/device-controller/src/hardwareinfo/pcinfo.h b/plugins/device-controller/src/hardwareinfo/pcinfo.h
+index c955845..13ced9e 100644
+--- a/plugins/device-controller/src/hardwareinfo/pcinfo.h
++++ b/plugins/device-controller/src/hardwareinfo/pcinfo.h
+@@ -9,6 +9,7 @@ public:
+ 
+     QString hostname{QString()};
+     QString sysversion{QString()};
++    QString yearversion{QString()};
+     QString kernelversion{QString()};
+     QString arch{QString()};
+     QString sysbits{QString()};
+diff --git a/plugins/device-controller/src/hardwareinfo/soundcardinfo.cpp b/plugins/device-controller/src/hardwareinfo/soundcardinfo.cpp
+index 8f0f7bb..423af56 100755
+--- a/plugins/device-controller/src/hardwareinfo/soundcardinfo.cpp
++++ b/plugins/device-controller/src/hardwareinfo/soundcardinfo.cpp
+@@ -144,3 +144,73 @@ void SoundCardInfo::enableSoundCard() {
+         qWarning() << "Failed to enable sink" << sinkName << ":\n" << process.readAllStandardError();
+     }
+ }
++
++bool SoundCardInfo::checkStatus() {
++    QProcess process;
++    QStringList env = QProcess::systemEnvironment();
++    env << "LANGUAGE=en_us";
++    process.setEnvironment(env);
++    process.start("pactl list sinks");
++    process.waitForFinished();
++    QString output = process.readAllStandardOutput();
++    process.close();
++    QStringList lines = output.split('\n', QString::SkipEmptyParts);
++
++    QString sinkName;
++    bool isMuted = false;
++    foreach (const QString &line, lines) {
++        if (line.startsWith("Sink #")) {
++            // 处理新的音频输出设备
++            if (!sinkName.isEmpty()) {
++                // 如果之前有状态,输出之前的设备信息
++            }
++            sinkName = line;  // 获取新的 sink 名称
++            isMuted = false;  // 重置静音状态
++        }
++
++        if (line.contains("Mute: yes")) {
++            isMuted = true;  // 设备被静音
++        }
++    }
++    return isMuted;
++}
++
++void SoundCardInfo::setValue(QString key, QString value) {
++    if (key == "vendor") {
++        vendor = value;
++    } else if (key == "model") {
++        model = value;
++    } else if (key == "serial") {
++        serial = value;
++    } else if (key == "serial") {
++        serial = value;
++    } else if (key == "name") {
++        name = value;
++    } else if (key == "deviceId") {
++        deviceId = value;
++    } else if (key == "others") {
++        others = value;
++    } else if (key == "driver_now") {
++        driver_now = value;
++    } else if (key == "driver_version_now") {
++        driver_version_now = value;
++    } else if (key == "sysPath") {
++        sysPath = value;
++    } else if (key == "devicePath") {
++        devicePath = value;
++    } else if (key == "busNumber") {
++        busNumber = value;
++    }else if (key == "deviceNumber") {
++        deviceNumber = value;
++    }else if (key == "VID") {
++        VID = value;
++    }else if (key == "PID") {
++        PID = value;
++    }else if (key == "bus") {
++        bus = value;
++    }else if (key == "clock") {
++        clock = value;
++    }else if (key == "width") {
++        width = value;
++    }
++}
+diff --git a/plugins/device-controller/src/hardwareinfo/soundcardinfo.h b/plugins/device-controller/src/hardwareinfo/soundcardinfo.h
+index 3d6f0cf..fec51fb 100755
+--- a/plugins/device-controller/src/hardwareinfo/soundcardinfo.h
++++ b/plugins/device-controller/src/hardwareinfo/soundcardinfo.h
+@@ -16,10 +16,13 @@ public:
+ 
+     QString getValue(QString value);
+ 
++    void setValue(QString key, QString value);
++
+     void disableSoundCard();
+ 
+     void enableSoundCard();
+ 
++    bool checkStatus();
+ };
+ 
+ #endif // SOUNDCARDINFO_H
+diff --git a/plugins/device-controller/src/hardwareinfogetter.cpp b/plugins/device-controller/src/hardwareinfogetter.cpp
+index f064242..78f19df 100644
+--- a/plugins/device-controller/src/hardwareinfogetter.cpp
++++ b/plugins/device-controller/src/hardwareinfogetter.cpp
+@@ -5,7 +5,10 @@
+ 
+ #include "include/globalsignal.h"
+ #include "include/common.h"
++#include "include/hwinfostorage.h"
+ #include "kom_buriedpoint.h"
++#include "kom-configure.h"
++#include "hwwidget.h"
+ 
+ HardwareInfoGetter *HardwareInfoGetter::instance = new HardwareInfoGetter();
+ 
+@@ -136,6 +139,23 @@ QList<GraphicCardInfo> HardwareInfoGetter::getGraphicHardwares() {
+ 
+         graphicCardList.append(graphicCard);
+     }
++
++    // 检查ini中是否需要删除的信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_GRAPHICCARD).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        if(infoList.at(i).contains("Del")){
++            QStringList devList = infoList.at(i).split(",");
++            QStringList keyAndValue = devList.last().split("=");
++            for (int j = 0; j < graphicCardList.length(); ++j) {
++                if (devList.at(1) == graphicCardList.at(j).model && graphicCardList[j].getValue(HwInfoSingleton::instance().m_graphicCardMap.value(keyAndValue.at(0))) == keyAndValue.at(1)){
++                    graphicCardList.removeAt(j);
++                }
++            }
++        }
++    }
++
+     if (jsonString == "get info error") {
+         m_getFailFlag++;
+     } else {
+@@ -413,6 +433,23 @@ QList<BluetoothInfo> HardwareInfoGetter::getBluetoothHardwares() {
+ 
+         bluetoothList.append(bluetooth);
+     }
++
++    // 检查ini中是否需要删除的信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_BLUETOOTH).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        if(infoList.at(i).contains("Del")){
++            QStringList devList = infoList.at(i).split(",");
++            QStringList keyAndValue = devList.last().split("=");
++            for (int j = 0; j < bluetoothList.length(); ++j) {
++                if (devList.at(1) == bluetoothList.at(j).model && bluetoothList[j].getValue(HwInfoSingleton::instance().m_bluetoothMap.value(keyAndValue.at(0))) == keyAndValue.at(1)){
++                    bluetoothList.removeAt(j);
++                }
++            }
++        }
++    }
++
+     if (jsonString == "get info error") {
+         m_getFailFlag++;
+     } else {
+@@ -466,6 +503,7 @@ QList<NetworkCardInfo> HardwareInfoGetter::getNetworkHardwares() {
+         networkCard.recv_bytes = networkCardJson["recv_bytes"].toString();
+         networkCard.MTU = networkCardJson["MTU"].toString();
+         networkCard.bus = networkCardJson["bus"].toString();
++        networkCard.size = networkCardJson["size"].toString();
+ 
+         QJsonObject modeinfoJson = networkCardJson["modeinfo"].toArray().at(0).toObject();
+         networkCard.modeinfo.driverName = modeinfoJson["driverName"].toString();
+@@ -508,6 +546,22 @@ QList<NetworkCardInfo> HardwareInfoGetter::getNetworkHardwares() {
+         networkCardList.append(networkCard);
+     }
+ 
++    // 检查ini中是否需要删除的信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_NETWORKCARD).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        if(infoList.at(i).contains("Del")){
++            QStringList devList = infoList.at(i).split(",");
++            QStringList keyAndValue = devList.last().split("=");
++            for (int j = 0; j < networkCardList.length(); ++j) {
++                if (devList.at(1) == networkCardList.at(j).name && networkCardList[j].getValue(HwInfoSingleton::instance().m_graphicCardMap.value(keyAndValue.at(0))) == keyAndValue.at(1)){
++                    networkCardList.removeAt(j);
++                }
++            }
++        }
++    }
++
+     bool hasWired = false;
+     bool hasWireless = false;
+     for (int i = 0; i < networkCardList.length(); ++i) {
+@@ -517,7 +571,12 @@ QList<NetworkCardInfo> HardwareInfoGetter::getNetworkHardwares() {
+         if(networkCardList[i].isWireless == 0){
+             hasWired = true;
+         }
++        qDebug() << "isWireless:" << networkCardList[i].isWireless;
+     }
++
++    qDebug() << "hasWired:" << hasWired;
++    qDebug() << "hasWireless:" << hasWireless;
++
+     if(m_data->get("wirelessnetworkcard").toString() == "deactivate" && !hasWireless){
+         NetworkCardInfo networkCard;
+         networkCard.type = DeviceType::NetworkCard;
+@@ -621,6 +680,23 @@ QList<SoundCardInfo> HardwareInfoGetter::getSoundcardHardwares() {
+ 
+         soundCardList.append(soundCard);
+     }
++
++    // 检查ini中是否需要删除的信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_SOUNDCARD).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        if(infoList.at(i).contains("Del")){
++            QStringList devList = infoList.at(i).split(",");
++            QStringList keyAndValue = devList.last().split("=");
++            for (int j = 0; j < soundCardList.length(); ++j) {
++                if (devList.at(1) == soundCardList.at(j).model && soundCardList[j].getValue(HwInfoSingleton::instance().m_soundCardMap.value(keyAndValue.at(0))) == keyAndValue.at(1)){
++                    soundCardList.removeAt(j);
++                }
++            }
++        }
++    }
++
+     if (jsonString == "get info error") {
+         m_getFailFlag++;
+     } else {
+@@ -655,6 +731,7 @@ PcInfo HardwareInfoGetter::getPcInfo() {
+ 
+     pcInfo.hostname = jsonObject.value("hostname").toString();
+     pcInfo.sysversion = jsonObject.value("sysversion").toString();
++    pcInfo.yearversion = jsonObject.value("yearversion").toString();
+     pcInfo.kernelversion = jsonObject.value("kernelversion").toString();
+     pcInfo.arch = jsonObject.value("arch").toString();
+     pcInfo.sysbits = jsonObject.value("sysbits").toString();
+@@ -738,6 +815,22 @@ QList<MemoryInfo> HardwareInfoGetter::getMemoryInfo() {
+         memoryinfoList.append(memory);
+     }
+ 
++    // 检查ini中是否需要删除的信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_MEMORY).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        if(infoList.at(i).contains("Del")){
++            QStringList devList = infoList.at(i).split(",");
++            QStringList keyAndValue = devList.last().split("=");
++            for (int j = 0; j < memoryinfoList.length(); ++j) {
++                if (devList.at(1) == memoryinfoList.at(j).displayname && memoryinfoList[j].getValue(HwInfoSingleton::instance().m_memoryMap.value(keyAndValue.at(0))) == keyAndValue.at(1)){
++                    memoryinfoList.removeAt(j);
++                }
++            }
++        }
++    }
++
+     m_memoryinfoList = memoryinfoList;
+     return m_memoryinfoList;
+ }
+@@ -805,10 +898,27 @@ QList<DiskInfo> HardwareInfoGetter::getDiskInfo() {
+         disk.is_main = memoryJson["is_main"].toInt();
+         disk.ufs = memoryJson["ufs"].toString();
+         disk.ufsrevision = memoryJson["ufsrevision"].toString();
++        disk.rota = memoryJson["rota"].toString();
+ 
+         diskinfoList.append(disk);
+     }
+ 
++    // 检查ini中是否需要删除的信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_DISK).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        if(infoList.at(i).contains("Del")){
++            QStringList devList = infoList.at(i).split(",");
++            QStringList keyAndValue = devList.last().split("=");
++            for (int j = 0; j < diskinfoList.length(); ++j) {
++                if (devList.at(1) == diskinfoList.at(j).model && diskinfoList[j].getValue(HwInfoSingleton::instance().m_diskMap.value(keyAndValue.at(0))) == keyAndValue.at(1)){
++                    diskinfoList.removeAt(j);
++                }
++            }
++        }
++    }
++
+     m_diskinfoList = diskinfoList;
+     return diskinfoList;
+ }
+@@ -881,12 +991,27 @@ QList<MonitorInfo> HardwareInfoGetter::getMonitorInfo() {
+         monitorinfoList.append(monitor);
+     }
+ 
++    // 检查ini中是否需要删除的信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_MONITOR).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        if(infoList.at(i).contains("Del")){
++            QStringList devList = infoList.at(i).split(",");
++            QStringList keyAndValue = devList.last().split("=");
++            for (int j = 0; j < monitorinfoList.length(); ++j) {
++                if (devList.at(1) == monitorinfoList.at(j).name && monitorinfoList[j].getValue(HwInfoSingleton::instance().m_monitorMap.value(keyAndValue.at(0))) == keyAndValue.at(1)){
++                    monitorinfoList.removeAt(j);
++                }
++            }
++        }
++    }
++
+     m_monitorList = monitorinfoList;
+     return monitorinfoList;
+ }
+ 
+ void HardwareInfoGetter::refreshMonitorInfo() {
+-    genMonitorInfoDataFile();
+     m_oldMonitorInfoList.clear();
+     m_oldMonitorInfoList.append(m_monitorList);
+     m_monitorList.clear();
+@@ -927,6 +1052,22 @@ QList<KeyboardInfo> HardwareInfoGetter::getKeyboardInfo() {
+         keyboardinfoList.append(keyboardInfo);
+     }
+ 
++    // 检查ini中是否需要删除的信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_KEYBOARD).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        if(infoList.at(i).contains("Del")){
++            QStringList devList = infoList.at(i).split(",");
++            QStringList keyAndValue = devList.last().split("=");
++            for (int j = 0; j < keyboardinfoList.length(); ++j) {
++                if (devList.at(1) == keyboardinfoList.at(j).name && keyboardinfoList[j].getValue(HwInfoSingleton::instance().m_keyboardMap.value(keyAndValue.at(0))) == keyAndValue.at(1)){
++                    keyboardinfoList.removeAt(j);
++                }
++            }
++        }
++    }
++
+     m_keyboardInfoList = keyboardinfoList;
+     return keyboardinfoList;
+ }
+@@ -967,6 +1108,22 @@ QList<MouseInfo> HardwareInfoGetter::getMouseInfo() {
+         mouseinfoList.append(mouseInfo);
+     }
+ 
++    // 检查ini中是否需要删除的信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_MOUSE).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        if(infoList.at(i).contains("Del")){
++            QStringList devList = infoList.at(i).split(",");
++            QStringList keyAndValue = devList.last().split("=");
++            for (int j = 0; j < mouseinfoList.length(); ++j) {
++                if (devList.at(1) == mouseinfoList.at(j).name && mouseinfoList[j].getValue(HwInfoSingleton::instance().m_mouseMap.value(keyAndValue.at(0))) == keyAndValue.at(1)){
++                    mouseinfoList.removeAt(j);
++                }
++            }
++        }
++    }
++
+     m_mouseInfoList = mouseinfoList;
+     return mouseinfoList;
+ }
+@@ -1035,7 +1192,21 @@ QList<CDInfo> HardwareInfoGetter::getCDInfo() {
+ 
+         cdinfoList.append(cdInfo);
+     }
+-
++    // 检查ini中是否需要删除的信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_CD).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        if(infoList.at(i).contains("Del")){
++            QStringList devList = infoList.at(i).split(",");
++            QStringList keyAndValue = devList.last().split("=");
++            for (int j = 0; j < cdinfoList.length(); ++j) {
++                if (devList.at(1) == cdinfoList.at(j).model && cdinfoList[j].getValue(HwInfoSingleton::instance().m_cdInfoMap.value(keyAndValue.at(0))) == keyAndValue.at(1)){
++                    cdinfoList.removeAt(j);
++                }
++            }
++        }
++    }
+     m_cdInfoList = cdinfoList;
+     return cdinfoList;
+ }
+@@ -1071,6 +1242,22 @@ QList<CameraInfo> HardwareInfoGetter::getCameraInfo() {
+         camerainfoList.append(cameraInfo);
+     }
+ 
++    // 检查ini中是否需要删除的信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_CAMERA).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        if(infoList.at(i).contains("Del")){
++            QStringList devList = infoList.at(i).split(",");
++            QStringList keyAndValue = devList.last().split("=");
++            for (int j = 0; j < camerainfoList.length(); ++j) {
++                if (devList.at(1) == camerainfoList.at(j).name){
++                    camerainfoList.removeAt(j);
++                }
++            }
++        }
++    }
++
+     m_cameraInfoList = camerainfoList;
+     return camerainfoList;
+ }
+@@ -1097,9 +1284,29 @@ QList<FanInfo> HardwareInfoGetter::getFanInfo() {
+         fanInfo.name = memoryJson["name"].toString();
+         fanInfo.speed = memoryJson["speed"].toString();
+ 
++        if(fanInfo.speed == "0" || fanInfo.speed == "0 RPM"){
++            continue;
++        }
++
+         faninfoList.append(fanInfo);
+     }
+ 
++    // 检查ini中是否需要删除的信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_FAN).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        if(infoList.at(i).contains("Del")){
++            QStringList devList = infoList.at(i).split(",");
++            QStringList keyAndValue = devList.last().split("=");
++            for (int j = 0; j < faninfoList.length(); ++j) {
++                if (devList.at(1) == faninfoList.at(j).name){
++                    faninfoList.removeAt(j);
++                }
++            }
++        }
++    }
++
+     m_fanInfoList = faninfoList;
+     return faninfoList;
+ }
+@@ -1136,6 +1343,22 @@ QList<BatteryInfo> HardwareInfoGetter::getBatteryInfo() {
+         batteryinfoList.append(batteryInfo);
+     }
+ 
++    // 检查ini中是否需要删除的信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_BATTERY).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        if(infoList.at(i).contains("Del")){
++            QStringList devList = infoList.at(i).split(",");
++            QStringList keyAndValue = devList.last().split("=");
++            for (int j = 0; j < batteryinfoList.length(); ++j) {
++                if (devList.at(1) == batteryinfoList.at(j).model && batteryinfoList[j].getValue(HwInfoSingleton::instance().m_batteryInfoMap.value(keyAndValue.at(0))) == keyAndValue.at(1)){
++                    batteryinfoList.removeAt(j);
++                }
++            }
++        }
++    }
++
+     m_batteryInfoList = batteryinfoList;
+     return batteryinfoList;
+ }
+@@ -1306,6 +1529,23 @@ QList<BluetoothInfo> HardwareInfoGetter::regetBluetoothHardwares() {
+ 
+         bluetoothList.append(bluetooth);
+     }
++
++    // 检查ini中是否需要删除的信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_BLUETOOTH).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        if(infoList.at(i).contains("Del")){
++            QStringList devList = infoList.at(i).split(",");
++            QStringList keyAndValue = devList.last().split("=");
++            for (int j = 0; j < bluetoothList.length(); ++j) {
++                if (devList.at(1) == bluetoothList.at(j).model && bluetoothList[j].getValue(HwInfoSingleton::instance().m_bluetoothMap.value(keyAndValue.at(0))) == keyAndValue.at(1)){
++                    bluetoothList.removeAt(j);
++                }
++            }
++        }
++    }
++
+     m_bluetoothHardwares = bluetoothList;
+     return bluetoothList;
+ }
+@@ -1346,6 +1586,7 @@ QList<NetworkCardInfo> HardwareInfoGetter::regetNetworkHardwares() {
+         networkCard.recv_bytes = networkCardJson["recv_bytes"].toString();
+         networkCard.MTU = networkCardJson["MTU"].toString();
+         networkCard.bus = networkCardJson["bus"].toString();
++        networkCard.size = networkCardJson["size"].toString();
+ 
+         QJsonObject modeinfoJson = networkCardJson["modeinfo"].toArray().at(0).toObject();
+         networkCard.modeinfo.driverName = modeinfoJson["driverName"].toString();
+@@ -1388,6 +1629,51 @@ QList<NetworkCardInfo> HardwareInfoGetter::regetNetworkHardwares() {
+         networkCardList.append(networkCard);
+     }
+ 
++    bool hasWired = false;
++    bool hasWireless = false;
++    for (int i = 0; i < networkCardList.length(); ++i) {
++        if(networkCardList[i].isWireless == 1){
++            hasWireless = true;
++        }
++        if(networkCardList[i].isWireless == 0){
++            hasWired = true;
++        }
++        qDebug() << "isWireless:" << networkCardList[i].isWireless;
++    }
++
++    qDebug() << "hasWired:" << hasWired;
++    qDebug() << "hasWireless:" << hasWireless;
++
++    if(m_data->get("wirelessnetworkcard").toString() == "deactivate" && !hasWireless){
++        NetworkCardInfo networkCard;
++        networkCard.type = DeviceType::NetworkCard;
++        networkCard.name = "Wireless Network Card";
++        networkCard.isWireless = 1;
++        networkCardList.append(networkCard);
++    }
++    if(m_data->get("wireldnetworkcard").toString() == "deactivate" && !hasWired){
++        NetworkCardInfo networkCard;
++        networkCard.type = DeviceType::NetworkCard;
++        networkCard.name = "wired Network Card";
++        networkCardList.append(networkCard);
++    }
++
++    // 检查ini中是否需要删除的信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_NETWORKCARD).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        if(infoList.at(i).contains("Del")){
++            QStringList devList = infoList.at(i).split(",");
++            QStringList keyAndValue = devList.last().split("=");
++            for (int j = 0; j < networkCardList.length(); ++j) {
++                if (devList.at(1) == networkCardList.at(j).name && networkCardList[j].getValue(HwInfoSingleton::instance().m_graphicCardMap.value(keyAndValue.at(0))) == keyAndValue.at(1)){
++                    networkCardList.removeAt(j);
++                }
++            }
++        }
++    }
++
+     m_networkCardHardwares = networkCardList;
+ 
+     return networkCardList;
+diff --git a/plugins/device-controller/src/hardwareinfowidget.cpp b/plugins/device-controller/src/hardwareinfowidget.cpp
+index 3ea9e0c..2598f3b 100644
+--- a/plugins/device-controller/src/hardwareinfowidget.cpp
++++ b/plugins/device-controller/src/hardwareinfowidget.cpp
+@@ -7,6 +7,7 @@
+ #include "include/common.h"
+ #include "include/globalsignal.h"
+ #include "treeitem.h"
++#include "kom-configure.h"
+ 
+ HardWareInfoWidget::HardWareInfoWidget(QWidget *parent)
+     : QWidget(parent),
+@@ -28,6 +29,13 @@ HardWareInfoWidget::HardWareInfoWidget(QWidget *parent)
+       m_sysVersionLabel2(new QLabel()),
+       m_sysVersionLayout2(new QHBoxLayout),
+       m_sysVersionWidget2(new QWidget),
++      m_sysYearVersionPic(new QLabel()),
++      m_sysYearVersionLabel(new K::TextLabel),
++      m_sysYearVersionLayout(new QHBoxLayout),
++      m_sysYearVersionWidget(new QWidget),
++      m_sysYearVersionLabel2(new QLabel()),
++      m_sysYearVersionLayout2(new QHBoxLayout),
++      m_sysYearVersionWidget2(new QWidget),
+       m_kernelVersionPic(new QLabel()),
+       m_kernelVersionLabel(new K::TextLabel()),
+       m_kernelVersionLayout(new QHBoxLayout),
+@@ -118,7 +126,11 @@ void HardWareInfoWidget::setBasicContentUi() {
+ 
+     m_sysVersionPic->setPixmap(getIcon("ukui-zs-neicun-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
+     m_sysVersionPic->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+-    m_sysVersionLabel->SetText(tr("Operation System Version"));
++    m_sysVersionLabel->SetText(tr("Operation System Name"));
++
++    m_sysYearVersionPic->setPixmap(getIcon("ukui-zs-machine-model-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++    m_sysYearVersionPic->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
++    m_sysYearVersionLabel->SetText(tr("Operation System Version"));
+ 
+     m_kernelVersionPic->setPixmap(getIcon("ukui-zs-kernel-version-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
+     m_kernelVersionPic->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+@@ -159,6 +171,7 @@ void HardWareInfoWidget::setBasicContentUi() {
+     m_hostnameWidget->setFixedWidth(150);
+     m_hostnameLayout2->addWidget(m_hostnameWidget);
+     m_hostnameLayout2->addSpacing(24);
++    m_hostnameLabel2->setFixedHeight(26);
+     m_hostnameLayout2->addWidget(m_hostnameLabel2, Qt::AlignLeft);
+     m_hostnameLayout2->addStretch();
+     m_hostnameLayout2->setContentsMargins(0, 0, 0, 0);
+@@ -176,6 +189,7 @@ void HardWareInfoWidget::setBasicContentUi() {
+     m_sysVersionWidget->setFixedWidth(150);
+     m_sysVersionLayout2->addWidget(m_sysVersionWidget);
+     m_sysVersionLayout2->addSpacing(24);
++    m_sysVersionLabel2->setFixedHeight(26);
+     m_sysVersionLayout2->addWidget(m_sysVersionLabel2, Qt::AlignLeft);
+     m_sysVersionLayout2->addStretch();
+     m_sysVersionLayout2->setContentsMargins(0, 0, 0, 0);
+@@ -183,6 +197,24 @@ void HardWareInfoWidget::setBasicContentUi() {
+     m_sysVersionLayout2->setAlignment(Qt::AlignLeft);
+     m_sysVersionWidget2->setLayout(m_sysVersionLayout2);
+ 
++    m_sysYearVersionLayout->addWidget(m_sysYearVersionPic);
++    m_sysYearVersionLayout->addSpacing(12);
++    m_sysYearVersionLayout->addWidget(m_sysYearVersionLabel);
++    m_sysYearVersionLayout->setContentsMargins(0, 0, 0, 0);
++    m_sysYearVersionLayout->setSpacing(0);
++    m_sysYearVersionLayout->setAlignment(Qt::AlignLeft);
++    m_sysYearVersionWidget->setLayout(m_sysYearVersionLayout);
++    m_sysYearVersionWidget->setFixedWidth(150);
++    m_sysYearVersionLayout2->addWidget(m_sysYearVersionWidget);
++    m_sysYearVersionLayout2->addSpacing(24);
++    m_sysYearVersionLabel2->setFixedHeight(26);
++    m_sysYearVersionLayout2->addWidget(m_sysYearVersionLabel2, Qt::AlignLeft);
++    m_sysYearVersionLayout2->addStretch();
++    m_sysYearVersionLayout2->setContentsMargins(0, 0, 0, 0);
++    m_sysYearVersionLayout2->setSpacing(0);
++    m_sysYearVersionLayout2->setAlignment(Qt::AlignLeft);
++    m_sysYearVersionWidget2->setLayout(m_sysYearVersionLayout2);
++
+     m_kernelVersionLayout->addWidget(m_kernelVersionPic);
+     m_kernelVersionLayout->addSpacing(12);
+     m_kernelVersionLayout->addWidget(m_kernelVersionLabel);
+@@ -193,6 +225,7 @@ void HardWareInfoWidget::setBasicContentUi() {
+     m_kernelVersionWidget->setFixedWidth(150);
+     m_kernelVersionLayout2->addWidget(m_kernelVersionWidget);
+     m_kernelVersionLayout2->addSpacing(24);
++    m_kernelVersionLabel2->setFixedHeight(26);
+     m_kernelVersionLayout2->addWidget(m_kernelVersionLabel2, Qt::AlignLeft);
+     m_kernelVersionLayout2->addStretch();
+     m_kernelVersionLayout2->setContentsMargins(0, 0, 0, 0);
+@@ -210,6 +243,7 @@ void HardWareInfoWidget::setBasicContentUi() {
+     m_archWidget->setFixedWidth(150);
+     m_archLayout2->addWidget(m_archWidget);
+     m_archLayout2->addSpacing(24);
++    m_archLabel2->setFixedHeight(26);
+     m_archLayout2->addWidget(m_archLabel2, Qt::AlignLeft);
+     m_archLayout2->addStretch();
+     m_archLayout2->setContentsMargins(0, 0, 0, 0);
+@@ -227,6 +261,7 @@ void HardWareInfoWidget::setBasicContentUi() {
+     m_sysBitWidget->setFixedWidth(150);
+     m_sysBitLayout2->addWidget(m_sysBitWidget);
+     m_sysBitLayout2->addSpacing(24);
++    m_sysBitLabel2->setFixedHeight(26);
+     m_sysBitLayout2->addWidget(m_sysBitLabel2, Qt::AlignLeft);
+     m_sysBitLayout2->addStretch();
+     m_sysBitLayout2->setContentsMargins(0, 0, 0, 0);
+@@ -244,6 +279,7 @@ void HardWareInfoWidget::setBasicContentUi() {
+     m_manufactorWidget->setFixedWidth(150);
+     m_manufactorLayout2->addWidget(m_manufactorWidget);
+     m_manufactorLayout2->addSpacing(24);
++    m_manufactorLabel2->setFixedHeight(26);
+     m_manufactorLayout2->addWidget(m_manufactorLabel2, Qt::AlignLeft);
+     m_manufactorLayout2->addStretch();
+     m_manufactorLayout2->setContentsMargins(0, 0, 0, 0);
+@@ -261,6 +297,7 @@ void HardWareInfoWidget::setBasicContentUi() {
+     m_versionWidget->setFixedWidth(150);
+     m_versionLayout2->addWidget(m_versionWidget);
+     m_versionLayout2->addSpacing(24);
++    m_versionLabel2->setFixedHeight(26);
+     m_versionLayout2->addWidget(m_versionLabel2, Qt::AlignLeft);
+     m_versionLayout2->addStretch();
+     m_versionLayout2->setContentsMargins(0, 0, 0, 0);
+@@ -278,6 +315,7 @@ void HardWareInfoWidget::setBasicContentUi() {
+     m_modelWidget->setFixedWidth(150);
+     m_modelLayout2->addWidget(m_modelWidget);
+     m_modelLayout2->addSpacing(24);
++    m_modelLabel2->setFixedHeight(26);
+     m_modelLayout2->addWidget(m_modelLabel2, Qt::AlignLeft);
+     m_modelLayout2->addStretch();
+     m_modelLayout2->setContentsMargins(0, 0, 0, 0);
+@@ -295,6 +333,7 @@ void HardWareInfoWidget::setBasicContentUi() {
+     m_serialWidget->setFixedWidth(150);
+     m_serialLayout2->addWidget(m_serialWidget);
+     m_serialLayout2->addSpacing(24);
++    m_serialLabel2->setFixedHeight(26);
+     m_serialLayout2->addWidget(m_serialLabel2, Qt::AlignLeft);
+     m_serialLayout2->addStretch();
+     m_serialLayout2->setContentsMargins(0, 0, 0, 0);
+@@ -308,6 +347,8 @@ void HardWareInfoWidget::setBasicContentUi() {
+     m_pcBasicContentLayout->addSpacing(18);
+     m_pcBasicContentLayout->addWidget(m_sysVersionWidget2);
+     m_pcBasicContentLayout->addSpacing(18);
++    m_pcBasicContentLayout->addWidget(m_sysYearVersionWidget2);
++    m_pcBasicContentLayout->addSpacing(18);
+     m_pcBasicContentLayout->addWidget(m_kernelVersionWidget2);
+     m_pcBasicContentLayout->addSpacing(18);
+     m_pcBasicContentLayout->addWidget(m_archWidget2);
+@@ -409,6 +450,7 @@ void HardWareInfoWidget::getPcInfo() {
+     // 设置内容
+     m_hostnameLabel2->setText(g_infogetter->m_pcinfo.hostname);
+     m_sysVersionLabel2->setText(g_infogetter->m_pcinfo.sysversion);
++    m_sysYearVersionLabel2->setText(g_infogetter->m_pcinfo.yearversion);
+     m_kernelVersionLabel2->setText(g_infogetter->m_pcinfo.kernelversion);
+     m_archLabel2->setText(g_infogetter->m_pcinfo.arch);
+     m_sysBitLabel2->setText(g_infogetter->m_pcinfo.sysbits);
+@@ -451,6 +493,38 @@ void HardWareInfoWidget::getCpuInfo() {
+ void HardWareInfoWidget::getMemoryInfo() {
+     for (int j = 0; j < g_infogetter->m_memoryinfoList.length(); ++j) {
+         HwWidget *m_memoryWidget = new HwWidget(&(g_infogetter->m_memoryinfoList[j]));
++        m_memoryWidget->setAutoFillBackground(true);
++        m_memoryWidgetList.append(m_memoryWidget);
++        QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
++        rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++        m_TreeWidget->addTopLevelItem(rootItem);
++        m_TreeWidget->setItemWidget(rootItem, 0, m_memoryWidget);
++        for (int i = 0; i < m_memoryWidget->m_treeItemList.count(); ++i) {
++            m_TreeWidget->topLevelItem(m_hardwareItems)->addChild(m_memoryWidget->m_treeWidgetItemList.at(i));
++            m_TreeWidget->setItemWidget(m_memoryWidget->m_treeWidgetItemList.at(i), 0,
++                                        m_memoryWidget->m_treeItemList.at(i));
++        }
++        m_hardwareItems++;
++    }
++
++    // 检查ini中是否需要新增的一整条信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_MEMORY).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        QMap<QString,QString> infoMap;
++        if (infoList.at(i).contains("Add")) {
++            QStringList keyValue = infoList.at(i).split(",");
++            for (int j = 1; j < keyValue.length(); ++j) {
++                QStringList keyAndValue = keyValue[j].split("=");
++                infoMap.insert(keyAndValue[0], keyAndValue[1]);
++            }
++        }
++        if (infoMap.isEmpty()){
++            continue;
++        }
++        HwWidget *m_memoryWidget = new HwWidget("Memory", infoMap);
++        m_memoryWidget->setAutoFillBackground(true);
+         m_memoryWidgetList.append(m_memoryWidget);
+         QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+         rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+@@ -463,11 +537,44 @@ void HardWareInfoWidget::getMemoryInfo() {
+         }
+         m_hardwareItems++;
+     }
++
+ }
+ 
+ void HardWareInfoWidget::getGraphicCardInfo() {
+     for (int j = 0; j < g_infogetter->m_graphicHardwares.length(); ++j) {
+         HwWidget *m_graphicCardWidget = new HwWidget(&(g_infogetter->m_graphicHardwares[j]));
++        m_graphicCardWidget->setAutoFillBackground(true);
++        m_graphicCardWidgetList.append(m_graphicCardWidget);
++        QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
++        rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++        m_TreeWidget->addTopLevelItem(rootItem);
++        m_TreeWidget->setItemWidget(rootItem, 0, m_graphicCardWidget);
++        for (int i = 0; i < m_graphicCardWidget->m_treeItemList.count(); ++i) {
++            m_TreeWidget->topLevelItem(m_hardwareItems)->addChild(m_graphicCardWidget->m_treeWidgetItemList.at(i));
++            m_TreeWidget->setItemWidget(m_graphicCardWidget->m_treeWidgetItemList.at(i), 0,
++                                        m_graphicCardWidget->m_treeItemList.at(i));
++        }
++        m_hardwareItems++;
++    }
++
++    // 检查ini中是否需要新增的一整条信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_GRAPHICCARD).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        QMap<QString,QString> infoMap;
++        if (infoList.at(i).contains("Add")) {
++            QStringList keyValue = infoList.at(i).split(",");
++            for (int j = 1; j < keyValue.length(); ++j) {
++                QStringList keyAndValue = keyValue[j].split("=");
++                infoMap.insert(keyAndValue[0], keyAndValue[1]);
++            }
++        }
++        if (infoMap.isEmpty()){
++            continue;
++        }
++        HwWidget *m_graphicCardWidget = new HwWidget("GraphicCard", infoMap);
++        m_graphicCardWidget->setAutoFillBackground(true);
+         m_graphicCardWidgetList.append(m_graphicCardWidget);
+         QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+         rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+@@ -502,6 +609,7 @@ void HardWareInfoWidget::getBaseboardInfo() {
+ void HardWareInfoWidget::getNetworkCardInfo() {
+     for (int j = 0; j < g_infogetter->m_networkCardHardwares.length(); ++j) {
+         HwWidget *m_networkCardWidget = new HwWidget(&(g_infogetter->m_networkCardHardwares[j]));
++        m_networkCardWidget->setAutoFillBackground(true);
+         m_networkCardWidgetList.append(m_networkCardWidget);
+         QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+         rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+@@ -514,11 +622,73 @@ void HardWareInfoWidget::getNetworkCardInfo() {
+         }
+         m_hardwareItems++;
+     }
++
++    // 检查ini中是否需要新增的一整条信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_NETWORKCARD).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        QMap<QString,QString> infoMap;
++        if (infoList.at(i).contains("Add")) {
++            QStringList keyValue = infoList.at(i).split(",");
++            for (int j = 1; j < keyValue.length(); ++j) {
++                QStringList keyAndValue = keyValue[j].split("=");
++                infoMap.insert(keyAndValue[0], keyAndValue[1]);
++            }
++        }
++        if (infoMap.isEmpty()){
++            continue;
++        }
++        HwWidget *m_netWorkCardWidget = new HwWidget("NetworkCard", infoMap);
++        m_netWorkCardWidget->setAutoFillBackground(true);
++        m_networkCardWidgetList.append(m_netWorkCardWidget);
++        QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
++        rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++        m_TreeWidget->addTopLevelItem(rootItem);
++        m_TreeWidget->setItemWidget(rootItem, 0, m_netWorkCardWidget);
++        for (int i = 0; i < m_netWorkCardWidget->m_treeItemList.count(); ++i) {
++            m_TreeWidget->topLevelItem(m_hardwareItems)->addChild(m_netWorkCardWidget->m_treeWidgetItemList.at(i));
++            m_TreeWidget->setItemWidget(m_netWorkCardWidget->m_treeWidgetItemList.at(i), 0,
++                                        m_netWorkCardWidget->m_treeItemList.at(i));
++        }
++        m_hardwareItems++;
++    }
+ }
+ 
+ void HardWareInfoWidget::getDiskInfo() {
+     for (int j = 0; j < g_infogetter->m_diskinfoList.length(); ++j) {
+         HwWidget *m_diskWidget = new HwWidget(&(g_infogetter->m_diskinfoList[j]));
++        m_diskWidget->setAutoFillBackground(true);
++        m_diskWidgetList.append(m_diskWidget);
++        QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
++        rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++        m_TreeWidget->addTopLevelItem(rootItem);
++        m_TreeWidget->setItemWidget(rootItem, 0, m_diskWidget);
++        for (int i = 0; i < m_diskWidget->m_treeItemList.count(); ++i) {
++            m_TreeWidget->topLevelItem(m_hardwareItems)->addChild(m_diskWidget->m_treeWidgetItemList.at(i));
++            m_TreeWidget->setItemWidget(m_diskWidget->m_treeWidgetItemList.at(i), 0,
++                                        m_diskWidget->m_treeItemList.at(i));
++        }
++        m_hardwareItems++;
++    }
++
++    // 检查ini中是否需要新增的一整条信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_DISK).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        QMap<QString,QString> infoMap;
++        if (infoList.at(i).contains("Add")) {
++            QStringList keyValue = infoList.at(i).split(",");
++            for (int j = 1; j < keyValue.length(); ++j) {
++                QStringList keyAndValue = keyValue[j].split("=");
++                infoMap.insert(keyAndValue[0], keyAndValue[1]);
++            }
++        }
++        if (infoMap.isEmpty()){
++            continue;
++        }
++        HwWidget *m_diskWidget = new HwWidget("Disk", infoMap);
+         m_diskWidgetList.append(m_diskWidget);
+         QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+         rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+@@ -531,11 +701,43 @@ void HardWareInfoWidget::getDiskInfo() {
+         }
+         m_hardwareItems++;
+     }
++
+ }
+ 
+ void HardWareInfoWidget::getMonitorInfo() {
+     for (int j = 0; j < g_infogetter->m_monitorList.length(); ++j) {
+         HwWidget *m_monitorWidget = new HwWidget(&(g_infogetter->m_monitorList[j]));
++        m_monitorWidget->setAutoFillBackground(true);
++        m_monitorWidgetList.append(m_monitorWidget);
++        QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
++        rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++        m_TreeWidget->addTopLevelItem(rootItem);
++        m_TreeWidget->setItemWidget(rootItem, 0, m_monitorWidget);
++        for (int i = 0; i < m_monitorWidget->m_treeItemList.count(); ++i) {
++            m_TreeWidget->topLevelItem(m_hardwareItems)->addChild(m_monitorWidget->m_treeWidgetItemList.at(i));
++            m_TreeWidget->setItemWidget(m_monitorWidget->m_treeWidgetItemList.at(i), 0,
++                                        m_monitorWidget->m_treeItemList.at(i));
++        }
++        m_hardwareItems++;
++    }
++
++    // 检查ini中是否需要新增的一整条信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_MONITOR).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        QMap<QString,QString> infoMap;
++        if (infoList.at(i).contains("Add")) {
++            QStringList keyValue = infoList.at(i).split(",");
++            for (int j = 1; j < keyValue.length(); ++j) {
++                QStringList keyAndValue = keyValue[j].split("=");
++                infoMap.insert(keyAndValue[0], keyAndValue[1]);
++            }
++        }
++        if (infoMap.isEmpty()){
++            continue;
++        }
++        HwWidget *m_monitorWidget = new HwWidget("Monitor", infoMap);
+         m_monitorWidgetList.append(m_monitorWidget);
+         QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+         rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+@@ -553,6 +755,7 @@ void HardWareInfoWidget::getMonitorInfo() {
+ void HardWareInfoWidget::getSoundCardInfo() {
+     for (int j = 0; j < g_infogetter->m_soundCardHardwares.length(); ++j) {
+         HwWidget *m_soundCardWidget = new HwWidget(&(g_infogetter->m_soundCardHardwares[j]));
++        m_soundCardWidget->setAutoFillBackground(true);
+         m_soundCardWidgetList.append(m_soundCardWidget);
+ 
+         QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+@@ -566,11 +769,42 @@ void HardWareInfoWidget::getSoundCardInfo() {
+         }
+         m_hardwareItems++;
+     }
++
++    // 检查ini中是否需要新增的一整条信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_SOUNDCARD).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        QMap<QString, QString> infoMap;
++        if (infoList.at(i).contains("Add")) {
++            QStringList keyValue = infoList.at(i).split(",");
++            for (int j = 1; j < keyValue.length(); ++j) {
++                QStringList keyAndValue = keyValue[j].split("=");
++                infoMap.insert(keyAndValue[0], keyAndValue[1]);
++            }
++        }
++        if (infoMap.isEmpty()) {
++            continue;
++        }
++        HwWidget *m_soundCardWidget = new HwWidget("SoundCard", infoMap);
++        m_soundCardWidgetList.append(m_soundCardWidget);
++        QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
++        rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++        m_TreeWidget->addTopLevelItem(rootItem);
++        m_TreeWidget->setItemWidget(rootItem, 0, m_soundCardWidget);
++        for (int i = 0; i < m_soundCardWidget->m_treeItemList.count(); ++i) {
++            m_TreeWidget->topLevelItem(m_hardwareItems)->addChild(m_soundCardWidget->m_treeWidgetItemList.at(i));
++            m_TreeWidget->setItemWidget(m_soundCardWidget->m_treeWidgetItemList.at(i), 0,
++                                        m_soundCardWidget->m_treeItemList.at(i));
++        }
++        m_hardwareItems++;
++    }
+ }
+ 
+ void HardWareInfoWidget::getKeyboardInfo() {
+     for (int j = 0; j < g_infogetter->m_keyboardInfoList.length(); ++j) {
+         HwWidget *m_keyboardWidget = new HwWidget(&(g_infogetter->m_keyboardInfoList[j]));
++        m_keyboardWidget->setAutoFillBackground(true);
+         m_keyboardWidgetList.append(m_keyboardWidget);
+ 
+         QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+@@ -584,11 +818,44 @@ void HardWareInfoWidget::getKeyboardInfo() {
+         }
+         m_hardwareItems++;
+     }
++
++    // 检查ini中是否需要新增的一整条信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_KEYBOARD).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        QMap<QString, QString> infoMap;
++        if (infoList.at(i).contains("Add")) {
++            QStringList keyValue = infoList.at(i).split(",");
++            for (int j = 1; j < keyValue.length(); ++j) {
++                QStringList keyAndValue = keyValue[j].split("=");
++                infoMap.insert(keyAndValue[0], keyAndValue[1]);
++            }
++        }
++        if (infoMap.isEmpty()) {
++            continue;
++        }
++        HwWidget *m_keyBoardWidget = new HwWidget("Keyboard", infoMap);
++        m_keyBoardWidget->setAutoFillBackground(true);
++        m_keyboardWidgetList.append(m_keyBoardWidget);
++        QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
++        rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++        m_TreeWidget->addTopLevelItem(rootItem);
++        m_TreeWidget->setItemWidget(rootItem, 0, m_keyBoardWidget);
++        for (int i = 0; i < m_keyBoardWidget->m_treeItemList.count(); ++i) {
++            m_TreeWidget->topLevelItem(m_hardwareItems)->addChild(m_keyBoardWidget->m_treeWidgetItemList.at(i));
++            m_TreeWidget->setItemWidget(m_keyBoardWidget->m_treeWidgetItemList.at(i), 0,
++                                        m_keyBoardWidget->m_treeItemList.at(i));
++        }
++        m_hardwareItems++;
++    }
++
+ }
+ 
+ void HardWareInfoWidget::getMouseInfo() {
+     for (int j = 0; j < g_infogetter->m_mouseInfoList.length(); ++j) {
+         HwWidget *m_mouseWidget = new HwWidget(&(g_infogetter->m_mouseInfoList[j]));
++        m_mouseWidget->setAutoFillBackground(true);
+         m_mouseWidgetList.append(m_mouseWidget);
+ 
+         QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+@@ -602,11 +869,43 @@ void HardWareInfoWidget::getMouseInfo() {
+         }
+         m_hardwareItems++;
+     }
++
++    // 检查ini中是否需要新增的一整条信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_MOUSE).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        QMap<QString, QString> infoMap;
++        if (infoList.at(i).contains("Add")) {
++            QStringList keyValue = infoList.at(i).split(",");
++            for (int j = 1; j < keyValue.length(); ++j) {
++                QStringList keyAndValue = keyValue[j].split("=");
++                infoMap.insert(keyAndValue[0], keyAndValue[1]);
++            }
++        }
++        if (infoMap.isEmpty()) {
++            continue;
++        }
++        HwWidget *m_keyBoardWidget = new HwWidget("Mouse", infoMap);
++        m_keyBoardWidget->setAutoFillBackground(true);
++        m_keyboardWidgetList.append(m_keyBoardWidget);
++        QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
++        rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++        m_TreeWidget->addTopLevelItem(rootItem);
++        m_TreeWidget->setItemWidget(rootItem, 0, m_keyBoardWidget);
++        for (int i = 0; i < m_keyBoardWidget->m_treeItemList.count(); ++i) {
++            m_TreeWidget->topLevelItem(m_hardwareItems)->addChild(m_keyBoardWidget->m_treeWidgetItemList.at(i));
++            m_TreeWidget->setItemWidget(m_keyBoardWidget->m_treeWidgetItemList.at(i), 0,
++                                        m_keyBoardWidget->m_treeItemList.at(i));
++        }
++        m_hardwareItems++;
++    }
+ }
+ 
+ void HardWareInfoWidget::getBluetoothInfo() {
+     for (int j = 0; j < g_infogetter->m_bluetoothHardwares.length(); ++j) {
+         HwWidget *m_bluetoothWidget = new HwWidget(&(g_infogetter->m_bluetoothHardwares[j]));
++        m_bluetoothWidget->setAutoFillBackground(true);
+         m_bluetoothWidgetList.append(m_bluetoothWidget);
+ 
+         QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+@@ -620,11 +919,43 @@ void HardWareInfoWidget::getBluetoothInfo() {
+         }
+         m_hardwareItems++;
+     }
++
++    // 检查ini中是否需要新增的一整条信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_BLUETOOTH).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        QMap<QString, QString> infoMap;
++        if (infoList.at(i).contains("Add")) {
++            QStringList keyValue = infoList.at(i).split(",");
++            for (int j = 1; j < keyValue.length(); ++j) {
++                QStringList keyAndValue = keyValue[j].split("=");
++                infoMap.insert(keyAndValue[0], keyAndValue[1]);
++            }
++        }
++        if (infoMap.isEmpty()) {
++            continue;
++        }
++        HwWidget *m_bluetoothWidget = new HwWidget("Bluetooth", infoMap);
++        m_bluetoothWidget->setAutoFillBackground(true);
++        m_bluetoothWidgetList.append(m_bluetoothWidget);
++        QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
++        rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++        m_TreeWidget->addTopLevelItem(rootItem);
++        m_TreeWidget->setItemWidget(rootItem, 0, m_bluetoothWidget);
++        for (int i = 0; i < m_bluetoothWidget->m_treeItemList.count(); ++i) {
++            m_TreeWidget->topLevelItem(m_hardwareItems)->addChild(m_bluetoothWidget->m_treeWidgetItemList.at(i));
++            m_TreeWidget->setItemWidget(m_bluetoothWidget->m_treeWidgetItemList.at(i), 0,
++                                        m_bluetoothWidget->m_treeItemList.at(i));
++        }
++        m_hardwareItems++;
++    }
+ }
+ 
+ void HardWareInfoWidget::getCDInfo() {
+     for (int j = 0; j < g_infogetter->m_cdInfoList.length(); ++j) {
+         HwWidget *m_cdWidget = new HwWidget(&(g_infogetter->m_cdInfoList[j]));
++        m_cdWidget->setAutoFillBackground(true);
+         m_cdWidgetList.append(m_cdWidget);
+ 
+         QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+@@ -637,11 +968,44 @@ void HardWareInfoWidget::getCDInfo() {
+         }
+         m_hardwareItems++;
+     }
++
++
++    // 检查ini中是否需要新增的一整条信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_CD).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        QMap<QString, QString> infoMap;
++        if (infoList.at(i).contains("Add")) {
++            QStringList keyValue = infoList.at(i).split(",");
++            for (int j = 1; j < keyValue.length(); ++j) {
++                QStringList keyAndValue = keyValue[j].split("=");
++                infoMap.insert(keyAndValue[0], keyAndValue[1]);
++            }
++        }
++        if (infoMap.isEmpty()) {
++            continue;
++        }
++        HwWidget *m_cdWidget = new HwWidget("Cd", infoMap);
++        m_cdWidget->setAutoFillBackground(true);
++        m_cdWidgetList.append(m_cdWidget);
++        QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
++        rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++        m_TreeWidget->addTopLevelItem(rootItem);
++        m_TreeWidget->setItemWidget(rootItem, 0, m_cdWidget);
++        for (int i = 0; i < m_cdWidget->m_treeItemList.count(); ++i) {
++            m_TreeWidget->topLevelItem(m_hardwareItems)->addChild(m_cdWidget->m_treeWidgetItemList.at(i));
++            m_TreeWidget->setItemWidget(m_cdWidget->m_treeWidgetItemList.at(i), 0,
++                                        m_cdWidget->m_treeItemList.at(i));
++        }
++        m_hardwareItems++;
++    }
+ }
+ 
+ void HardWareInfoWidget::getCameraInfo() {
+     for (int j = 0; j < g_infogetter->m_cameraInfoList.length(); ++j) {
+         HwWidget *m_cameraWidget = new HwWidget(&(g_infogetter->m_cameraInfoList[j]));
++        m_cameraWidget->setAutoFillBackground(true);
+         m_cameraWidgetList.append(m_cameraWidget);
+ 
+         QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+@@ -655,11 +1019,43 @@ void HardWareInfoWidget::getCameraInfo() {
+         }
+         m_hardwareItems++;
+     }
++
++    // 检查ini中是否需要新增的一整条信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_CAMERA).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        QMap<QString, QString> infoMap;
++        if (infoList.at(i).contains("Add")) {
++            QStringList keyValue = infoList.at(i).split(",");
++            for (int j = 1; j < keyValue.length(); ++j) {
++                QStringList keyAndValue = keyValue[j].split("=");
++                infoMap.insert(keyAndValue[0], keyAndValue[1]);
++            }
++        }
++        if (infoMap.isEmpty()) {
++            continue;
++        }
++        HwWidget *m_cameraWidget = new HwWidget("Camera", infoMap);
++        m_cameraWidget->setAutoFillBackground(true);
++        m_cameraWidgetList.append(m_cameraWidget);
++        QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
++        rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++        m_TreeWidget->addTopLevelItem(rootItem);
++        m_TreeWidget->setItemWidget(rootItem, 0, m_cameraWidget);
++        for (int i = 0; i < m_cameraWidget->m_treeItemList.count(); ++i) {
++            m_TreeWidget->topLevelItem(m_hardwareItems)->addChild(m_cameraWidget->m_treeWidgetItemList.at(i));
++            m_TreeWidget->setItemWidget(m_cameraWidget->m_treeWidgetItemList.at(i), 0,
++                                        m_cameraWidget->m_treeItemList.at(i));
++        }
++        m_hardwareItems++;
++    }
+ }
+ 
+ void HardWareInfoWidget::getFanInfo() {
+     for (int j = 0; j < g_infogetter->m_fanInfoList.length(); ++j) {
+         HwWidget *m_fanWidget = new HwWidget(&(g_infogetter->m_fanInfoList[j]));
++        m_fanWidget->setAutoFillBackground(true);
+         m_fanWidgetList.append(m_fanWidget);
+ 
+         QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+@@ -672,11 +1068,43 @@ void HardWareInfoWidget::getFanInfo() {
+         }
+         m_hardwareItems++;
+     }
++
++    // 检查ini中是否需要新增的一整条信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_FAN).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        QMap<QString, QString> infoMap;
++        if (infoList.at(i).contains("Add")) {
++            QStringList keyValue = infoList.at(i).split(",");
++            for (int j = 1; j < keyValue.length(); ++j) {
++                QStringList keyAndValue = keyValue[j].split("=");
++                infoMap.insert(keyAndValue[0], keyAndValue[1]);
++            }
++        }
++        if (infoMap.isEmpty()) {
++            continue;
++        }
++        HwWidget *m_fanWidget = new HwWidget("Fan", infoMap);
++        m_fanWidget->setAutoFillBackground(true);
++        m_fanWidgetList.append(m_fanWidget);
++        QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
++        rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++        m_TreeWidget->addTopLevelItem(rootItem);
++        m_TreeWidget->setItemWidget(rootItem, 0, m_fanWidget);
++        for (int i = 0; i < m_fanWidget->m_treeItemList.count(); ++i) {
++            m_TreeWidget->topLevelItem(m_hardwareItems)->addChild(m_fanWidget->m_treeWidgetItemList.at(i));
++            m_TreeWidget->setItemWidget(m_fanWidget->m_treeWidgetItemList.at(i), 0,
++                                        m_fanWidget->m_treeItemList.at(i));
++        }
++        m_hardwareItems++;
++    }
+ }
+ 
+ void HardWareInfoWidget::getBatteryInfo() {
+     for (int j = 0; j < g_infogetter->m_batteryInfoList.length(); ++j) {
+         HwWidget *m_batteryWidget = new HwWidget(&(g_infogetter->m_batteryInfoList[j]));
++        m_batteryWidget->setAutoFillBackground(true);
+         m_batteryWidgetList.append(m_batteryWidget);
+ 
+         QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+@@ -690,6 +1118,37 @@ void HardWareInfoWidget::getBatteryInfo() {
+         }
+         m_hardwareItems++;
+     }
++
++    // 检查ini中是否需要新增的一整条信息
++    kom::Configure conf;
++    QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_BATTERY).toStringList().join(",");
++    QStringList infoList = info.split("|");
++    for (int i = 0; i < infoList.length(); ++i) {
++        QMap<QString, QString> infoMap;
++        if (infoList.at(i).contains("Add")) {
++            QStringList keyValue = infoList.at(i).split(",");
++            for (int j = 1; j < keyValue.length(); ++j) {
++                QStringList keyAndValue = keyValue[j].split("=");
++                infoMap.insert(keyAndValue[0], keyAndValue[1]);
++            }
++        }
++        if (infoMap.isEmpty()) {
++            continue;
++        }
++        HwWidget *m_batteryWidget = new HwWidget("Battery", infoMap);
++        m_batteryWidget->setAutoFillBackground(true);
++        m_batteryWidgetList.append(m_batteryWidget);
++        QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
++        rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++        m_TreeWidget->addTopLevelItem(rootItem);
++        m_TreeWidget->setItemWidget(rootItem, 0, m_batteryWidget);
++        for (int i = 0; i < m_batteryWidget->m_treeItemList.count(); ++i) {
++            m_TreeWidget->topLevelItem(m_hardwareItems)->addChild(m_batteryWidget->m_treeWidgetItemList.at(i));
++            m_TreeWidget->setItemWidget(m_batteryWidget->m_treeWidgetItemList.at(i), 0,
++                                        m_batteryWidget->m_treeItemList.at(i));
++        }
++        m_hardwareItems++;
++    }
+ }
+ 
+ void HardWareInfoWidget::setIconColor() {
+@@ -703,6 +1162,10 @@ void HardWareInfoWidget::setIconColor() {
+         pixmap = icon.pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_sysVersionPic->setPixmap(drawSymbolicColoredPixmap(pixmap, "white"));
+ 
++        icon = getIcon("ukui-zs-machine-model-symbolic", HARDWAREINFOWIDGETBUTTONSIZE);
++        pixmap = icon.pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_sysYearVersionPic->setPixmap(drawSymbolicColoredPixmap(pixmap, "white"));
++
+         icon = getIcon("ukui-zs-kernel-version-symbolic", HARDWAREINFOWIDGETBUTTONSIZE);
+         pixmap = icon.pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_kernelVersionPic->setPixmap(drawSymbolicColoredPixmap(pixmap, "white"));
+@@ -719,6 +1182,10 @@ void HardWareInfoWidget::setIconColor() {
+         pixmap = icon.pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_manufactorPic->setPixmap(drawSymbolicColoredPixmap(pixmap, "white"));
+ 
++        icon = getIcon("ukui-miracast-symbolic", HARDWAREINFOWIDGETBUTTONSIZE);
++        pixmap = icon.pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_versionPic->setPixmap(drawSymbolicColoredPixmap(pixmap, "white"));
++
+         icon = getIcon("ukui-zs-machine-model-symbolic", HARDWAREINFOWIDGETBUTTONSIZE);
+         pixmap = icon.pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_modelPic->setPixmap(drawSymbolicColoredPixmap(pixmap, "white"));
+@@ -735,6 +1202,10 @@ void HardWareInfoWidget::setIconColor() {
+         pixmap = icon.pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_sysVersionPic->setPixmap(drawSymbolicColoredPixmap(pixmap, "black"));
+ 
++        icon = getIcon("ukui-zs-machine-model-symbolic", HARDWAREINFOWIDGETBUTTONSIZE);
++        pixmap = icon.pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_sysYearVersionPic->setPixmap(drawSymbolicColoredPixmap(pixmap, "black"));
++
+         icon = getIcon("ukui-zs-kernel-version-symbolic", HARDWAREINFOWIDGETBUTTONSIZE);
+         pixmap = icon.pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_kernelVersionPic->setPixmap(drawSymbolicColoredPixmap(pixmap, "black"));
+@@ -751,6 +1222,10 @@ void HardWareInfoWidget::setIconColor() {
+         pixmap = icon.pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_manufactorPic->setPixmap(drawSymbolicColoredPixmap(pixmap, "black"));
+ 
++        icon = getIcon("ukui-miracast-symbolic", HARDWAREINFOWIDGETBUTTONSIZE);
++        pixmap = icon.pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_versionPic->setPixmap(drawSymbolicColoredPixmap(pixmap, "black"));
++
+         icon = getIcon("ukui-zs-machine-model-symbolic", HARDWAREINFOWIDGETBUTTONSIZE);
+         pixmap = icon.pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_modelPic->setPixmap(drawSymbolicColoredPixmap(pixmap, "black"));
+@@ -897,6 +1372,7 @@ void HardWareInfoWidget::addDiskItem() {
+             if (!nameList.contains(newDiskInfoList[i].name)) {
+                 //将新加入的设备展示在界面中
+                 HwWidget *m_diskWidget = new HwWidget(&(newDiskInfoList[i]));
++                m_diskWidget->setAutoFillBackground(true);
+                 m_diskWidgetList.append(m_diskWidget);
+                 QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+                 rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+@@ -926,6 +1402,7 @@ void HardWareInfoWidget::addMouseItem() {
+             if (!nameList.contains(newMouseInfoList[i].name)) {
+                 //将新加入的设备展示在界面中
+                 HwWidget *m_mouseWidget = new HwWidget(&(newMouseInfoList[i]));
++                m_mouseWidget->setAutoFillBackground(true);
+                 m_mouseWidgetList.append(m_mouseWidget);
+                 QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+                 rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+@@ -954,6 +1431,7 @@ void HardWareInfoWidget::addKeyboardItem() {
+             if (!nameList.contains(newKeyboardInfoList[i].name)) {
+                 //将新加入的设备展示在界面中
+                 HwWidget *m_keyboardWidget = new HwWidget(&(newKeyboardInfoList[i]));
++                m_keyboardWidget->setAutoFillBackground(true);
+                 m_keyboardWidgetList.append(m_keyboardWidget);
+                 QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+                 rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+@@ -975,21 +1453,23 @@ void HardWareInfoWidget::addBluetoothItem() {
+     QList<BluetoothInfo> newBluetoothInfoList = g_infogetter->m_bluetoothHardwares;
+     for (int i = 0; i < g_infogetter->m_oldBluetoothInfoList.length(); ++i) {
+         //将新加入的设备展示在界面-
+-        for (int j = 0; j < m_bluetoothWidgetList.length(); ++j) {
++        for (int j = m_bluetoothWidgetList.length() - 1; j >= 0; --j) {
+             if (m_bluetoothWidgetList[j]->m_bluetoothAddress == g_infogetter->m_oldBluetoothInfoList[i].address) {
+                 HwWidget *hwWidget = m_bluetoothWidgetList[j];
++                hwWidget->setAutoFillBackground(true);
+                 m_bluetoothWidgetList.removeOne(m_bluetoothWidgetList[j]);
+                 int x = hwWidget->parent()->findChildren<HwWidget *>().indexOf(hwWidget);
+                 delete m_TreeWidget->takeTopLevelItem(x);
++                m_hardwareItems--;
+             }
+         }
+-        m_hardwareItems--;
+         m_TreeWidget->setFixedHeight(m_TreeWidget->height() - TREEWIDGETITEMSIZEHINT.height());
+     }
+ 
+     for (int i = 0; i < newBluetoothInfoList.length(); ++i) {
+         //将新加入的设备展示在界面中
+         HwWidget *m_bluetoothWidget = new HwWidget(&(newBluetoothInfoList[i]));
++        m_bluetoothWidget->setAutoFillBackground(true);
+         m_bluetoothWidgetList.append(m_bluetoothWidget);
+         QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+         rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+@@ -1048,6 +1528,7 @@ void HardWareInfoWidget::addCdItem() {
+             if (!nameList.contains(newCdInfoList[i].name)) {
+                 //将新加入的设备展示在界面中
+                 HwWidget *m_cdWidget = new HwWidget(&(newCdInfoList[i]));
++                m_cdWidget->setAutoFillBackground(true);
+                 m_cdWidgetList.append(m_cdWidget);
+                 QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+                 rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+@@ -1231,16 +1712,15 @@ void HardWareInfoWidget::monitorChangeSlot() {
+ }
+ 
+ void HardWareInfoWidget::removeMonitorItem() {
+-    QStringList nameList;
++    QStringList interfaceList;
+     for (int i = 0; i < g_infogetter->m_monitorList.length(); ++i) {
+-        nameList.append(g_infogetter->m_monitorList[i].name);
++        interfaceList.append(g_infogetter->m_monitorList[i].interface);
+     }
+     for (int i = 0; i < g_infogetter->m_oldMonitorInfoList.length(); ++i) {
+-        if (!nameList.contains(g_infogetter->m_oldMonitorInfoList[i].name)) {
++        if (!interfaceList.contains(g_infogetter->m_oldMonitorInfoList[i].interface)) {
+             //将移除的设备从界面删除
+             for (int j = 0; j < m_monitorWidgetList.length(); ++j) {
+-                if (m_monitorWidgetList[j]->getDevName() == g_infogetter->m_oldMonitorInfoList[i].name) {
+-                    MonitorInfo *moinfo = &(g_infogetter->m_oldMonitorInfoList[i]);
++                if (m_monitorWidgetList[j]->getMonitorInterface() == g_infogetter->m_oldMonitorInfoList[i].interface) {
+                     HwWidget *hwWidget = m_monitorWidgetList[j];
+                     m_monitorWidgetList[j]->spreadIn();
+                     m_monitorWidgetList.removeOne(m_monitorWidgetList[j]);
+@@ -1255,14 +1735,15 @@ void HardWareInfoWidget::removeMonitorItem() {
+ }
+ 
+ void HardWareInfoWidget::addMonitorItem() {
+-    QStringList nameList;
++    QStringList interfaceList;
+     for (int i = 0; i < g_infogetter->m_oldMonitorInfoList.length(); ++i) {
+-        nameList.append(g_infogetter->m_oldMonitorInfoList[i].name);
++        interfaceList.append(g_infogetter->m_oldMonitorInfoList[i].interface);
+     }
+     for (int i = 0; i < g_infogetter->m_monitorList.length(); ++i) {
+-        if (!nameList.contains(g_infogetter->m_monitorList[i].name)) {
++        if (!interfaceList.contains(g_infogetter->m_monitorList[i].interface)) {
+             //将新加入的设备展示在界面中
+             HwWidget *m_monitorWidget = new HwWidget(&(g_infogetter->m_monitorList[i]));
++            m_monitorWidget->setAutoFillBackground(true);
+             m_monitorWidgetList.append(m_monitorWidget);
+             QTreeWidgetItem *rootItem = new QTreeWidgetItem(m_TreeWidget);
+             rootItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+diff --git a/plugins/device-controller/src/hardwareinfowidget.h b/plugins/device-controller/src/hardwareinfowidget.h
+index ec6ebcb..d199fcf 100644
+--- a/plugins/device-controller/src/hardwareinfowidget.h
++++ b/plugins/device-controller/src/hardwareinfowidget.h
+@@ -53,7 +53,7 @@ private:
+     QHBoxLayout *m_hostnameLayout2 = nullptr;
+     QWidget *m_hostnameWidget2 = nullptr;
+ 
+-    QLabel *m_sysVersionPic = nullptr;          // 操作系统版本
++    QLabel *m_sysVersionPic = nullptr;          // 操作系统版本   v10 sp1
+     K::TextLabel *m_sysVersionLabel = nullptr;
+     QHBoxLayout *m_sysVersionLayout = nullptr;
+     QWidget *m_sysVersionWidget = nullptr;
+@@ -61,6 +61,14 @@ private:
+     QHBoxLayout *m_sysVersionLayout2 = nullptr;
+     QWidget *m_sysVersionWidget2 = nullptr;
+ 
++    QLabel *m_sysYearVersionPic = nullptr;          // 操作系统版本号  2503
++    K::TextLabel *m_sysYearVersionLabel = nullptr;
++    QHBoxLayout *m_sysYearVersionLayout = nullptr;
++    QWidget *m_sysYearVersionWidget = nullptr;
++    QLabel *m_sysYearVersionLabel2 = nullptr;
++    QHBoxLayout *m_sysYearVersionLayout2 = nullptr;
++    QWidget *m_sysYearVersionWidget2 = nullptr;
++
+     QLabel *m_kernelVersionPic = nullptr;       // 内核版本
+     K::TextLabel *m_kernelVersionLabel = nullptr;
+     QHBoxLayout *m_kernelVersionLayout = nullptr;
+diff --git a/plugins/device-controller/src/hotplug/devicemonitorthread.cpp b/plugins/device-controller/src/hotplug/devicemonitorthread.cpp
+index 6bae6ca..461cc7a 100644
+--- a/plugins/device-controller/src/hotplug/devicemonitorthread.cpp
++++ b/plugins/device-controller/src/hotplug/devicemonitorthread.cpp
+@@ -2,6 +2,7 @@
+ #include <libudev.h>
+ #include <iostream>
+ #include <QDebug>
++#include <QDateTime>
+ 
+ DeviceMonitorThread::DeviceMonitorThread(QObject *parent)
+         : QThread(parent) {
+@@ -41,6 +42,26 @@ void DeviceMonitorThread::run() {
+                     const char *devpath = udev_device_get_devpath(dev);
+                     QString devID = getDeviceID(dev);
+ 
++                    qint64 currentTime = QDateTime::currentMSecsSinceEpoch();
++                    auto it = lastDeviceEvents.begin();
++                    while (it != lastDeviceEvents.end()) {
++                        if (currentTime - it.value() > RECORD_LIFETIME) {
++                            it = lastDeviceEvents.erase(it); // 移除超过 5 秒的记录
++                        } else {
++                            ++it;
++                        }
++                    }
++
++                    // 检查重复事件
++                    if (lastDeviceEvents.contains(devpath)) {
++                        if (currentTime - lastDeviceEvents[devpath] < EVENT_TIMEOUT) {
++                            // 如果 2 秒内已处理过相同 devpath 的事件,忽略
++                            udev_device_unref(dev);
++                            continue;
++                        }
++                    }
++                    lastDeviceEvents[devpath] = currentTime;
++
+                     if (!(action == "add" || action == "remove" || (action == "change") && strcmp(devtype, "drm_minor") == 0 && strcmp(subsystem, "drm") == 0)) {
+                         continue;
+                     }
+diff --git a/plugins/device-controller/src/hotplug/devicemonitorthread.h b/plugins/device-controller/src/hotplug/devicemonitorthread.h
+index a5decf8..34395f9 100644
+--- a/plugins/device-controller/src/hotplug/devicemonitorthread.h
++++ b/plugins/device-controller/src/hotplug/devicemonitorthread.h
+@@ -2,6 +2,7 @@
+ #define DEVICEMONITORTHREAD_H
+ 
+ #include <QThread>
++#include <QMap>
+ 
+ class DeviceMonitorThread : public QThread {
+ Q_OBJECT
+@@ -23,6 +24,11 @@ private:
+     QString m_currentAction = "";
+     QStringList devInfos;
+ 
++    QMap<QString, qint64> lastDeviceEvents; // key: devpath, value: timestamp of last event
++    const qint64 EVENT_TIMEOUT = 2000; // 2 秒内重复的事件会被忽略
++    const qint64 RECORD_LIFETIME = 5000; // 超过 5 秒的记录会被清理
++
++
+     void initDevPaths();
+ 
+     QString getDeviceID(struct udev_device *dev);
+diff --git a/plugins/device-controller/src/hwwidget.cpp b/plugins/device-controller/src/hwwidget.cpp
+index 92b5903..d6e42da 100644
+--- a/plugins/device-controller/src/hwwidget.cpp
++++ b/plugins/device-controller/src/hwwidget.cpp
+@@ -2,11 +2,13 @@
+ #include <QDebug>
+ #include <QMetaObject>
+ #include <QScreen>
+-//#include <libkydevicesec_bluetooth.h>
++// #include <libkydevicesec_bluetooth.h>
+ #include "include/common.h"
+ #include "include/globalsignal.h"
+ #include <gsettingmonitor.h>
+ #include "hardwareinfogetter.h"
++#include "kom-configure.h"
++#include "include/hwinfostorage.h"
+ 
+ HwWidget::HwWidget(DeviceInfo *devinfo, QWidget *parent)
+         : m_devInfo(devinfo),
+@@ -14,12 +16,14 @@ HwWidget::HwWidget(DeviceInfo *devinfo, QWidget *parent)
+           m_iconLabel(new QLabel),
+           m_textLabel(new QLabel),
+           m_modelLabel(new K::TextLabel),
++          m_activeStackWidget(new QStackedWidget),
+           m_activateStatus(new QLabel),
++          m_deactiveTips(new QLabel),
+           m_btnStackedWidget(new QStackedWidget),
+           m_spreadOutBtn(new kdk::KBorderlessButton),
+           m_spreadInBtn(new kdk::KBorderlessButton),
+           m_layout(new QHBoxLayout),
+-          m_timer(new QTimer),
++          m_timer(new QTimer(this)),
+           m_menu(new QMenu),
+           m_actionExport(new QAction),
+           m_actionActive(new QAction),
+@@ -28,11 +32,38 @@ HwWidget::HwWidget(DeviceInfo *devinfo, QWidget *parent)
+         m_data = new QGSettings(KYLIN_OS_MANAGER);
+     }
+     initGui();
++    setContent();
++    setIconColor();
+     initConnect();
+ }
+ 
++HwWidget::HwWidget(QString devType, QMap<QString, QString> devInfo, QWidget *parent)
++        : QWidget(parent),
++          m_iconLabel(new QLabel),
++          m_textLabel(new QLabel),
++          m_modelLabel(new K::TextLabel),
++          m_activeStackWidget(new QStackedWidget),
++          m_activateStatus(new QLabel),
++          m_deactiveTips(new QLabel),
++          m_btnStackedWidget(new QStackedWidget),
++          m_spreadOutBtn(new kdk::KBorderlessButton),
++          m_spreadInBtn(new kdk::KBorderlessButton),
++          m_layout(new QHBoxLayout),
++          m_timer(new QTimer(this)),
++          m_menu(new QMenu),
++          m_actionExport(new QAction),
++          m_actionActive(new QAction),
++          m_actionDeactive(new QAction){
++    initGui();
++    setContent(devType, devInfo);
++    setIconColor();
++    initConnect();
++}
++
++
++
+ HwWidget::~HwWidget() {
+-    for(auto conn: m_connections){
++    for (auto conn: m_connections) {
+         disconnect(conn);
+     }
+ }
+@@ -45,12 +76,25 @@ QString HwWidget::getDevType() {
+     return m_textLabel->text();
+ }
+ 
++QString HwWidget::getMonitorInterface() {
++    return m_monitorInterface;
++}
++
+ 
+ void HwWidget::initGui() {
+     m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+     m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+     m_modelLabel->setMinimumWidth(TREEITEMMODELLABELWIDTH);
+     m_activateStatus->setText(tr("Disable"));
++    m_deactiveTips->setPixmap(getIcon("preferences-system-details-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++            HARDWAREINFOWIDGETBUTTONSIZE));
++    m_deactiveTips->setToolTip(tr("This device can be disabled/enabled"));
++    m_deactiveTips->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
++
++    m_activeStackWidget->addWidget(m_activateStatus);
++    m_activeStackWidget->addWidget(m_deactiveTips);
++    m_activeStackWidget->setContentsMargins(22, 0, 0, 0);
++
+     m_spreadOutBtn->setIcon(QIcon::fromTheme("ukui-down-symbolic"));
+     m_spreadInBtn->setIcon(QIcon::fromTheme("ukui-up-symbolic"));
+     m_btnStackedWidget->addWidget(m_spreadOutBtn);
+@@ -63,71 +107,149 @@ void HwWidget::initGui() {
+     m_layout->addSpacing(12);
+     m_layout->addWidget(m_textLabel);
+     m_layout->addWidget(m_modelLabel, 0, Qt::AlignLeft);
+-    m_layout->addWidget(m_activateStatus);
++    m_layout->addWidget(m_activeStackWidget, 0, Qt::AlignRight);
+     m_layout->addWidget(m_btnStackedWidget, 0, Qt::AlignRight);
+     this->setLayout(m_layout);
+ 
+-    m_activateStatus->hide();
++    m_activeStackWidget->hide();
+ 
+     m_actionExport->setText(tr("Export To Clipboard"));
+     m_actionActive->setText(tr("Activate"));
+     m_actionDeactive->setText(tr("Deactive"));
+-    setContent();
+-    setIconColor();
+ }
+ 
+ void HwWidget::setContent() {
+     if (auto cpuInfo = dynamic_cast<CpuInfo *>(m_devInfo)) {
+-        m_pixMap = getIcon("ukui-zs-processor-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+-        m_iconLabel->setPixmap(getIcon("ukui-zs-processor-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_pixMap = getIcon("ukui-zs-processor-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(getIcon("ukui-zs-processor-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE));
+         m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_textLabel->setText(tr("CPU"));
+         m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        m_modelLabel->SetText(cpuInfo->getValue(m_cpuMap.value("1")));
+-        m_explorContent.append(QString("%1\t%2").arg(tr("CPU")).arg(cpuInfo->getValue(m_cpuMap.value("1"))));
++        m_modelLabel->SetText(cpuInfo->getValue(HwInfoSingleton::instance().m_cpuMap.value("1")));
++        m_explorContent.append(QString("%1\t%2").arg(tr("CPU")).arg(cpuInfo->getValue(HwInfoSingleton::instance().m_cpuMap.value("1"))));
++
++        //从ini中获取内容需要修改的内容
++        QMap<QString, QString> additionMap;
++        kom::Configure conf;
++        QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_CPU).toStringList().join(",");
++        QStringList infolist = info.split("|");
++        for (int i = 0; i < infolist.length(); ++i) {
++            if(infolist.at(i).contains("Change")) {
++                QStringList infos = infolist.at(i).split(",");
++                if(cpuInfo->model == infos[1]){
++                    for (int j = 2; j < infos.length(); ++j) {
++                        QStringList keyAndValue = infos[j].split("=");
++                        if (keyAndValue[0] == "Name"){
++                            m_modelLabel->SetText(keyAndValue[1]);
++                            m_explorContent.clear();
++                            m_explorContent.append(QString("%1\t%2").arg(tr("Graphic Card")).arg(keyAndValue[1]));
++                            continue;
++                        }
++                        if(HwInfoSingleton::instance().m_cpuMap.keys().contains(keyAndValue[0])){
++                            // 如果map中存在,说明是修改某一项的值
++                            cpuInfo->setValue(HwInfoSingleton::instance().m_cpuMap.value(keyAndValue[0]), keyAndValue[1]);
++                        }else{
++                            // 如果map中不存在,说明是添加一项
++                            additionMap.insert(keyAndValue[0], keyAndValue[1]);
++                        }
++                    }
++                }
++            }
++        }
+ 
+-        for (const QString &key: m_cpuInfo) {
++        for (const QString &key: HwInfoSingleton::instance().m_cpuInfo) {
+             if (key == "1") {
+                 continue;
+             }
+-            QString value = cpuInfo->getValue(m_cpuMap.value(key));
++            QString value = cpuInfo->getValue(HwInfoSingleton::instance().m_cpuMap.value(key));
+             if (value != "") {
+                 m_explorContent.append(QString("%1\t%2").arg(key).arg(value));
+                 itemCount++;
+                 TreeItem *item = new TreeItem(key, value, this);
++                item->setAutoFillBackground(true);
+                 QTreeWidgetItem *childItem = new QTreeWidgetItem();
+                 childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+                 m_treeItemList.append(item);
+                 m_treeWidgetItemList.append(childItem);
+ 
+                 if (key == QApplication::tr("CPU Current Frequency") || key == QApplication::tr("CPU Usage Rate") ||
+-                        key == QApplication::tr("CPU Temperature")) {
++                    key == QApplication::tr("CPU Temperature")) {
+                     connect(m_timer, &QTimer::timeout, [=]() {
+-                        item->setLabelText(cpuInfo->getValue(m_cpuMap.value(key)));
++                        QString value = cpuInfo->getValue(HwInfoSingleton::instance().m_cpuMap.value(key));
++                        item->setLabelText(value);
++                        for (int i = 0; i < m_explorContent.length(); ++i) {
++                            if (m_explorContent.at(i).split("\t").at(0) == key) {
++                                m_explorContent[i] = QString("%1\t%2").arg(key).arg(value);
++                            }
++                        }
+                     });
+                     m_timer->start(1000);
+                 }
+             }
+         }
++        // 添加用户自定义的显示内容
++        for (int i = 0; i < additionMap.keys().length(); ++i) {
++            m_explorContent.append(QString("%1\t%2").arg(additionMap.keys()[i]).arg(additionMap.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(additionMap.keys()[i], additionMap.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
+     } else if (auto memoryInfo = dynamic_cast<MemoryInfo *>(m_devInfo)) {
+-        m_pixMap =getIcon("ukui-zs-memory-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+-        m_iconLabel->setPixmap(getIcon("ukui-zs-memory-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_pixMap = getIcon("ukui-zs-memory-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(
++                getIcon("ukui-zs-memory-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
+         m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_textLabel->setText(tr("Memory"));
+         m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        m_modelLabel->SetText(memoryInfo->getValue(m_memoryMap.value("1")));
++        m_modelLabel->SetText(memoryInfo->getValue(HwInfoSingleton::instance().m_memoryMap.value("1")));
+         m_explorContent.append(
+-                    QString("%1\t%2").arg(tr("Memory")).arg(memoryInfo->getValue(m_memoryMap.value("1"))));
++                QString("%1\t%2").arg(tr("Memory")).arg(memoryInfo->getValue(HwInfoSingleton::instance().m_memoryMap.value("1"))));
++
++        //从ini中获取内容需要修改的内容
++        QMap<QString, QString> additionMap;
++        kom::Configure conf;
++        QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_MEMORY).toStringList().join(",");
++        QStringList infolist = info.split("|");
++        for (int i = 0; i < infolist.length(); ++i) {
++            if(infolist.at(i).contains("Change")) {
++                QStringList infos = infolist.at(i).split(",");
++                if(memoryInfo->displayname == infos[1]){
++                    for (int j = 2; j < infos.length(); ++j) {
++                        QStringList keyAndValue = infos[j].split("=");
++                        if (keyAndValue[0] == "Name"){
++                            m_modelLabel->SetText(keyAndValue[1]);
++                            m_explorContent.clear();
++                            m_explorContent.append(QString("%1\t%2").arg(tr("Graphic Card")).arg(keyAndValue[1]));
++                            continue;
++                        }
++                        if(HwInfoSingleton::instance().m_memoryMap.keys().contains(keyAndValue[0])){
++                            // 如果map中存在,说明是修改某一项的值
++                            memoryInfo->setValue(HwInfoSingleton::instance().m_memoryMap.value(keyAndValue[0]), keyAndValue[1]);
++                        }else{
++                            // 如果map中不存在,说明是添加一项
++                            additionMap.insert(keyAndValue[0], keyAndValue[1]);
++                        }
++                    }
++                }
++            }
++        }
+ 
+-        for (const QString &key: m_memoryInfo) {
++        for (const QString &key: HwInfoSingleton::instance().m_memoryInfo) {
+             if (key == "1") {
+                 continue;
+             }
+-            QString value = memoryInfo->getValue(m_memoryMap.value(key));
++            QString value = memoryInfo->getValue(HwInfoSingleton::instance().m_memoryMap.value(key));
+             if (value != "") {
+                 m_explorContent.append(QString("%1\t%2").arg(key).arg(value));
+                 itemCount++;
+                 TreeItem *item = new TreeItem(key, value, this);
++                item->setAutoFillBackground(true);
+                 QTreeWidgetItem *childItem = new QTreeWidgetItem();
+                 childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+                 m_treeItemList.append(item);
+@@ -135,32 +257,75 @@ void HwWidget::setContent() {
+ 
+                 if (key == QApplication::tr("Memory Usage")) {
+                     connect(m_timer, &QTimer::timeout, [=]() {
+-                        item->setLabelText(memoryInfo->getValue(m_memoryMap.value(key)));
++                        item->setLabelText(memoryInfo->getValue(HwInfoSingleton::instance().m_memoryMap.value(key)));
+                     });
+                     m_timer->start(1000);
+                 }
+             }
+         }
++
++        // 添加用户自定义的显示内容
++        for (int i = 0; i < additionMap.keys().length(); ++i) {
++            m_explorContent.append(QString("%1\t%2").arg(additionMap.keys()[i]).arg(additionMap.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(additionMap.keys()[i], additionMap.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++
+     } else if (auto graphicCardInfo = dynamic_cast<GraphicCardInfo *>(m_devInfo)) {
+-        m_pixMap = getIcon("ukui-graphics-card-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+-        m_iconLabel->setPixmap(getIcon("ukui-graphics-card-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_pixMap = getIcon("ukui-graphics-card-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(getIcon("ukui-graphics-card-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE));
+         m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_textLabel->setText(tr("Graphic Card"));
+         m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        m_modelLabel->SetText(graphicCardInfo->getValue(m_graphicCardMap.value("1")));
++        m_modelLabel->SetText(graphicCardInfo->getValue(HwInfoSingleton::instance().m_graphicCardMap.value("1")));
+         m_explorContent.append(QString("%1\t%2").arg(tr("Graphic Card")).arg(
+-                                   graphicCardInfo->getValue(m_graphicCardMap.value("1"))));
++                graphicCardInfo->getValue(HwInfoSingleton::instance().m_graphicCardMap.value("1"))));
++
++        //从ini中获取内容需要修改的内容
++        QMap<QString, QString> additionMap;
++        kom::Configure conf;
++        QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_GRAPHICCARD).toStringList().join(",");
++        QStringList infolist = info.split("|");
++        for (int i = 0; i < infolist.length(); ++i) {
++            if(infolist.at(i).contains("Change")) {
++                QStringList infos = infolist.at(i).split(",");
++                if(graphicCardInfo->model == infos[1]){
++                    for (int j = 2; j < infos.length(); ++j) {
++                        QStringList keyAndValue = infos[j].split("=");
++                        if (keyAndValue[0] == "Name"){
++                            m_modelLabel->SetText(keyAndValue[1]);
++                            m_explorContent.clear();
++                            m_explorContent.append(QString("%1\t%2").arg(tr("Graphic Card")).arg(keyAndValue[1]));
++                            continue;
++                        }
++                        if(HwInfoSingleton::instance().m_graphicCardMap.keys().contains(keyAndValue[0])){
++                            // 如果map中存在,说明是修改某一项的值
++                            graphicCardInfo->setValue(HwInfoSingleton::instance().m_graphicCardMap.value(keyAndValue[0]), keyAndValue[1]);
++                        }else{
++                            // 如果map中不存在,说明是添加一项
++                            additionMap.insert(keyAndValue[0], keyAndValue[1]);
++                        }
++                    }
++                }
++            }
++        }
+ 
+-        for (const QString &key: m_graphicCardInfo) {
++        for (const QString &key: HwInfoSingleton::instance().m_graphicCardInfo) {
+             if (key == "1") {
+                 continue;
+             }
+-            QString value = graphicCardInfo->getValue(m_graphicCardMap.value(key));
++            QString value = graphicCardInfo->getValue(HwInfoSingleton::instance().m_graphicCardMap.value(key));
+             if (value != "") {
+                 m_explorContent.append(QString("%1\t%2").arg(key).arg(value));
+                 itemCount++;
+                 TreeItem *item = new TreeItem(key, value, this);
++                item->setAutoFillBackground(true);
+                 QTreeWidgetItem *childItem = new QTreeWidgetItem();
+                 childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+                 m_treeItemList.append(item);
+@@ -168,75 +333,157 @@ void HwWidget::setContent() {
+ 
+                 if (key == QApplication::tr("GDDR Size")) {
+                     connect(m_timer, &QTimer::timeout, [=]() {
+-                        item->setLabelText(graphicCardInfo->getValue(m_graphicCardMap.value(key)));
++                        item->setLabelText(graphicCardInfo->getValue(HwInfoSingleton::instance().m_graphicCardMap.value(key)));
+                     });
+                     m_timer->start(1000);
+                 }
+             }
+         }
++        // 添加用户自定义的显示内容
++        for (int i = 0; i < additionMap.keys().length(); ++i) {
++            m_explorContent.append(QString("%1\t%2").arg(additionMap.keys()[i]).arg(additionMap.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(additionMap.keys()[i], additionMap.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
+     } else if (auto baseboardInfo = dynamic_cast<BaseboardInfo *>(m_devInfo)) {
+-        m_pixMap = getIcon("ukui-mother-board-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+-        m_iconLabel->setPixmap(getIcon("ukui-mother-board-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_pixMap = getIcon("ukui-mother-board-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(getIcon("ukui-mother-board-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE));
+         m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_textLabel->setText(tr("Mother Board"));
+         m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        m_modelLabel->SetText(baseboardInfo->getValue(m_baseboardMap.value("1")));
++        m_modelLabel->SetText(baseboardInfo->getValue(HwInfoSingleton::instance().m_baseboardMap.value("1")));
+         m_explorContent.append(QString("%1\t%2").arg(tr("Mother Board")).arg(
+-                baseboardInfo->getValue(m_baseboardMap.value("1"))));
++                baseboardInfo->getValue(HwInfoSingleton::instance().m_baseboardMap.value("1"))));
++
++        //从ini中获取内容需要修改的内容
++        QMap<QString, QString> additionMap;
++        kom::Configure conf;
++        QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_BASEBOARD).toStringList().join(",");
++        QStringList infolist = info.split("|");
++        for (int i = 0; i < infolist.length(); ++i) {
++            if(infolist.at(i).contains("Change")) {
++                QStringList infos = infolist.at(i).split(",");
++                if(baseboardInfo->model == infos[1]){
++                    for (int j = 2; j < infos.length(); ++j) {
++                        QStringList keyAndValue = infos[j].split("=");
++                        if (keyAndValue[0] == "Name"){
++                            m_modelLabel->SetText(keyAndValue[1]);
++                            m_explorContent.clear();
++                            m_explorContent.append(QString("%1\t%2").arg(tr("Mother Board")).arg(keyAndValue[1]));
++                            continue;
++                        }
++                        if(HwInfoSingleton::instance().m_baseboardMap.keys().contains(keyAndValue[0])){
++                            // 如果map中存在,说明是修改某一项的值
++                            baseboardInfo->setValue(HwInfoSingleton::instance().m_baseboardMap.value(keyAndValue[0]), keyAndValue[1]);
++                        }else{
++                            // 如果map中不存在,说明是添加一项
++                            additionMap.insert(keyAndValue[0], keyAndValue[1]);
++                        }
++                    }
++                }
++            }
++        }
+ 
+-        for (const QString &key: m_baseboardInfo) {
++        for (const QString &key: HwInfoSingleton::instance().m_baseboardInfo) {
+             if (key == "1") {
+                 continue;
+             }
+-            QString value = baseboardInfo->getValue(m_baseboardMap.value(key));
++            QString value = baseboardInfo->getValue(HwInfoSingleton::instance().m_baseboardMap.value(key));
+             if (value != "") {
+                 m_explorContent.append(QString("%1\t%2").arg(key).arg(value));
+                 itemCount++;
+                 TreeItem *item = new TreeItem(key, value, this);
++                item->setAutoFillBackground(true);
+                 QTreeWidgetItem *childItem = new QTreeWidgetItem();
+                 childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+                 m_treeItemList.append(item);
+                 m_treeWidgetItemList.append(childItem);
+             }
+         }
++
++        // 添加用户自定义的显示内容
++        for (int i = 0; i < additionMap.keys().length(); ++i) {
++            m_explorContent.append(QString("%1\t%2").arg(additionMap.keys()[i]).arg(additionMap.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(additionMap.keys()[i], additionMap.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++
+     } else if (auto networkCardInfo = dynamic_cast<NetworkCardInfo *>(m_devInfo)) {
+-        m_pixMap = getIcon("ukui-zs-network-card-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+-        m_iconLabel->setPixmap(getIcon("ukui-zs-network-card-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        NetworkCardInfo *mynetwork = new NetworkCardInfo(networkCardInfo);
++        m_devInfo = mynetwork;
++        m_pixMap = getIcon("ukui-zs-network-card-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(getIcon("ukui-zs-network-card-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE));
+         m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_textLabel->setText(tr("Network Card"));
+         m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        if (networkCardInfo->getValue(m_networkCardMap.value("1")).trimmed() == "") {
++        if (networkCardInfo->getValue(HwInfoSingleton::instance().m_networkCardMap.value("1")).trimmed() == "") {
+             return;
+         }
+-        m_modelLabel->SetText(networkCardInfo->getValue(m_networkCardMap.value("1")));
++        m_modelLabel->SetText(networkCardInfo->getValue(HwInfoSingleton::instance().m_networkCardMap.value("1")));
+         m_explorContent.append(QString("%1\t%2").arg(tr("Network Card")).arg(
+-                                   networkCardInfo->getValue(m_networkCardMap.value("1"))));
++                networkCardInfo->getValue(HwInfoSingleton::instance().m_networkCardMap.value("1"))));
++        m_activeStackWidget->show();
++
++        //从ini中获取内容需要修改的内容
++        QMap<QString, QString> additionMap;
++        kom::Configure conf;
++        QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_NETWORKCARD).toStringList().join(",");
++        QStringList infolist = info.split("|");
++        for (int i = 0; i < infolist.length(); ++i) {
++            if(infolist.at(i).contains("Change")) {
++                QStringList infos = infolist.at(i).split(",");
++                if(networkCardInfo->name == infos[1]){
++                    for (int j = 2; j < infos.length(); ++j) {
++                        QStringList keyAndValue = infos[j].split("=");
++                        if (keyAndValue[0] == "Name"){
++                            m_modelLabel->SetText(keyAndValue[1]);
++                            m_explorContent.clear();
++                            m_explorContent.append(QString("%1\t%2").arg(tr("Network Card")).arg(keyAndValue[1]));
++                            continue;
++                        }
++                        if(HwInfoSingleton::instance().m_networkCardMap.keys().contains(keyAndValue[0])){
++                            // 如果map中存在,说明是修改某一项的值
++                            networkCardInfo->setValue(HwInfoSingleton::instance().m_networkCardMap.value(keyAndValue[0]), keyAndValue[1]);
++                        }else{
++                            // 如果map中不存在,说明是添加一项
++                            additionMap.insert(keyAndValue[0], keyAndValue[1]);
++                        }
++                    }
++                }
++            }
++        }
+ 
+-        for (const QString &key: m_networkCardInfo) {
++        for (const QString &key: HwInfoSingleton::instance().m_networkCardInfo) {
+             if (key == "1") {
+                 continue;
+             }
+-            QString value = networkCardInfo->getValue(m_networkCardMap.value(key));
++            QString value = networkCardInfo->getValue(HwInfoSingleton::instance().m_networkCardMap.value(key));
+             if (value != "") {
+                 m_explorContent.append(QString("%1\t%2").arg(key).arg(value));
+                 itemCount++;
+                 TreeItem *item = new TreeItem(key, value, this);
++                item->setAutoFillBackground(true);
+                 QTreeWidgetItem *childItem = new QTreeWidgetItem();
+                 childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+                 m_treeItemList.append(item);
+                 m_treeWidgetItemList.append(childItem);
+-
+-//                if (key == QApplication::tr("Send Bytes") || key == QApplication::tr("Recved Bytes")) {
+-//                    connect(m_timer, &QTimer::timeout, [=]() {
+-//                        item->setLabelText(networkCardInfo->getValue(m_networkCardMap.value(key)));
+-//                    });
+-//                    m_timer->start(60000);
+-//                }
+             }
+         }
+ 
+         // 设置右键启用禁用
+-        if (networkCardInfo->isWireless == 1){
++        if (networkCardInfo->isWireless == 1) {
+             if (m_data->get("wirelessnetworkcard").toString() == "deactivate") {
+                 setDisableStatus(true);
+                 m_menu->addAction(m_actionActive);
+@@ -245,7 +492,7 @@ void HwWidget::setContent() {
+                 setDisableStatus(false);
+                 m_menu->addAction(m_actionDeactive);
+             }
+-        } else{
++        } else {
+             if (m_data->get("wireldnetworkcard").toString() == "deactivate") {
+                 setDisableStatus(true);
+                 m_menu->addAction(m_actionActive);
+@@ -270,7 +517,7 @@ void HwWidget::setContent() {
+                 m_menu->addAction(m_actionActive);
+                 setDisableStatus(true);
+             });
+-        }else{
++        } else {
+             connect(g_signal, &GlobalSignal::enableWiredNetworkCardSignal, this, [=]() {
+                 m_menu->removeAction(m_actionDeactive);
+                 m_menu->addAction(m_actionActive);
+@@ -282,57 +529,146 @@ void HwWidget::setContent() {
+                 setDisableStatus(true);
+             });
+         }
++
++        connect(m_timer, &QTimer::timeout, this, &HwWidget::setNetworkStatus);
++        m_timer->start(2000);
++
++        // 添加用户自定义的显示内容
++        for (int i = 0; i < additionMap.keys().length(); ++i) {
++            m_explorContent.append(QString("%1\t%2").arg(additionMap.keys()[i]).arg(additionMap.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(additionMap.keys()[i], additionMap.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
+     } else if (auto diskInfo = dynamic_cast<DiskInfo *>(m_devInfo)) {
+-        m_pixMap = getIcon("ukui-zs-hard-disk-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+-        m_iconLabel->setPixmap(getIcon("ukui-zs-hard-disk-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_pixMap = getIcon("ukui-zs-hard-disk-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(getIcon("ukui-zs-hard-disk-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE));
+         m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_textLabel->setText(tr("Disk"));
+         m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        m_modelLabel->SetText(diskInfo->getValue(m_diskMap.value("1")));
++        m_modelLabel->SetText(diskInfo->getValue(HwInfoSingleton::instance().m_diskMap.value("1")));
+         m_explorContent.append(
+-                    QString("%1\t%2").arg(tr("Disk")).arg(diskInfo->getValue(m_diskMap.value("1"))));
++                QString("%1\t%2").arg(tr("Disk")).arg(diskInfo->getValue(HwInfoSingleton::instance().m_diskMap.value("1"))));
++
++        //从ini中获取内容需要修改的内容
++        QMap<QString, QString> additionMap;
++        kom::Configure conf;
++        QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_DISK).toStringList().join(",");
++        QStringList infolist = info.split("|");
++        for (int i = 0; i < infolist.length(); ++i) {
++            if(infolist.at(i).contains("Change")) {
++                QStringList infos = infolist.at(i).split(",");
++                if(diskInfo->model == infos[1]){
++                    for (int j = 2; j < infos.length(); ++j) {
++                        QStringList keyAndValue = infos[j].split("=");
++                        if (keyAndValue[0] == "Name"){
++                            m_modelLabel->SetText(keyAndValue[1]);
++                            m_explorContent.clear();
++                            m_explorContent.append(QString("%1\t%2").arg(tr("Disk")).arg(keyAndValue[1]));
++                            continue;
++                        }
++                        if(HwInfoSingleton::instance().m_diskMap.keys().contains(keyAndValue[0])){
++                            // 如果map中存在,说明是修改某一项的值
++                            diskInfo->setValue(HwInfoSingleton::instance().m_diskMap.value(keyAndValue[0]), keyAndValue[1]);
++                        }else{
++                            // 如果map中不存在,说明是添加一项
++                            additionMap.insert(keyAndValue[0], keyAndValue[1]);
++                        }
++                    }
++                }
++            }
++        }
+ 
+-        for (const QString &key: m_diskInfo) {
++        for (const QString &key: HwInfoSingleton::instance().m_diskInfo) {
+             if (key == "1") {
+                 continue;
+             }
+-            QString value = diskInfo->getValue(m_diskMap.value(key));
++            QString value = diskInfo->getValue(HwInfoSingleton::instance().m_diskMap.value(key));
+ 
+             if (value != "") {
+                 m_explorContent.append(QString("%1\t%2").arg(key).arg(value));
+                 itemCount++;
+                 TreeItem *item = new TreeItem(key, value, this);
++                item->setAutoFillBackground(true);
+                 QTreeWidgetItem *childItem = new QTreeWidgetItem();
+                 childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+                 m_treeItemList.append(item);
+                 m_treeWidgetItemList.append(childItem);
+             }
+         }
++
++        // 添加用户自定义的显示内容
++        for (int i = 0; i < additionMap.keys().length(); ++i) {
++            m_explorContent.append(QString("%1\t%2").arg(additionMap.keys()[i]).arg(additionMap.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(additionMap.keys()[i], additionMap.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
+     } else if (auto monitorInfo = dynamic_cast<MonitorInfo *>(m_devInfo)) {
+         m_pixMap = getIcon("computer-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+-        m_iconLabel->setPixmap(getIcon("computer-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setPixmap(
++                getIcon("computer-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
+         m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_textLabel->setText(tr("Monitor"));
+         m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        m_modelLabel->SetText(monitorInfo->getValue(m_monitorMap.value("1")));
++        m_modelLabel->SetText(monitorInfo->getValue(HwInfoSingleton::instance().m_monitorMap.value("1")));
+         m_explorContent.append(
+-                    QString("%1\t%2").arg(tr("Monitor")).arg(monitorInfo->getValue(m_monitorMap.value("1"))));
++                QString("%1\t%2").arg(tr("Monitor")).arg(monitorInfo->getValue(HwInfoSingleton::instance().m_monitorMap.value("1"))));
++
++        //从ini中获取内容需要修改的内容
++        QMap<QString, QString> additionMap;
++        kom::Configure conf;
++        QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_MONITOR).toStringList().join(",");
++        QStringList infolist = info.split("|");
++        for (int i = 0; i < infolist.length(); ++i) {
++            if(infolist.at(i).contains("Change")) {
++                QStringList infos = infolist.at(i).split(",");
++                if(monitorInfo->name == infos[1]){
++                    for (int j = 2; j < infos.length(); ++j) {
++                        QStringList keyAndValue = infos[j].split("=");
++                        if (keyAndValue[0] == "Name"){
++                            m_modelLabel->SetText(keyAndValue[1]);
++                            m_explorContent.clear();
++                            m_explorContent.append(QString("%1\t%2").arg(tr("Disk")).arg(keyAndValue[1]));
++                            continue;
++                        }
++                        if(HwInfoSingleton::instance().m_monitorMap.keys().contains(keyAndValue[0])){
++                            // 如果map中存在,说明是修改某一项的值
++                            monitorInfo->setValue(HwInfoSingleton::instance().m_monitorMap.value(keyAndValue[0]), keyAndValue[1]);
++                        }else{
++                            // 如果map中不存在,说明是添加一项
++                            additionMap.insert(keyAndValue[0], keyAndValue[1]);
++                        }
++                    }
++                }
++            }
++        }
+ 
+-        for (const QString &key: m_monitorInfo) {
++        for (const QString &key: HwInfoSingleton::instance().m_monitorInfo) {
+             if (key == "1") {
+                 continue;
+             }
+-            QString value = monitorInfo->getValue(m_monitorMap.value(key));
++            QString value = monitorInfo->getValue(HwInfoSingleton::instance().m_monitorMap.value(key));
+             if (value != "") {
+                 m_explorContent.append(QString("%1\t%2").arg(key).arg(value));
+                 itemCount++;
+                 TreeItem *item = new TreeItem(key, value, this);
++                item->setAutoFillBackground(true);
+                 QTreeWidgetItem *childItem = new QTreeWidgetItem();
+                 childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+                 m_treeItemList.append(item);
+                 m_treeWidgetItemList.append(childItem);
+ 
+-                QString interface = monitorInfo->getValue(m_monitorMap.value(QObject::tr("Interface")));
++                QString interface = monitorInfo->getValue(HwInfoSingleton::instance().m_monitorMap.value(QObject::tr("Interface")));
++                m_monitorInterface = interface;
+                 m_screens = QApplication::screens();
+                 QScreen *screen = nullptr;
+                 for (int i = 0; i < m_screens.length(); ++i) {
+@@ -344,7 +680,7 @@ void HwWidget::setContent() {
+                 if (key == QApplication::tr("Resolution")) {
+                     auto conn = connect(m_timer, &QTimer::timeout, [=]() {
+                         m_screens = QApplication::screens();
+-                        if(screen != nullptr && m_screens.contains(screen)){
++                        if (screen != nullptr && m_screens.contains(screen)) {
+                             item->setLabelText(getResolution(screen->name()));
+                         }
+                     });
+@@ -354,9 +690,10 @@ void HwWidget::setContent() {
+                 if (key == QApplication::tr("Main Monitor")) {
+                     auto conn = connect(m_timer, &QTimer::timeout, this, [=]() {
+                         m_screens = QApplication::screens();
+-                        if (screen == QGuiApplication::primaryScreen() && screen != nullptr && m_screens.contains(screen)){
++                        if (screen == QGuiApplication::primaryScreen() && screen != nullptr &&
++                            m_screens.contains(screen)) {
+                             item->setLabelText(QApplication::tr("Yes"));
+-                        }else{
++                        } else {
+                             item->setLabelText(QApplication::tr("No"));
+                         }
+                     });
+@@ -365,26 +702,70 @@ void HwWidget::setContent() {
+             }
+         }
+         m_timer->start(5000);
++
++        // 添加用户自定义的显示内容
++        for (int i = 0; i < additionMap.keys().length(); ++i) {
++            m_explorContent.append(QString("%1\t%2").arg(additionMap.keys()[i]).arg(additionMap.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(additionMap.keys()[i], additionMap.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
+     } else if (auto soundCardInfo = dynamic_cast<SoundCardInfo *>(m_devInfo)) {
+         // 设置内容
+-        m_pixMap = getIcon("audio-volume-high-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+-        m_iconLabel->setPixmap(getIcon("audio-volume-high-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_pixMap = getIcon("audio-volume-high-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(getIcon("audio-volume-high-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE));
+         m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_textLabel->setText(tr("Sound Card"));
+         m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        m_modelLabel->SetText(soundCardInfo->getValue(m_soundCardMap.value("1")));
++        m_modelLabel->SetText(soundCardInfo->getValue(HwInfoSingleton::instance().m_soundCardMap.value("1")));
+         m_explorContent.append(QString("%1\t%2").arg(tr("Sound Card")).arg(
+-                                   soundCardInfo->getValue(m_soundCardMap.value("1"))));
++                soundCardInfo->getValue(HwInfoSingleton::instance().m_soundCardMap.value("1"))));
++        m_activeStackWidget->show();
++
++        //从ini中获取内容需要修改的内容
++        QMap<QString, QString> additionMap;
++        kom::Configure conf;
++        QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_SOUNDCARD).toStringList().join(",");
++        QStringList infolist = info.split("|");
++        for (int i = 0; i < infolist.length(); ++i) {
++            if(infolist.at(i).contains("Change")) {
++                QStringList infos = infolist.at(i).split(",");
++                if(soundCardInfo->model == infos[1]){
++                    for (int j = 2; j < infos.length(); ++j) {
++                        QStringList keyAndValue = infos[j].split("=");
++                        if (keyAndValue[0] == "Name"){
++                            m_modelLabel->SetText(keyAndValue[1]);
++                            m_explorContent.clear();
++                            m_explorContent.append(QString("%1\t%2").arg(tr("Disk")).arg(keyAndValue[1]));
++                            continue;
++                        }
++                        if(HwInfoSingleton::instance().m_soundCardMap.keys().contains(keyAndValue[0])){
++                            // 如果map中存在,说明是修改某一项的值
++                            soundCardInfo->setValue(HwInfoSingleton::instance().m_soundCardMap.value(keyAndValue[0]), keyAndValue[1]);
++                        }else{
++                            // 如果map中不存在,说明是添加一项
++                            additionMap.insert(keyAndValue[0], keyAndValue[1]);
++                        }
++                    }
++                }
++            }
++        }
+ 
+-        for (const QString &key: m_soundCardInfo) {
++        for (const QString &key:HwInfoSingleton::instance().m_soundCardInfo) {
+             if (key == "1") {
+                 continue;
+             }
+-            QString value = soundCardInfo->getValue(m_soundCardMap.value(key));
++            QString value = soundCardInfo->getValue(HwInfoSingleton::instance().m_soundCardMap.value(key));
+             if (value != "") {
+                 m_explorContent.append(QString("%1\t%2").arg(key).arg(value));
+                 itemCount++;
+                 TreeItem *item = new TreeItem(key, value, this);
++                item->setAutoFillBackground(true);
+                 QTreeWidgetItem *childItem = new QTreeWidgetItem();
+                 childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+                 m_treeItemList.append(item);
+@@ -395,82 +776,227 @@ void HwWidget::setContent() {
+         // 设置右键启用禁用
+         if (m_data->get("soundcard").toString() == "activate") {
+             m_menu->addAction(m_actionDeactive);
++            setDisableStatus(false);
+             connect(m_actionActive, &QAction::triggered, this, &HwWidget::actionActiveSoundCardSlot);
+             connect(m_actionDeactive, &QAction::triggered, this, &HwWidget::actionDeactiveSoundCardSlot);
+-        }else{
++        } else {
+             m_menu->addAction(m_actionActive);
+             setDisableStatus(true);
+             connect(m_actionActive, &QAction::triggered, this, &HwWidget::actionActiveSoundCardSlot);
+             connect(m_actionDeactive, &QAction::triggered, this, &HwWidget::actionDeactiveSoundCardSlot);
+         }
++
++        connect(m_timer, &QTimer::timeout, [=]() {
++            if (!soundCardInfo->checkStatus()) {
++                setDisableStatus(false);
++                m_data->set("soundcard", "activate");
++                if (m_menu->actions().contains(m_actionActive)) {
++                    m_menu->removeAction(m_actionActive);
++                    m_menu->addAction(m_actionDeactive);
++                }
++            } else {
++                setDisableStatus(true);
++                m_data->set("soundcard", "deactivate");
++                if (m_menu->actions().contains(m_actionDeactive)) {
++                    m_menu->removeAction(m_actionDeactive);
++                    m_menu->addAction(m_actionActive);
++                }
++            }
++        });
++        m_timer->start(2000);
++
++        // 添加用户自定义的显示内容
++        for (int i = 0; i < additionMap.keys().length(); ++i) {
++            m_explorContent.append(QString("%1\t%2").arg(additionMap.keys()[i]).arg(additionMap.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(additionMap.keys()[i], additionMap.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
+     } else if (auto keyboardInfo = dynamic_cast<KeyboardInfo *>(m_devInfo)) {
+-        m_pixMap = getIcon("input-keyboard-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+-        m_iconLabel->setPixmap(getIcon("input-keyboard-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_pixMap = getIcon("input-keyboard-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(
++                getIcon("input-keyboard-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
+         m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_textLabel->setText(tr("Keyboard"));
+         m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        m_modelLabel->SetText(keyboardInfo->getValue(m_keyboardMap.value("1")));
++        m_modelLabel->SetText(keyboardInfo->getValue(HwInfoSingleton::instance().m_keyboardMap.value("1")));
+         m_explorContent.append(
+-                    QString("%1\t%2").arg(tr("Keyboard")).arg(keyboardInfo->getValue(m_keyboardMap.value("1"))));
++                QString("%1\t%2").arg(tr("Keyboard")).arg(keyboardInfo->getValue(HwInfoSingleton::instance().m_keyboardMap.value("1"))));
++
++        //从ini中获取内容需要修改的内容
++        QMap<QString, QString> additionMap;
++        kom::Configure conf;
++        QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_KEYBOARD).toStringList().join(",");
++        QStringList infolist = info.split("|");
++        for (int i = 0; i < infolist.length(); ++i) {
++            if(infolist.at(i).contains("Change")) {
++                QStringList infos = infolist.at(i).split(",");
++                if(keyboardInfo->name == infos[1]){
++                    for (int j = 2; j < infos.length(); ++j) {
++                        QStringList keyAndValue = infos[j].split("=");
++                        if (keyAndValue[0] == "Name"){
++                            m_modelLabel->SetText(keyAndValue[1]);
++                            m_explorContent.clear();
++                            m_explorContent.append(QString("%1\t%2").arg(tr("Keyboard")).arg(keyAndValue[1]));
++                            continue;
++                        }
++                        if(HwInfoSingleton::instance().m_keyboardMap.keys().contains(keyAndValue[0])){
++                            // 如果map中存在,说明是修改某一项的值
++                            keyboardInfo->setValue(HwInfoSingleton::instance().m_keyboardMap.value(keyAndValue[0]), keyAndValue[1]);
++                        }else{
++                            // 如果map中不存在,说明是添加一项
++                            additionMap.insert(keyAndValue[0], keyAndValue[1]);
++                        }
++                    }
++                }
++            }
++        }
+ 
+-        for (const QString &key: m_keyboardInfo) {
++        for (const QString &key: HwInfoSingleton::instance().m_keyboardInfo) {
+             if (key == "1") {
+                 continue;
+             }
+-            QString value = keyboardInfo->getValue(m_keyboardMap.value(key));
++            QString value = keyboardInfo->getValue(HwInfoSingleton::instance().m_keyboardMap.value(key));
+             if (value != "") {
+                 m_explorContent.append(QString("%1\t%2").arg(key).arg(value));
+                 itemCount++;
+                 TreeItem *item = new TreeItem(key, value, this);
++                item->setAutoFillBackground(true);
+                 QTreeWidgetItem *childItem = new QTreeWidgetItem();
+                 childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+                 m_treeItemList.append(item);
+                 m_treeWidgetItemList.append(childItem);
+             }
+         }
++        // 添加用户自定义的显示内容
++        for (int i = 0; i < additionMap.keys().length(); ++i) {
++            m_explorContent.append(QString("%1\t%2").arg(additionMap.keys()[i]).arg(additionMap.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(additionMap.keys()[i], additionMap.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
+     } else if (auto mouseInfo = dynamic_cast<MouseInfo *>(m_devInfo)) {
+         m_pixMap = getIcon("input-mouse-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+-        m_iconLabel->setPixmap(getIcon("input-mouse-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setPixmap(
++                getIcon("input-mouse-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
+         m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_textLabel->setText(tr("Mouse"));
+         m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        m_modelLabel->SetText(mouseInfo->getValue(m_mouseMap.value("1")));
++        m_modelLabel->SetText(mouseInfo->getValue(HwInfoSingleton::instance().m_mouseMap.value("1")));
+         m_explorContent.append(
+-                    QString("%1\t%2").arg(tr("Mouse")).arg(mouseInfo->getValue(m_mouseMap.value("1"))));
++                QString("%1\t%2").arg(tr("Mouse")).arg(mouseInfo->getValue(HwInfoSingleton::instance().m_mouseMap.value("1"))));
++
++        //从ini中获取内容需要修改的内容
++        QMap<QString, QString> additionMap;
++        kom::Configure conf;
++        QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_MOUSE).toStringList().join(",");
++        QStringList infolist = info.split("|");
++        for (int i = 0; i < infolist.length(); ++i) {
++            if(infolist.at(i).contains("Change")) {
++                QStringList infos = infolist.at(i).split(",");
++                if(mouseInfo->name == infos[1]){
++                    for (int j = 2; j < infos.length(); ++j) {
++                        QStringList keyAndValue = infos[j].split("=");
++                        if (keyAndValue[0] == "Name"){
++                            m_modelLabel->SetText(keyAndValue[1]);
++                            m_explorContent.clear();
++                            m_explorContent.append(QString("%1\t%2").arg(tr("Mouse")).arg(keyAndValue[1]));
++                            continue;
++                        }
++                        if(HwInfoSingleton::instance().m_mouseMap.keys().contains(keyAndValue[0])){
++                            // 如果map中存在,说明是修改某一项的值
++                            mouseInfo->setValue(HwInfoSingleton::instance().m_mouseMap.value(keyAndValue[0]), keyAndValue[1]);
++                        }else{
++                            // 如果map中不存在,说明是添加一项
++                            additionMap.insert(keyAndValue[0], keyAndValue[1]);
++                        }
++                    }
++                }
++            }
++        }
+ 
+-        for (const QString &key: m_mouseInfo) {
++        for (const QString &key: HwInfoSingleton::instance().m_mouseInfo) {
+             if (key == "1") {
+                 continue;
+             }
+-            QString value = mouseInfo->getValue(m_mouseMap.value(key));
++            QString value = mouseInfo->getValue(HwInfoSingleton::instance().m_mouseMap.value(key));
+             if (value != "") {
+                 m_explorContent.append(QString("%1\t%2").arg(key).arg(value));
+                 itemCount++;
+                 TreeItem *item = new TreeItem(key, value, this);
++                item->setAutoFillBackground(true);
+                 QTreeWidgetItem *childItem = new QTreeWidgetItem();
+                 childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+                 m_treeItemList.append(item);
+                 m_treeWidgetItemList.append(childItem);
+             }
+         }
++        // 添加用户自定义的显示内容
++        for (int i = 0; i < additionMap.keys().length(); ++i) {
++            m_explorContent.append(QString("%1\t%2").arg(additionMap.keys()[i]).arg(additionMap.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(additionMap.keys()[i], additionMap.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
+     } else if (auto bluetoothInfo = dynamic_cast<BluetoothInfo *>(m_devInfo)) {
++        BluetoothInfo *mybluetooth = new BluetoothInfo(bluetoothInfo);
++        m_devInfo = mybluetooth;
+         // 设置展示内容
+         m_pixMap = getIcon("bluetooth-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+-        m_iconLabel->setPixmap(getIcon("bluetooth-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setPixmap(
++                getIcon("bluetooth-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
+         m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_textLabel->setText(tr("Bluetooth"));
+         m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        m_modelLabel->SetText(bluetoothInfo->getValue(m_bluetoothMap.value("1")));
+-
+-
++        m_modelLabel->SetText(bluetoothInfo->getValue(HwInfoSingleton::instance().m_bluetoothMap.value("1")));
+         m_explorContent.append(QString("%1\t%2").arg(tr("Bluetooth")).arg(
+-                                   bluetoothInfo->getValue(m_bluetoothMap.value("1"))));
++                bluetoothInfo->getValue(HwInfoSingleton::instance().m_bluetoothMap.value("1"))));
++        m_activeStackWidget->show();
++
++        //从ini中获取内容需要修改的内容
++        QMap<QString, QString> additionMap;
++        kom::Configure conf;
++        QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_BLUETOOTH).toStringList().join(",");
++        QStringList infolist = info.split("|");
++        for (int i = 0; i < infolist.length(); ++i) {
++            if(infolist.at(i).contains("Change")) {
++                QStringList infos = infolist.at(i).split(",");
++                if(bluetoothInfo->model == infos[1]){
++                    for (int j = 2; j < infos.length(); ++j) {
++                        QStringList keyAndValue = infos[j].split("=");
++                        if (keyAndValue[0] == "Name"){
++                            m_modelLabel->SetText(keyAndValue[1]);
++                            m_explorContent.clear();
++                            m_explorContent.append(QString("%1\t%2").arg(tr("Bluetooth")).arg(keyAndValue[1]));
++                            continue;
++                        }
++                        if(HwInfoSingleton::instance().m_bluetoothMap.keys().contains(keyAndValue[0])){
++                            // 如果map中存在,说明是修改某一项的值
++                            bluetoothInfo->setValue(HwInfoSingleton::instance().m_bluetoothMap.value(keyAndValue[0]), keyAndValue[1]);
++                        }else{
++                            // 如果map中不存在,说明是添加一项
++                            additionMap.insert(keyAndValue[0], keyAndValue[1]);
++                        }
++                    }
++                }
++            }
++        }
+ 
+-        for (const QString &key: m_bluetoothInfo) {
++        for (const QString &key: HwInfoSingleton::instance().m_bluetoothInfo) {
+             if (key == "1") {
+                 continue;
+             }
+-            QString value = bluetoothInfo->getValue(m_bluetoothMap.value(key));
++            QString value = bluetoothInfo->getValue(HwInfoSingleton::instance().m_bluetoothMap.value(key));
+             if (key == QObject::tr("Address")) {
+                 m_bluetoothAddress = value;
+             }
+@@ -478,6 +1004,7 @@ void HwWidget::setContent() {
+                 m_explorContent.append(QString("%1\t%2").arg(key).arg(value));
+                 itemCount++;
+                 TreeItem *item = new TreeItem(key, value, this);
++                item->setAutoFillBackground(true);
+                 QTreeWidgetItem *childItem = new QTreeWidgetItem();
+                 childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+                 m_treeItemList.append(item);
+@@ -493,56 +1020,144 @@ void HwWidget::setContent() {
+             connect(m_actionDeactive, &QAction::triggered, g_signal, &GlobalSignal::deactivateBluetooth);
+             connect(g_signal, &GlobalSignal::deactivateBluetooth, this, &HwWidget::actionDeactiveBluetoothSlot);
+         } else {
++            setDisableStatus(false);
+             m_menu->addAction(m_actionDeactive);
+             connect(m_actionActive, &QAction::triggered, g_signal, &GlobalSignal::activateBluetooth);
+             connect(g_signal, &GlobalSignal::activateBluetooth, this, &HwWidget::actionActiveBluetoothSlot);
+             connect(m_actionDeactive, &QAction::triggered, g_signal, &GlobalSignal::deactivateBluetooth);
+             connect(g_signal, &GlobalSignal::deactivateBluetooth, this, &HwWidget::actionDeactiveBluetoothSlot);
+         }
++
++        connect(m_timer, &QTimer::timeout, this, &HwWidget::setBluetoothStatus);
++        m_timer->start(2000);
++
++        // 添加用户自定义的显示内容
++        for (int i = 0; i < additionMap.keys().length(); ++i) {
++            m_explorContent.append(QString("%1\t%2").arg(additionMap.keys()[i]).arg(additionMap.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(additionMap.keys()[i], additionMap.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
+     } else if (auto cdInfo = dynamic_cast<CDInfo *>(m_devInfo)) {
+         m_pixMap = getIcon("ukui-burn-cd-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+-        m_iconLabel->setPixmap(getIcon("ukui-burn-cd-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setPixmap(
++                getIcon("ukui-burn-cd-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
+         m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_textLabel->setText(tr("CD"));
+         m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        m_modelLabel->SetText(cdInfo->getValue(m_cdInfoMap.value("1")));
++        m_modelLabel->SetText(cdInfo->getValue(HwInfoSingleton::instance().m_cdInfoMap.value("1")));
+         m_explorContent.append(
+-                    QString("%1\t%2").arg(tr("CD")).arg(cdInfo->getValue(m_cdInfoMap.value("1"))));
++                QString("%1\t%2").arg(tr("CD")).arg(cdInfo->getValue(HwInfoSingleton::instance().m_cdInfoMap.value("1"))));
++
++        //从ini中获取内容需要修改的内容
++        QMap<QString, QString> additionMap;
++        kom::Configure conf;
++        QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_CD).toStringList().join(",");
++        QStringList infolist = info.split("|");
++        for (int i = 0; i < infolist.length(); ++i) {
++            if(infolist.at(i).contains("Change")) {
++                QStringList infos = infolist.at(i).split(",");
++                if(cdInfo->model == infos[1]){
++                    for (int j = 2; j < infos.length(); ++j) {
++                        QStringList keyAndValue = infos[j].split("=");
++                        if (keyAndValue[0] == "Name"){
++                            m_modelLabel->SetText(keyAndValue[1]);
++                            m_explorContent.clear();
++                            m_explorContent.append(QString("%1\t%2").arg(tr("CD")).arg(keyAndValue[1]));
++                            continue;
++                        }
++                        if(HwInfoSingleton::instance().m_cdInfoMap.keys().contains(keyAndValue[0])){
++                            // 如果map中存在,说明是修改某一项的值
++                            cdInfo->setValue(HwInfoSingleton::instance().m_cdInfoMap.value(keyAndValue[0]), keyAndValue[1]);
++                        }else{
++                            // 如果map中不存在,说明是添加一项
++                            additionMap.insert(keyAndValue[0], keyAndValue[1]);
++                        }
++                    }
++                }
++            }
++        }
+ 
+-        for (const QString &key: m_cdInfo) {
++        for (const QString &key: HwInfoSingleton::instance().m_cdInfo) {
+             if (key == "1") {
+                 continue;
+             }
+-            QString value = cdInfo->getValue(m_cdInfoMap.value(key));
++            QString value = cdInfo->getValue(HwInfoSingleton::instance().m_cdInfoMap.value(key));
+             if (value != "") {
+                 m_explorContent.append(QString("%1\t%2").arg(key).arg(value));
+                 itemCount++;
+                 TreeItem *item = new TreeItem(key, value, this);
++                item->setAutoFillBackground(true);
+                 QTreeWidgetItem *childItem = new QTreeWidgetItem();
+                 childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+                 m_treeItemList.append(item);
+                 m_treeWidgetItemList.append(childItem);
+             }
+         }
++
++        // 添加用户自定义的显示内容
++        for (int i = 0; i < additionMap.keys().length(); ++i) {
++            m_explorContent.append(QString("%1\t%2").arg(additionMap.keys()[i]).arg(additionMap.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(additionMap.keys()[i], additionMap.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
+     } else if (auto batteryInfo = dynamic_cast<BatteryInfo *>(m_devInfo)) {
+         m_pixMap = getIcon("battery-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+-        m_iconLabel->setPixmap(getIcon("battery-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setPixmap(
++                getIcon("battery-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
+         m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_textLabel->setText(tr("Battery"));
+         m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        m_modelLabel->SetText(batteryInfo->getValue(m_batteryInfoMap.value("1")));
++        m_modelLabel->SetText(batteryInfo->getValue(HwInfoSingleton::instance().m_batteryInfoMap.value("1")));
+         m_explorContent.append(QString("%1\t%2").arg(tr("Battery")).arg(
+-                                   batteryInfo->getValue(m_batteryInfoMap.value("1"))));
++                batteryInfo->getValue(HwInfoSingleton::instance().m_batteryInfoMap.value("1"))));
++
++        //从ini中获取内容需要修改的内容
++        QMap<QString, QString> additionMap;
++        kom::Configure conf;
++        QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_BATTERY).toStringList().join(",");
++        QStringList infolist = info.split("|");
++        for (int i = 0; i < infolist.length(); ++i) {
++            if(infolist.at(i).contains("Change")) {
++                QStringList infos = infolist.at(i).split(",");
++                if(batteryInfo->model == infos[1]){
++                    for (int j = 2; j < infos.length(); ++j) {
++                        QStringList keyAndValue = infos[j].split("=");
++                        if (keyAndValue[0] == "Name"){
++                            m_modelLabel->SetText(keyAndValue[1]);
++                            m_explorContent.clear();
++                            m_explorContent.append(QString("%1\t%2").arg(tr("Battery")).arg(keyAndValue[1]));
++                            continue;
++                        }
++                        if(HwInfoSingleton::instance().m_batteryInfoMap.keys().contains(keyAndValue[0])){
++                            // 如果map中存在,说明是修改某一项的值
++                            batteryInfo->setValue(HwInfoSingleton::instance().m_batteryInfoMap.value(keyAndValue[0]), keyAndValue[1]);
++                        }else{
++                            // 如果map中不存在,说明是添加一项
++                            additionMap.insert(keyAndValue[0], keyAndValue[1]);
++                        }
++                    }
++                }
++            }
++        }
+ 
+-        for (const QString &key: m_batteryInfo) {
++        for (const QString &key: HwInfoSingleton::instance().m_batteryInfo) {
+             if (key == "1") {
+                 continue;
+             }
+-            QString value = batteryInfo->getValue(m_batteryInfoMap.value(key));
++            QString value = batteryInfo->getValue(HwInfoSingleton::instance().m_batteryInfoMap.value(key));
+             if (value != "") {
+                 m_explorContent.append(QString("%1\t%2").arg(key).arg(value));
+                 itemCount++;
+                 TreeItem *item = new TreeItem(key, value, this);
++                item->setAutoFillBackground(true);
+                 QTreeWidgetItem *childItem = new QTreeWidgetItem();
+                 childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+                 m_treeItemList.append(item);
+@@ -551,64 +1166,490 @@ void HwWidget::setContent() {
+                 if (key == QApplication::tr("Energy") || key == QApplication::tr("Time To Empty") ||
+                     key == QApplication::tr("Percentage") || key == QApplication::tr("State")) {
+                     connect(m_timer, &QTimer::timeout, [=]() {
+-                        item->setLabelText(batteryInfo->getValue(m_batteryInfoMap.value(key)));
++                        item->setLabelText(batteryInfo->getValue(HwInfoSingleton::instance().m_batteryInfoMap.value(key)));
+                     });
+                     m_timer->start(3000);
+                 }
+ 
+             }
+         }
++
++        // 添加用户自定义的显示内容
++        for (int i = 0; i < additionMap.keys().length(); ++i) {
++            m_explorContent.append(QString("%1\t%2").arg(additionMap.keys()[i]).arg(additionMap.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(additionMap.keys()[i], additionMap.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
+     } else if (auto fanInfo = dynamic_cast<FanInfo *>(m_devInfo)) {
+-        m_pixMap = getIcon("ukui-zs-iso-symbolic",HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+-        m_iconLabel->setPixmap(getIcon("ukui-zs-iso-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_pixMap = getIcon("ukui-zs-iso-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(
++                getIcon("ukui-zs-iso-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
+         m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_textLabel->setText(tr("Fan"));
+         m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        m_modelLabel->SetText(fanInfo->getValue(m_fanInfoMap.value("1")));
++        m_modelLabel->SetText(fanInfo->getValue(HwInfoSingleton::instance().m_fanInfoMap.value("1")));
+         m_explorContent.append(
+-                    QString("%1\t%2").arg(tr("Fan")).arg(fanInfo->getValue(m_fanInfoMap.value("1"))));
++                QString("%1\t%2").arg(tr("Fan")).arg(fanInfo->getValue(HwInfoSingleton::instance().m_fanInfoMap.value("1"))));
++
++        //从ini中获取内容需要修改的内容
++        QMap<QString, QString> additionMap;
++        kom::Configure conf;
++        QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_FAN).toStringList().join(",");
++        QStringList infolist = info.split("|");
++        for (int i = 0; i < infolist.length(); ++i) {
++            if(infolist.at(i).contains("Change")) {
++                QStringList infos = infolist.at(i).split(",");
++                if(fanInfo->name == infos[1]){
++                    for (int j = 2; j < infos.length(); ++j) {
++                        QStringList keyAndValue = infos[j].split("=");
++                        if (keyAndValue[0] == "Name"){
++                            m_modelLabel->SetText(keyAndValue[1]);
++                            m_explorContent.clear();
++                            m_explorContent.append(QString("%1\t%2").arg(tr("Fan")).arg(keyAndValue[1]));
++                            continue;
++                        }
++                        if(HwInfoSingleton::instance().m_fanInfoMap.keys().contains(keyAndValue[0])){
++                            // 如果map中存在,说明是修改某一项的值
++                            fanInfo->setValue(HwInfoSingleton::instance().m_fanInfoMap.value(keyAndValue[0]), keyAndValue[1]);
++                        }else{
++                            // 如果map中不存在,说明是添加一项
++                            additionMap.insert(keyAndValue[0], keyAndValue[1]);
++                        }
++                    }
++                }
++            }
++        }
+ 
+-        for (const QString &key: m_fanInfo) {
++        for (const QString &key: HwInfoSingleton::instance().m_fanInfo) {
+             if (key == "1") {
+                 continue;
+             }
+-            QString value = fanInfo->getValue(m_fanInfoMap.value(key));
++            QString value = fanInfo->getValue(HwInfoSingleton::instance().m_fanInfoMap.value(key));
+             if (value != "") {
+                 m_explorContent.append(QString("%1\t%2").arg(key).arg(value));
+                 itemCount++;
+                 TreeItem *item = new TreeItem(key, value, this);
++                item->setAutoFillBackground(true);
+                 QTreeWidgetItem *childItem = new QTreeWidgetItem();
+                 childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+                 m_treeItemList.append(item);
+                 m_treeWidgetItemList.append(childItem);
+             }
+         }
++
++        // 添加用户自定义的显示内容
++        for (int i = 0; i < additionMap.keys().length(); ++i) {
++            m_explorContent.append(QString("%1\t%2").arg(additionMap.keys()[i]).arg(additionMap.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(additionMap.keys()[i], additionMap.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
+     } else if (auto cameraInfo = dynamic_cast<CameraInfo *>(m_devInfo)) {
+         m_pixMap = getIcon("camera-photo-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
+-        m_iconLabel->setPixmap(getIcon("camera-photo-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setPixmap(
++                getIcon("camera-photo-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
+         m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
+         m_textLabel->setText(tr("Camera"));
+         m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
+-        m_modelLabel->SetText(cameraInfo->getValue(m_cameraInfoMap.value("1")));
++        m_modelLabel->SetText(cameraInfo->getValue(HwInfoSingleton::instance().m_cameraInfoMap.value("1")));
+         m_explorContent.append(QString("%1\t%2").arg(tr("Camera")).arg(
+-                                   cameraInfo->getValue(m_cameraInfoMap.value("1"))));
++                cameraInfo->getValue(HwInfoSingleton::instance().m_cameraInfoMap.value("1"))));
++
++        //从ini中获取内容需要修改的内容
++        QMap<QString, QString> additionMap;
++        kom::Configure conf;
++        QString info = conf.value(CONFIG_DEVICE_MANAGER, CONFIG_DEVICE_MANAGER_CAMERA).toStringList().join(",");
++        QStringList infolist = info.split("|");
++        for (int i = 0; i < infolist.length(); ++i) {
++            if(infolist.at(i).contains("Change")) {
++                QStringList infos = infolist.at(i).split(",");
++                if(cameraInfo->name == infos[1]){
++                    for (int j = 2; j < infos.length(); ++j) {
++                        QStringList keyAndValue = infos[j].split("=");
++                        if (keyAndValue[0] == "Name"){
++                            m_modelLabel->SetText(keyAndValue[1]);
++                            m_explorContent.clear();
++                            m_explorContent.append(QString("%1\t%2").arg(tr("Camera")).arg(keyAndValue[1]));
++                            continue;
++                        }
++                        if(HwInfoSingleton::instance().m_cameraInfoMap.keys().contains(keyAndValue[0])){
++                            // 如果map中存在,说明是修改某一项的值
++                            cameraInfo->setValue(HwInfoSingleton::instance().m_cameraInfoMap.value(keyAndValue[0]), keyAndValue[1]);
++                        }else{
++                            // 如果map中不存在,说明是添加一项
++                            additionMap.insert(keyAndValue[0], keyAndValue[1]);
++                        }
++                    }
++                }
++            }
++        }
+ 
+-        for (const QString &key: m_cameraInfo) {
++        for (const QString &key: HwInfoSingleton::instance().m_cameraInfo) {
+             if (key == "1") {
+                 continue;
+             }
+-            QString value = cameraInfo->getValue(m_cameraInfoMap.value(key));
++            QString value = cameraInfo->getValue(HwInfoSingleton::instance().m_cameraInfoMap.value(key));
+             if (value != "") {
+                 m_explorContent.append(QString("%1\t%2").arg(key).arg(value));
+                 itemCount++;
+                 TreeItem *item = new TreeItem(key, value, this);
++                item->setAutoFillBackground(true);
+                 QTreeWidgetItem *childItem = new QTreeWidgetItem();
+                 childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
+                 m_treeItemList.append(item);
+                 m_treeWidgetItemList.append(childItem);
+             }
+         }
++        // 添加用户自定义的显示内容
++        for (int i = 0; i < additionMap.keys().length(); ++i) {
++            m_explorContent.append(QString("%1\t%2").arg(additionMap.keys()[i]).arg(additionMap.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(additionMap.keys()[i], additionMap.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++    }
++}
++
++void HwWidget::setContent(QString devType, QMap<QString, QString> devInfo){
++    if (devType == "Memory"){
++        m_pixMap = getIcon("ukui-zs-memory-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(
++                getIcon("ukui-zs-memory-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_textLabel->setText(tr("Memory"));
++        m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
++        m_modelLabel->SetText(devInfo.value("Name"));
++        m_explorContent.append(QString("%1\t%2").arg(tr("Memory")).arg(devInfo.value("Name")));
++        for (int i = 0; i < devInfo.values().length(); ++i) {
++            if (devInfo.keys()[i] == "Name") {
++                continue;
++            }
++            m_explorContent.append(QString("%1\t%2").arg(devInfo.keys()[i]).arg(devInfo.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(devInfo.keys()[i], devInfo.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++        return;
++    }
++    // 显卡
++    if (devType == "GraphicCard"){
++        m_pixMap = getIcon("ukui-graphics-card-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(getIcon("ukui-graphics-card-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_textLabel->setText(tr("Graphic Card"));
++        m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
++        m_modelLabel->SetText(devInfo.value("Name"));
++        m_explorContent.append(QString("%1\t%2").arg(tr("Graphic Card")).arg(devInfo.value("Name")));
++        for (int i = 0; i < devInfo.values().length(); ++i) {
++            if (devInfo.keys()[i] == "Name") {
++                continue;
++            }
++            m_explorContent.append(QString("%1\t%2").arg(devInfo.keys()[i]).arg(devInfo.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(devInfo.keys()[i], devInfo.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++        return;
++    }
++
++    // 网卡
++    if (devType == "NetworkCard"){
++        m_pixMap = getIcon("ukui-zs-network-card-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(getIcon("ukui-zs-network-card-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_textLabel->setText(tr("Network Card"));
++        m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
++        m_modelLabel->SetText(devInfo.value("Name"));
++        m_explorContent.append(QString("%1\t%2").arg(tr("Network Card")).arg(devInfo.value("Name")));
++        for (int i = 0; i < devInfo.values().length(); ++i) {
++            if (devInfo.keys()[i] == "Name") {
++                continue;
++            }
++            m_explorContent.append(QString("%1\t%2").arg(devInfo.keys()[i]).arg(devInfo.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(devInfo.keys()[i], devInfo.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++        return;
++    }
++
++    // 硬盘
++    if (devType == "Disk"){
++        m_pixMap = getIcon("ukui-zs-hard-disk-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(getIcon("ukui-zs-hard-disk-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_textLabel->setText(tr("Disk"));
++        m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
++        m_modelLabel->SetText(devInfo.value("Name"));
++        m_explorContent.append(QString("%1\t%2").arg(tr("Disk")).arg(devInfo.value("Name")));
++        for (int i = 0; i < devInfo.values().length(); ++i) {
++            if (devInfo.keys()[i] == "Name") {
++                continue;
++            }
++            m_explorContent.append(QString("%1\t%2").arg(devInfo.keys()[i]).arg(devInfo.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(devInfo.keys()[i], devInfo.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++        return;
++    }
++
++    // 显示器
++    if (devType == "Monitor"){
++        m_pixMap = getIcon("computer-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(
++                getIcon("computer-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_textLabel->setText(tr("Monitor"));
++        m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
++        m_modelLabel->SetText(devInfo.value("Name"));
++        m_explorContent.append(QString("%1\t%2").arg(tr("Monitor")).arg(devInfo.value("Name")));
++        for (int i = 0; i < devInfo.values().length(); ++i) {
++            if (devInfo.keys()[i] == "Name") {
++                continue;
++            }
++            m_explorContent.append(QString("%1\t%2").arg(devInfo.keys()[i]).arg(devInfo.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(devInfo.keys()[i], devInfo.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++        return;
++    }
++
++    // 声卡
++    if (devType == "SoundCard"){
++        m_pixMap = getIcon("audio-volume-high-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(getIcon("audio-volume-high-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_textLabel->setText(tr("Sound Card"));
++        m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
++        m_modelLabel->SetText(devInfo.value("Name"));
++        m_explorContent.append(QString("%1\t%2").arg(tr("Sound Card")).arg(devInfo.value("Name")));
++        for (int i = 0; i < devInfo.values().length(); ++i) {
++            if (devInfo.keys()[i] == "Name") {
++                continue;
++            }
++            m_explorContent.append(QString("%1\t%2").arg(devInfo.keys()[i]).arg(devInfo.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(devInfo.keys()[i], devInfo.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++        return;
++    }
++
++    // 键盘
++    if (devType == "Keyboard"){
++        m_pixMap = getIcon("input-keyboard-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(
++                HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(
++                getIcon("input-keyboard-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_textLabel->setText(tr("Keyboard"));
++        m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
++        m_modelLabel->SetText(devInfo.value("Name"));
++        m_explorContent.append(QString("%1\t%2").arg(tr("Keyboard")).arg(devInfo.value("Name")));
++        for (int i = 0; i < devInfo.values().length(); ++i) {
++            if (devInfo.keys()[i] == "Name") {
++                continue;
++            }
++            m_explorContent.append(QString("%1\t%2").arg(devInfo.keys()[i]).arg(devInfo.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(devInfo.keys()[i], devInfo.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++        return;
++    }
++
++    // 鼠标
++    if (devType == "Mouse"){
++        m_pixMap = getIcon("input-mouse-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(
++                getIcon("input-mouse-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_textLabel->setText(tr("Mouse"));
++        m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
++        m_modelLabel->SetText(devInfo.value("Name"));
++        m_explorContent.append(QString("%1\t%2").arg(tr("Mouse")).arg(devInfo.value("Name")));
++        for (int i = 0; i < devInfo.values().length(); ++i) {
++            if (devInfo.keys()[i] == "Name") {
++                continue;
++            }
++            m_explorContent.append(QString("%1\t%2").arg(devInfo.keys()[i]).arg(devInfo.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(devInfo.keys()[i], devInfo.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++        return;
++    }
++
++    // 蓝牙
++    if (devType == "Bluetooth"){
++        m_pixMap = getIcon("bluetooth-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(
++                getIcon("bluetooth-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_textLabel->setText(tr("Bluetooth"));
++        m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
++        m_modelLabel->SetText(devInfo.value("Name"));
++        m_explorContent.append(QString("%1\t%2").arg(tr("Bluetooth")).arg(devInfo.value("Name")));
++        for (int i = 0; i < devInfo.values().length(); ++i) {
++            if (devInfo.keys()[i] == "Name") {
++                continue;
++            }
++            m_explorContent.append(QString("%1\t%2").arg(devInfo.keys()[i]).arg(devInfo.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(devInfo.keys()[i], devInfo.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++        return;
+     }
++
++    // 光驱
++    if (devType == "Cd"){
++        m_pixMap = getIcon("ukui-burn-cd-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(
++                getIcon("ukui-burn-cd-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_textLabel->setText(tr("CD"));
++        m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
++        m_modelLabel->SetText(devInfo.value("Name"));
++        m_explorContent.append(QString("%1\t%2").arg(tr("CD")).arg(devInfo.value("Name")));
++        for (int i = 0; i < devInfo.values().length(); ++i) {
++            if (devInfo.keys()[i] == "Name") {
++                continue;
++            }
++            m_explorContent.append(QString("%1\t%2").arg(devInfo.keys()[i]).arg(devInfo.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(devInfo.keys()[i], devInfo.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++        return;
++    }
++
++    // 电池
++    if (devType == "Battery"){
++        m_pixMap = getIcon("battery-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(
++                getIcon("battery-sylmbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_textLabel->setText(tr("Battery"));
++        m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
++        m_modelLabel->SetText(devInfo.value("Name"));
++        m_explorContent.append(QString("%1\t%2").arg(tr("Battery")).arg(devInfo.value("Name")));
++        for (int i = 0; i < devInfo.values().length(); ++i) {
++            if (devInfo.keys()[i] == "Name") {
++                continue;
++            }
++            m_explorContent.append(QString("%1\t%2").arg(devInfo.keys()[i]).arg(devInfo.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(devInfo.keys()[i], devInfo.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++        return;
++    }
++
++    // 光驱
++    if (devType == "Fan"){
++        m_pixMap = getIcon("ukui-zs-iso-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(
++                getIcon("ukui-zs-iso-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_textLabel->setText(tr("Fan"));
++        m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
++        m_modelLabel->SetText(devInfo.value("Name"));
++        m_explorContent.append(QString("%1\t%2").arg(tr("Fan")).arg(devInfo.value("Name")));
++        for (int i = 0; i < devInfo.values().length(); ++i) {
++            if (devInfo.keys()[i] == "Name") {
++                continue;
++            }
++            m_explorContent.append(QString("%1\t%2").arg(devInfo.keys()[i]).arg(devInfo.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(devInfo.keys()[i], devInfo.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++        return;
++    }
++
++    // 摄像头
++    if (devType == "Camera"){
++        m_pixMap = getIcon("camera-photo-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_iconLabel->setPixmap(
++                getIcon("camera-photo-symbolic", HARDWAREINFOWIDGETBUTTONSIZE).pixmap(HARDWAREINFOWIDGETBUTTONSIZE));
++        m_iconLabel->setFixedSize(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_textLabel->setText(tr("Camera"));
++        m_textLabel->setFixedWidth(TREEITEMLABELWIDTH);
++        m_modelLabel->SetText(devInfo.value("Name"));
++        m_explorContent.append(QString("%1\t%2").arg(tr("Camera")).arg(devInfo.value("Name")));
++        for (int i = 0; i < devInfo.values().length(); ++i) {
++            if (devInfo.keys()[i] == "Name") {
++                continue;
++            }
++            m_explorContent.append(QString("%1\t%2").arg(devInfo.keys()[i]).arg(devInfo.values()[i]));
++            itemCount++;
++            TreeItem *item = new TreeItem(devInfo.keys()[i], devInfo.values()[i], this);
++            QTreeWidgetItem *childItem = new QTreeWidgetItem();
++            childItem->setSizeHint(0, TREEWIDGETITEMSIZEHINT);
++            m_treeItemList.append(item);
++            m_treeWidgetItemList.append(childItem);
++        }
++        return;
++    }
++
+ }
+ 
+ void HwWidget::initConnect() {
+@@ -634,14 +1675,24 @@ void HwWidget::setIconColor() {
+     QString styleName = kdk::GsettingMonitor::getSystemTheme().toString();
+     if (styleName == "ukui-black" || styleName == "ukui-dark") {
+         m_iconLabel->setPixmap(drawSymbolicColoredPixmap(m_pixMap, "white"));
++
++        QIcon icon = getIcon("preferences-system-details-symbolic", HARDWAREINFOWIDGETBUTTONSIZE);
++        QPixmap pixMap = icon.pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_deactiveTips->setPixmap(drawSymbolicColoredPixmap(pixMap, "white"));
++
+     } else {
+         m_iconLabel->setPixmap(drawSymbolicColoredPixmap(m_pixMap, "black"));
++
++        QIcon icon = getIcon("preferences-system-details-symbolic", HARDWAREINFOWIDGETBUTTONSIZE);
++        QPixmap pixMap = icon.pixmap(HARDWAREINFOWIDGETBUTTONSIZE);
++        m_deactiveTips->setPixmap(drawSymbolicColoredPixmap(pixMap, "black"));
+     }
+ 
+     float fontSize = kdk::GsettingMonitor::getSystemFontSize().toFloat();
+     QFont font;
+     font.setPointSize(fontSize);
+     m_textLabel->setFont(font);
++    m_activateStatus->setFont(font);
+ }
+ 
+ QPixmap HwWidget::drawSymbolicColoredPixmap(const QPixmap &source, QString cgColor) {
+@@ -679,8 +1730,7 @@ QPixmap HwWidget::drawSymbolicColoredPixmap(const QPixmap &source, QString cgCol
+     return QPixmap::fromImage(img);
+ }
+ 
+-QIcon HwWidget::getIcon(QString iconName, QSize iconSize)
+-{
++QIcon HwWidget::getIcon(QString iconName, QSize iconSize) {
+     QString path = "/usr/share/kylin-os-manager/icons/";
+ 
+     QIcon icon;
+@@ -720,24 +1770,24 @@ void HwWidget::actionExportSlot() {
+ 
+ void HwWidget::actionActiveBluetoothSlot() {
+     // e84825e03eecc296ead1fbf90ec63592f7e90e6e  commit ID  在这个版本修改了之前调用工具箱dbs的禁用启用策略
+-    //m_menu->removeAction(m_actionActive);
+-    //m_menu->addAction(m_actionDeactive);
+-    //QString result = m_data->get("bluetooth").toString();
+-    //QString str = "activate";
+-    //m_data->set("bluetooth", str);
++    m_menu->removeAction(m_actionActive);
++    m_menu->addAction(m_actionDeactive);
++    QString result = m_data->get("bluetooth").toString();
++    QString str = "activate";
++    m_data->set("bluetooth", str);
+     //kdk_device_set_bluetooth_status(KDK_BLUETOOTH_ENABLE);
+-    //emit g_signal->enableBluetoothSignal();
++    emit g_signal->enableBluetoothSignal();
+ }
+ 
+ void HwWidget::actionDeactiveBluetoothSlot() {
+     // e84825e03eecc296ead1fbf90ec63592f7e90e6e  commit ID  在这个版本修改了之前调用工具箱dbs的禁用启用策略
+-    //m_menu->removeAction(m_actionDeactive);
+-    //m_menu->addAction(m_actionActive);
+-    //QString result = m_data->get("bluetooth").toString();
+-    //QString str = "deactivate";
+-    //m_data->set("bluetooth", str);
++    m_menu->removeAction(m_actionDeactive);
++    m_menu->addAction(m_actionActive);
++    QString result = m_data->get("bluetooth").toString();
++    QString str = "deactivate";
++    m_data->set("bluetooth", str);
+     //kdk_device_set_bluetooth_status(KDK_BLUETOOTH_DISABLE);
+-    //emit g_signal->disableBluetoothSignal();
++    emit g_signal->disableBluetoothSignal();
+ }
+ 
+ void HwWidget::actionActiveSoundCardSlot() {
+@@ -761,14 +1811,14 @@ void HwWidget::actionDeactiveSoundCardSlot() {
+ }
+ 
+ void HwWidget::actionActiveNetworkCardSlot() {
+-    if (m_isWireless == 1){
++    if (m_isWireless == 1) {
+         QDBusConnection bus = QDBusConnection::systemBus();
+         QDBusInterface manager(DBUS_SERVICENAME, DBUS_DRIVER_INFO_TOOL, DBUS_DRIVER_INFO_INTERFACE_TOOL, bus);
+         manager.call("enableWirelessNetworkCard");
+         QString str = "activate";
+         m_data->set("wirelessnetworkcard", str);
+         emit g_signal->enableWirelessNetworkCardSignal();
+-    }else{
++    } else {
+         QDBusConnection bus = QDBusConnection::systemBus();
+         QDBusInterface manager(DBUS_SERVICENAME, DBUS_DRIVER_INFO_TOOL, DBUS_DRIVER_INFO_INTERFACE_TOOL, bus);
+         manager.call("enableWiredNetworkCard");
+@@ -781,14 +1831,14 @@ void HwWidget::actionActiveNetworkCardSlot() {
+ }
+ 
+ void HwWidget::actionDeactiveNetworkCardSlot() {
+-    if (m_isWireless == 1){
++    if (m_isWireless == 1) {
+         QDBusConnection bus = QDBusConnection::systemBus();
+         QDBusInterface manager(DBUS_SERVICENAME, DBUS_DRIVER_INFO_TOOL, DBUS_DRIVER_INFO_INTERFACE_TOOL, bus);
+         manager.call("disableWirelessNetworkCard");
+         QString str = "deactivate";
+         m_data->set("wirelessnetworkcard", str);
+         emit g_signal->disableWirelessNetworkCardSignal();
+-    }else{
++    } else {
+         QDBusConnection bus = QDBusConnection::systemBus();
+         QDBusInterface manager(DBUS_SERVICENAME, DBUS_DRIVER_INFO_TOOL, DBUS_DRIVER_INFO_INTERFACE_TOOL, bus);
+         manager.call("disableWiredNetworkCard");
+@@ -810,12 +1860,13 @@ void HwWidget::setDisableStatus(bool status) {
+     m_modelLabel->setDisabled(status);
+     m_activateStatus->setDisabled(status);
+     if (status) {
+-        m_activateStatus->show();
++        m_activeStackWidget->setCurrentIndex(0);
+     } else {
+-        m_activateStatus->hide();
++        m_activeStackWidget->setCurrentIndex(1);
+     }
+ }
+ 
++
+ void HwWidget::spreadIn() {
+     if (m_btnStackedWidget->currentWidget() == m_spreadInBtn) {
+         this->m_spreadInBtn->click();
+@@ -835,7 +1886,7 @@ QString HwWidget::getResolution(QString interface) {
+     QString res;
+     bool isCurrentMode = false;
+ 
+-    for (const QString &line : lines) {
++    for (const QString &line: lines) {
+         if (line.contains(" connected")) {
+             // 解析当前显示器名称
+             QStringList parts = line.split(' ');
+@@ -846,12 +1897,12 @@ QString HwWidget::getResolution(QString interface) {
+             QStringList parts = line.simplified().split(' ');
+             if (parts.size() >= 2) {
+                 QString refreshRate;
+-                for(int i = 1; i < parts.length(); ++i){
+-                    if(QString(parts[i]).contains("*")){
++                for (int i = 1; i < parts.length(); ++i) {
++                    if (QString(parts[i]).contains("*")) {
+                         res = parts[0];
+                         refreshRate = parts[i];
+                     }
+-                    if(refreshRate.contains("+")){
++                    if (refreshRate.contains("+")) {
+                         refreshRate.remove("+");
+                     }
+                 }
+@@ -870,16 +1921,73 @@ QString HwWidget::getResolution(QString interface) {
+         }
+     }
+ 
+-    QList<QScreen*> screens = QGuiApplication::screens();
+-    foreach (QScreen *screen, screens) {
+-        QString interface = screen->name();
+-        if (devlist.contains(interface)) {
+-            QString resolution = res
+-                                + "@"
+-                                + devlist.value(interface) + "Hz";
+-            return resolution;
++    QList<QScreen *> screens = QGuiApplication::screens();
++            foreach (QScreen *screen, screens) {
++            QString interface = screen->name();
++            if (devlist.contains(interface)) {
++                QString resolution = res
++                                     + "@"
++                                     + devlist.value(interface) + "Hz";
++                return resolution;
++            }
+         }
+-    }
+ 
+     return QString(); // 如果没有匹配到则返回空字符串
+ }
++
++void HwWidget::setBluetoothStatus() {
++    auto bluetoothInfo = dynamic_cast<BluetoothInfo *>(m_devInfo);
++    if (bluetoothInfo->checkStatus()) {
++        setDisableStatus(false);
++        m_data->set("bluetooth", "activate");
++        if (m_menu->actions().contains(m_actionActive)) {
++            m_menu->removeAction(m_actionActive);
++            m_menu->addAction(m_actionDeactive);
++        }
++    } else {
++        setDisableStatus(true);
++        m_data->set("bluetooth", "deactivate");
++        if (m_menu->actions().contains(m_actionDeactive)) {
++            m_menu->removeAction(m_actionDeactive);
++            m_menu->addAction(m_actionActive);
++        }
++    }
++}
++
++void HwWidget::setNetworkStatus() {
++    auto networkCardInfo = dynamic_cast<NetworkCardInfo *>(m_devInfo);
++    if (networkCardInfo->isWireless == 1) {
++        if (networkCardInfo->checkStatus()) {
++            setDisableStatus(false);
++            m_data->set("wirelessnetworkcard", "activate");
++            if (m_menu->actions().contains(m_actionActive)) {
++                m_menu->removeAction(m_actionActive);
++                m_menu->addAction(m_actionDeactive);
++            }
++        } else {
++            setDisableStatus(true);
++            m_data->set("wirelessnetworkcard", "deactivate");
++            if (m_menu->actions().contains(m_actionDeactive)) {
++                m_menu->removeAction(m_actionDeactive);
++                m_menu->addAction(m_actionActive);
++            }
++        }
++    } else {
++        if (networkCardInfo->checkStatus()) {
++            setDisableStatus(false);
++            m_data->set("wireldnetworkcard", "activate");
++            if (m_menu->actions().contains(m_actionActive)) {
++                m_menu->removeAction(m_actionActive);
++                m_menu->addAction(m_actionDeactive);
++            }
++        } else {
++            setDisableStatus(true);
++            m_data->set("wireldnetworkcard", "deactivate");
++            if (m_menu->actions().contains(m_actionDeactive)) {
++                m_menu->removeAction(m_actionDeactive);
++                m_menu->addAction(m_actionActive);
++            }
++        }
++    }
++}
++
+diff --git a/plugins/device-controller/src/hwwidget.h b/plugins/device-controller/src/hwwidget.h
+index de41a13..d3f940a 100644
+--- a/plugins/device-controller/src/hwwidget.h
++++ b/plugins/device-controller/src/hwwidget.h
+@@ -56,6 +56,8 @@ Q_OBJECT
+ public:
+     HwWidget(DeviceInfo *devinfo, QWidget *parent = nullptr);
+ 
++    HwWidget(QString devType, QMap<QString, QString> devInfo, QWidget *parent = nullptr);
++
+     HwWidget(QWidget *parent = nullptr);
+ 
+     ~HwWidget();
+@@ -68,6 +70,8 @@ public:
+ 
+     QString getDevType();
+ 
++    QString getMonitorInterface();
++
+     void actionExportSlot();
+ 
+     void spreadIn();
+@@ -81,7 +85,10 @@ public:
+     QLabel *m_iconLabel = nullptr;    // 图标
+     QLabel *m_textLabel = nullptr;    // 设备类型
+     K::TextLabel *m_modelLabel = nullptr;   // 设备型号
++
++    QStackedWidget *m_activeStackWidget = nullptr;
+     QLabel *m_activateStatus = nullptr;
++    QLabel *m_deactiveTips = nullptr;
+     QStackedWidget *m_btnStackedWidget = nullptr;
+     kdk::KBorderlessButton *m_spreadOutBtn = nullptr;
+     kdk::KBorderlessButton *m_spreadInBtn = nullptr;
+@@ -104,17 +111,22 @@ public:
+ 
+     QString m_bluetoothAddress;    // bluetooth的唯一标识
+     bool m_isWireless = true;  // 标识网卡类型
++    QString m_monitorInterface;    // 显示器接口
++
+ private:
+     QList<QMetaObject::Connection> m_connections;
+     QList<QScreen *> m_screens;
+ 
+     void setContent();
+ 
++    void setContent(QString devType, QMap<QString, QString> devInfo);
++
+     QPixmap drawSymbolicColoredPixmap(const QPixmap &source, QString cgColor);
+-	
++
+     QIcon getIcon(QString iconName, QSize iconSize);
+-	
++
+     QString getResolution(QString interface);
++
+ protected:
+     void mousePressEvent(QMouseEvent *mouseEvent) override;
+ 
+@@ -136,340 +148,14 @@ private slots:
+ 
+     void actionDeactiveNetworkCardSlot();
+ 
++    void setBluetoothStatus();
++
++    void setNetworkStatus();
++
+ private:
+     QMap<QString, QString> m_networkCardPathMap;
+ 
+-    QStringList m_cpuInfo = {
+-            "1",
+-            QObject::tr("Manufacturer"),
+-            QObject::tr("Cores"),
+-            QObject::tr("Online Cores"),
+-            QObject::tr("Thread Per Cores"),
+-            QObject::tr("MAX MHz"),
+-            QObject::tr("L1d Cache"),
+-            QObject::tr("L1i Cache"),
+-            QObject::tr("L2 Cache"),
+-            QObject::tr("L3 Cache"),
+-            QObject::tr("L4 Cache"),
+-            QObject::tr("CPU Current Frequency"),
+-            QObject::tr("CPU Usage Rate"),
+-            QObject::tr("CPU Temperature")
+-    };
+-    QMap<QString, QString> m_cpuMap = {{"1",                                  "model"},
+-                                       {QObject::tr("Manufacturer"),          "vendor"},
+-                                       {QObject::tr("Cores"),                 "cores"},
+-                                       {QObject::tr("Online Cores"),          "onlinecores"},
+-                                       {QObject::tr("Thread Per Cores"),      "threadprecore"},
+-                                       {QObject::tr("MAX MHz"),               "maxMHz"},
+-                                       {QObject::tr("L1d Cache"),             "L1dcache"},
+-                                       {QObject::tr("L1i Cache"),             "L1icache"},
+-                                       {QObject::tr("L2 Cache"),              "L2cache"},
+-                                       {QObject::tr("L3 Cache"),              "L3cache"},
+-                                       {QObject::tr("L4 Cache"),              "L4cache"},
+-                                       {QObject::tr("CPU Current Frequency"), "Frequency"},
+-                                       {QObject::tr("CPU Usage Rate"),        "UsageRate"},
+-                                       {QObject::tr("CPU Temperature"),       "Temprature"}};
+-
+-    QStringList m_memoryInfo = {
+-        "1",
+-        QObject::tr("Bank Locator"),
+-        QObject::tr("Total Width"),
+-        QObject::tr("Size"),
+-        QObject::tr("Serial Number"),
+-        QObject::tr("Manufacturer"),
+-        QObject::tr("Data Width"),
+-        QObject::tr("Type"),
+-        QObject::tr("Speed"),
+-        QObject::tr("Configured Speed"),
+-        QObject::tr("Part Number"),
+-        QObject::tr("Memory Usage")
+-    };
+-    QMap<QString, QString> m_memoryMap = {{"1",                          "displayname"},
+-                                          {QObject::tr("Bank Locator"),  "banklocator"},
+-                                          {QObject::tr("Total Width"),   "totalwidth"},
+-                                          {QObject::tr("Size"),          "size"},
+-                                          {QObject::tr("Serial Number"), "serial"},
+-                                          {QObject::tr("Manufacturer"),  "verdor"},
+-                                          {QObject::tr("Data Width"),    "datawidth"},
+-                                          {QObject::tr("Type"),          "type"},
+-                                          {QObject::tr("Speed"),         "speed"},
+-                                          {QObject::tr("Configured Speed"),"configuredspeed"},
+-                                          {QObject::tr("Part Number"),   "partnumber"},
+-                                          {QObject::tr("Memory Usage"),  "Memory Usage"}};
+-
+-    QStringList m_graphicCardInfo = {
+-            "1",
+-            QObject::tr("Manufacturer"),
+-            QObject::tr("Sub System Device ID"),
+-            QObject::tr("Model"),
+-            QObject::tr("Memory"),
+-            QObject::tr("GPU Type"),
+-            QObject::tr("Bus Info"),
+-            QObject::tr("Clock"),
+-            QObject::tr("Physics ID"),
+-            QObject::tr("Version"),
+-            QObject::tr("Driver"),
+-            QObject::tr("Communication Width"),
+-            QObject::tr("GDDR Size"),
+-            QObject::tr("EGL Version"),
+-            QObject::tr("EGL Api List"),
+-            QObject::tr("OpenGL Version"),
+-            QObject::tr("GLSL Version"),
+-    };
+-    QMap<QString, QString> m_graphicCardMap = {{"1",                                    "model"},
+-                                               {QObject::tr("Manufacturer"),         "vendor"},
+-                                               {QObject::tr("Sub System Device ID"), "subsystem"},
+-                                               {QObject::tr("Model"),                "model"},
+-                                               {QObject::tr("Memory"),               "memorysize"},
+-                                               {QObject::tr("GPU Type"),             "gputype"},
+-                                               {QObject::tr("Bus Info"),             "businfo"},
+-                                               {QObject::tr("Clock"),                "clock"},
+-                                               {QObject::tr("Physics ID"),           "physid"},
+-                                               {QObject::tr("Version"),              "version"},
+-                                               {QObject::tr("Driver"),               "driver_now"},
+-                                               {QObject::tr("Communication Width"),                "width"},
+-                                               {QObject::tr("GDDR Size"),            "gddrsize"},
+-                                               {QObject::tr("EGL Version"),          "egl_version"},
+-                                               {QObject::tr("EGL Api List"),         "egl_apis"},
+-                                               {QObject::tr("OpenGL Version"),       "gl_version"},
+-                                               {QObject::tr("GLSL Version"),         "glsl_version"}};
+-
+-    QStringList m_baseboardInfo = {
+-            "1",
+-            QObject::tr("Manufacturer"),
+-            QObject::tr("Version"),
+-            QObject::tr("Chassis Handle"),
+-            QObject::tr("Bios Vendor"),
+-            QObject::tr("Bios Version"),
+-            QObject::tr("Chipser"),
+-            QObject::tr("Serial Number"),
+-            QObject::tr("Publish Date")
+-    };
+-    QMap<QString, QString> m_baseboardMap = {{"1",                           "model"},
+-                                             {QObject::tr("Manufacturer"),   "vendor"},
+-                                             {QObject::tr("Version"),        "version"},
+-                                             {QObject::tr("Chassis Handle"), "chassishandle"},
+-                                             {QObject::tr("Bios Vendor"),    "biosvendor"},
+-                                             {QObject::tr("Bios Version"),   "biosversion"},
+-                                             {QObject::tr("Chipser"),        "chipset"},
+-                                             {QObject::tr("Serial Number"),  "serial_num"},
+-                                             {QObject::tr("Publish Date"),   "publish_date"}};
+-
+-    QStringList m_networkCardInfo = {
+-            "1",
+-            QObject::tr("Manufacturer"),
+-            QObject::tr("Model"),
+-            QObject::tr("Bus"),
+-            QObject::tr("Driver"),
+-            QObject::tr("MAC Address"),
+-            QObject::tr("Type"),
+-            QObject::tr("IP Address"),
+-            QObject::tr("Net Musk"),
+-            QObject::tr("Send Bytes"),
+-            QObject::tr("Recved Bytes"),
+-            QObject::tr("MTU")
+-    };
+-    QMap<QString, QString> m_networkCardMap = {{"1",                         "name"},
+-                                               {QObject::tr("Manufacturer"), "vendor"},
+-                                               {QObject::tr("Model"),        "model"},
+-                                               {QObject::tr("Bus"),          "bus"},
+-                                               {QObject::tr("Driver"),       "driver_now"},
+-                                               {QObject::tr("MAC Address"),  "MAC_addr"},
+-                                               {QObject::tr("Type"),         "isWireless"},
+-                                               {QObject::tr("IP Address"),   "ip_addr"},
+-                                               {QObject::tr("Net Musk"),     "net_musk"},
+-                                               {QObject::tr("Send Bytes"),   "send_bytes"},
+-                                               {QObject::tr("Recved Bytes"), "recv_bytes"},
+-                                               {QObject::tr("MTU"),          "MTU"}
+-    };
+-
+-    QStringList m_diskInfo = {
+-        "1",
+-        QObject::tr("Vendor"),
+-        QObject::tr("Model"),
+-        QObject::tr("Size"),
+-        QObject::tr("Serial Number"),
+-        QObject::tr("Disk Name"),
+-        QObject::tr("Frimwarever Version"),
+-        QObject::tr("Disk Type"),
+-        QObject::tr("Main Disk"),
+-        QObject::tr("Interface"),
+-        QObject::tr("UFS"),
+-        QObject::tr("UFS Revision")
+-    };
+-    QMap<QString, QString> m_diskMap = {{"1",                                "name"},
+-                                        {QObject::tr("Model"),               "model"},
+-                                        {QObject::tr("Size"),                "size"},
+-                                        {QObject::tr("Serial Number"),       "serial"},
+-                                        {QObject::tr("Frimwarever Version"), "frimwareversion"},
+-                                        {QObject::tr("Disk Type"),           "type"},
+-                                        {QObject::tr("Vendor"),              "vendor"},
+-                                        {QObject::tr("Main Disk"),           "is_main"},
+-                                        {QObject::tr("Interface"),           "interface"},
+-                                        {QObject::tr("UFS"),                 "ufs"},
+-                                        {QObject::tr("UFS Revision"),        "ufsrevision"}
+-                                       };
+-
+-    QStringList m_monitorInfo = {
+-            "1",
+-            QObject::tr("Manufacturer"),
+-            QObject::tr("Model"),
+-            QObject::tr("Monitor Size"),
+-            QObject::tr("Monitor Ratio"),
+-            QObject::tr("Resolution"),
+-            QObject::tr("Max Resolution"),
+-            QObject::tr("Main Monitor"),
+-            QObject::tr("Interface"),
+-            QObject::tr("Visible Area"),
+-            QObject::tr("Gamma")
+-    };
+-    QMap<QString, QString> m_monitorMap = {{"1",                           "name"},
+-                                           {QObject::tr("Manufacturer"),   "vendor"},
+-                                           {QObject::tr("Model"),          "model"},
+-                                           {QObject::tr("Monitor Size"),   "size"},
+-                                           {QObject::tr("Monitor Ratio"),  "ratio"},
+-                                           {QObject::tr("Resolution"),     "resolution"},
+-                                           {QObject::tr("Max Resolution"), "max_resolution"},
+-                                           {QObject::tr("Main Monitor"),   "is_main"},
+-                                           {QObject::tr("Interface"),      "interface"},
+-                                           {QObject::tr("Visible Area"),   "visible_area"},
+-                                           {QObject::tr("Gamma"),          "gamma"}};
+-
+-    QStringList m_soundCardInfo = {
+-            "1",
+-            QObject::tr("Manufacturer"),
+-            QObject::tr("Bus Address"),
+-            QObject::tr("Clock"),
+-            QObject::tr("Driver"),
+-            QObject::tr("Width")
+-    };
+-    QMap<QString, QString> m_soundCardMap = {{"1",                         "model"},
+-                                             {QObject::tr("Manufacturer"), "vendor"},
+-                                             {QObject::tr("Bus Address"),  "bus"},
+-                                             {QObject::tr("Clock"),        "clock"},
+-                                             {QObject::tr("Driver"),       "driver_now"},
+-                                             {QObject::tr("Width"),        "width"}};
+-
+-    QStringList m_keyboardInfo = {
+-            "1",
+-            QObject::tr("Manufacturer"),
+-            QObject::tr("Model"),
+-            QObject::tr("Interface"),
+-            QObject::tr("Driver")
+-    };
+-    QMap<QString, QString> m_keyboardMap = {{"1",                         "name"},
+-                                            {QObject::tr("Manufacturer"), "vendor"},
+-                                            {QObject::tr("Model"),        "model"},
+-                                            {QObject::tr("Interface"),    "interface"},
+-                                            {QObject::tr("Driver"),       "driver"}};
+-
+-    QStringList m_mouseInfo = {
+-            "1",
+-            QObject::tr("Manufacturer"),
+-            QObject::tr("Model"),
+-            QObject::tr("Interface"),
+-            QObject::tr("Driver")
+-    };
+-    QMap<QString, QString> m_mouseMap = {{"1",                         "name"},
+-                                         {QObject::tr("Manufacturer"), "vendor"},
+-                                         {QObject::tr("Model"),        "model"},
+-                                         {QObject::tr("Interface"),    "interface"},
+-                                         {QObject::tr("Driver"),       "driver"}};
+-
+-    QStringList m_bluetoothInfo = {"1",
+-                                   QObject::tr("Manufacturer"),
+-                                   QObject::tr("Driver"),
+-                                   QObject::tr("Driver Version"),
+-                                   QObject::tr("Address"),
+-                                   QObject::tr("Link Mode"),
+-                                   QObject::tr("Link Policy"),
+-                                   QObject::tr("SCO MTU"),
+-                                   QObject::tr("ACL MTU"),
+-                                   QObject::tr("Speed"),
+-                                   QObject::tr("Features"),
+-                                   QObject::tr("Packe Type")
+-    };
+-    QMap<QString, QString> m_bluetoothMap = {{"1",                           "model"},
+-                                             {QObject::tr("Manufacturer"),   "vendor"},
+-                                             {QObject::tr("Driver"),         "driver_now"},
+-                                             {QObject::tr("Driver Version"), "version"},
+-                                             {QObject::tr("Address"),        "address"},
+-                                             {QObject::tr("Link Mode"),      "link_mode"},
+-                                             {QObject::tr("Link Policy"),    "link_policy"},
+-                                             {QObject::tr("Packe Type"),     "packettype"},
+-                                             {QObject::tr("SCO MTU"),        "scomtu"},
+-                                             {QObject::tr("ACL MTU"),        "aclmtu"},
+-                                             {QObject::tr("Speed"),          "speed"},
+-                                             {QObject::tr("Features"),       "features"}};
+-
+-    QStringList m_cdInfo = {
+-            "1",
+-            QObject::tr("Manufacturer"),
+-            QObject::tr("Name"),
+-            QObject::tr("Bus Info"),
+-            QObject::tr("Version"),
+-            QObject::tr("Driver"),
+-            QObject::tr("Device Number"),
+-            QObject::tr("Speed"),
+-            QObject::tr("Serial Number")
+-    };
+-    QMap<QString, QString> m_cdInfoMap = {{"1",                          "model"},
+-                                          {QObject::tr("Manufacturer"),  "vendor"},
+-                                          {QObject::tr("Name"),          "name"},
+-                                          {QObject::tr("Bus Info"),      "businfo"},
+-                                          {QObject::tr("Version"),       "version"},
+-                                          {QObject::tr("Driver"),        "driver"},
+-                                          {QObject::tr("Device Number"), "devicenum"},
+-                                          {QObject::tr("Speed"),         "speed"},
+-                                          {QObject::tr("Serial Number"), "serialnum"}};
+-
+-    QStringList m_cameraInfo = {
+-            "1",
+-            QObject::tr("Manufacturer"),
+-            QObject::tr("Model"),
+-            QObject::tr("Interface"),
+-            QObject::tr("Driver"),
+-            QObject::tr("Version"),
+-            QObject::tr("Bus Info"),
+-            QObject::tr("Speed")
+-    };
+-    QMap<QString, QString> m_cameraInfoMap = {{"1",                         "name"},
+-                                              {QObject::tr("Manufacturer"), "vendor"},
+-                                              {QObject::tr("Model"),        "model"},
+-                                              {QObject::tr("Interface"),    "interface"},
+-                                              {QObject::tr("Driver"),       "driver"},
+-                                              {QObject::tr("Version"),      "version"},
+-                                              {QObject::tr("Bus Info"),     "businfo"},
+-                                              {QObject::tr("Speed"),        "speed"}};
+-
+-    QStringList m_fanInfo = {
+-            "1",
+-            QObject::tr("Speed")
+-    };
+-    QMap<QString, QString> m_fanInfoMap = {{"1",                  "name"},
+-                                           {QObject::tr("Speed"), "speed"}};
+-
+-    QStringList m_batteryInfo = {
+-            "1",
+-            QObject::tr("Manufacturer"),
+-            QObject::tr("Serial Number"),
+-            QObject::tr("State"),
+-            QObject::tr("Energy"),
+-            QObject::tr("Used Times"),
+-            QObject::tr("Energy Full"),
+-            QObject::tr("Time To Empty"),
+-            QObject::tr("Percentage")
+-    };
+-    QMap<QString, QString> m_batteryInfoMap = {{"1",                          "model"},
+-                                               {QObject::tr("Manufacturer"),  "vendor"},
+-                                               {QObject::tr("Serial Number"), "serailnum"},
+-                                               {QObject::tr("State"),         "state"},
+-                                               {QObject::tr("Energy"),        "energy"},
+-                                               {QObject::tr("Used Times"),    "used_times"},
+-                                               {QObject::tr("Energy Full"),   "energy_full"},
+-                                               {QObject::tr("Time To Empty"), "time_to_empty"},
+-                                               {QObject::tr("Percentage"),    "percentage"}};
+-
+ };
+ 
++
+ #endif //HWWIDGET_H
+diff --git a/plugins/device-controller/src/include/hwinfostorage.cpp b/plugins/device-controller/src/include/hwinfostorage.cpp
+new file mode 100644
+index 0000000..2f62254
+--- /dev/null
++++ b/plugins/device-controller/src/include/hwinfostorage.cpp
+@@ -0,0 +1,13 @@
++#include "hwinfostorage.h"
++
++// 获取单例实例
++HwInfoSingleton &HwInfoSingleton::instance() {
++    static HwInfoSingleton instance;
++    return instance;
++}
++
++// 构造函数
++HwInfoSingleton::HwInfoSingleton() {
++}
++
++
+diff --git a/plugins/device-controller/src/include/hwinfostorage.h b/plugins/device-controller/src/include/hwinfostorage.h
+new file mode 100644
+index 0000000..9011205
+--- /dev/null
++++ b/plugins/device-controller/src/include/hwinfostorage.h
+@@ -0,0 +1,359 @@
++#ifndef HWINFOSINGLETON_H
++#define HWINFOSINGLETON_H
++
++#include <QStringList>
++#include <QMap>
++#include <QString>
++#include <QObject>
++#include <QObject>
++
++class HwInfoSingleton : public QObject
++{
++    Q_OBJECT
++public:
++    static HwInfoSingleton& instance();
++
++    QStringList m_cpuInfo = {
++        "1",
++        QObject::tr("Manufacturer"),
++        QObject::tr("Cores"),
++        QObject::tr("Online Cores"),
++        QObject::tr("Thread Per Cores"),
++        QObject::tr("MAX MHz"),
++        QObject::tr("L1d Cache"),
++        QObject::tr("L1i Cache"),
++        QObject::tr("L2 Cache"),
++        QObject::tr("L3 Cache"),
++        QObject::tr("L4 Cache"),
++        QObject::tr("CPU Current Frequency"),
++        QObject::tr("CPU Usage Rate"),
++        QObject::tr("CPU Temperature")
++    };
++    QMap<QString, QString> m_cpuMap = {{"1",                                  "model"},
++                                       {QObject::tr("Manufacturer"),          "vendor"},
++                                       {QObject::tr("Cores"),                 "cores"},
++                                       {QObject::tr("Online Cores"),          "onlinecores"},
++                                       {QObject::tr("Thread Per Cores"),      "threadprecore"},
++                                       {QObject::tr("MAX MHz"),               "maxMHz"},
++                                       {QObject::tr("L1d Cache"),             "L1dcache"},
++                                       {QObject::tr("L1i Cache"),             "L1icache"},
++                                       {QObject::tr("L2 Cache"),              "L2cache"},
++                                       {QObject::tr("L3 Cache"),              "L3cache"},
++                                       {QObject::tr("L4 Cache"),              "L4cache"},
++                                       {QObject::tr("CPU Current Frequency"), "Frequency"},
++                                       {QObject::tr("CPU Usage Rate"),        "UsageRate"},
++                                       {QObject::tr("CPU Temperature"),       "Temprature"}};
++
++    QStringList m_memoryInfo= {
++        "1",
++        QObject::tr("Bank Locator"),
++        QObject::tr("Total Width"),
++        QObject::tr("Size"),
++        QObject::tr("Serial Number"),
++        QObject::tr("Manufacturer"),
++        QObject::tr("Data Width"),
++        QObject::tr("Type"),
++        QObject::tr("Speed"),
++        QObject::tr("Configured Speed"),
++        QObject::tr("Part Number"),
++        QObject::tr("Memory Usage")
++    };
++    QMap<QString, QString> m_memoryMap = {{"1",                             "displayname"},
++                                          {QObject::tr("Bank Locator"),     "banklocator"},
++                                          {QObject::tr("Total Width"),      "totalwidth"},
++                                          {QObject::tr("Size"),             "size"},
++                                          {QObject::tr("Serial Number"),    "serial"},
++                                          {QObject::tr("Manufacturer"),     "verdor"},
++                                          {QObject::tr("Data Width"),       "datawidth"},
++                                          {QObject::tr("Type"),             "type"},
++                                          {QObject::tr("Speed"),            "speed"},
++                                          {QObject::tr("Configured Speed"), "configuredspeed"},
++                                          {QObject::tr("Part Number"),      "partnumber"},
++                                          {QObject::tr("Memory Usage"),     "Memory Usage"}};
++
++    QStringList m_graphicCardInfo = {
++        "1",
++        QObject::tr("Manufacturer"),
++        QObject::tr("Sub System Device ID"),
++        QObject::tr("Model"),
++        QObject::tr("Memory"),
++        QObject::tr("GPU Type"),
++        QObject::tr("Bus Info"),
++        QObject::tr("Clock"),
++        QObject::tr("Physics ID"),
++        QObject::tr("Version"),
++        QObject::tr("Driver"),
++        QObject::tr("Communication Width"),
++        QObject::tr("GDDR Size"),
++        QObject::tr("EGL Version"),
++        QObject::tr("EGL Api List"),
++        QObject::tr("OpenGL Version"),
++        QObject::tr("GLSL Version"),
++    };
++    QMap<QString, QString> m_graphicCardMap= {{"1",                                 "model"},
++                                              {QObject::tr("Manufacturer"),         "vendor"},
++                                              {QObject::tr("Sub System Device ID"), "subsystem"},
++                                              {QObject::tr("Model"),                "model"},
++                                              {QObject::tr("Memory"),               "memorysize"},
++                                              {QObject::tr("GPU Type"),             "gputype"},
++                                              {QObject::tr("Bus Info"),             "businfo"},
++                                              {QObject::tr("Clock"),                "clock"},
++                                              {QObject::tr("Physics ID"),           "physid"},
++                                              {QObject::tr("Version"),              "version"},
++                                              {QObject::tr("Driver"),               "driver_now"},
++                                              {QObject::tr("Communication Width"),  "width"},
++                                              {QObject::tr("GDDR Size"),            "gddrsize"},
++                                              {QObject::tr("EGL Version"),          "egl_version"},
++                                              {QObject::tr("EGL Api List"),         "egl_apis"},
++                                              {QObject::tr("OpenGL Version"),       "gl_version"},
++                                              {QObject::tr("GLSL Version"),         "glsl_version"}};
++
++    QStringList m_baseboardInfo = {
++        "1",
++        QObject::tr("Manufacturer"),
++        QObject::tr("Version"),
++        QObject::tr("Chassis Handle"),
++        QObject::tr("Bios Vendor"),
++        QObject::tr("Bios Version"),
++        QObject::tr("Chipser"),
++        QObject::tr("Serial Number"),
++        QObject::tr("Publish Date")
++    };
++    QMap<QString, QString> m_baseboardMap= {{"1",                           "model"},
++                                            {QObject::tr("Manufacturer"),   "vendor"},
++                                            {QObject::tr("Version"),        "version"},
++                                            {QObject::tr("Chassis Handle"), "chassishandle"},
++                                            {QObject::tr("Bios Vendor"),    "biosvendor"},
++                                            {QObject::tr("Bios Version"),   "biosversion"},
++                                            {QObject::tr("Chipser"),        "chipset"},
++                                            {QObject::tr("Serial Number"),  "serial_num"},
++                                            {QObject::tr("Publish Date"),   "publish_date"}};
++
++    QStringList m_networkCardInfo= {
++        "1",
++        QObject::tr("Manufacturer"),
++        QObject::tr("Model"),
++        QObject::tr("Bus"),
++        QObject::tr("Driver"),
++        QObject::tr("MAC Address"),
++        QObject::tr("Type"),
++        QObject::tr("Speed"),
++        QObject::tr("IP Address"),
++        QObject::tr("Net Musk"),
++        QObject::tr("Send Bytes"),
++        QObject::tr("Recved Bytes"),
++        QObject::tr("MTU")
++    };
++    QMap<QString, QString> m_networkCardMap= {{"1",                         "name"},
++                                              {QObject::tr("Manufacturer"), "vendor"},
++                                              {QObject::tr("Model"),        "model"},
++                                              {QObject::tr("Bus"),          "bus"},
++                                              {QObject::tr("Driver"),       "driver_now"},
++                                              {QObject::tr("MAC Address"),  "MAC_addr"},
++                                              {QObject::tr("Type"),         "isWireless"},
++                                              {QObject::tr("Speed"),        "size"},
++                                              {QObject::tr("IP Address"),   "ip_addr"},
++                                              {QObject::tr("Net Musk"),     "net_musk"},
++                                              {QObject::tr("Send Bytes"),   "send_bytes"},
++                                              {QObject::tr("Recved Bytes"), "recv_bytes"},
++                                              {QObject::tr("MTU"),          "MTU"}
++                                             };
++
++    QStringList m_diskInfo = {
++        "1",
++        QObject::tr("Vendor"),
++        QObject::tr("Size"),
++        QObject::tr("Mount Point"),
++        QObject::tr("Serial Number"),
++        QObject::tr("Disk Name"),
++        QObject::tr("Frimwarever Version"),
++        QObject::tr("Disk Type"),
++        QObject::tr("Main Disk"),
++        QObject::tr("Interface"),
++        QObject::tr("UFS"),
++        QObject::tr("UFS Revision"),
++        QObject::tr("Rota")
++    };
++    QMap<QString, QString> m_diskMap= {{"1",                                "model"},
++                                       {QObject::tr("Size"),                "size"},
++                                       {QObject::tr("Mount Point"),         "name"},
++                                       {QObject::tr("Serial Number"),       "serial"},
++                                       {QObject::tr("Frimwarever Version"), "frimwareversion"},
++                                       {QObject::tr("Disk Type"),           "type"},
++                                       {QObject::tr("Vendor"),              "vendor"},
++                                       {QObject::tr("Main Disk"),           "is_main"},
++                                       {QObject::tr("Interface"),           "interface"},
++                                       {QObject::tr("UFS"),                 "ufs"},
++                                       {QObject::tr("UFS Revision"),        "ufsrevision"},
++                                       {QObject::tr("Rota"),                "rota"}
++                                      };
++
++
++    QStringList m_monitorInfo = {
++        "1",
++        QObject::tr("Manufacturer"),
++        QObject::tr("Model"),
++        QObject::tr("Monitor Size"),
++        QObject::tr("Monitor Ratio"),
++        QObject::tr("Resolution"),
++        QObject::tr("Max Resolution"),
++        QObject::tr("Main Monitor"),
++        QObject::tr("Interface"),
++        QObject::tr("Visible Area"),
++        QObject::tr("Gamma")
++    };
++    QMap<QString, QString> m_monitorMap = {{"1",                           "name"},
++                                           {QObject::tr("Manufacturer"),   "vendor"},
++                                           {QObject::tr("Model"),          "model"},
++                                           {QObject::tr("Monitor Size"),   "size"},
++                                           {QObject::tr("Monitor Ratio"),  "ratio"},
++                                           {QObject::tr("Resolution"),     "resolution"},
++                                           {QObject::tr("Max Resolution"), "max_resolution"},
++                                           {QObject::tr("Main Monitor"),   "is_main"},
++                                           {QObject::tr("Interface"),      "interface"},
++                                           {QObject::tr("Visible Area"),   "visible_area"},
++                                           {QObject::tr("Gamma"),          "gamma"}};
++
++    QStringList m_soundCardInfo= {
++        "1",
++        QObject::tr("Manufacturer"),
++        QObject::tr("Bus Address"),
++        QObject::tr("Clock"),
++        QObject::tr("Driver"),
++        QObject::tr("Width")
++    };
++    QMap<QString, QString> m_soundCardMap= {{"1",                         "model"},
++                                            {QObject::tr("Manufacturer"), "vendor"},
++                                            {QObject::tr("Bus Address"),  "bus"},
++                                            {QObject::tr("Clock"),        "clock"},
++                                            {QObject::tr("Driver"),       "driver_now"},
++                                            {QObject::tr("Width"),        "width"}};
++
++    QStringList m_keyboardInfo = {
++        "1",
++        QObject::tr("Manufacturer"),
++        QObject::tr("Model"),
++        QObject::tr("Interface"),
++        QObject::tr("Driver")
++    };
++    QMap<QString, QString> m_keyboardMap= {{"1",                         "name"},
++                                           {QObject::tr("Manufacturer"), "vendor"},
++                                           {QObject::tr("Model"),        "model"},
++                                           {QObject::tr("Interface"),    "interface"},
++                                           {QObject::tr("Driver"),       "driver"}};
++
++    QStringList m_mouseInfo = {
++        "1",
++        QObject::tr("Manufacturer"),
++        QObject::tr("Model"),
++        QObject::tr("Interface"),
++        QObject::tr("Driver")
++    };
++    QMap<QString, QString> m_mouseMap = {{"1",                         "name"},
++                                         {QObject::tr("Manufacturer"), "vendor"},
++                                         {QObject::tr("Model"),        "model"},
++                                         {QObject::tr("Interface"),    "interface"},
++                                         {QObject::tr("Driver"),       "driver"}};
++
++    QStringList m_bluetoothInfo= {"1",
++                                  QObject::tr("Manufacturer"),
++                                  QObject::tr("Driver"),
++                                  QObject::tr("Driver Version"),
++                                  QObject::tr("Address"),
++                                  QObject::tr("Link Mode"),
++                                  QObject::tr("Link Policy"),
++                                  QObject::tr("SCO MTU"),
++                                  QObject::tr("ACL MTU"),
++                                  QObject::tr("Speed"),
++                                  QObject::tr("Features"),
++                                  QObject::tr("Packe Type")
++                                 };
++    QMap<QString, QString> m_bluetoothMap = {{"1",                           "model"},
++                                             {QObject::tr("Manufacturer"),   "vendor"},
++                                             {QObject::tr("Driver"),         "driver_now"},
++                                             {QObject::tr("Driver Version"), "version"},
++                                             {QObject::tr("Address"),        "address"},
++                                             {QObject::tr("Link Mode"),      "link_mode"},
++                                             {QObject::tr("Link Policy"),    "link_policy"},
++                                             {QObject::tr("Packe Type"),     "packettype"},
++                                             {QObject::tr("SCO MTU"),        "scomtu"},
++                                             {QObject::tr("ACL MTU"),        "aclmtu"},
++                                             {QObject::tr("Speed"),          "speed"},
++                                             {QObject::tr("Features"),       "features"}};
++
++    QStringList m_cdInfo= {
++        "1",
++        QObject::tr("Manufacturer"),
++        QObject::tr("Name"),
++        QObject::tr("Bus Info"),
++        QObject::tr("Version"),
++        QObject::tr("Driver"),
++        QObject::tr("Device Number"),
++        QObject::tr("Speed"),
++        QObject::tr("Serial Number")
++    };
++    QMap<QString, QString> m_cdInfoMap= {{"1",                          "model"},
++                                         {QObject::tr("Manufacturer"),  "vendor"},
++                                         {QObject::tr("Name"),          "name"},
++                                         {QObject::tr("Bus Info"),      "businfo"},
++                                         {QObject::tr("Version"),       "version"},
++                                         {QObject::tr("Driver"),        "driver"},
++                                         {QObject::tr("Device Number"), "devicenum"},
++                                         {QObject::tr("Speed"),         "speed"},
++                                         {QObject::tr("Serial Number"), "serialnum"}};
++
++    QStringList m_cameraInfo= {
++        "1",
++        QObject::tr("Manufacturer"),
++        QObject::tr("Model"),
++        QObject::tr("Interface"),
++        QObject::tr("Driver"),
++        QObject::tr("Version"),
++        QObject::tr("Bus Info"),
++        QObject::tr("Speed")
++    };
++    QMap<QString, QString> m_cameraInfoMap= {{"1",                         "name"},
++                                             {QObject::tr("Manufacturer"), "vendor"},
++                                             {QObject::tr("Model"),        "model"},
++                                             {QObject::tr("Interface"),    "interface"},
++                                             {QObject::tr("Driver"),       "driver"},
++                                             {QObject::tr("Version"),      "version"},
++                                             {QObject::tr("Bus Info"),     "businfo"},
++                                             {QObject::tr("Speed"),        "speed"}};
++
++    QStringList m_fanInfo= {
++        "1",
++        QObject::tr("Speed")
++    };
++    QMap<QString, QString> m_fanInfoMap= {{"1",                  "name"},
++                                          {QObject::tr("Speed"), "speed"}};
++
++    QStringList m_batteryInfo= {
++        "1",
++        QObject::tr("Manufacturer"),
++        QObject::tr("Serial Number"),
++        QObject::tr("State"),
++        QObject::tr("Energy"),
++        QObject::tr("Used Times"),
++        QObject::tr("Energy Full"),
++        QObject::tr("Time To Empty"),
++        QObject::tr("Percentage")
++    };
++    QMap<QString, QString> m_batteryInfoMap= {{"1",                          "model"},
++                                              {QObject::tr("Manufacturer"),  "vendor"},
++                                              {QObject::tr("Serial Number"), "serailnum"},
++                                              {QObject::tr("State"),         "state"},
++                                              {QObject::tr("Energy"),        "energy"},
++                                              {QObject::tr("Used Times"),    "used_times"},
++                                              {QObject::tr("Energy Full"),   "energy_full"},
++                                              {QObject::tr("Time To Empty"), "time_to_empty"},
++                                              {QObject::tr("Percentage"),    "percentage"}};
++
++private:
++    HwInfoSingleton();
++
++
++};
++
++#endif // HWINFOSINGLETON_H
++
+diff --git a/plugins/device-controller/translations/kylin-os-manager-device-controller_bo_CN.ts b/plugins/device-controller/translations/kylin-os-manager-device-controller_bo_CN.ts
+index 5205460..5cfd384 100644
+--- a/plugins/device-controller/translations/kylin-os-manager-device-controller_bo_CN.ts
++++ b/plugins/device-controller/translations/kylin-os-manager-device-controller_bo_CN.ts
+@@ -214,92 +214,92 @@
+ <context>
+     <name>DriverInstallWidget</name>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
+         <source>Installable Drivers</source>
+         <translation>སྒྲིག་སྦྱོར་བྱེད་ཆོག་པའི་སྐུལ་སྒུལ་གོ་རིམ་</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>)</source>
+         <translation></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>(</source>
+         <translation></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+         <source>One-click installation</source>
+         <translation>མནན་ནས་སྒྲིག་སྦྱོར་བྱེད་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
+         <source>Upgradable Drivers</source>
+         <translation>རིམ་སྤོར་རུང་བའི་སྐུལ་བའི་གོ་རིམ་</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+         <source>One-click upgrade</source>
+         <translation>མནན་ནས་རིམ་འཕར་བྱེད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
+         <source>Installed Drivers</source>
+         <translation>སྒྲིག་སྦྱོར་སྐུལ་སྒུལ་གོ་རིམ་</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>Unrecognized Device</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1200"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1248"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1213"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1261"/>
+         <source>Uninstalling drivers. Please wait for the uninstallation to complete before clicking again.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1202"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1250"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1215"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1263"/>
+         <source>Uninstall Failed</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1205"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1253"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1218"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1266"/>
+         <source>Installing drivers. Please wait for the installation to complete before clicking again.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1065"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1206"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1254"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1078"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1219"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1267"/>
+         <source>Install Failed</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1069"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1082"/>
+         <source>Update</source>
+         <translation>གསར་སྒྱུར།</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1076"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1089"/>
+         <source>Install</source>
+         <translation>སྒྲིག་སྦྱོར་</translation>
+     </message>
+@@ -307,65 +307,70 @@
+ <context>
+     <name>HardWareInfoWidget</name>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="113"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="121"/>
+         <source>Computer Basic Information</source>
+         <translation>རྩིས་འཁོར་གྱི་གཞི་རྩའི་ཆ་འཕྲིན་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="117"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="420"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="125"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="462"/>
+         <source>Host Name</source>
+         <translation>གཙོ་འཁོར་གྱི་མིང་།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="121"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="421"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="129"/>
++        <source>Operation System Name</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/hardwareinfowidget.cpp" line="133"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="463"/>
+         <source>Operation System Version</source>
+         <translation>བཀོལ་སྤྱོད་རྒྱུད་ཁོངས་པར་གཞི་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="125"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="422"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="137"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="464"/>
+         <source>Kernel Version</source>
+         <translation>ཉིང་པར་གཞི་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="129"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="423"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="141"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="465"/>
+         <source>Kernel Architecture</source>
+         <translation>ཉིང་གི་སྒྲོམ་གཞི་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="133"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="424"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="145"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="466"/>
+         <source>System Bits</source>
+         <translation>རྒྱུད་ཁོངས་གནས་ཚུལ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="137"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="425"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="149"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="467"/>
+         <source>Manufacturer</source>
+         <translation>བཟོ་གྲྭ་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="141"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="153"/>
+         <source>Version</source>
+         <translation type="unfinished">པར་གཞི་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="145"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="426"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="157"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="468"/>
+         <source>Model</source>
+         <translation>དཔེ་དབྱིབས་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="149"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="427"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="161"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="469"/>
+         <source>Serial</source>
+         <translation>ཕྲེང་བགྲོད་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="334"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="375"/>
+         <source>Hardware Display</source>
+         <translation>སྲ་ཆས་འཆར་བ།</translation>
+     </message>
+@@ -386,7 +391,7 @@
+ <context>
+     <name>HardwareInfoGetter</name>
+     <message>
+-        <location filename="../src/hardwareinfogetter.cpp" line="869"/>
++        <location filename="../src/hardwareinfogetter.cpp" line="979"/>
+         <source> inch</source>
+         <translation type="unfinished"></translation>
+     </message>
+@@ -394,112 +399,158 @@
+ <context>
+     <name>HwWidget</name>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="53"/>
++        <location filename="../src/hwwidget.cpp" line="88"/>
+         <source>Disable</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="72"/>
++        <location filename="../src/hwwidget.cpp" line="116"/>
+         <source>Export To Clipboard</source>
+         <translation></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="73"/>
++        <location filename="../src/hwwidget.cpp" line="117"/>
+         <source>Activate</source>
+         <translation>གྲུང་སྐུལ་བྱེད་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="74"/>
++        <location filename="../src/hwwidget.cpp" line="118"/>
+         <source>Deactive</source>
+         <translation>གྲུང་གཤིས་མེད་པ་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="84"/>
+-        <location filename="../src/hwwidget.cpp" line="87"/>
++        <location filename="../src/hwwidget.cpp" line="128"/>
++        <location filename="../src/hwwidget.cpp" line="131"/>
+         <source>CPU</source>
+         <translation>CPU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="116"/>
+-        <location filename="../src/hwwidget.cpp" line="120"/>
++        <location filename="../src/hwwidget.cpp" line="208"/>
++        <location filename="../src/hwwidget.cpp" line="212"/>
++        <location filename="../src/hwwidget.cpp" line="1330"/>
++        <location filename="../src/hwwidget.cpp" line="1333"/>
+         <source>Memory</source>
+         <translation>ནང་གསོག་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="148"/>
+-        <location filename="../src/hwwidget.cpp" line="152"/>
++        <location filename="../src/hwwidget.cpp" line="147"/>
++        <location filename="../src/hwwidget.cpp" line="228"/>
++        <location filename="../src/hwwidget.cpp" line="284"/>
++        <location filename="../src/hwwidget.cpp" line="287"/>
++        <location filename="../src/hwwidget.cpp" line="304"/>
++        <location filename="../src/hwwidget.cpp" line="1355"/>
++        <location filename="../src/hwwidget.cpp" line="1358"/>
+         <source>Graphic Card</source>
+         <translation>འཆར་བྱང་།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="181"/>
+-        <location filename="../src/hwwidget.cpp" line="184"/>
++        <location filename="../src/hwwidget.cpp" line="91"/>
++        <source>This device can be disabled/enabled</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/hwwidget.cpp" line="358"/>
++        <location filename="../src/hwwidget.cpp" line="361"/>
++        <location filename="../src/hwwidget.cpp" line="378"/>
+         <source>Mother Board</source>
+         <translation>གཙོ་པང་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="206"/>
+-        <location filename="../src/hwwidget.cpp" line="212"/>
++        <location filename="../src/hwwidget.cpp" line="429"/>
++        <location filename="../src/hwwidget.cpp" line="435"/>
++        <location filename="../src/hwwidget.cpp" line="453"/>
++        <location filename="../src/hwwidget.cpp" line="1381"/>
++        <location filename="../src/hwwidget.cpp" line="1384"/>
+         <source>Network Card</source>
+         <translation>དྲ་བྱང་།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="289"/>
+-        <location filename="../src/hwwidget.cpp" line="293"/>
++        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="556"/>
++        <location filename="../src/hwwidget.cpp" line="572"/>
++        <location filename="../src/hwwidget.cpp" line="640"/>
++        <location filename="../src/hwwidget.cpp" line="744"/>
++        <location filename="../src/hwwidget.cpp" line="1407"/>
++        <location filename="../src/hwwidget.cpp" line="1410"/>
+         <source>Disk</source>
+         <translation>སྲ་སྲོལ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="315"/>
+-        <location filename="../src/hwwidget.cpp" line="319"/>
++        <location filename="../src/hwwidget.cpp" line="620"/>
++        <location filename="../src/hwwidget.cpp" line="624"/>
++        <location filename="../src/hwwidget.cpp" line="1432"/>
++        <location filename="../src/hwwidget.cpp" line="1435"/>
+         <source>Monitor</source>
+         <translation>འཆར་ཆས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="373"/>
+-        <location filename="../src/hwwidget.cpp" line="376"/>
++        <location filename="../src/hwwidget.cpp" line="723"/>
++        <location filename="../src/hwwidget.cpp" line="726"/>
++        <location filename="../src/hwwidget.cpp" line="1458"/>
++        <location filename="../src/hwwidget.cpp" line="1461"/>
+         <source>Sound Card</source>
+         <translation>སྒྲ་བྱང་།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="410"/>
+-        <location filename="../src/hwwidget.cpp" line="414"/>
++        <location filename="../src/hwwidget.cpp" line="824"/>
++        <location filename="../src/hwwidget.cpp" line="828"/>
++        <location filename="../src/hwwidget.cpp" line="844"/>
++        <location filename="../src/hwwidget.cpp" line="1484"/>
++        <location filename="../src/hwwidget.cpp" line="1487"/>
+         <source>Keyboard</source>
+         <translation>མཐེབ་གཞོང་།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="435"/>
+-        <location filename="../src/hwwidget.cpp" line="439"/>
++        <location filename="../src/hwwidget.cpp" line="890"/>
++        <location filename="../src/hwwidget.cpp" line="894"/>
++        <location filename="../src/hwwidget.cpp" line="910"/>
++        <location filename="../src/hwwidget.cpp" line="1509"/>
++        <location filename="../src/hwwidget.cpp" line="1512"/>
+         <source>Mouse</source>
+         <translation>ཙིག་རྟགས་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="461"/>
+-        <location filename="../src/hwwidget.cpp" line="466"/>
++        <location filename="../src/hwwidget.cpp" line="959"/>
++        <location filename="../src/hwwidget.cpp" line="962"/>
++        <location filename="../src/hwwidget.cpp" line="980"/>
++        <location filename="../src/hwwidget.cpp" line="1534"/>
++        <location filename="../src/hwwidget.cpp" line="1537"/>
+         <source>Bluetooth</source>
+         <translation>སོ་སྔོན་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="506"/>
+-        <location filename="../src/hwwidget.cpp" line="510"/>
++        <location filename="../src/hwwidget.cpp" line="1049"/>
++        <location filename="../src/hwwidget.cpp" line="1053"/>
++        <location filename="../src/hwwidget.cpp" line="1069"/>
++        <location filename="../src/hwwidget.cpp" line="1559"/>
++        <location filename="../src/hwwidget.cpp" line="1562"/>
+         <source>CD</source>
+         <translation>འོད་འདེབས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="531"/>
+-        <location filename="../src/hwwidget.cpp" line="534"/>
++        <location filename="../src/hwwidget.cpp" line="1116"/>
++        <location filename="../src/hwwidget.cpp" line="1119"/>
++        <location filename="../src/hwwidget.cpp" line="1136"/>
++        <location filename="../src/hwwidget.cpp" line="1584"/>
++        <location filename="../src/hwwidget.cpp" line="1587"/>
+         <source>Battery</source>
+         <translation>གློག་སྨན།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="565"/>
+-        <location filename="../src/hwwidget.cpp" line="569"/>
++        <location filename="../src/hwwidget.cpp" line="1192"/>
++        <location filename="../src/hwwidget.cpp" line="1196"/>
++        <location filename="../src/hwwidget.cpp" line="1212"/>
++        <location filename="../src/hwwidget.cpp" line="1609"/>
++        <location filename="../src/hwwidget.cpp" line="1612"/>
+         <source>Fan</source>
+         <translation>རླུང་འགོག</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="590"/>
+-        <location filename="../src/hwwidget.cpp" line="593"/>
++        <location filename="../src/hwwidget.cpp" line="1259"/>
++        <location filename="../src/hwwidget.cpp" line="1262"/>
++        <location filename="../src/hwwidget.cpp" line="1279"/>
++        <location filename="../src/hwwidget.cpp" line="1634"/>
++        <location filename="../src/hwwidget.cpp" line="1637"/>
+         <source>Camera</source>
+         <translation>བརྙན་ལེན།</translation>
+     </message>
+@@ -520,76 +571,76 @@
+         <translation>སྒྲིག་ཆས་དོ་དམ་ཆས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/diskinfo.cpp" line="37"/>
++        <location filename="../src/hardwareinfo/diskinfo.cpp" line="39"/>
+         <location filename="../src/hardwareinfo/monitorinfo.cpp" line="33"/>
+-        <location filename="../src/hwwidget.cpp" line="358"/>
++        <location filename="../src/hwwidget.cpp" line="695"/>
+         <source>Yes</source>
+         <translation>རེད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/diskinfo.cpp" line="35"/>
++        <location filename="../src/hardwareinfo/diskinfo.cpp" line="37"/>
+         <location filename="../src/hardwareinfo/monitorinfo.cpp" line="35"/>
+-        <location filename="../src/hwwidget.cpp" line="360"/>
++        <location filename="../src/hwwidget.cpp" line="697"/>
+         <source>No</source>
+         <translation>མ་རེད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="103"/>
++        <location filename="../src/hwwidget.cpp" line="177"/>
+         <source>CPU Current Frequency</source>
+         <translation>CPUགློག་རྒྱུན་ཟློས་ཕྱོད་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="103"/>
++        <location filename="../src/hwwidget.cpp" line="177"/>
+         <source>CPU Usage Rate</source>
+         <translation>CPUབཀོལ་སྤྱོད་ཚད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="104"/>
++        <location filename="../src/hwwidget.cpp" line="178"/>
+         <source>CPU Temperature</source>
+         <translation>CPUདྲོད་ཚད་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="136"/>
++        <location filename="../src/hwwidget.cpp" line="258"/>
+         <source>Memory Usage</source>
+         <translation>ནང་གསོག་བཀོལ་སྤྱོད་བྱེད་ཚད་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="169"/>
++        <location filename="../src/hwwidget.cpp" line="334"/>
+         <source>GDDR Size</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="344"/>
++        <location filename="../src/hwwidget.cpp" line="680"/>
+         <source>Resolution</source>
+         <translation>གྲོས་ཆོད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="354"/>
++        <location filename="../src/hwwidget.cpp" line="690"/>
+         <source>Main Monitor</source>
+         <translation type="unfinished">ལྟ་སྐུལ་ཆས་གཙོ་བོ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="551"/>
++        <location filename="../src/hwwidget.cpp" line="1166"/>
+         <source>Energy</source>
+         <translation type="unfinished">ནུས་ཁུངས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="551"/>
++        <location filename="../src/hwwidget.cpp" line="1166"/>
+         <source>Time To Empty</source>
+         <translation type="unfinished">སྟོང་པ་བཟོ་བའི་དུས་ཚོད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="1167"/>
+         <source>Percentage</source>
+         <translation type="unfinished">བརྒྱ་ཆའི་བསྡུར་ཚད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="1167"/>
+         <source>State</source>
+         <translation type="unfinished">རྒྱལ་ཁབ་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="194"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="210"/>
+         <source>This CPU model does not support temperature display function</source>
+         <translation></translation>
+     </message>
+@@ -611,607 +662,621 @@
+         <translation>གཞི་གྲངས་མཛོད་ཀྱི་ནོར་འཁྲུལ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="144"/>
+-        <location filename="../src/hwwidget.h" line="159"/>
+-        <location filename="../src/hwwidget.h" line="179"/>
+-        <location filename="../src/hwwidget.h" line="192"/>
+-        <location filename="../src/hwwidget.h" line="202"/>
+-        <location filename="../src/hwwidget.h" line="220"/>
+-        <location filename="../src/hwwidget.h" line="239"/>
+-        <location filename="../src/hwwidget.h" line="249"/>
+-        <location filename="../src/hwwidget.h" line="260"/>
+-        <location filename="../src/hwwidget.h" line="273"/>
+-        <location filename="../src/hwwidget.h" line="315"/>
+-        <location filename="../src/hwwidget.h" line="327"/>
+-        <location filename="../src/hwwidget.h" line="340"/>
+-        <location filename="../src/hwwidget.h" line="347"/>
+-        <location filename="../src/hwwidget.h" line="355"/>
+-        <location filename="../src/hwwidget.h" line="361"/>
+-        <location filename="../src/hwwidget.h" line="368"/>
+-        <location filename="../src/hwwidget.h" line="374"/>
+-        <location filename="../src/hwwidget.h" line="380"/>
+-        <location filename="../src/hwwidget.h" line="393"/>
+-        <location filename="../src/hwwidget.h" line="407"/>
+-        <location filename="../src/hwwidget.h" line="417"/>
+-        <location filename="../src/hwwidget.h" line="428"/>
+-        <location filename="../src/hwwidget.h" line="437"/>
+-        <location filename="../src/hwwidget.h" line="454"/>
+-        <location filename="../src/hwwidget.h" line="464"/>
++        <location filename="../src/include/hwinfostorage.h" line="18"/>
++        <location filename="../src/include/hwinfostorage.h" line="33"/>
++        <location filename="../src/include/hwinfostorage.h" line="53"/>
++        <location filename="../src/include/hwinfostorage.h" line="66"/>
++        <location filename="../src/include/hwinfostorage.h" line="76"/>
++        <location filename="../src/include/hwinfostorage.h" line="94"/>
++        <location filename="../src/include/hwinfostorage.h" line="113"/>
++        <location filename="../src/include/hwinfostorage.h" line="123"/>
++        <location filename="../src/include/hwinfostorage.h" line="134"/>
++        <location filename="../src/include/hwinfostorage.h" line="148"/>
++        <location filename="../src/include/hwinfostorage.h" line="194"/>
++        <location filename="../src/include/hwinfostorage.h" line="206"/>
++        <location filename="../src/include/hwinfostorage.h" line="219"/>
++        <location filename="../src/include/hwinfostorage.h" line="226"/>
++        <location filename="../src/include/hwinfostorage.h" line="234"/>
++        <location filename="../src/include/hwinfostorage.h" line="240"/>
++        <location filename="../src/include/hwinfostorage.h" line="247"/>
++        <location filename="../src/include/hwinfostorage.h" line="253"/>
++        <location filename="../src/include/hwinfostorage.h" line="259"/>
++        <location filename="../src/include/hwinfostorage.h" line="272"/>
++        <location filename="../src/include/hwinfostorage.h" line="286"/>
++        <location filename="../src/include/hwinfostorage.h" line="296"/>
++        <location filename="../src/include/hwinfostorage.h" line="307"/>
++        <location filename="../src/include/hwinfostorage.h" line="316"/>
++        <location filename="../src/include/hwinfostorage.h" line="333"/>
++        <location filename="../src/include/hwinfostorage.h" line="343"/>
+         <source>Manufacturer</source>
+         <translation>བཟོ་གྲྭ་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="145"/>
+-        <location filename="../src/hwwidget.h" line="160"/>
++        <location filename="../src/include/hwinfostorage.h" line="19"/>
++        <location filename="../src/include/hwinfostorage.h" line="34"/>
+         <source>Cores</source>
+         <translation>ཉིང་ལྡན།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="146"/>
+-        <location filename="../src/hwwidget.h" line="161"/>
++        <location filename="../src/include/hwinfostorage.h" line="20"/>
++        <location filename="../src/include/hwinfostorage.h" line="35"/>
+         <source>Online Cores</source>
+         <translation>ཉིང་ལྡན།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="147"/>
+-        <location filename="../src/hwwidget.h" line="162"/>
++        <location filename="../src/include/hwinfostorage.h" line="21"/>
++        <location filename="../src/include/hwinfostorage.h" line="36"/>
+         <source>Thread Per Cores</source>
+         <translation>ཉིང་རེར་སྐུད་རིས་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="148"/>
+-        <location filename="../src/hwwidget.h" line="163"/>
++        <location filename="../src/include/hwinfostorage.h" line="22"/>
++        <location filename="../src/include/hwinfostorage.h" line="37"/>
+         <source>MAX MHz</source>
+         <translation>ཆེ་ཤོས་མཱ་ཧེར་ཚི།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="149"/>
+-        <location filename="../src/hwwidget.h" line="164"/>
++        <location filename="../src/include/hwinfostorage.h" line="23"/>
++        <location filename="../src/include/hwinfostorage.h" line="38"/>
+         <source>L1d Cache</source>
+         <translation>L1dལྷོད་གསོག་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="150"/>
+-        <location filename="../src/hwwidget.h" line="165"/>
++        <location filename="../src/include/hwinfostorage.h" line="24"/>
++        <location filename="../src/include/hwinfostorage.h" line="39"/>
+         <source>L1i Cache</source>
+         <translation>L1iལྷོད་གསོག་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="151"/>
+-        <location filename="../src/hwwidget.h" line="166"/>
++        <location filename="../src/include/hwinfostorage.h" line="25"/>
++        <location filename="../src/include/hwinfostorage.h" line="40"/>
+         <source>L2 Cache</source>
+         <translation>L2ལྷོད་གསོག་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="152"/>
+-        <location filename="../src/hwwidget.h" line="167"/>
++        <location filename="../src/include/hwinfostorage.h" line="26"/>
++        <location filename="../src/include/hwinfostorage.h" line="41"/>
+         <source>L3 Cache</source>
+         <translation>L3ལྷོད་གསོག་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="153"/>
+-        <location filename="../src/hwwidget.h" line="168"/>
++        <location filename="../src/include/hwinfostorage.h" line="27"/>
++        <location filename="../src/include/hwinfostorage.h" line="42"/>
+         <source>L4 Cache</source>
+         <translation type="unfinished">L3ལྷོད་གསོག་ {4 ?}</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="154"/>
+-        <location filename="../src/hwwidget.h" line="169"/>
++        <location filename="../src/include/hwinfostorage.h" line="28"/>
++        <location filename="../src/include/hwinfostorage.h" line="43"/>
+         <source>CPU Current Frequency</source>
+         <translation>CPUགློག་རྒྱུན་ཟློས་ཕྱོད་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="155"/>
+-        <location filename="../src/hwwidget.h" line="170"/>
++        <location filename="../src/include/hwinfostorage.h" line="29"/>
++        <location filename="../src/include/hwinfostorage.h" line="44"/>
+         <source>CPU Usage Rate</source>
+         <translation>CPUབཀོལ་སྤྱོད་ཚད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="156"/>
+-        <location filename="../src/hwwidget.h" line="171"/>
++        <location filename="../src/include/hwinfostorage.h" line="30"/>
++        <location filename="../src/include/hwinfostorage.h" line="45"/>
+         <source>CPU Temperature</source>
+         <translation>CPUདྲོད་ཚད་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="175"/>
+-        <location filename="../src/hwwidget.h" line="188"/>
++        <location filename="../src/include/hwinfostorage.h" line="49"/>
++        <location filename="../src/include/hwinfostorage.h" line="62"/>
+         <source>Bank Locator</source>
+         <translation>དངུལ་ཁང་གནས་ངེས་དཔྱད་ཆས་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="176"/>
+-        <location filename="../src/hwwidget.h" line="189"/>
++        <location filename="../src/include/hwinfostorage.h" line="50"/>
++        <location filename="../src/include/hwinfostorage.h" line="63"/>
+         <source>Total Width</source>
+         <translation>སྤྱིའི་ཞེང་ཚད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="177"/>
+-        <location filename="../src/hwwidget.h" line="190"/>
+-        <location filename="../src/hwwidget.h" line="290"/>
+-        <location filename="../src/hwwidget.h" line="302"/>
++        <location filename="../src/include/hwinfostorage.h" line="51"/>
++        <location filename="../src/include/hwinfostorage.h" line="64"/>
++        <location filename="../src/include/hwinfostorage.h" line="165"/>
++        <location filename="../src/include/hwinfostorage.h" line="178"/>
+         <source>Size</source>
+         <translation>ཆེ་ཆུང་།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="178"/>
+-        <location filename="../src/hwwidget.h" line="191"/>
+-        <location filename="../src/hwwidget.h" line="245"/>
+-        <location filename="../src/hwwidget.h" line="255"/>
+-        <location filename="../src/hwwidget.h" line="291"/>
+-        <location filename="../src/hwwidget.h" line="303"/>
+-        <location filename="../src/hwwidget.h" line="414"/>
+-        <location filename="../src/hwwidget.h" line="424"/>
+-        <location filename="../src/hwwidget.h" line="455"/>
+-        <location filename="../src/hwwidget.h" line="465"/>
++        <location filename="../src/include/hwinfostorage.h" line="52"/>
++        <location filename="../src/include/hwinfostorage.h" line="65"/>
++        <location filename="../src/include/hwinfostorage.h" line="119"/>
++        <location filename="../src/include/hwinfostorage.h" line="129"/>
++        <location filename="../src/include/hwinfostorage.h" line="167"/>
++        <location filename="../src/include/hwinfostorage.h" line="180"/>
++        <location filename="../src/include/hwinfostorage.h" line="293"/>
++        <location filename="../src/include/hwinfostorage.h" line="303"/>
++        <location filename="../src/include/hwinfostorage.h" line="334"/>
++        <location filename="../src/include/hwinfostorage.h" line="344"/>
+         <source>Serial Number</source>
+         <translation>རིམ་སྟར་ཨང་གྲངས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="180"/>
+-        <location filename="../src/hwwidget.h" line="193"/>
++        <location filename="../src/include/hwinfostorage.h" line="54"/>
++        <location filename="../src/include/hwinfostorage.h" line="67"/>
+         <source>Data Width</source>
+         <translation>གཞི་གྲངས་ཞེང་ཚད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="181"/>
+-        <location filename="../src/hwwidget.h" line="194"/>
+-        <location filename="../src/hwwidget.h" line="265"/>
+-        <location filename="../src/hwwidget.h" line="278"/>
++        <location filename="../src/include/hwinfostorage.h" line="55"/>
++        <location filename="../src/include/hwinfostorage.h" line="68"/>
++        <location filename="../src/include/hwinfostorage.h" line="139"/>
++        <location filename="../src/include/hwinfostorage.h" line="153"/>
+         <source>Type</source>
+         <translation>རིགས་དབྱེ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="182"/>
+-        <location filename="../src/hwwidget.h" line="195"/>
+-        <location filename="../src/hwwidget.h" line="388"/>
+-        <location filename="../src/hwwidget.h" line="402"/>
+-        <location filename="../src/hwwidget.h" line="413"/>
+-        <location filename="../src/hwwidget.h" line="423"/>
+-        <location filename="../src/hwwidget.h" line="434"/>
+-        <location filename="../src/hwwidget.h" line="443"/>
+-        <location filename="../src/hwwidget.h" line="447"/>
+-        <location filename="../src/hwwidget.h" line="450"/>
++        <location filename="../src/include/hwinfostorage.h" line="56"/>
++        <location filename="../src/include/hwinfostorage.h" line="69"/>
++        <location filename="../src/include/hwinfostorage.h" line="140"/>
++        <location filename="../src/include/hwinfostorage.h" line="154"/>
++        <location filename="../src/include/hwinfostorage.h" line="267"/>
++        <location filename="../src/include/hwinfostorage.h" line="281"/>
++        <location filename="../src/include/hwinfostorage.h" line="292"/>
++        <location filename="../src/include/hwinfostorage.h" line="302"/>
++        <location filename="../src/include/hwinfostorage.h" line="313"/>
++        <location filename="../src/include/hwinfostorage.h" line="322"/>
++        <location filename="../src/include/hwinfostorage.h" line="326"/>
++        <location filename="../src/include/hwinfostorage.h" line="329"/>
+         <source>Speed</source>
+         <translation>མྱུར་ཚད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="183"/>
+-        <location filename="../src/hwwidget.h" line="196"/>
++        <location filename="../src/include/hwinfostorage.h" line="57"/>
++        <location filename="../src/include/hwinfostorage.h" line="70"/>
+         <source>Configured Speed</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="184"/>
+-        <location filename="../src/hwwidget.h" line="197"/>
++        <location filename="../src/include/hwinfostorage.h" line="58"/>
++        <location filename="../src/include/hwinfostorage.h" line="71"/>
+         <source>Part Number</source>
+         <translation>ལྷུ་ལག་ཨང་གྲངས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="185"/>
+-        <location filename="../src/hwwidget.h" line="198"/>
++        <location filename="../src/include/hwinfostorage.h" line="59"/>
++        <location filename="../src/include/hwinfostorage.h" line="72"/>
+         <source>Memory Usage</source>
+         <translation>ནང་གསོག་བཀོལ་སྤྱོད་བྱེད་ཚད་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="203"/>
+-        <location filename="../src/hwwidget.h" line="221"/>
++        <location filename="../src/include/hwinfostorage.h" line="77"/>
++        <location filename="../src/include/hwinfostorage.h" line="95"/>
+         <source>Sub System Device ID</source>
+         <translation>རྒྱུད་ཁོངས་ཡན་ལག་སྒྲིག་ཆས་ID</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="204"/>
+-        <location filename="../src/hwwidget.h" line="222"/>
+-        <location filename="../src/hwwidget.h" line="261"/>
+-        <location filename="../src/hwwidget.h" line="274"/>
+-        <location filename="../src/hwwidget.h" line="289"/>
+-        <location filename="../src/hwwidget.h" line="301"/>
+-        <location filename="../src/hwwidget.h" line="316"/>
+-        <location filename="../src/hwwidget.h" line="328"/>
+-        <location filename="../src/hwwidget.h" line="356"/>
+-        <location filename="../src/hwwidget.h" line="362"/>
+-        <location filename="../src/hwwidget.h" line="369"/>
+-        <location filename="../src/hwwidget.h" line="375"/>
+-        <location filename="../src/hwwidget.h" line="429"/>
+-        <location filename="../src/hwwidget.h" line="438"/>
++        <location filename="../src/include/hwinfostorage.h" line="78"/>
++        <location filename="../src/include/hwinfostorage.h" line="96"/>
++        <location filename="../src/include/hwinfostorage.h" line="135"/>
++        <location filename="../src/include/hwinfostorage.h" line="149"/>
++        <location filename="../src/include/hwinfostorage.h" line="195"/>
++        <location filename="../src/include/hwinfostorage.h" line="207"/>
++        <location filename="../src/include/hwinfostorage.h" line="235"/>
++        <location filename="../src/include/hwinfostorage.h" line="241"/>
++        <location filename="../src/include/hwinfostorage.h" line="248"/>
++        <location filename="../src/include/hwinfostorage.h" line="254"/>
++        <location filename="../src/include/hwinfostorage.h" line="308"/>
++        <location filename="../src/include/hwinfostorage.h" line="317"/>
+         <source>Model</source>
+         <translation>དཔེ་དབྱིབས་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="205"/>
+-        <location filename="../src/hwwidget.h" line="223"/>
++        <location filename="../src/include/hwinfostorage.h" line="79"/>
++        <location filename="../src/include/hwinfostorage.h" line="97"/>
+         <source>Memory</source>
+         <translation>ནང་གསོག་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="206"/>
+-        <location filename="../src/hwwidget.h" line="224"/>
++        <location filename="../src/include/hwinfostorage.h" line="80"/>
++        <location filename="../src/include/hwinfostorage.h" line="98"/>
+         <source>GPU Type</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="207"/>
+-        <location filename="../src/hwwidget.h" line="225"/>
+-        <location filename="../src/hwwidget.h" line="409"/>
+-        <location filename="../src/hwwidget.h" line="419"/>
+-        <location filename="../src/hwwidget.h" line="433"/>
+-        <location filename="../src/hwwidget.h" line="442"/>
++        <location filename="../src/include/hwinfostorage.h" line="81"/>
++        <location filename="../src/include/hwinfostorage.h" line="99"/>
++        <location filename="../src/include/hwinfostorage.h" line="288"/>
++        <location filename="../src/include/hwinfostorage.h" line="298"/>
++        <location filename="../src/include/hwinfostorage.h" line="312"/>
++        <location filename="../src/include/hwinfostorage.h" line="321"/>
+         <source>Bus Info</source>
+         <translation>སྤྱི་སྤྱོད་རླངས་འཁོར་གྱི་ཆ་འཕྲིན་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="208"/>
+-        <location filename="../src/hwwidget.h" line="226"/>
+-        <location filename="../src/hwwidget.h" line="342"/>
+-        <location filename="../src/hwwidget.h" line="349"/>
++        <location filename="../src/include/hwinfostorage.h" line="82"/>
++        <location filename="../src/include/hwinfostorage.h" line="100"/>
++        <location filename="../src/include/hwinfostorage.h" line="221"/>
++        <location filename="../src/include/hwinfostorage.h" line="228"/>
+         <source>Clock</source>
+         <translation>ཆུ་ཚོད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="209"/>
+-        <location filename="../src/hwwidget.h" line="227"/>
++        <location filename="../src/include/hwinfostorage.h" line="83"/>
++        <location filename="../src/include/hwinfostorage.h" line="101"/>
+         <source>Physics ID</source>
+         <translation>དངོས་ལུགས་ID</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="210"/>
+-        <location filename="../src/hwwidget.h" line="228"/>
+-        <location filename="../src/hwwidget.h" line="240"/>
+-        <location filename="../src/hwwidget.h" line="250"/>
+-        <location filename="../src/hwwidget.h" line="410"/>
+-        <location filename="../src/hwwidget.h" line="420"/>
+-        <location filename="../src/hwwidget.h" line="432"/>
+-        <location filename="../src/hwwidget.h" line="441"/>
++        <location filename="../src/include/hwinfostorage.h" line="84"/>
++        <location filename="../src/include/hwinfostorage.h" line="102"/>
++        <location filename="../src/include/hwinfostorage.h" line="114"/>
++        <location filename="../src/include/hwinfostorage.h" line="124"/>
++        <location filename="../src/include/hwinfostorage.h" line="289"/>
++        <location filename="../src/include/hwinfostorage.h" line="299"/>
++        <location filename="../src/include/hwinfostorage.h" line="311"/>
++        <location filename="../src/include/hwinfostorage.h" line="320"/>
+         <source>Version</source>
+         <translation>པར་གཞི་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="211"/>
+-        <location filename="../src/hwwidget.h" line="229"/>
+-        <location filename="../src/hwwidget.h" line="263"/>
+-        <location filename="../src/hwwidget.h" line="276"/>
+-        <location filename="../src/hwwidget.h" line="343"/>
+-        <location filename="../src/hwwidget.h" line="350"/>
+-        <location filename="../src/hwwidget.h" line="358"/>
+-        <location filename="../src/hwwidget.h" line="364"/>
+-        <location filename="../src/hwwidget.h" line="371"/>
+-        <location filename="../src/hwwidget.h" line="377"/>
+-        <location filename="../src/hwwidget.h" line="381"/>
+-        <location filename="../src/hwwidget.h" line="394"/>
+-        <location filename="../src/hwwidget.h" line="411"/>
+-        <location filename="../src/hwwidget.h" line="421"/>
+-        <location filename="../src/hwwidget.h" line="431"/>
+-        <location filename="../src/hwwidget.h" line="440"/>
++        <location filename="../src/include/hwinfostorage.h" line="85"/>
++        <location filename="../src/include/hwinfostorage.h" line="103"/>
++        <location filename="../src/include/hwinfostorage.h" line="137"/>
++        <location filename="../src/include/hwinfostorage.h" line="151"/>
++        <location filename="../src/include/hwinfostorage.h" line="222"/>
++        <location filename="../src/include/hwinfostorage.h" line="229"/>
++        <location filename="../src/include/hwinfostorage.h" line="237"/>
++        <location filename="../src/include/hwinfostorage.h" line="243"/>
++        <location filename="../src/include/hwinfostorage.h" line="250"/>
++        <location filename="../src/include/hwinfostorage.h" line="256"/>
++        <location filename="../src/include/hwinfostorage.h" line="260"/>
++        <location filename="../src/include/hwinfostorage.h" line="273"/>
++        <location filename="../src/include/hwinfostorage.h" line="290"/>
++        <location filename="../src/include/hwinfostorage.h" line="300"/>
++        <location filename="../src/include/hwinfostorage.h" line="310"/>
++        <location filename="../src/include/hwinfostorage.h" line="319"/>
+         <source>Driver</source>
+         <translation>ཁ་ལོ་པ།ཁ་ལོ་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="212"/>
+-        <location filename="../src/hwwidget.h" line="230"/>
++        <location filename="../src/include/hwinfostorage.h" line="86"/>
++        <location filename="../src/include/hwinfostorage.h" line="104"/>
+         <source>Communication Width</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="344"/>
+-        <location filename="../src/hwwidget.h" line="351"/>
++        <location filename="../src/include/hwinfostorage.h" line="166"/>
++        <location filename="../src/include/hwinfostorage.h" line="179"/>
++        <source>Mount Point</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/include/hwinfostorage.h" line="175"/>
++        <location filename="../src/include/hwinfostorage.h" line="188"/>
++        <source>Rota</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/include/hwinfostorage.h" line="223"/>
++        <location filename="../src/include/hwinfostorage.h" line="230"/>
+         <source>Width</source>
+         <translation>ཞེང་ཚད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="213"/>
+-        <location filename="../src/hwwidget.h" line="231"/>
++        <location filename="../src/include/hwinfostorage.h" line="87"/>
++        <location filename="../src/include/hwinfostorage.h" line="105"/>
+         <source>GDDR Size</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="214"/>
+-        <location filename="../src/hwwidget.h" line="232"/>
++        <location filename="../src/include/hwinfostorage.h" line="88"/>
++        <location filename="../src/include/hwinfostorage.h" line="106"/>
+         <source>EGL Version</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="215"/>
+-        <location filename="../src/hwwidget.h" line="233"/>
++        <location filename="../src/include/hwinfostorage.h" line="89"/>
++        <location filename="../src/include/hwinfostorage.h" line="107"/>
+         <source>EGL Api List</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="216"/>
+-        <location filename="../src/hwwidget.h" line="234"/>
++        <location filename="../src/include/hwinfostorage.h" line="90"/>
++        <location filename="../src/include/hwinfostorage.h" line="108"/>
+         <source>OpenGL Version</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="217"/>
+-        <location filename="../src/hwwidget.h" line="235"/>
++        <location filename="../src/include/hwinfostorage.h" line="91"/>
++        <location filename="../src/include/hwinfostorage.h" line="109"/>
+         <source>GLSL Version</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="241"/>
+-        <location filename="../src/hwwidget.h" line="251"/>
++        <location filename="../src/include/hwinfostorage.h" line="115"/>
++        <location filename="../src/include/hwinfostorage.h" line="125"/>
+         <source>Chassis Handle</source>
+         <translation>ཞབས་སྒམ་ཡུ་བུ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="242"/>
+-        <location filename="../src/hwwidget.h" line="252"/>
++        <location filename="../src/include/hwinfostorage.h" line="116"/>
++        <location filename="../src/include/hwinfostorage.h" line="126"/>
+         <source>Bios Vendor</source>
+         <translation>སྐྱེ་དངོས་འཚོང་མཁན་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="243"/>
+-        <location filename="../src/hwwidget.h" line="253"/>
++        <location filename="../src/include/hwinfostorage.h" line="117"/>
++        <location filename="../src/include/hwinfostorage.h" line="127"/>
+         <source>Bios Version</source>
+         <translation>པུའུ་སི་པར་གཞི་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="244"/>
+-        <location filename="../src/hwwidget.h" line="254"/>
++        <location filename="../src/include/hwinfostorage.h" line="118"/>
++        <location filename="../src/include/hwinfostorage.h" line="128"/>
+         <source>Chipser</source>
+         <translation>ཆུ་ཕུ་སའེ་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="246"/>
+-        <location filename="../src/hwwidget.h" line="256"/>
++        <location filename="../src/include/hwinfostorage.h" line="120"/>
++        <location filename="../src/include/hwinfostorage.h" line="130"/>
+         <source>Publish Date</source>
+         <translation>ཁྱབ་བསྒྲགས་ཀྱི་དུས་ཚོད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="262"/>
+-        <location filename="../src/hwwidget.h" line="275"/>
++        <location filename="../src/include/hwinfostorage.h" line="136"/>
++        <location filename="../src/include/hwinfostorage.h" line="150"/>
+         <source>Bus</source>
+         <translation>མ་སྐུད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="264"/>
+-        <location filename="../src/hwwidget.h" line="277"/>
++        <location filename="../src/include/hwinfostorage.h" line="138"/>
++        <location filename="../src/include/hwinfostorage.h" line="152"/>
+         <source>MAC Address</source>
+         <translation>MACཤག་གནས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="266"/>
+-        <location filename="../src/hwwidget.h" line="279"/>
++        <location filename="../src/include/hwinfostorage.h" line="141"/>
++        <location filename="../src/include/hwinfostorage.h" line="155"/>
+         <source>IP Address</source>
+         <translation>IPཤག་གནས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="267"/>
+-        <location filename="../src/hwwidget.h" line="280"/>
++        <location filename="../src/include/hwinfostorage.h" line="142"/>
++        <location filename="../src/include/hwinfostorage.h" line="156"/>
+         <source>Net Musk</source>
+         <translation>ཤ་མ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="268"/>
+-        <location filename="../src/hwwidget.h" line="281"/>
++        <location filename="../src/include/hwinfostorage.h" line="143"/>
++        <location filename="../src/include/hwinfostorage.h" line="157"/>
+         <source>Send Bytes</source>
+         <translation>ཡིག་ཚིགས་བསྐུར་བ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="269"/>
+-        <location filename="../src/hwwidget.h" line="282"/>
++        <location filename="../src/include/hwinfostorage.h" line="144"/>
++        <location filename="../src/include/hwinfostorage.h" line="158"/>
+         <source>Recved Bytes</source>
+         <translation>སླར་གསོ་ཡིག་ཚིགས་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="270"/>
+-        <location filename="../src/hwwidget.h" line="283"/>
++        <location filename="../src/include/hwinfostorage.h" line="145"/>
++        <location filename="../src/include/hwinfostorage.h" line="159"/>
+         <source>MTU</source>
+         <translation>MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="288"/>
+-        <location filename="../src/hwwidget.h" line="306"/>
++        <location filename="../src/include/hwinfostorage.h" line="164"/>
++        <location filename="../src/include/hwinfostorage.h" line="183"/>
+         <source>Vendor</source>
+         <translation>ཚོང་པ་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="292"/>
++        <location filename="../src/include/hwinfostorage.h" line="168"/>
+         <source>Disk Name</source>
+         <translation>སྡུད་སྡེར་གྱི་མིང་།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="293"/>
+-        <location filename="../src/hwwidget.h" line="304"/>
++        <location filename="../src/include/hwinfostorage.h" line="169"/>
++        <location filename="../src/include/hwinfostorage.h" line="181"/>
+         <source>Frimwarever Version</source>
+         <translation>ཧྥུ་ལི་མུའུ་ཝེ་ཡོ་པར་གཞི་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="294"/>
+-        <location filename="../src/hwwidget.h" line="305"/>
++        <location filename="../src/include/hwinfostorage.h" line="170"/>
++        <location filename="../src/include/hwinfostorage.h" line="182"/>
+         <source>Disk Type</source>
+         <translation>སྡེར་མའི་རིགས་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="295"/>
+-        <location filename="../src/hwwidget.h" line="307"/>
++        <location filename="../src/include/hwinfostorage.h" line="171"/>
++        <location filename="../src/include/hwinfostorage.h" line="184"/>
+         <source>Main Disk</source>
+         <translation>སྡེར་སྡེར།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="297"/>
+-        <location filename="../src/hwwidget.h" line="309"/>
++        <location filename="../src/include/hwinfostorage.h" line="173"/>
++        <location filename="../src/include/hwinfostorage.h" line="186"/>
+         <source>UFS</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="298"/>
+-        <location filename="../src/hwwidget.h" line="310"/>
++        <location filename="../src/include/hwinfostorage.h" line="174"/>
++        <location filename="../src/include/hwinfostorage.h" line="187"/>
+         <source>UFS Revision</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="317"/>
+-        <location filename="../src/hwwidget.h" line="329"/>
++        <location filename="../src/include/hwinfostorage.h" line="196"/>
++        <location filename="../src/include/hwinfostorage.h" line="208"/>
+         <source>Monitor Size</source>
+         <translation>ལྟ་ཆས་ཆེ་ཆུང་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="318"/>
+-        <location filename="../src/hwwidget.h" line="330"/>
++        <location filename="../src/include/hwinfostorage.h" line="197"/>
++        <location filename="../src/include/hwinfostorage.h" line="209"/>
+         <source>Monitor Ratio</source>
+         <translation>ལྟ་འཛིན་སྡུར་ཚད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="319"/>
+-        <location filename="../src/hwwidget.h" line="331"/>
++        <location filename="../src/include/hwinfostorage.h" line="198"/>
++        <location filename="../src/include/hwinfostorage.h" line="210"/>
+         <source>Resolution</source>
+         <translation>གྲོས་ཆོད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="320"/>
+-        <location filename="../src/hwwidget.h" line="332"/>
++        <location filename="../src/include/hwinfostorage.h" line="199"/>
++        <location filename="../src/include/hwinfostorage.h" line="211"/>
+         <source>Max Resolution</source>
+         <translation>ཆེས་ཆེ་བའི་དབྱེ་འབྱེད་ཚད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="321"/>
+-        <location filename="../src/hwwidget.h" line="333"/>
++        <location filename="../src/include/hwinfostorage.h" line="200"/>
++        <location filename="../src/include/hwinfostorage.h" line="212"/>
+         <source>Main Monitor</source>
+         <translation>ལྟ་སྐུལ་ཆས་གཙོ་བོ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="335"/>
+-        <location filename="../src/hwwidget.h" line="296"/>
+-        <location filename="../src/hwwidget.h" line="308"/>
+-        <location filename="../src/hwwidget.h" line="322"/>
+-        <location filename="../src/hwwidget.h" line="334"/>
+-        <location filename="../src/hwwidget.h" line="357"/>
+-        <location filename="../src/hwwidget.h" line="363"/>
+-        <location filename="../src/hwwidget.h" line="370"/>
+-        <location filename="../src/hwwidget.h" line="376"/>
+-        <location filename="../src/hwwidget.h" line="430"/>
+-        <location filename="../src/hwwidget.h" line="439"/>
++        <location filename="../src/hwwidget.cpp" line="670"/>
++        <location filename="../src/include/hwinfostorage.h" line="172"/>
++        <location filename="../src/include/hwinfostorage.h" line="185"/>
++        <location filename="../src/include/hwinfostorage.h" line="201"/>
++        <location filename="../src/include/hwinfostorage.h" line="213"/>
++        <location filename="../src/include/hwinfostorage.h" line="236"/>
++        <location filename="../src/include/hwinfostorage.h" line="242"/>
++        <location filename="../src/include/hwinfostorage.h" line="249"/>
++        <location filename="../src/include/hwinfostorage.h" line="255"/>
++        <location filename="../src/include/hwinfostorage.h" line="309"/>
++        <location filename="../src/include/hwinfostorage.h" line="318"/>
+         <source>Interface</source>
+         <translation>མཐུད་ཁ་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="323"/>
+-        <location filename="../src/hwwidget.h" line="335"/>
++        <location filename="../src/include/hwinfostorage.h" line="202"/>
++        <location filename="../src/include/hwinfostorage.h" line="214"/>
+         <source>Visible Area</source>
+         <translation>མཐོང་ཐུབ་ས་ཁོངས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="324"/>
+-        <location filename="../src/hwwidget.h" line="336"/>
++        <location filename="../src/include/hwinfostorage.h" line="203"/>
++        <location filename="../src/include/hwinfostorage.h" line="215"/>
+         <source>Gamma</source>
+         <translation>ཀ་མ་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="341"/>
+-        <location filename="../src/hwwidget.h" line="348"/>
++        <location filename="../src/include/hwinfostorage.h" line="220"/>
++        <location filename="../src/include/hwinfostorage.h" line="227"/>
+         <source>Bus Address</source>
+         <translation>མ་སྐུད་སྡོད་གནས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="382"/>
+-        <location filename="../src/hwwidget.h" line="395"/>
++        <location filename="../src/include/hwinfostorage.h" line="261"/>
++        <location filename="../src/include/hwinfostorage.h" line="274"/>
+         <source>Driver Version</source>
+         <translation>སྐུལ་སྒུལ་བའི་པར་གཞི་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="474"/>
+-        <location filename="../src/hwwidget.h" line="383"/>
+-        <location filename="../src/hwwidget.h" line="396"/>
++        <location filename="../src/hwwidget.cpp" line="1000"/>
++        <location filename="../src/include/hwinfostorage.h" line="262"/>
++        <location filename="../src/include/hwinfostorage.h" line="275"/>
+         <source>Address</source>
+         <translation>ཤག་གནས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="384"/>
+-        <location filename="../src/hwwidget.h" line="397"/>
++        <location filename="../src/include/hwinfostorage.h" line="263"/>
++        <location filename="../src/include/hwinfostorage.h" line="276"/>
+         <source>Link Mode</source>
+         <translation>སྦྲེལ་མཐུད་རྣམ་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="385"/>
+-        <location filename="../src/hwwidget.h" line="398"/>
++        <location filename="../src/include/hwinfostorage.h" line="264"/>
++        <location filename="../src/include/hwinfostorage.h" line="277"/>
+         <source>Link Policy</source>
+         <translation>སྦྲེལ་མཐུད་ཐབས་ཇུས་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="387"/>
+-        <location filename="../src/hwwidget.h" line="401"/>
++        <location filename="../src/include/hwinfostorage.h" line="266"/>
++        <location filename="../src/include/hwinfostorage.h" line="280"/>
+         <source>ACL MTU</source>
+         <translation>ACL MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="390"/>
+-        <location filename="../src/hwwidget.h" line="399"/>
++        <location filename="../src/include/hwinfostorage.h" line="269"/>
++        <location filename="../src/include/hwinfostorage.h" line="278"/>
+         <source>Packe Type</source>
+         <translation>ཐུམ་པའི་རིགས་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="386"/>
+-        <location filename="../src/hwwidget.h" line="400"/>
++        <location filename="../src/include/hwinfostorage.h" line="265"/>
++        <location filename="../src/include/hwinfostorage.h" line="279"/>
+         <source>SCO MTU</source>
+         <translation>SCO MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="389"/>
+-        <location filename="../src/hwwidget.h" line="403"/>
++        <location filename="../src/include/hwinfostorage.h" line="268"/>
++        <location filename="../src/include/hwinfostorage.h" line="282"/>
+         <source>Features</source>
+         <translation>ཁྱད་ཆོས་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="408"/>
+-        <location filename="../src/hwwidget.h" line="418"/>
++        <location filename="../src/include/hwinfostorage.h" line="287"/>
++        <location filename="../src/include/hwinfostorage.h" line="297"/>
+         <source>Name</source>
+         <translation>མིང་།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="412"/>
+-        <location filename="../src/hwwidget.h" line="422"/>
++        <location filename="../src/include/hwinfostorage.h" line="291"/>
++        <location filename="../src/include/hwinfostorage.h" line="301"/>
+         <source>Device Number</source>
+         <translation>སྒྲིག་ཆས་ཨང་གྲངས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="456"/>
+-        <location filename="../src/hwwidget.h" line="466"/>
++        <location filename="../src/include/hwinfostorage.h" line="335"/>
++        <location filename="../src/include/hwinfostorage.h" line="345"/>
+         <source>State</source>
+         <translation>རྒྱལ་ཁབ་</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="457"/>
+-        <location filename="../src/hwwidget.h" line="467"/>
++        <location filename="../src/include/hwinfostorage.h" line="336"/>
++        <location filename="../src/include/hwinfostorage.h" line="346"/>
+         <source>Energy</source>
+         <translation>ནུས་ཁུངས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="458"/>
+-        <location filename="../src/hwwidget.h" line="468"/>
++        <location filename="../src/include/hwinfostorage.h" line="337"/>
++        <location filename="../src/include/hwinfostorage.h" line="347"/>
+         <source>Used Times</source>
+         <translation>བེད་སྤྱོད་ཐེངས་ཚོད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="459"/>
+-        <location filename="../src/hwwidget.h" line="469"/>
++        <location filename="../src/include/hwinfostorage.h" line="338"/>
++        <location filename="../src/include/hwinfostorage.h" line="348"/>
+         <source>Energy Full</source>
+         <translation>ནུས་ཚད་གང་བ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="460"/>
+-        <location filename="../src/hwwidget.h" line="470"/>
++        <location filename="../src/include/hwinfostorage.h" line="339"/>
++        <location filename="../src/include/hwinfostorage.h" line="349"/>
+         <source>Time To Empty</source>
+         <translation>སྟོང་པ་བཟོ་བའི་དུས་ཚོད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="461"/>
+-        <location filename="../src/hwwidget.h" line="471"/>
++        <location filename="../src/include/hwinfostorage.h" line="340"/>
++        <location filename="../src/include/hwinfostorage.h" line="350"/>
+         <source>Percentage</source>
+         <translation>བརྒྱ་ཆའི་བསྡུར་ཚད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="40"/>
++        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="57"/>
+         <source>Wireless</source>
+         <translation>སྐུད་མེད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="42"/>
++        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="59"/>
+         <source>Wired</source>
+         <translation>སྐུད་ཡོད་།</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="87"/>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="121"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="93"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="103"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="150"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="155"/>
+         <source>This CPU model does not support frequency display function</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/device-controller/translations/kylin-os-manager-device-controller_kk.ts b/plugins/device-controller/translations/kylin-os-manager-device-controller_kk.ts
+index 83d6b62..d09216c 100644
+--- a/plugins/device-controller/translations/kylin-os-manager-device-controller_kk.ts
++++ b/plugins/device-controller/translations/kylin-os-manager-device-controller_kk.ts
+@@ -214,92 +214,92 @@
+ <context>
+     <name>DriverInstallWidget</name>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
+         <source>Installable Drivers</source>
+         <translation>ورناتۋعا بولاتٸن شوپۇرلار</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>)</source>
+         <translation></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>(</source>
+         <translation></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+         <source>One-click installation</source>
+         <translation>بٸر كىنوپكا مەنەن قۇراستىرۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
+         <source>Upgradable Drivers</source>
+         <translation>دارەجەسىن وسىرگەلى بولاتٸن شوپۇرلار</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+         <source>One-click upgrade</source>
+         <translation>بٸر كىنوپكا دارەجەسىن ٶستٸرۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
+         <source>Installed Drivers</source>
+         <translation>ورناتٸلعان شوپۇرلۇق</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>Unrecognized Device</source>
+         <translation>پارٸق مويىنداپ قىلىنباعان قۇرىلما</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1200"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1248"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1213"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1261"/>
+         <source>Uninstalling drivers. Please wait for the uninstallation to complete before clicking again.</source>
+         <translation>شوپۇرنى قۇراستىرۋ. قۇراستىرۋنى تامامداعاننان كەيىن سونان جانە تۇرتىپ كور.</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1202"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1250"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1215"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1263"/>
+         <source>Uninstall Failed</source>
+         <translation>قۇراستىرۋ جەڭىلىپ قالدى</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1205"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1253"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1218"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1266"/>
+         <source>Installing drivers. Please wait for the installation to complete before clicking again.</source>
+         <translation>شوپۇرنى ورناتۋ. قۇراستىرۋ اقىرلاسقاننان كەيىن جانە تۇرتىپ كور.</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1065"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1206"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1254"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1078"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1219"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1267"/>
+         <source>Install Failed</source>
+         <translation>قۇراستىرۋ جەڭىلىپ قالدى</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1069"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1082"/>
+         <source>Update</source>
+         <translation>جاڭالاۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1076"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1089"/>
+         <source>Install</source>
+         <translation>قۇراستىرۋ</translation>
+     </message>
+@@ -307,65 +307,70 @@
+ <context>
+     <name>HardWareInfoWidget</name>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="113"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="121"/>
+         <source>Computer Basic Information</source>
+         <translation>كومپيۋتەر نەگٸزگٸ حابارى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="117"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="420"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="125"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="462"/>
+         <source>Host Name</source>
+         <translation>جۇرگىزۋشى مى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="121"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="421"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="129"/>
++        <source>Operation System Name</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/hardwareinfowidget.cpp" line="133"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="463"/>
+         <source>Operation System Version</source>
+         <translation>جوبالاۋ سەستيماسى نۇسقاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="125"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="422"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="137"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="464"/>
+         <source>Kernel Version</source>
+         <translation>يادرو نۇسقاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="129"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="423"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="141"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="465"/>
+         <source>Kernel Architecture</source>
+         <translation>يادرو قۇرىلعىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="133"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="424"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="145"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="466"/>
+         <source>System Bits</source>
+         <translation>سەستيما بٸرلٸك</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="137"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="425"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="149"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="467"/>
+         <source>Manufacturer</source>
+         <translation>زاۆوت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="141"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="153"/>
+         <source>Version</source>
+         <translation>نۇسقاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="145"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="426"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="157"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="468"/>
+         <source>Model</source>
+         <translation>ۇلگى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="149"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="427"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="161"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="469"/>
+         <source>Serial</source>
+         <translation>زاتتا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="334"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="375"/>
+         <source>Hardware Display</source>
+         <translation>Hardware Display</translation>
+     </message>
+@@ -386,7 +391,7 @@
+ <context>
+     <name>HardwareInfoGetter</name>
+     <message>
+-        <location filename="../src/hardwareinfogetter.cpp" line="869"/>
++        <location filename="../src/hardwareinfogetter.cpp" line="979"/>
+         <source> inch</source>
+         <translation type="unfinished"></translation>
+     </message>
+@@ -394,112 +399,158 @@
+ <context>
+     <name>HwWidget</name>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="53"/>
++        <location filename="../src/hwwidget.cpp" line="88"/>
+         <source>Disable</source>
+         <translation>توقتاتۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="72"/>
++        <location filename="../src/hwwidget.cpp" line="116"/>
+         <source>Export To Clipboard</source>
+         <translation>ەكسپورت قىلىنۋ تاقتاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="73"/>
++        <location filename="../src/hwwidget.cpp" line="117"/>
+         <source>Activate</source>
+         <translation>قوزعالتۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="74"/>
++        <location filename="../src/hwwidget.cpp" line="118"/>
+         <source>Deactive</source>
+         <translation>اكتيۆ بولماستٸق</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="84"/>
+-        <location filename="../src/hwwidget.cpp" line="87"/>
++        <location filename="../src/hwwidget.cpp" line="128"/>
++        <location filename="../src/hwwidget.cpp" line="131"/>
+         <source>CPU</source>
+         <translation>CPU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="116"/>
+-        <location filename="../src/hwwidget.cpp" line="120"/>
++        <location filename="../src/hwwidget.cpp" line="208"/>
++        <location filename="../src/hwwidget.cpp" line="212"/>
++        <location filename="../src/hwwidget.cpp" line="1330"/>
++        <location filename="../src/hwwidget.cpp" line="1333"/>
+         <source>Memory</source>
+         <translation>بۇرىنعىما</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="148"/>
+-        <location filename="../src/hwwidget.cpp" line="152"/>
++        <location filename="../src/hwwidget.cpp" line="147"/>
++        <location filename="../src/hwwidget.cpp" line="228"/>
++        <location filename="../src/hwwidget.cpp" line="284"/>
++        <location filename="../src/hwwidget.cpp" line="287"/>
++        <location filename="../src/hwwidget.cpp" line="304"/>
++        <location filename="../src/hwwidget.cpp" line="1355"/>
++        <location filename="../src/hwwidget.cpp" line="1358"/>
+         <source>Graphic Card</source>
+         <translation>سۋرەت كارتاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="181"/>
+-        <location filename="../src/hwwidget.cpp" line="184"/>
++        <location filename="../src/hwwidget.cpp" line="91"/>
++        <source>This device can be disabled/enabled</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/hwwidget.cpp" line="358"/>
++        <location filename="../src/hwwidget.cpp" line="361"/>
++        <location filename="../src/hwwidget.cpp" line="378"/>
+         <source>Mother Board</source>
+         <translation>نەگٸزگٸ تاقتا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="206"/>
+-        <location filename="../src/hwwidget.cpp" line="212"/>
++        <location filename="../src/hwwidget.cpp" line="429"/>
++        <location filename="../src/hwwidget.cpp" line="435"/>
++        <location filename="../src/hwwidget.cpp" line="453"/>
++        <location filename="../src/hwwidget.cpp" line="1381"/>
++        <location filename="../src/hwwidget.cpp" line="1384"/>
+         <source>Network Card</source>
+         <translation>تور كارتاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="289"/>
+-        <location filename="../src/hwwidget.cpp" line="293"/>
++        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="556"/>
++        <location filename="../src/hwwidget.cpp" line="572"/>
++        <location filename="../src/hwwidget.cpp" line="640"/>
++        <location filename="../src/hwwidget.cpp" line="744"/>
++        <location filename="../src/hwwidget.cpp" line="1407"/>
++        <location filename="../src/hwwidget.cpp" line="1410"/>
+         <source>Disk</source>
+         <translation>ەرەكشە ديسكا ديسكا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="315"/>
+-        <location filename="../src/hwwidget.cpp" line="319"/>
++        <location filename="../src/hwwidget.cpp" line="620"/>
++        <location filename="../src/hwwidget.cpp" line="624"/>
++        <location filename="../src/hwwidget.cpp" line="1432"/>
++        <location filename="../src/hwwidget.cpp" line="1435"/>
+         <source>Monitor</source>
+         <translation>كلاس باستىعى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="373"/>
+-        <location filename="../src/hwwidget.cpp" line="376"/>
++        <location filename="../src/hwwidget.cpp" line="723"/>
++        <location filename="../src/hwwidget.cpp" line="726"/>
++        <location filename="../src/hwwidget.cpp" line="1458"/>
++        <location filename="../src/hwwidget.cpp" line="1461"/>
+         <source>Sound Card</source>
+         <translation>اۋا كارتاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="410"/>
+-        <location filename="../src/hwwidget.cpp" line="414"/>
++        <location filename="../src/hwwidget.cpp" line="824"/>
++        <location filename="../src/hwwidget.cpp" line="828"/>
++        <location filename="../src/hwwidget.cpp" line="844"/>
++        <location filename="../src/hwwidget.cpp" line="1484"/>
++        <location filename="../src/hwwidget.cpp" line="1487"/>
+         <source>Keyboard</source>
+         <translation>كىنوپكا تاقتاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="435"/>
+-        <location filename="../src/hwwidget.cpp" line="439"/>
++        <location filename="../src/hwwidget.cpp" line="890"/>
++        <location filename="../src/hwwidget.cpp" line="894"/>
++        <location filename="../src/hwwidget.cpp" line="910"/>
++        <location filename="../src/hwwidget.cpp" line="1509"/>
++        <location filename="../src/hwwidget.cpp" line="1512"/>
+         <source>Mouse</source>
+         <translation>تاقىرىپ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="461"/>
+-        <location filename="../src/hwwidget.cpp" line="466"/>
++        <location filename="../src/hwwidget.cpp" line="959"/>
++        <location filename="../src/hwwidget.cpp" line="962"/>
++        <location filename="../src/hwwidget.cpp" line="980"/>
++        <location filename="../src/hwwidget.cpp" line="1534"/>
++        <location filename="../src/hwwidget.cpp" line="1537"/>
+         <source>Bluetooth</source>
+         <translation>كوك تىس</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="506"/>
+-        <location filename="../src/hwwidget.cpp" line="510"/>
++        <location filename="../src/hwwidget.cpp" line="1049"/>
++        <location filename="../src/hwwidget.cpp" line="1053"/>
++        <location filename="../src/hwwidget.cpp" line="1069"/>
++        <location filename="../src/hwwidget.cpp" line="1559"/>
++        <location filename="../src/hwwidget.cpp" line="1562"/>
+         <source>CD</source>
+         <translation>ديسكا ديسكا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="531"/>
+-        <location filename="../src/hwwidget.cpp" line="534"/>
++        <location filename="../src/hwwidget.cpp" line="1116"/>
++        <location filename="../src/hwwidget.cpp" line="1119"/>
++        <location filename="../src/hwwidget.cpp" line="1136"/>
++        <location filename="../src/hwwidget.cpp" line="1584"/>
++        <location filename="../src/hwwidget.cpp" line="1587"/>
+         <source>Battery</source>
+         <translation>ديسكا ديسكا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="565"/>
+-        <location filename="../src/hwwidget.cpp" line="569"/>
++        <location filename="../src/hwwidget.cpp" line="1192"/>
++        <location filename="../src/hwwidget.cpp" line="1196"/>
++        <location filename="../src/hwwidget.cpp" line="1212"/>
++        <location filename="../src/hwwidget.cpp" line="1609"/>
++        <location filename="../src/hwwidget.cpp" line="1612"/>
+         <source>Fan</source>
+         <translation>مەستانىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="590"/>
+-        <location filename="../src/hwwidget.cpp" line="593"/>
++        <location filename="../src/hwwidget.cpp" line="1259"/>
++        <location filename="../src/hwwidget.cpp" line="1262"/>
++        <location filename="../src/hwwidget.cpp" line="1279"/>
++        <location filename="../src/hwwidget.cpp" line="1634"/>
++        <location filename="../src/hwwidget.cpp" line="1637"/>
+         <source>Camera</source>
+         <translation>مەستانىسى</translation>
+     </message>
+@@ -520,76 +571,76 @@
+         <translation>اسباب باسقارۋشى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/diskinfo.cpp" line="37"/>
++        <location filename="../src/hardwareinfo/diskinfo.cpp" line="39"/>
+         <location filename="../src/hardwareinfo/monitorinfo.cpp" line="33"/>
+-        <location filename="../src/hwwidget.cpp" line="358"/>
++        <location filename="../src/hwwidget.cpp" line="695"/>
+         <source>Yes</source>
+         <translation>سونداي</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/diskinfo.cpp" line="35"/>
++        <location filename="../src/hardwareinfo/diskinfo.cpp" line="37"/>
+         <location filename="../src/hardwareinfo/monitorinfo.cpp" line="35"/>
+-        <location filename="../src/hwwidget.cpp" line="360"/>
++        <location filename="../src/hwwidget.cpp" line="697"/>
+         <source>No</source>
+         <translation>جوق</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="103"/>
++        <location filename="../src/hwwidget.cpp" line="177"/>
+         <source>CPU Current Frequency</source>
+         <translation>CPU اعٸم جيىلىگى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="103"/>
++        <location filename="../src/hwwidget.cpp" line="177"/>
+         <source>CPU Usage Rate</source>
+         <translation>CPU ٸستەتۋ قاتىناسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="104"/>
++        <location filename="../src/hwwidget.cpp" line="178"/>
+         <source>CPU Temperature</source>
+         <translation>CPU تەمپەراتۋراسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="136"/>
++        <location filename="../src/hwwidget.cpp" line="258"/>
+         <source>Memory Usage</source>
+         <translation>ٸشكٸ ساقتاعىش ٸستەتۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="169"/>
++        <location filename="../src/hwwidget.cpp" line="334"/>
+         <source>GDDR Size</source>
+         <translation>GDDR ۇلكەن-كشكەنە</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="344"/>
++        <location filename="../src/hwwidget.cpp" line="680"/>
+         <source>Resolution</source>
+         <translation>قارار</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="354"/>
++        <location filename="../src/hwwidget.cpp" line="690"/>
+         <source>Main Monitor</source>
+         <translation>نەگٸزگٸ كلاس باستىعى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="551"/>
++        <location filename="../src/hwwidget.cpp" line="1166"/>
+         <source>Energy</source>
+         <translation>ەنەرگيا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="551"/>
++        <location filename="../src/hwwidget.cpp" line="1166"/>
+         <source>Time To Empty</source>
+         <translation>قالدىق ۋاقىت ئېنېرگىيەسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="1167"/>
+         <source>Percentage</source>
+         <translation>پٸراسەنت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="1167"/>
+         <source>State</source>
+         <translation>مەملەكەت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="194"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="210"/>
+         <source>This CPU model does not support temperature display function</source>
+         <translation>نۇ CPU مودەلى تەمپەراتۋرا كورسەتۋ قابٸلەتتٸ قولدامايدى</translation>
+     </message>
+@@ -611,607 +662,621 @@
+         <translation>ساندىق مالىمەت قامباسٸ قاتەلىك</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="144"/>
+-        <location filename="../src/hwwidget.h" line="159"/>
+-        <location filename="../src/hwwidget.h" line="179"/>
+-        <location filename="../src/hwwidget.h" line="192"/>
+-        <location filename="../src/hwwidget.h" line="202"/>
+-        <location filename="../src/hwwidget.h" line="220"/>
+-        <location filename="../src/hwwidget.h" line="239"/>
+-        <location filename="../src/hwwidget.h" line="249"/>
+-        <location filename="../src/hwwidget.h" line="260"/>
+-        <location filename="../src/hwwidget.h" line="273"/>
+-        <location filename="../src/hwwidget.h" line="315"/>
+-        <location filename="../src/hwwidget.h" line="327"/>
+-        <location filename="../src/hwwidget.h" line="340"/>
+-        <location filename="../src/hwwidget.h" line="347"/>
+-        <location filename="../src/hwwidget.h" line="355"/>
+-        <location filename="../src/hwwidget.h" line="361"/>
+-        <location filename="../src/hwwidget.h" line="368"/>
+-        <location filename="../src/hwwidget.h" line="374"/>
+-        <location filename="../src/hwwidget.h" line="380"/>
+-        <location filename="../src/hwwidget.h" line="393"/>
+-        <location filename="../src/hwwidget.h" line="407"/>
+-        <location filename="../src/hwwidget.h" line="417"/>
+-        <location filename="../src/hwwidget.h" line="428"/>
+-        <location filename="../src/hwwidget.h" line="437"/>
+-        <location filename="../src/hwwidget.h" line="454"/>
+-        <location filename="../src/hwwidget.h" line="464"/>
++        <location filename="../src/include/hwinfostorage.h" line="18"/>
++        <location filename="../src/include/hwinfostorage.h" line="33"/>
++        <location filename="../src/include/hwinfostorage.h" line="53"/>
++        <location filename="../src/include/hwinfostorage.h" line="66"/>
++        <location filename="../src/include/hwinfostorage.h" line="76"/>
++        <location filename="../src/include/hwinfostorage.h" line="94"/>
++        <location filename="../src/include/hwinfostorage.h" line="113"/>
++        <location filename="../src/include/hwinfostorage.h" line="123"/>
++        <location filename="../src/include/hwinfostorage.h" line="134"/>
++        <location filename="../src/include/hwinfostorage.h" line="148"/>
++        <location filename="../src/include/hwinfostorage.h" line="194"/>
++        <location filename="../src/include/hwinfostorage.h" line="206"/>
++        <location filename="../src/include/hwinfostorage.h" line="219"/>
++        <location filename="../src/include/hwinfostorage.h" line="226"/>
++        <location filename="../src/include/hwinfostorage.h" line="234"/>
++        <location filename="../src/include/hwinfostorage.h" line="240"/>
++        <location filename="../src/include/hwinfostorage.h" line="247"/>
++        <location filename="../src/include/hwinfostorage.h" line="253"/>
++        <location filename="../src/include/hwinfostorage.h" line="259"/>
++        <location filename="../src/include/hwinfostorage.h" line="272"/>
++        <location filename="../src/include/hwinfostorage.h" line="286"/>
++        <location filename="../src/include/hwinfostorage.h" line="296"/>
++        <location filename="../src/include/hwinfostorage.h" line="307"/>
++        <location filename="../src/include/hwinfostorage.h" line="316"/>
++        <location filename="../src/include/hwinfostorage.h" line="333"/>
++        <location filename="../src/include/hwinfostorage.h" line="343"/>
+         <source>Manufacturer</source>
+         <translation>زاۆوت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="145"/>
+-        <location filename="../src/hwwidget.h" line="160"/>
++        <location filename="../src/include/hwinfostorage.h" line="19"/>
++        <location filename="../src/include/hwinfostorage.h" line="34"/>
+         <source>Cores</source>
+         <translation>يادرو</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="146"/>
+-        <location filename="../src/hwwidget.h" line="161"/>
++        <location filename="../src/include/hwinfostorage.h" line="20"/>
++        <location filename="../src/include/hwinfostorage.h" line="35"/>
+         <source>Online Cores</source>
+         <translation>توردا يادرو</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="147"/>
+-        <location filename="../src/hwwidget.h" line="162"/>
++        <location filename="../src/include/hwinfostorage.h" line="21"/>
++        <location filename="../src/include/hwinfostorage.h" line="36"/>
+         <source>Thread Per Cores</source>
+         <translation>ٵر بٸر يادرو يىپ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="148"/>
+-        <location filename="../src/hwwidget.h" line="163"/>
++        <location filename="../src/include/hwinfostorage.h" line="22"/>
++        <location filename="../src/include/hwinfostorage.h" line="37"/>
+         <source>MAX MHz</source>
+         <translation>ەڭ جوعارعى MHz</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="149"/>
+-        <location filename="../src/hwwidget.h" line="164"/>
++        <location filename="../src/include/hwinfostorage.h" line="23"/>
++        <location filename="../src/include/hwinfostorage.h" line="38"/>
+         <source>L1d Cache</source>
+         <translation>L1D تەجەۋ ساقتاعىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="150"/>
+-        <location filename="../src/hwwidget.h" line="165"/>
++        <location filename="../src/include/hwinfostorage.h" line="24"/>
++        <location filename="../src/include/hwinfostorage.h" line="39"/>
+         <source>L1i Cache</source>
+         <translation>L1i تەجەۋ ساقتاعىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="151"/>
+-        <location filename="../src/hwwidget.h" line="166"/>
++        <location filename="../src/include/hwinfostorage.h" line="25"/>
++        <location filename="../src/include/hwinfostorage.h" line="40"/>
+         <source>L2 Cache</source>
+         <translation>2 دارەجەلىك تەجەۋ ساقتاعىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="152"/>
+-        <location filename="../src/hwwidget.h" line="167"/>
++        <location filename="../src/include/hwinfostorage.h" line="26"/>
++        <location filename="../src/include/hwinfostorage.h" line="41"/>
+         <source>L3 Cache</source>
+         <translation>L3 تەجەۋ ساقتاعىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="153"/>
+-        <location filename="../src/hwwidget.h" line="168"/>
++        <location filename="../src/include/hwinfostorage.h" line="27"/>
++        <location filename="../src/include/hwinfostorage.h" line="42"/>
+         <source>L4 Cache</source>
+         <translation type="unfinished">L3 кэш {4 ?}</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="154"/>
+-        <location filename="../src/hwwidget.h" line="169"/>
++        <location filename="../src/include/hwinfostorage.h" line="28"/>
++        <location filename="../src/include/hwinfostorage.h" line="43"/>
+         <source>CPU Current Frequency</source>
+         <translation>CPU اعٸم جيىلىگى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="155"/>
+-        <location filename="../src/hwwidget.h" line="170"/>
++        <location filename="../src/include/hwinfostorage.h" line="29"/>
++        <location filename="../src/include/hwinfostorage.h" line="44"/>
+         <source>CPU Usage Rate</source>
+         <translation>CPU ٸستەتۋ قاتىناسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="156"/>
+-        <location filename="../src/hwwidget.h" line="171"/>
++        <location filename="../src/include/hwinfostorage.h" line="30"/>
++        <location filename="../src/include/hwinfostorage.h" line="45"/>
+         <source>CPU Temperature</source>
+         <translation>CPU تەمپەراتۋراسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="175"/>
+-        <location filename="../src/hwwidget.h" line="188"/>
++        <location filename="../src/include/hwinfostorage.h" line="49"/>
++        <location filename="../src/include/hwinfostorage.h" line="62"/>
+         <source>Bank Locator</source>
+         <translation>بانكە ورىن بەلگٸلەۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="176"/>
+-        <location filename="../src/hwwidget.h" line="189"/>
++        <location filename="../src/include/hwinfostorage.h" line="50"/>
++        <location filename="../src/include/hwinfostorage.h" line="63"/>
+         <source>Total Width</source>
+         <translation>جالپى كەڭدىگى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="177"/>
+-        <location filename="../src/hwwidget.h" line="190"/>
+-        <location filename="../src/hwwidget.h" line="290"/>
+-        <location filename="../src/hwwidget.h" line="302"/>
++        <location filename="../src/include/hwinfostorage.h" line="51"/>
++        <location filename="../src/include/hwinfostorage.h" line="64"/>
++        <location filename="../src/include/hwinfostorage.h" line="165"/>
++        <location filename="../src/include/hwinfostorage.h" line="178"/>
+         <source>Size</source>
+         <translation>ۇلكەن-كشكەنە</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="178"/>
+-        <location filename="../src/hwwidget.h" line="191"/>
+-        <location filename="../src/hwwidget.h" line="245"/>
+-        <location filename="../src/hwwidget.h" line="255"/>
+-        <location filename="../src/hwwidget.h" line="291"/>
+-        <location filename="../src/hwwidget.h" line="303"/>
+-        <location filename="../src/hwwidget.h" line="414"/>
+-        <location filename="../src/hwwidget.h" line="424"/>
+-        <location filename="../src/hwwidget.h" line="455"/>
+-        <location filename="../src/hwwidget.h" line="465"/>
++        <location filename="../src/include/hwinfostorage.h" line="52"/>
++        <location filename="../src/include/hwinfostorage.h" line="65"/>
++        <location filename="../src/include/hwinfostorage.h" line="119"/>
++        <location filename="../src/include/hwinfostorage.h" line="129"/>
++        <location filename="../src/include/hwinfostorage.h" line="167"/>
++        <location filename="../src/include/hwinfostorage.h" line="180"/>
++        <location filename="../src/include/hwinfostorage.h" line="293"/>
++        <location filename="../src/include/hwinfostorage.h" line="303"/>
++        <location filename="../src/include/hwinfostorage.h" line="334"/>
++        <location filename="../src/include/hwinfostorage.h" line="344"/>
+         <source>Serial Number</source>
+         <translation>رەت نومەرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="180"/>
+-        <location filename="../src/hwwidget.h" line="193"/>
++        <location filename="../src/include/hwinfostorage.h" line="54"/>
++        <location filename="../src/include/hwinfostorage.h" line="67"/>
+         <source>Data Width</source>
+         <translation>ساندىق مالىمەت كەڭدىگى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="181"/>
+-        <location filename="../src/hwwidget.h" line="194"/>
+-        <location filename="../src/hwwidget.h" line="265"/>
+-        <location filename="../src/hwwidget.h" line="278"/>
++        <location filename="../src/include/hwinfostorage.h" line="55"/>
++        <location filename="../src/include/hwinfostorage.h" line="68"/>
++        <location filename="../src/include/hwinfostorage.h" line="139"/>
++        <location filename="../src/include/hwinfostorage.h" line="153"/>
+         <source>Type</source>
+         <translation>تۇرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="182"/>
+-        <location filename="../src/hwwidget.h" line="195"/>
+-        <location filename="../src/hwwidget.h" line="388"/>
+-        <location filename="../src/hwwidget.h" line="402"/>
+-        <location filename="../src/hwwidget.h" line="413"/>
+-        <location filename="../src/hwwidget.h" line="423"/>
+-        <location filename="../src/hwwidget.h" line="434"/>
+-        <location filename="../src/hwwidget.h" line="443"/>
+-        <location filename="../src/hwwidget.h" line="447"/>
+-        <location filename="../src/hwwidget.h" line="450"/>
++        <location filename="../src/include/hwinfostorage.h" line="56"/>
++        <location filename="../src/include/hwinfostorage.h" line="69"/>
++        <location filename="../src/include/hwinfostorage.h" line="140"/>
++        <location filename="../src/include/hwinfostorage.h" line="154"/>
++        <location filename="../src/include/hwinfostorage.h" line="267"/>
++        <location filename="../src/include/hwinfostorage.h" line="281"/>
++        <location filename="../src/include/hwinfostorage.h" line="292"/>
++        <location filename="../src/include/hwinfostorage.h" line="302"/>
++        <location filename="../src/include/hwinfostorage.h" line="313"/>
++        <location filename="../src/include/hwinfostorage.h" line="322"/>
++        <location filename="../src/include/hwinfostorage.h" line="326"/>
++        <location filename="../src/include/hwinfostorage.h" line="329"/>
+         <source>Speed</source>
+         <translation>جىلدامدىق</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="183"/>
+-        <location filename="../src/hwwidget.h" line="196"/>
++        <location filename="../src/include/hwinfostorage.h" line="57"/>
++        <location filename="../src/include/hwinfostorage.h" line="70"/>
+         <source>Configured Speed</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="184"/>
+-        <location filename="../src/hwwidget.h" line="197"/>
++        <location filename="../src/include/hwinfostorage.h" line="58"/>
++        <location filename="../src/include/hwinfostorage.h" line="71"/>
+         <source>Part Number</source>
+         <translation>زاپاس نومەرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="185"/>
+-        <location filename="../src/hwwidget.h" line="198"/>
++        <location filename="../src/include/hwinfostorage.h" line="59"/>
++        <location filename="../src/include/hwinfostorage.h" line="72"/>
+         <source>Memory Usage</source>
+         <translation>ٸشكٸ ساقتاعىش ٸستەتۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="203"/>
+-        <location filename="../src/hwwidget.h" line="221"/>
++        <location filename="../src/include/hwinfostorage.h" line="77"/>
++        <location filename="../src/include/hwinfostorage.h" line="95"/>
+         <source>Sub System Device ID</source>
+         <translation>تارماق سەستيما قۇرىلعىسى ID</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="204"/>
+-        <location filename="../src/hwwidget.h" line="222"/>
+-        <location filename="../src/hwwidget.h" line="261"/>
+-        <location filename="../src/hwwidget.h" line="274"/>
+-        <location filename="../src/hwwidget.h" line="289"/>
+-        <location filename="../src/hwwidget.h" line="301"/>
+-        <location filename="../src/hwwidget.h" line="316"/>
+-        <location filename="../src/hwwidget.h" line="328"/>
+-        <location filename="../src/hwwidget.h" line="356"/>
+-        <location filename="../src/hwwidget.h" line="362"/>
+-        <location filename="../src/hwwidget.h" line="369"/>
+-        <location filename="../src/hwwidget.h" line="375"/>
+-        <location filename="../src/hwwidget.h" line="429"/>
+-        <location filename="../src/hwwidget.h" line="438"/>
++        <location filename="../src/include/hwinfostorage.h" line="78"/>
++        <location filename="../src/include/hwinfostorage.h" line="96"/>
++        <location filename="../src/include/hwinfostorage.h" line="135"/>
++        <location filename="../src/include/hwinfostorage.h" line="149"/>
++        <location filename="../src/include/hwinfostorage.h" line="195"/>
++        <location filename="../src/include/hwinfostorage.h" line="207"/>
++        <location filename="../src/include/hwinfostorage.h" line="235"/>
++        <location filename="../src/include/hwinfostorage.h" line="241"/>
++        <location filename="../src/include/hwinfostorage.h" line="248"/>
++        <location filename="../src/include/hwinfostorage.h" line="254"/>
++        <location filename="../src/include/hwinfostorage.h" line="308"/>
++        <location filename="../src/include/hwinfostorage.h" line="317"/>
+         <source>Model</source>
+         <translation>ۇلگى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="205"/>
+-        <location filename="../src/hwwidget.h" line="223"/>
++        <location filename="../src/include/hwinfostorage.h" line="79"/>
++        <location filename="../src/include/hwinfostorage.h" line="97"/>
+         <source>Memory</source>
+         <translation>بۇرىنعىما</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="206"/>
+-        <location filename="../src/hwwidget.h" line="224"/>
++        <location filename="../src/include/hwinfostorage.h" line="80"/>
++        <location filename="../src/include/hwinfostorage.h" line="98"/>
+         <source>GPU Type</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="207"/>
+-        <location filename="../src/hwwidget.h" line="225"/>
+-        <location filename="../src/hwwidget.h" line="409"/>
+-        <location filename="../src/hwwidget.h" line="419"/>
+-        <location filename="../src/hwwidget.h" line="433"/>
+-        <location filename="../src/hwwidget.h" line="442"/>
++        <location filename="../src/include/hwinfostorage.h" line="81"/>
++        <location filename="../src/include/hwinfostorage.h" line="99"/>
++        <location filename="../src/include/hwinfostorage.h" line="288"/>
++        <location filename="../src/include/hwinfostorage.h" line="298"/>
++        <location filename="../src/include/hwinfostorage.h" line="312"/>
++        <location filename="../src/include/hwinfostorage.h" line="321"/>
+         <source>Bus Info</source>
+         <translation>الەۋمەتتٸك قاتىناس حابارى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="208"/>
+-        <location filename="../src/hwwidget.h" line="226"/>
+-        <location filename="../src/hwwidget.h" line="342"/>
+-        <location filename="../src/hwwidget.h" line="349"/>
++        <location filename="../src/include/hwinfostorage.h" line="82"/>
++        <location filename="../src/include/hwinfostorage.h" line="100"/>
++        <location filename="../src/include/hwinfostorage.h" line="221"/>
++        <location filename="../src/include/hwinfostorage.h" line="228"/>
+         <source>Clock</source>
+         <translation>ساعات</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="209"/>
+-        <location filename="../src/hwwidget.h" line="227"/>
++        <location filename="../src/include/hwinfostorage.h" line="83"/>
++        <location filename="../src/include/hwinfostorage.h" line="101"/>
+         <source>Physics ID</source>
+         <translation>فيزيكا ID</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="210"/>
+-        <location filename="../src/hwwidget.h" line="228"/>
+-        <location filename="../src/hwwidget.h" line="240"/>
+-        <location filename="../src/hwwidget.h" line="250"/>
+-        <location filename="../src/hwwidget.h" line="410"/>
+-        <location filename="../src/hwwidget.h" line="420"/>
+-        <location filename="../src/hwwidget.h" line="432"/>
+-        <location filename="../src/hwwidget.h" line="441"/>
++        <location filename="../src/include/hwinfostorage.h" line="84"/>
++        <location filename="../src/include/hwinfostorage.h" line="102"/>
++        <location filename="../src/include/hwinfostorage.h" line="114"/>
++        <location filename="../src/include/hwinfostorage.h" line="124"/>
++        <location filename="../src/include/hwinfostorage.h" line="289"/>
++        <location filename="../src/include/hwinfostorage.h" line="299"/>
++        <location filename="../src/include/hwinfostorage.h" line="311"/>
++        <location filename="../src/include/hwinfostorage.h" line="320"/>
+         <source>Version</source>
+         <translation>نۇسقاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="211"/>
+-        <location filename="../src/hwwidget.h" line="229"/>
+-        <location filename="../src/hwwidget.h" line="263"/>
+-        <location filename="../src/hwwidget.h" line="276"/>
+-        <location filename="../src/hwwidget.h" line="343"/>
+-        <location filename="../src/hwwidget.h" line="350"/>
+-        <location filename="../src/hwwidget.h" line="358"/>
+-        <location filename="../src/hwwidget.h" line="364"/>
+-        <location filename="../src/hwwidget.h" line="371"/>
+-        <location filename="../src/hwwidget.h" line="377"/>
+-        <location filename="../src/hwwidget.h" line="381"/>
+-        <location filename="../src/hwwidget.h" line="394"/>
+-        <location filename="../src/hwwidget.h" line="411"/>
+-        <location filename="../src/hwwidget.h" line="421"/>
+-        <location filename="../src/hwwidget.h" line="431"/>
+-        <location filename="../src/hwwidget.h" line="440"/>
++        <location filename="../src/include/hwinfostorage.h" line="85"/>
++        <location filename="../src/include/hwinfostorage.h" line="103"/>
++        <location filename="../src/include/hwinfostorage.h" line="137"/>
++        <location filename="../src/include/hwinfostorage.h" line="151"/>
++        <location filename="../src/include/hwinfostorage.h" line="222"/>
++        <location filename="../src/include/hwinfostorage.h" line="229"/>
++        <location filename="../src/include/hwinfostorage.h" line="237"/>
++        <location filename="../src/include/hwinfostorage.h" line="243"/>
++        <location filename="../src/include/hwinfostorage.h" line="250"/>
++        <location filename="../src/include/hwinfostorage.h" line="256"/>
++        <location filename="../src/include/hwinfostorage.h" line="260"/>
++        <location filename="../src/include/hwinfostorage.h" line="273"/>
++        <location filename="../src/include/hwinfostorage.h" line="290"/>
++        <location filename="../src/include/hwinfostorage.h" line="300"/>
++        <location filename="../src/include/hwinfostorage.h" line="310"/>
++        <location filename="../src/include/hwinfostorage.h" line="319"/>
+         <source>Driver</source>
+         <translation>شوپەر</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="212"/>
+-        <location filename="../src/hwwidget.h" line="230"/>
++        <location filename="../src/include/hwinfostorage.h" line="86"/>
++        <location filename="../src/include/hwinfostorage.h" line="104"/>
+         <source>Communication Width</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="344"/>
+-        <location filename="../src/hwwidget.h" line="351"/>
++        <location filename="../src/include/hwinfostorage.h" line="166"/>
++        <location filename="../src/include/hwinfostorage.h" line="179"/>
++        <source>Mount Point</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/include/hwinfostorage.h" line="175"/>
++        <location filename="../src/include/hwinfostorage.h" line="188"/>
++        <source>Rota</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/include/hwinfostorage.h" line="223"/>
++        <location filename="../src/include/hwinfostorage.h" line="230"/>
+         <source>Width</source>
+         <translation>كەڭدىگى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="213"/>
+-        <location filename="../src/hwwidget.h" line="231"/>
++        <location filename="../src/include/hwinfostorage.h" line="87"/>
++        <location filename="../src/include/hwinfostorage.h" line="105"/>
+         <source>GDDR Size</source>
+         <translation>GDDR ۇلكەن-كشكەنە</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="214"/>
+-        <location filename="../src/hwwidget.h" line="232"/>
++        <location filename="../src/include/hwinfostorage.h" line="88"/>
++        <location filename="../src/include/hwinfostorage.h" line="106"/>
+         <source>EGL Version</source>
+         <translation>EGL نۇسقاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="215"/>
+-        <location filename="../src/hwwidget.h" line="233"/>
++        <location filename="../src/include/hwinfostorage.h" line="89"/>
++        <location filename="../src/include/hwinfostorage.h" line="107"/>
+         <source>EGL Api List</source>
+         <translation>EGL شيكى زات ٴدارى تٸزٸمدٸگٸ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="216"/>
+-        <location filename="../src/hwwidget.h" line="234"/>
++        <location filename="../src/include/hwinfostorage.h" line="90"/>
++        <location filename="../src/include/hwinfostorage.h" line="108"/>
+         <source>OpenGL Version</source>
+         <translation>OpenGL نۇسقاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="217"/>
+-        <location filename="../src/hwwidget.h" line="235"/>
++        <location filename="../src/include/hwinfostorage.h" line="91"/>
++        <location filename="../src/include/hwinfostorage.h" line="109"/>
+         <source>GLSL Version</source>
+         <translation>GLSL نۇسقاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="241"/>
+-        <location filename="../src/hwwidget.h" line="251"/>
++        <location filename="../src/include/hwinfostorage.h" line="115"/>
++        <location filename="../src/include/hwinfostorage.h" line="125"/>
+         <source>Chassis Handle</source>
+         <translation>تەڭدٸك تۇتاسۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="242"/>
+-        <location filename="../src/hwwidget.h" line="252"/>
++        <location filename="../src/include/hwinfostorage.h" line="116"/>
++        <location filename="../src/include/hwinfostorage.h" line="126"/>
+         <source>Bios Vendor</source>
+         <translation>BIOS ساۋداگەرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="243"/>
+-        <location filename="../src/hwwidget.h" line="253"/>
++        <location filename="../src/include/hwinfostorage.h" line="117"/>
++        <location filename="../src/include/hwinfostorage.h" line="127"/>
+         <source>Bios Version</source>
+         <translation>BIOS نۇسقاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="244"/>
+-        <location filename="../src/hwwidget.h" line="254"/>
++        <location filename="../src/include/hwinfostorage.h" line="118"/>
++        <location filename="../src/include/hwinfostorage.h" line="128"/>
+         <source>Chipser</source>
+         <translation>ٶزەك ماشيناسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="246"/>
+-        <location filename="../src/hwwidget.h" line="256"/>
++        <location filename="../src/include/hwinfostorage.h" line="120"/>
++        <location filename="../src/include/hwinfostorage.h" line="130"/>
+         <source>Publish Date</source>
+         <translation>جارناما ەتۋ ۋاقىتى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="262"/>
+-        <location filename="../src/hwwidget.h" line="275"/>
++        <location filename="../src/include/hwinfostorage.h" line="136"/>
++        <location filename="../src/include/hwinfostorage.h" line="150"/>
+         <source>Bus</source>
+         <translation>الەۋمەتتٸك قاتىناس</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="264"/>
+-        <location filename="../src/hwwidget.h" line="277"/>
++        <location filename="../src/include/hwinfostorage.h" line="138"/>
++        <location filename="../src/include/hwinfostorage.h" line="152"/>
+         <source>MAC Address</source>
+         <translation>MAC ٵدىرىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="266"/>
+-        <location filename="../src/hwwidget.h" line="279"/>
++        <location filename="../src/include/hwinfostorage.h" line="141"/>
++        <location filename="../src/include/hwinfostorage.h" line="155"/>
+         <source>IP Address</source>
+         <translation>IP ٵدىرىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="267"/>
+-        <location filename="../src/hwwidget.h" line="280"/>
++        <location filename="../src/include/hwinfostorage.h" line="142"/>
++        <location filename="../src/include/hwinfostorage.h" line="156"/>
+         <source>Net Musk</source>
+         <translation>تور بەت قالقا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="268"/>
+-        <location filename="../src/hwwidget.h" line="281"/>
++        <location filename="../src/include/hwinfostorage.h" line="143"/>
++        <location filename="../src/include/hwinfostorage.h" line="157"/>
+         <source>Send Bytes</source>
+         <translation>بايت جٸبەرۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="269"/>
+-        <location filename="../src/hwwidget.h" line="282"/>
++        <location filename="../src/include/hwinfostorage.h" line="144"/>
++        <location filename="../src/include/hwinfostorage.h" line="158"/>
+         <source>Recved Bytes</source>
+         <translation>قاتە قاتە بايت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="270"/>
+-        <location filename="../src/hwwidget.h" line="283"/>
++        <location filename="../src/include/hwinfostorage.h" line="145"/>
++        <location filename="../src/include/hwinfostorage.h" line="159"/>
+         <source>MTU</source>
+         <translation>MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="288"/>
+-        <location filename="../src/hwwidget.h" line="306"/>
++        <location filename="../src/include/hwinfostorage.h" line="164"/>
++        <location filename="../src/include/hwinfostorage.h" line="183"/>
+         <source>Vendor</source>
+         <translation>جاساۋ ساۋداگەرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="292"/>
++        <location filename="../src/include/hwinfostorage.h" line="168"/>
+         <source>Disk Name</source>
+         <translation>ديسكا ديسكا مى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="293"/>
+-        <location filename="../src/hwwidget.h" line="304"/>
++        <location filename="../src/include/hwinfostorage.h" line="169"/>
++        <location filename="../src/include/hwinfostorage.h" line="181"/>
+         <source>Frimwarever Version</source>
+         <translation>Frimwarever نۇسقاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="294"/>
+-        <location filename="../src/hwwidget.h" line="305"/>
++        <location filename="../src/include/hwinfostorage.h" line="170"/>
++        <location filename="../src/include/hwinfostorage.h" line="182"/>
+         <source>Disk Type</source>
+         <translation>ديسكا ديسكا تيپى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="295"/>
+-        <location filename="../src/hwwidget.h" line="307"/>
++        <location filename="../src/include/hwinfostorage.h" line="171"/>
++        <location filename="../src/include/hwinfostorage.h" line="184"/>
+         <source>Main Disk</source>
+         <translation>نەگٸزگٸ ديسكا ديسكا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="297"/>
+-        <location filename="../src/hwwidget.h" line="309"/>
++        <location filename="../src/include/hwinfostorage.h" line="173"/>
++        <location filename="../src/include/hwinfostorage.h" line="186"/>
+         <source>UFS</source>
+         <translation>UFS</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="298"/>
+-        <location filename="../src/hwwidget.h" line="310"/>
++        <location filename="../src/include/hwinfostorage.h" line="174"/>
++        <location filename="../src/include/hwinfostorage.h" line="187"/>
+         <source>UFS Revision</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="317"/>
+-        <location filename="../src/hwwidget.h" line="329"/>
++        <location filename="../src/include/hwinfostorage.h" line="196"/>
++        <location filename="../src/include/hwinfostorage.h" line="208"/>
+         <source>Monitor Size</source>
+         <translation>كۇزەتۋگە ولشەمٸ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="318"/>
+-        <location filename="../src/hwwidget.h" line="330"/>
++        <location filename="../src/include/hwinfostorage.h" line="197"/>
++        <location filename="../src/include/hwinfostorage.h" line="209"/>
+         <source>Monitor Ratio</source>
+         <translation>مەكەمە ەتۋ قاتىناسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="319"/>
+-        <location filename="../src/hwwidget.h" line="331"/>
++        <location filename="../src/include/hwinfostorage.h" line="198"/>
++        <location filename="../src/include/hwinfostorage.h" line="210"/>
+         <source>Resolution</source>
+         <translation>قارار</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="320"/>
+-        <location filename="../src/hwwidget.h" line="332"/>
++        <location filename="../src/include/hwinfostorage.h" line="199"/>
++        <location filename="../src/include/hwinfostorage.h" line="211"/>
+         <source>Max Resolution</source>
+         <translation>ەڭ جوعارعى پارٸق تىعنداۋ قاتىناسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="321"/>
+-        <location filename="../src/hwwidget.h" line="333"/>
++        <location filename="../src/include/hwinfostorage.h" line="200"/>
++        <location filename="../src/include/hwinfostorage.h" line="212"/>
+         <source>Main Monitor</source>
+         <translation>نەگٸزگٸ كلاس باستىعى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="335"/>
+-        <location filename="../src/hwwidget.h" line="296"/>
+-        <location filename="../src/hwwidget.h" line="308"/>
+-        <location filename="../src/hwwidget.h" line="322"/>
+-        <location filename="../src/hwwidget.h" line="334"/>
+-        <location filename="../src/hwwidget.h" line="357"/>
+-        <location filename="../src/hwwidget.h" line="363"/>
+-        <location filename="../src/hwwidget.h" line="370"/>
+-        <location filename="../src/hwwidget.h" line="376"/>
+-        <location filename="../src/hwwidget.h" line="430"/>
+-        <location filename="../src/hwwidget.h" line="439"/>
++        <location filename="../src/hwwidget.cpp" line="670"/>
++        <location filename="../src/include/hwinfostorage.h" line="172"/>
++        <location filename="../src/include/hwinfostorage.h" line="185"/>
++        <location filename="../src/include/hwinfostorage.h" line="201"/>
++        <location filename="../src/include/hwinfostorage.h" line="213"/>
++        <location filename="../src/include/hwinfostorage.h" line="236"/>
++        <location filename="../src/include/hwinfostorage.h" line="242"/>
++        <location filename="../src/include/hwinfostorage.h" line="249"/>
++        <location filename="../src/include/hwinfostorage.h" line="255"/>
++        <location filename="../src/include/hwinfostorage.h" line="309"/>
++        <location filename="../src/include/hwinfostorage.h" line="318"/>
+         <source>Interface</source>
+         <translation>كورىنبە جۇز</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="323"/>
+-        <location filename="../src/hwwidget.h" line="335"/>
++        <location filename="../src/include/hwinfostorage.h" line="202"/>
++        <location filename="../src/include/hwinfostorage.h" line="214"/>
+         <source>Visible Area</source>
+         <translation>كورگەلى بولاتٸن رايون</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="324"/>
+-        <location filename="../src/hwwidget.h" line="336"/>
++        <location filename="../src/include/hwinfostorage.h" line="203"/>
++        <location filename="../src/include/hwinfostorage.h" line="215"/>
+         <source>Gamma</source>
+         <translation>گاما</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="341"/>
+-        <location filename="../src/hwwidget.h" line="348"/>
++        <location filename="../src/include/hwinfostorage.h" line="220"/>
++        <location filename="../src/include/hwinfostorage.h" line="227"/>
+         <source>Bus Address</source>
+         <translation>الەۋمەتتٸك قاتىناس ٵدىرىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="382"/>
+-        <location filename="../src/hwwidget.h" line="395"/>
++        <location filename="../src/include/hwinfostorage.h" line="261"/>
++        <location filename="../src/include/hwinfostorage.h" line="274"/>
+         <source>Driver Version</source>
+         <translation>شوپەر نۇسقاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="474"/>
+-        <location filename="../src/hwwidget.h" line="383"/>
+-        <location filename="../src/hwwidget.h" line="396"/>
++        <location filename="../src/hwwidget.cpp" line="1000"/>
++        <location filename="../src/include/hwinfostorage.h" line="262"/>
++        <location filename="../src/include/hwinfostorage.h" line="275"/>
+         <source>Address</source>
+         <translation>ٵدىرىس</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="384"/>
+-        <location filename="../src/hwwidget.h" line="397"/>
++        <location filename="../src/include/hwinfostorage.h" line="263"/>
++        <location filename="../src/include/hwinfostorage.h" line="276"/>
+         <source>Link Mode</source>
+         <translation>جالعانۋ فورماسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="385"/>
+-        <location filename="../src/hwwidget.h" line="398"/>
++        <location filename="../src/include/hwinfostorage.h" line="264"/>
++        <location filename="../src/include/hwinfostorage.h" line="277"/>
+         <source>Link Policy</source>
+         <translation>جالعانۋ ساياساتى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="387"/>
+-        <location filename="../src/hwwidget.h" line="401"/>
++        <location filename="../src/include/hwinfostorage.h" line="266"/>
++        <location filename="../src/include/hwinfostorage.h" line="280"/>
+         <source>ACL MTU</source>
+         <translation>ACL MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="390"/>
+-        <location filename="../src/hwwidget.h" line="399"/>
++        <location filename="../src/include/hwinfostorage.h" line="269"/>
++        <location filename="../src/include/hwinfostorage.h" line="278"/>
+         <source>Packe Type</source>
+         <translation>پاك تيپى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="386"/>
+-        <location filename="../src/hwwidget.h" line="400"/>
++        <location filename="../src/include/hwinfostorage.h" line="265"/>
++        <location filename="../src/include/hwinfostorage.h" line="279"/>
+         <source>SCO MTU</source>
+         <translation>SCO MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="389"/>
+-        <location filename="../src/hwwidget.h" line="403"/>
++        <location filename="../src/include/hwinfostorage.h" line="268"/>
++        <location filename="../src/include/hwinfostorage.h" line="282"/>
+         <source>Features</source>
+         <translation>ەرەكشەلگٸ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="408"/>
+-        <location filename="../src/hwwidget.h" line="418"/>
++        <location filename="../src/include/hwinfostorage.h" line="287"/>
++        <location filename="../src/include/hwinfostorage.h" line="297"/>
+         <source>Name</source>
+         <translation>ات</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="412"/>
+-        <location filename="../src/hwwidget.h" line="422"/>
++        <location filename="../src/include/hwinfostorage.h" line="291"/>
++        <location filename="../src/include/hwinfostorage.h" line="301"/>
+         <source>Device Number</source>
+         <translation>اسباب نومەرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="456"/>
+-        <location filename="../src/hwwidget.h" line="466"/>
++        <location filename="../src/include/hwinfostorage.h" line="335"/>
++        <location filename="../src/include/hwinfostorage.h" line="345"/>
+         <source>State</source>
+         <translation>مەملەكەت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="457"/>
+-        <location filename="../src/hwwidget.h" line="467"/>
++        <location filename="../src/include/hwinfostorage.h" line="336"/>
++        <location filename="../src/include/hwinfostorage.h" line="346"/>
+         <source>Energy</source>
+         <translation>ەنەرگيا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="458"/>
+-        <location filename="../src/hwwidget.h" line="468"/>
++        <location filename="../src/include/hwinfostorage.h" line="337"/>
++        <location filename="../src/include/hwinfostorage.h" line="347"/>
+         <source>Used Times</source>
+         <translation>قولداناتىن ۋاقىتتار</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="459"/>
+-        <location filename="../src/hwwidget.h" line="469"/>
++        <location filename="../src/include/hwinfostorage.h" line="338"/>
++        <location filename="../src/include/hwinfostorage.h" line="348"/>
+         <source>Energy Full</source>
+         <translation>ەنەرگيا تولٸق</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="460"/>
+-        <location filename="../src/hwwidget.h" line="470"/>
++        <location filename="../src/include/hwinfostorage.h" line="339"/>
++        <location filename="../src/include/hwinfostorage.h" line="349"/>
+         <source>Time To Empty</source>
+         <translation>قالدىق ۋاقىت ئېنېرگىيەسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="461"/>
+-        <location filename="../src/hwwidget.h" line="471"/>
++        <location filename="../src/include/hwinfostorage.h" line="340"/>
++        <location filename="../src/include/hwinfostorage.h" line="350"/>
+         <source>Percentage</source>
+         <translation>پٸراسەنت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="40"/>
++        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="57"/>
+         <source>Wireless</source>
+         <translation>سىمسىز تور</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="42"/>
++        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="59"/>
+         <source>Wired</source>
+         <translation>تارلاشقان</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="87"/>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="121"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="93"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="103"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="150"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="155"/>
+         <source>This CPU model does not support frequency display function</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/device-controller/translations/kylin-os-manager-device-controller_ky.ts b/plugins/device-controller/translations/kylin-os-manager-device-controller_ky.ts
+index ef9da7c..6e2ef18 100644
+--- a/plugins/device-controller/translations/kylin-os-manager-device-controller_ky.ts
++++ b/plugins/device-controller/translations/kylin-os-manager-device-controller_ky.ts
+@@ -214,92 +214,92 @@
+ <context>
+     <name>DriverInstallWidget</name>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
+         <source>Installable Drivers</source>
+         <translation>ورنوتۇۇعا بولوتۇرعان شوپۇرلار</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>)</source>
+         <translation></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>(</source>
+         <translation></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+         <source>One-click installation</source>
+         <translation>بىر  كۇنۇپكا  مەنەن  قۇراشتىرۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
+         <source>Upgradable Drivers</source>
+         <translation>چەگىن  ۅستۉرگۅلۉ بولوتۇرعان شوپۇرلار</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+         <source>One-click upgrade</source>
+         <translation>بىر  كۇنۇپكا  چەگىن  ۅستۉرۉۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
+         <source>Installed Drivers</source>
+         <translation>ورنوتۇلعان شوپۇرلۇق</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>Unrecognized Device</source>
+         <translation>ايىرما  مويۇندوو اتقارىلباعان  قۇرۇلما</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1200"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1248"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1213"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1261"/>
+         <source>Uninstalling drivers. Please wait for the uninstallation to complete before clicking again.</source>
+         <translation>شوپۇرنى  قۇراشتىرۇۇ.  قۇراشتىرۇۇنى بۉتۉرۉلگۅندۅن  كىيىن اندان  داعى چەگىپ باعىڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1202"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1250"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1215"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1263"/>
+         <source>Uninstall Failed</source>
+         <translation>قۇراشتىرۇۇ جەڭىلۉۉ بولدۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1205"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1253"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1218"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1266"/>
+         <source>Installing drivers. Please wait for the installation to complete before clicking again.</source>
+         <translation>شوپۇرنى ورنوتۇ.  قۇراشتىرۇۇ بۉتكۅندۅن كىيىن داعى چەگىپ باعىڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1065"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1206"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1254"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1078"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1219"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1267"/>
+         <source>Install Failed</source>
+         <translation>قۇراشتىرۇۇ جەڭىلۉۉ بولدۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1069"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1082"/>
+         <source>Update</source>
+         <translation>جاڭىلوو</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1076"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1089"/>
+         <source>Install</source>
+         <translation>قۇراشتىرۇۇ</translation>
+     </message>
+@@ -307,65 +307,70 @@
+ <context>
+     <name>HardWareInfoWidget</name>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="113"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="121"/>
+         <source>Computer Basic Information</source>
+         <translation>كومپىيۇتەر نەگىزگى  ۇچۇرۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="117"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="420"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="125"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="462"/>
+         <source>Host Name</source>
+         <translation>الپارۇۇچۇ  ناامى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="121"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="421"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="129"/>
++        <source>Operation System Name</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/hardwareinfowidget.cpp" line="133"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="463"/>
+         <source>Operation System Version</source>
+         <translation>ماشقۇلدانۇۇ  ساامالىعى  ۉلگۉسۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="125"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="422"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="137"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="464"/>
+         <source>Kernel Version</source>
+         <translation>يادىرو ۉلگۉسۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="129"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="423"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="141"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="465"/>
+         <source>Kernel Architecture</source>
+         <translation>يادىرو قۇرۇلماسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="133"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="424"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="145"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="466"/>
+         <source>System Bits</source>
+         <translation>ساامالىق  بىت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="137"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="425"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="149"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="467"/>
+         <source>Manufacturer</source>
+         <translation>زاۋوت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="141"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="153"/>
+         <source>Version</source>
+         <translation>ۉلگۉسۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="145"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="426"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="157"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="468"/>
+         <source>Model</source>
+         <translation>مودەل</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="149"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="427"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="161"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="469"/>
+         <source>Serial</source>
+         <translation>زاتتا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="334"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="375"/>
+         <source>Hardware Display</source>
+         <translation>Hardware Display</translation>
+     </message>
+@@ -386,7 +391,7 @@
+ <context>
+     <name>HardwareInfoGetter</name>
+     <message>
+-        <location filename="../src/hardwareinfogetter.cpp" line="869"/>
++        <location filename="../src/hardwareinfogetter.cpp" line="979"/>
+         <source> inch</source>
+         <translation type="unfinished"></translation>
+     </message>
+@@ -394,112 +399,158 @@
+ <context>
+     <name>HwWidget</name>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="53"/>
++        <location filename="../src/hwwidget.cpp" line="88"/>
+         <source>Disable</source>
+         <translation>توقتوتۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="72"/>
++        <location filename="../src/hwwidget.cpp" line="116"/>
+         <source>Export To Clipboard</source>
+         <translation>ئېكسپورت اتقارىلىش  تاقتاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="73"/>
++        <location filename="../src/hwwidget.cpp" line="117"/>
+         <source>Activate</source>
+         <translation>قوزعوتۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="74"/>
++        <location filename="../src/hwwidget.cpp" line="118"/>
+         <source>Deactive</source>
+         <translation>اكتىپ بولبوستۇق</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="84"/>
+-        <location filename="../src/hwwidget.cpp" line="87"/>
++        <location filename="../src/hwwidget.cpp" line="128"/>
++        <location filename="../src/hwwidget.cpp" line="131"/>
+         <source>CPU</source>
+         <translation>CPU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="116"/>
+-        <location filename="../src/hwwidget.cpp" line="120"/>
++        <location filename="../src/hwwidget.cpp" line="208"/>
++        <location filename="../src/hwwidget.cpp" line="212"/>
++        <location filename="../src/hwwidget.cpp" line="1330"/>
++        <location filename="../src/hwwidget.cpp" line="1333"/>
+         <source>Memory</source>
+         <translation>ئەسلىمە</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="148"/>
+-        <location filename="../src/hwwidget.cpp" line="152"/>
++        <location filename="../src/hwwidget.cpp" line="147"/>
++        <location filename="../src/hwwidget.cpp" line="228"/>
++        <location filename="../src/hwwidget.cpp" line="284"/>
++        <location filename="../src/hwwidget.cpp" line="287"/>
++        <location filename="../src/hwwidget.cpp" line="304"/>
++        <location filename="../src/hwwidget.cpp" line="1355"/>
++        <location filename="../src/hwwidget.cpp" line="1358"/>
+         <source>Graphic Card</source>
+         <translation>سۉرۅت كارتوچكاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="181"/>
+-        <location filename="../src/hwwidget.cpp" line="184"/>
++        <location filename="../src/hwwidget.cpp" line="91"/>
++        <source>This device can be disabled/enabled</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/hwwidget.cpp" line="358"/>
++        <location filename="../src/hwwidget.cpp" line="361"/>
++        <location filename="../src/hwwidget.cpp" line="378"/>
+         <source>Mother Board</source>
+         <translation>نەگىزگى  تاقتا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="206"/>
+-        <location filename="../src/hwwidget.cpp" line="212"/>
++        <location filename="../src/hwwidget.cpp" line="429"/>
++        <location filename="../src/hwwidget.cpp" line="435"/>
++        <location filename="../src/hwwidget.cpp" line="453"/>
++        <location filename="../src/hwwidget.cpp" line="1381"/>
++        <location filename="../src/hwwidget.cpp" line="1384"/>
+         <source>Network Card</source>
+         <translation>تور  كارتوچكاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="289"/>
+-        <location filename="../src/hwwidget.cpp" line="293"/>
++        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="556"/>
++        <location filename="../src/hwwidget.cpp" line="572"/>
++        <location filename="../src/hwwidget.cpp" line="640"/>
++        <location filename="../src/hwwidget.cpp" line="744"/>
++        <location filename="../src/hwwidget.cpp" line="1407"/>
++        <location filename="../src/hwwidget.cpp" line="1410"/>
+         <source>Disk</source>
+         <translation>قاتۇۇ دىسكا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="315"/>
+-        <location filename="../src/hwwidget.cpp" line="319"/>
++        <location filename="../src/hwwidget.cpp" line="620"/>
++        <location filename="../src/hwwidget.cpp" line="624"/>
++        <location filename="../src/hwwidget.cpp" line="1432"/>
++        <location filename="../src/hwwidget.cpp" line="1435"/>
+         <source>Monitor</source>
+         <translation>سىنىپ باشچىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="373"/>
+-        <location filename="../src/hwwidget.cpp" line="376"/>
++        <location filename="../src/hwwidget.cpp" line="723"/>
++        <location filename="../src/hwwidget.cpp" line="726"/>
++        <location filename="../src/hwwidget.cpp" line="1458"/>
++        <location filename="../src/hwwidget.cpp" line="1461"/>
+         <source>Sound Card</source>
+         <translation>دووش كارتوچكاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="410"/>
+-        <location filename="../src/hwwidget.cpp" line="414"/>
++        <location filename="../src/hwwidget.cpp" line="824"/>
++        <location filename="../src/hwwidget.cpp" line="828"/>
++        <location filename="../src/hwwidget.cpp" line="844"/>
++        <location filename="../src/hwwidget.cpp" line="1484"/>
++        <location filename="../src/hwwidget.cpp" line="1487"/>
+         <source>Keyboard</source>
+         <translation>كۇنۇپكا  تاقتاسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="435"/>
+-        <location filename="../src/hwwidget.cpp" line="439"/>
++        <location filename="../src/hwwidget.cpp" line="890"/>
++        <location filename="../src/hwwidget.cpp" line="894"/>
++        <location filename="../src/hwwidget.cpp" line="910"/>
++        <location filename="../src/hwwidget.cpp" line="1509"/>
++        <location filename="../src/hwwidget.cpp" line="1512"/>
+         <source>Mouse</source>
+         <translation>ماۇس</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="461"/>
+-        <location filename="../src/hwwidget.cpp" line="466"/>
++        <location filename="../src/hwwidget.cpp" line="959"/>
++        <location filename="../src/hwwidget.cpp" line="962"/>
++        <location filename="../src/hwwidget.cpp" line="980"/>
++        <location filename="../src/hwwidget.cpp" line="1534"/>
++        <location filename="../src/hwwidget.cpp" line="1537"/>
+         <source>Bluetooth</source>
+         <translation>كۅك تىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="506"/>
+-        <location filename="../src/hwwidget.cpp" line="510"/>
++        <location filename="../src/hwwidget.cpp" line="1049"/>
++        <location filename="../src/hwwidget.cpp" line="1053"/>
++        <location filename="../src/hwwidget.cpp" line="1069"/>
++        <location filename="../src/hwwidget.cpp" line="1559"/>
++        <location filename="../src/hwwidget.cpp" line="1562"/>
+         <source>CD</source>
+         <translation>دىسكا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="531"/>
+-        <location filename="../src/hwwidget.cpp" line="534"/>
++        <location filename="../src/hwwidget.cpp" line="1116"/>
++        <location filename="../src/hwwidget.cpp" line="1119"/>
++        <location filename="../src/hwwidget.cpp" line="1136"/>
++        <location filename="../src/hwwidget.cpp" line="1584"/>
++        <location filename="../src/hwwidget.cpp" line="1587"/>
+         <source>Battery</source>
+         <translation>دىسكا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="565"/>
+-        <location filename="../src/hwwidget.cpp" line="569"/>
++        <location filename="../src/hwwidget.cpp" line="1192"/>
++        <location filename="../src/hwwidget.cpp" line="1196"/>
++        <location filename="../src/hwwidget.cpp" line="1212"/>
++        <location filename="../src/hwwidget.cpp" line="1609"/>
++        <location filename="../src/hwwidget.cpp" line="1612"/>
+         <source>Fan</source>
+         <translation>مەستانىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="590"/>
+-        <location filename="../src/hwwidget.cpp" line="593"/>
++        <location filename="../src/hwwidget.cpp" line="1259"/>
++        <location filename="../src/hwwidget.cpp" line="1262"/>
++        <location filename="../src/hwwidget.cpp" line="1279"/>
++        <location filename="../src/hwwidget.cpp" line="1634"/>
++        <location filename="../src/hwwidget.cpp" line="1637"/>
+         <source>Camera</source>
+         <translation>مەستانىسى</translation>
+     </message>
+@@ -520,76 +571,76 @@
+         <translation>شايمان باشقارعىچ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/diskinfo.cpp" line="37"/>
++        <location filename="../src/hardwareinfo/diskinfo.cpp" line="39"/>
+         <location filename="../src/hardwareinfo/monitorinfo.cpp" line="33"/>
+-        <location filename="../src/hwwidget.cpp" line="358"/>
++        <location filename="../src/hwwidget.cpp" line="695"/>
+         <source>Yes</source>
+         <translation>وشوندوي</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/diskinfo.cpp" line="35"/>
++        <location filename="../src/hardwareinfo/diskinfo.cpp" line="37"/>
+         <location filename="../src/hardwareinfo/monitorinfo.cpp" line="35"/>
+-        <location filename="../src/hwwidget.cpp" line="360"/>
++        <location filename="../src/hwwidget.cpp" line="697"/>
+         <source>No</source>
+         <translation>جوق</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="103"/>
++        <location filename="../src/hwwidget.cpp" line="177"/>
+         <source>CPU Current Frequency</source>
+         <translation>CPU اعىم  جىشتىق القاعى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="103"/>
++        <location filename="../src/hwwidget.cpp" line="177"/>
+         <source>CPU Usage Rate</source>
+         <translation>CPU ىشتەتىش  قاتىشى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="104"/>
++        <location filename="../src/hwwidget.cpp" line="178"/>
+         <source>CPU Temperature</source>
+         <translation>CPU تېمپېراتۇرىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="136"/>
++        <location filename="../src/hwwidget.cpp" line="258"/>
+         <source>Memory Usage</source>
+         <translation>ىچكى  ساقتاعىچ  ىشتەتىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="169"/>
++        <location filename="../src/hwwidget.cpp" line="334"/>
+         <source>GDDR Size</source>
+         <translation>GDDR چوڭ-كىچىك</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="344"/>
++        <location filename="../src/hwwidget.cpp" line="680"/>
+         <source>Resolution</source>
+         <translation>بەكىم</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="354"/>
++        <location filename="../src/hwwidget.cpp" line="690"/>
+         <source>Main Monitor</source>
+         <translation>نەگىزگى  سىنىپ باشچىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="551"/>
++        <location filename="../src/hwwidget.cpp" line="1166"/>
+         <source>Energy</source>
+         <translation>ەنەرگىيا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="551"/>
++        <location filename="../src/hwwidget.cpp" line="1166"/>
+         <source>Time To Empty</source>
+         <translation>قالدىق ۇباقىت ئېنېرگىيەسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="1167"/>
+         <source>Percentage</source>
+         <translation>پىروسەنت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="1167"/>
+         <source>State</source>
+         <translation>ماملەكەت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="194"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="210"/>
+         <source>This CPU model does not support temperature display function</source>
+         <translation>بۇل CPU نۇسقا ، قالپ تېمپېراتۇرا كۅرسۅتۉۉ  قۇرباتىن  قولدوبويت</translation>
+     </message>
+@@ -611,607 +662,621 @@
+         <translation>ساندۇۇ بايانداما  قازىناعى  قاتاالىق</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="144"/>
+-        <location filename="../src/hwwidget.h" line="159"/>
+-        <location filename="../src/hwwidget.h" line="179"/>
+-        <location filename="../src/hwwidget.h" line="192"/>
+-        <location filename="../src/hwwidget.h" line="202"/>
+-        <location filename="../src/hwwidget.h" line="220"/>
+-        <location filename="../src/hwwidget.h" line="239"/>
+-        <location filename="../src/hwwidget.h" line="249"/>
+-        <location filename="../src/hwwidget.h" line="260"/>
+-        <location filename="../src/hwwidget.h" line="273"/>
+-        <location filename="../src/hwwidget.h" line="315"/>
+-        <location filename="../src/hwwidget.h" line="327"/>
+-        <location filename="../src/hwwidget.h" line="340"/>
+-        <location filename="../src/hwwidget.h" line="347"/>
+-        <location filename="../src/hwwidget.h" line="355"/>
+-        <location filename="../src/hwwidget.h" line="361"/>
+-        <location filename="../src/hwwidget.h" line="368"/>
+-        <location filename="../src/hwwidget.h" line="374"/>
+-        <location filename="../src/hwwidget.h" line="380"/>
+-        <location filename="../src/hwwidget.h" line="393"/>
+-        <location filename="../src/hwwidget.h" line="407"/>
+-        <location filename="../src/hwwidget.h" line="417"/>
+-        <location filename="../src/hwwidget.h" line="428"/>
+-        <location filename="../src/hwwidget.h" line="437"/>
+-        <location filename="../src/hwwidget.h" line="454"/>
+-        <location filename="../src/hwwidget.h" line="464"/>
++        <location filename="../src/include/hwinfostorage.h" line="18"/>
++        <location filename="../src/include/hwinfostorage.h" line="33"/>
++        <location filename="../src/include/hwinfostorage.h" line="53"/>
++        <location filename="../src/include/hwinfostorage.h" line="66"/>
++        <location filename="../src/include/hwinfostorage.h" line="76"/>
++        <location filename="../src/include/hwinfostorage.h" line="94"/>
++        <location filename="../src/include/hwinfostorage.h" line="113"/>
++        <location filename="../src/include/hwinfostorage.h" line="123"/>
++        <location filename="../src/include/hwinfostorage.h" line="134"/>
++        <location filename="../src/include/hwinfostorage.h" line="148"/>
++        <location filename="../src/include/hwinfostorage.h" line="194"/>
++        <location filename="../src/include/hwinfostorage.h" line="206"/>
++        <location filename="../src/include/hwinfostorage.h" line="219"/>
++        <location filename="../src/include/hwinfostorage.h" line="226"/>
++        <location filename="../src/include/hwinfostorage.h" line="234"/>
++        <location filename="../src/include/hwinfostorage.h" line="240"/>
++        <location filename="../src/include/hwinfostorage.h" line="247"/>
++        <location filename="../src/include/hwinfostorage.h" line="253"/>
++        <location filename="../src/include/hwinfostorage.h" line="259"/>
++        <location filename="../src/include/hwinfostorage.h" line="272"/>
++        <location filename="../src/include/hwinfostorage.h" line="286"/>
++        <location filename="../src/include/hwinfostorage.h" line="296"/>
++        <location filename="../src/include/hwinfostorage.h" line="307"/>
++        <location filename="../src/include/hwinfostorage.h" line="316"/>
++        <location filename="../src/include/hwinfostorage.h" line="333"/>
++        <location filename="../src/include/hwinfostorage.h" line="343"/>
+         <source>Manufacturer</source>
+         <translation>زاۋوت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="145"/>
+-        <location filename="../src/hwwidget.h" line="160"/>
++        <location filename="../src/include/hwinfostorage.h" line="19"/>
++        <location filename="../src/include/hwinfostorage.h" line="34"/>
+         <source>Cores</source>
+         <translation>يادىرو</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="146"/>
+-        <location filename="../src/hwwidget.h" line="161"/>
++        <location filename="../src/include/hwinfostorage.h" line="20"/>
++        <location filename="../src/include/hwinfostorage.h" line="35"/>
+         <source>Online Cores</source>
+         <translation>توردو يادىرو</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="147"/>
+-        <location filename="../src/hwwidget.h" line="162"/>
++        <location filename="../src/include/hwinfostorage.h" line="21"/>
++        <location filename="../src/include/hwinfostorage.h" line="36"/>
+         <source>Thread Per Cores</source>
+         <translation>ار بىر  بىر  يادىرو 0</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="148"/>
+-        <location filename="../src/hwwidget.h" line="163"/>
++        <location filename="../src/include/hwinfostorage.h" line="22"/>
++        <location filename="../src/include/hwinfostorage.h" line="37"/>
+         <source>MAX MHz</source>
+         <translation>ەڭ جوعورۇ MHz</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="149"/>
+-        <location filename="../src/hwwidget.h" line="164"/>
++        <location filename="../src/include/hwinfostorage.h" line="23"/>
++        <location filename="../src/include/hwinfostorage.h" line="38"/>
+         <source>L1d Cache</source>
+         <translation>L1D بۇففىردىك ساقتاعىچ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="150"/>
+-        <location filename="../src/hwwidget.h" line="165"/>
++        <location filename="../src/include/hwinfostorage.h" line="24"/>
++        <location filename="../src/include/hwinfostorage.h" line="39"/>
+         <source>L1i Cache</source>
+         <translation>L1i بۇففىردىك ساقتاعىچ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="151"/>
+-        <location filename="../src/hwwidget.h" line="166"/>
++        <location filename="../src/include/hwinfostorage.h" line="25"/>
++        <location filename="../src/include/hwinfostorage.h" line="40"/>
+         <source>L2 Cache</source>
+         <translation>2 چەكتۉۉ بۇففىردىك ساقتاعىچ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="152"/>
+-        <location filename="../src/hwwidget.h" line="167"/>
++        <location filename="../src/include/hwinfostorage.h" line="26"/>
++        <location filename="../src/include/hwinfostorage.h" line="41"/>
+         <source>L3 Cache</source>
+         <translation>L3 بۇففىردىك ساقتاعىچ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="153"/>
+-        <location filename="../src/hwwidget.h" line="168"/>
++        <location filename="../src/include/hwinfostorage.h" line="27"/>
++        <location filename="../src/include/hwinfostorage.h" line="42"/>
+         <source>L4 Cache</source>
+         <translation type="unfinished">L3 кэш {4 ?}</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="154"/>
+-        <location filename="../src/hwwidget.h" line="169"/>
++        <location filename="../src/include/hwinfostorage.h" line="28"/>
++        <location filename="../src/include/hwinfostorage.h" line="43"/>
+         <source>CPU Current Frequency</source>
+         <translation>CPU اعىم  جىشتىق القاعى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="155"/>
+-        <location filename="../src/hwwidget.h" line="170"/>
++        <location filename="../src/include/hwinfostorage.h" line="29"/>
++        <location filename="../src/include/hwinfostorage.h" line="44"/>
+         <source>CPU Usage Rate</source>
+         <translation>CPU ىشتەتىش  قاتىشى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="156"/>
+-        <location filename="../src/hwwidget.h" line="171"/>
++        <location filename="../src/include/hwinfostorage.h" line="30"/>
++        <location filename="../src/include/hwinfostorage.h" line="45"/>
+         <source>CPU Temperature</source>
+         <translation>CPU تېمپېراتۇرىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="175"/>
+-        <location filename="../src/hwwidget.h" line="188"/>
++        <location filename="../src/include/hwinfostorage.h" line="49"/>
++        <location filename="../src/include/hwinfostorage.h" line="62"/>
+         <source>Bank Locator</source>
+         <translation>بانكە ورۇن  بەلگىلۅۅ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="176"/>
+-        <location filename="../src/hwwidget.h" line="189"/>
++        <location filename="../src/include/hwinfostorage.h" line="50"/>
++        <location filename="../src/include/hwinfostorage.h" line="63"/>
+         <source>Total Width</source>
+         <translation>بااردىعى  گەڭدىگى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="177"/>
+-        <location filename="../src/hwwidget.h" line="190"/>
+-        <location filename="../src/hwwidget.h" line="290"/>
+-        <location filename="../src/hwwidget.h" line="302"/>
++        <location filename="../src/include/hwinfostorage.h" line="51"/>
++        <location filename="../src/include/hwinfostorage.h" line="64"/>
++        <location filename="../src/include/hwinfostorage.h" line="165"/>
++        <location filename="../src/include/hwinfostorage.h" line="178"/>
+         <source>Size</source>
+         <translation>چوڭ-كىچىك</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="178"/>
+-        <location filename="../src/hwwidget.h" line="191"/>
+-        <location filename="../src/hwwidget.h" line="245"/>
+-        <location filename="../src/hwwidget.h" line="255"/>
+-        <location filename="../src/hwwidget.h" line="291"/>
+-        <location filename="../src/hwwidget.h" line="303"/>
+-        <location filename="../src/hwwidget.h" line="414"/>
+-        <location filename="../src/hwwidget.h" line="424"/>
+-        <location filename="../src/hwwidget.h" line="455"/>
+-        <location filename="../src/hwwidget.h" line="465"/>
++        <location filename="../src/include/hwinfostorage.h" line="52"/>
++        <location filename="../src/include/hwinfostorage.h" line="65"/>
++        <location filename="../src/include/hwinfostorage.h" line="119"/>
++        <location filename="../src/include/hwinfostorage.h" line="129"/>
++        <location filename="../src/include/hwinfostorage.h" line="167"/>
++        <location filename="../src/include/hwinfostorage.h" line="180"/>
++        <location filename="../src/include/hwinfostorage.h" line="293"/>
++        <location filename="../src/include/hwinfostorage.h" line="303"/>
++        <location filename="../src/include/hwinfostorage.h" line="334"/>
++        <location filename="../src/include/hwinfostorage.h" line="344"/>
+         <source>Serial Number</source>
+         <translation>قاتار نومۇرۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="180"/>
+-        <location filename="../src/hwwidget.h" line="193"/>
++        <location filename="../src/include/hwinfostorage.h" line="54"/>
++        <location filename="../src/include/hwinfostorage.h" line="67"/>
+         <source>Data Width</source>
+         <translation>ساندۇۇ بايانداما  گەڭدىگى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="181"/>
+-        <location filename="../src/hwwidget.h" line="194"/>
+-        <location filename="../src/hwwidget.h" line="265"/>
+-        <location filename="../src/hwwidget.h" line="278"/>
++        <location filename="../src/include/hwinfostorage.h" line="55"/>
++        <location filename="../src/include/hwinfostorage.h" line="68"/>
++        <location filename="../src/include/hwinfostorage.h" line="139"/>
++        <location filename="../src/include/hwinfostorage.h" line="153"/>
+         <source>Type</source>
+         <translation>تۉرۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="182"/>
+-        <location filename="../src/hwwidget.h" line="195"/>
+-        <location filename="../src/hwwidget.h" line="388"/>
+-        <location filename="../src/hwwidget.h" line="402"/>
+-        <location filename="../src/hwwidget.h" line="413"/>
+-        <location filename="../src/hwwidget.h" line="423"/>
+-        <location filename="../src/hwwidget.h" line="434"/>
+-        <location filename="../src/hwwidget.h" line="443"/>
+-        <location filename="../src/hwwidget.h" line="447"/>
+-        <location filename="../src/hwwidget.h" line="450"/>
++        <location filename="../src/include/hwinfostorage.h" line="56"/>
++        <location filename="../src/include/hwinfostorage.h" line="69"/>
++        <location filename="../src/include/hwinfostorage.h" line="140"/>
++        <location filename="../src/include/hwinfostorage.h" line="154"/>
++        <location filename="../src/include/hwinfostorage.h" line="267"/>
++        <location filename="../src/include/hwinfostorage.h" line="281"/>
++        <location filename="../src/include/hwinfostorage.h" line="292"/>
++        <location filename="../src/include/hwinfostorage.h" line="302"/>
++        <location filename="../src/include/hwinfostorage.h" line="313"/>
++        <location filename="../src/include/hwinfostorage.h" line="322"/>
++        <location filename="../src/include/hwinfostorage.h" line="326"/>
++        <location filename="../src/include/hwinfostorage.h" line="329"/>
+         <source>Speed</source>
+         <translation>تەزدىك</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="183"/>
+-        <location filename="../src/hwwidget.h" line="196"/>
++        <location filename="../src/include/hwinfostorage.h" line="57"/>
++        <location filename="../src/include/hwinfostorage.h" line="70"/>
+         <source>Configured Speed</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="184"/>
+-        <location filename="../src/hwwidget.h" line="197"/>
++        <location filename="../src/include/hwinfostorage.h" line="58"/>
++        <location filename="../src/include/hwinfostorage.h" line="71"/>
+         <source>Part Number</source>
+         <translation>دايار ، دايىن  نومۇرۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="185"/>
+-        <location filename="../src/hwwidget.h" line="198"/>
++        <location filename="../src/include/hwinfostorage.h" line="59"/>
++        <location filename="../src/include/hwinfostorage.h" line="72"/>
+         <source>Memory Usage</source>
+         <translation>ىچكى  ساقتاعىچ  ىشتەتىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="203"/>
+-        <location filename="../src/hwwidget.h" line="221"/>
++        <location filename="../src/include/hwinfostorage.h" line="77"/>
++        <location filename="../src/include/hwinfostorage.h" line="95"/>
+         <source>Sub System Device ID</source>
+         <translation>بۅلۉمچۅ  ساامالىق  قۇرۇلماسى ID</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="204"/>
+-        <location filename="../src/hwwidget.h" line="222"/>
+-        <location filename="../src/hwwidget.h" line="261"/>
+-        <location filename="../src/hwwidget.h" line="274"/>
+-        <location filename="../src/hwwidget.h" line="289"/>
+-        <location filename="../src/hwwidget.h" line="301"/>
+-        <location filename="../src/hwwidget.h" line="316"/>
+-        <location filename="../src/hwwidget.h" line="328"/>
+-        <location filename="../src/hwwidget.h" line="356"/>
+-        <location filename="../src/hwwidget.h" line="362"/>
+-        <location filename="../src/hwwidget.h" line="369"/>
+-        <location filename="../src/hwwidget.h" line="375"/>
+-        <location filename="../src/hwwidget.h" line="429"/>
+-        <location filename="../src/hwwidget.h" line="438"/>
++        <location filename="../src/include/hwinfostorage.h" line="78"/>
++        <location filename="../src/include/hwinfostorage.h" line="96"/>
++        <location filename="../src/include/hwinfostorage.h" line="135"/>
++        <location filename="../src/include/hwinfostorage.h" line="149"/>
++        <location filename="../src/include/hwinfostorage.h" line="195"/>
++        <location filename="../src/include/hwinfostorage.h" line="207"/>
++        <location filename="../src/include/hwinfostorage.h" line="235"/>
++        <location filename="../src/include/hwinfostorage.h" line="241"/>
++        <location filename="../src/include/hwinfostorage.h" line="248"/>
++        <location filename="../src/include/hwinfostorage.h" line="254"/>
++        <location filename="../src/include/hwinfostorage.h" line="308"/>
++        <location filename="../src/include/hwinfostorage.h" line="317"/>
+         <source>Model</source>
+         <translation>مودەل</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="205"/>
+-        <location filename="../src/hwwidget.h" line="223"/>
++        <location filename="../src/include/hwinfostorage.h" line="79"/>
++        <location filename="../src/include/hwinfostorage.h" line="97"/>
+         <source>Memory</source>
+         <translation>ئەسلىمە</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="206"/>
+-        <location filename="../src/hwwidget.h" line="224"/>
++        <location filename="../src/include/hwinfostorage.h" line="80"/>
++        <location filename="../src/include/hwinfostorage.h" line="98"/>
+         <source>GPU Type</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="207"/>
+-        <location filename="../src/hwwidget.h" line="225"/>
+-        <location filename="../src/hwwidget.h" line="409"/>
+-        <location filename="../src/hwwidget.h" line="419"/>
+-        <location filename="../src/hwwidget.h" line="433"/>
+-        <location filename="../src/hwwidget.h" line="442"/>
++        <location filename="../src/include/hwinfostorage.h" line="81"/>
++        <location filename="../src/include/hwinfostorage.h" line="99"/>
++        <location filename="../src/include/hwinfostorage.h" line="288"/>
++        <location filename="../src/include/hwinfostorage.h" line="298"/>
++        <location filename="../src/include/hwinfostorage.h" line="312"/>
++        <location filename="../src/include/hwinfostorage.h" line="321"/>
+         <source>Bus Info</source>
+         <translation>جالپى ئشتەتىلە تۇرعان  قاتناش ۇچۇرۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="208"/>
+-        <location filename="../src/hwwidget.h" line="226"/>
+-        <location filename="../src/hwwidget.h" line="342"/>
+-        <location filename="../src/hwwidget.h" line="349"/>
++        <location filename="../src/include/hwinfostorage.h" line="82"/>
++        <location filename="../src/include/hwinfostorage.h" line="100"/>
++        <location filename="../src/include/hwinfostorage.h" line="221"/>
++        <location filename="../src/include/hwinfostorage.h" line="228"/>
+         <source>Clock</source>
+         <translation>ساات</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="209"/>
+-        <location filename="../src/hwwidget.h" line="227"/>
++        <location filename="../src/include/hwinfostorage.h" line="83"/>
++        <location filename="../src/include/hwinfostorage.h" line="101"/>
+         <source>Physics ID</source>
+         <translation>فىزىكا ID</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="210"/>
+-        <location filename="../src/hwwidget.h" line="228"/>
+-        <location filename="../src/hwwidget.h" line="240"/>
+-        <location filename="../src/hwwidget.h" line="250"/>
+-        <location filename="../src/hwwidget.h" line="410"/>
+-        <location filename="../src/hwwidget.h" line="420"/>
+-        <location filename="../src/hwwidget.h" line="432"/>
+-        <location filename="../src/hwwidget.h" line="441"/>
++        <location filename="../src/include/hwinfostorage.h" line="84"/>
++        <location filename="../src/include/hwinfostorage.h" line="102"/>
++        <location filename="../src/include/hwinfostorage.h" line="114"/>
++        <location filename="../src/include/hwinfostorage.h" line="124"/>
++        <location filename="../src/include/hwinfostorage.h" line="289"/>
++        <location filename="../src/include/hwinfostorage.h" line="299"/>
++        <location filename="../src/include/hwinfostorage.h" line="311"/>
++        <location filename="../src/include/hwinfostorage.h" line="320"/>
+         <source>Version</source>
+         <translation>ۉلگۉسۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="211"/>
+-        <location filename="../src/hwwidget.h" line="229"/>
+-        <location filename="../src/hwwidget.h" line="263"/>
+-        <location filename="../src/hwwidget.h" line="276"/>
+-        <location filename="../src/hwwidget.h" line="343"/>
+-        <location filename="../src/hwwidget.h" line="350"/>
+-        <location filename="../src/hwwidget.h" line="358"/>
+-        <location filename="../src/hwwidget.h" line="364"/>
+-        <location filename="../src/hwwidget.h" line="371"/>
+-        <location filename="../src/hwwidget.h" line="377"/>
+-        <location filename="../src/hwwidget.h" line="381"/>
+-        <location filename="../src/hwwidget.h" line="394"/>
+-        <location filename="../src/hwwidget.h" line="411"/>
+-        <location filename="../src/hwwidget.h" line="421"/>
+-        <location filename="../src/hwwidget.h" line="431"/>
+-        <location filename="../src/hwwidget.h" line="440"/>
++        <location filename="../src/include/hwinfostorage.h" line="85"/>
++        <location filename="../src/include/hwinfostorage.h" line="103"/>
++        <location filename="../src/include/hwinfostorage.h" line="137"/>
++        <location filename="../src/include/hwinfostorage.h" line="151"/>
++        <location filename="../src/include/hwinfostorage.h" line="222"/>
++        <location filename="../src/include/hwinfostorage.h" line="229"/>
++        <location filename="../src/include/hwinfostorage.h" line="237"/>
++        <location filename="../src/include/hwinfostorage.h" line="243"/>
++        <location filename="../src/include/hwinfostorage.h" line="250"/>
++        <location filename="../src/include/hwinfostorage.h" line="256"/>
++        <location filename="../src/include/hwinfostorage.h" line="260"/>
++        <location filename="../src/include/hwinfostorage.h" line="273"/>
++        <location filename="../src/include/hwinfostorage.h" line="290"/>
++        <location filename="../src/include/hwinfostorage.h" line="300"/>
++        <location filename="../src/include/hwinfostorage.h" line="310"/>
++        <location filename="../src/include/hwinfostorage.h" line="319"/>
+         <source>Driver</source>
+         <translation>شوپۇر</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="212"/>
+-        <location filename="../src/hwwidget.h" line="230"/>
++        <location filename="../src/include/hwinfostorage.h" line="86"/>
++        <location filename="../src/include/hwinfostorage.h" line="104"/>
+         <source>Communication Width</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="344"/>
+-        <location filename="../src/hwwidget.h" line="351"/>
++        <location filename="../src/include/hwinfostorage.h" line="166"/>
++        <location filename="../src/include/hwinfostorage.h" line="179"/>
++        <source>Mount Point</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/include/hwinfostorage.h" line="175"/>
++        <location filename="../src/include/hwinfostorage.h" line="188"/>
++        <source>Rota</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/include/hwinfostorage.h" line="223"/>
++        <location filename="../src/include/hwinfostorage.h" line="230"/>
+         <source>Width</source>
+         <translation>گەڭدىگى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="213"/>
+-        <location filename="../src/hwwidget.h" line="231"/>
++        <location filename="../src/include/hwinfostorage.h" line="87"/>
++        <location filename="../src/include/hwinfostorage.h" line="105"/>
+         <source>GDDR Size</source>
+         <translation>GDDR چوڭ-كىچىك</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="214"/>
+-        <location filename="../src/hwwidget.h" line="232"/>
++        <location filename="../src/include/hwinfostorage.h" line="88"/>
++        <location filename="../src/include/hwinfostorage.h" line="106"/>
+         <source>EGL Version</source>
+         <translation>EGL ۉلگۉسۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="215"/>
+-        <location filename="../src/hwwidget.h" line="233"/>
++        <location filename="../src/include/hwinfostorage.h" line="89"/>
++        <location filename="../src/include/hwinfostorage.h" line="107"/>
+         <source>EGL Api List</source>
+         <translation>EGL چىيكى ئەشيا دورا تىزىمدىگى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="216"/>
+-        <location filename="../src/hwwidget.h" line="234"/>
++        <location filename="../src/include/hwinfostorage.h" line="90"/>
++        <location filename="../src/include/hwinfostorage.h" line="108"/>
+         <source>OpenGL Version</source>
+         <translation>OpenGL ۉلگۉسۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="217"/>
+-        <location filename="../src/hwwidget.h" line="235"/>
++        <location filename="../src/include/hwinfostorage.h" line="91"/>
++        <location filename="../src/include/hwinfostorage.h" line="109"/>
+         <source>GLSL Version</source>
+         <translation>GLSL ۉلگۉسۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="241"/>
+-        <location filename="../src/hwwidget.h" line="251"/>
++        <location filename="../src/include/hwinfostorage.h" line="115"/>
++        <location filename="../src/include/hwinfostorage.h" line="125"/>
+         <source>Chassis Handle</source>
+         <translation>تۅشۅنمۅ  تۇتقۇچ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="242"/>
+-        <location filename="../src/hwwidget.h" line="252"/>
++        <location filename="../src/include/hwinfostorage.h" line="116"/>
++        <location filename="../src/include/hwinfostorage.h" line="126"/>
+         <source>Bios Vendor</source>
+         <translation>BIOS سووداگەرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="243"/>
+-        <location filename="../src/hwwidget.h" line="253"/>
++        <location filename="../src/include/hwinfostorage.h" line="117"/>
++        <location filename="../src/include/hwinfostorage.h" line="127"/>
+         <source>Bios Version</source>
+         <translation>BIOS ۉلگۉسۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="244"/>
+-        <location filename="../src/hwwidget.h" line="254"/>
++        <location filename="../src/include/hwinfostorage.h" line="118"/>
++        <location filename="../src/include/hwinfostorage.h" line="128"/>
+         <source>Chipser</source>
+         <translation>ئۆزەك ماشىناسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="246"/>
+-        <location filename="../src/hwwidget.h" line="256"/>
++        <location filename="../src/include/hwinfostorage.h" line="120"/>
++        <location filename="../src/include/hwinfostorage.h" line="130"/>
+         <source>Publish Date</source>
+         <translation>جارنااما  جاسوو ،اتقارۇۇ  ۇباقتى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="262"/>
+-        <location filename="../src/hwwidget.h" line="275"/>
++        <location filename="../src/include/hwinfostorage.h" line="136"/>
++        <location filename="../src/include/hwinfostorage.h" line="150"/>
+         <source>Bus</source>
+         <translation>جالپى ئشتەتىلە تۇرعان  قاتناش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="264"/>
+-        <location filename="../src/hwwidget.h" line="277"/>
++        <location filename="../src/include/hwinfostorage.h" line="138"/>
++        <location filename="../src/include/hwinfostorage.h" line="152"/>
+         <source>MAC Address</source>
+         <translation>MAC دايىن وردۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="266"/>
+-        <location filename="../src/hwwidget.h" line="279"/>
++        <location filename="../src/include/hwinfostorage.h" line="141"/>
++        <location filename="../src/include/hwinfostorage.h" line="155"/>
+         <source>IP Address</source>
+         <translation>IP دايىن وردۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="267"/>
+-        <location filename="../src/hwwidget.h" line="280"/>
++        <location filename="../src/include/hwinfostorage.h" line="142"/>
++        <location filename="../src/include/hwinfostorage.h" line="156"/>
+         <source>Net Musk</source>
+         <translation>تور  نىقاب</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="268"/>
+-        <location filename="../src/hwwidget.h" line="281"/>
++        <location filename="../src/include/hwinfostorage.h" line="143"/>
++        <location filename="../src/include/hwinfostorage.h" line="157"/>
+         <source>Send Bytes</source>
+         <translation>بايت جىبەرىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="269"/>
+-        <location filename="../src/hwwidget.h" line="282"/>
++        <location filename="../src/include/hwinfostorage.h" line="144"/>
++        <location filename="../src/include/hwinfostorage.h" line="158"/>
+         <source>Recved Bytes</source>
+         <translation>قايرا قايرا بايت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="270"/>
+-        <location filename="../src/hwwidget.h" line="283"/>
++        <location filename="../src/include/hwinfostorage.h" line="145"/>
++        <location filename="../src/include/hwinfostorage.h" line="159"/>
+         <source>MTU</source>
+         <translation>MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="288"/>
+-        <location filename="../src/hwwidget.h" line="306"/>
++        <location filename="../src/include/hwinfostorage.h" line="164"/>
++        <location filename="../src/include/hwinfostorage.h" line="183"/>
+         <source>Vendor</source>
+         <translation>تۇرۇعۇن  سووداگەرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="292"/>
++        <location filename="../src/include/hwinfostorage.h" line="168"/>
+         <source>Disk Name</source>
+         <translation>دىسكا ناامى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="293"/>
+-        <location filename="../src/hwwidget.h" line="304"/>
++        <location filename="../src/include/hwinfostorage.h" line="169"/>
++        <location filename="../src/include/hwinfostorage.h" line="181"/>
+         <source>Frimwarever Version</source>
+         <translation>Frimwarever ۉلگۉسۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="294"/>
+-        <location filename="../src/hwwidget.h" line="305"/>
++        <location filename="../src/include/hwinfostorage.h" line="170"/>
++        <location filename="../src/include/hwinfostorage.h" line="182"/>
+         <source>Disk Type</source>
+         <translation>دىسكا تۉرۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="295"/>
+-        <location filename="../src/hwwidget.h" line="307"/>
++        <location filename="../src/include/hwinfostorage.h" line="171"/>
++        <location filename="../src/include/hwinfostorage.h" line="184"/>
+         <source>Main Disk</source>
+         <translation>نەگىزگى  دىسكا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="297"/>
+-        <location filename="../src/hwwidget.h" line="309"/>
++        <location filename="../src/include/hwinfostorage.h" line="173"/>
++        <location filename="../src/include/hwinfostorage.h" line="186"/>
+         <source>UFS</source>
+         <translation>UFS</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="298"/>
+-        <location filename="../src/hwwidget.h" line="310"/>
++        <location filename="../src/include/hwinfostorage.h" line="174"/>
++        <location filename="../src/include/hwinfostorage.h" line="187"/>
+         <source>UFS Revision</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="317"/>
+-        <location filename="../src/hwwidget.h" line="329"/>
++        <location filename="../src/include/hwinfostorage.h" line="196"/>
++        <location filename="../src/include/hwinfostorage.h" line="208"/>
+         <source>Monitor Size</source>
+         <translation>كۉزۅتۉۉ ۅلچۅمۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="318"/>
+-        <location filename="../src/hwwidget.h" line="330"/>
++        <location filename="../src/include/hwinfostorage.h" line="197"/>
++        <location filename="../src/include/hwinfostorage.h" line="209"/>
+         <source>Monitor Ratio</source>
+         <translation>نازارات جاسوو ،اتقارۇۇ  قاتىشى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="319"/>
+-        <location filename="../src/hwwidget.h" line="331"/>
++        <location filename="../src/include/hwinfostorage.h" line="198"/>
++        <location filename="../src/include/hwinfostorage.h" line="210"/>
+         <source>Resolution</source>
+         <translation>بەكىم</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="320"/>
+-        <location filename="../src/hwwidget.h" line="332"/>
++        <location filename="../src/include/hwinfostorage.h" line="199"/>
++        <location filename="../src/include/hwinfostorage.h" line="211"/>
+         <source>Max Resolution</source>
+         <translation>ەڭ جوعورۇ ايىرما    جابۇۇ قاتىشى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="321"/>
+-        <location filename="../src/hwwidget.h" line="333"/>
++        <location filename="../src/include/hwinfostorage.h" line="200"/>
++        <location filename="../src/include/hwinfostorage.h" line="212"/>
+         <source>Main Monitor</source>
+         <translation>نەگىزگى  سىنىپ باشچىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="335"/>
+-        <location filename="../src/hwwidget.h" line="296"/>
+-        <location filename="../src/hwwidget.h" line="308"/>
+-        <location filename="../src/hwwidget.h" line="322"/>
+-        <location filename="../src/hwwidget.h" line="334"/>
+-        <location filename="../src/hwwidget.h" line="357"/>
+-        <location filename="../src/hwwidget.h" line="363"/>
+-        <location filename="../src/hwwidget.h" line="370"/>
+-        <location filename="../src/hwwidget.h" line="376"/>
+-        <location filename="../src/hwwidget.h" line="430"/>
+-        <location filename="../src/hwwidget.h" line="439"/>
++        <location filename="../src/hwwidget.cpp" line="670"/>
++        <location filename="../src/include/hwinfostorage.h" line="172"/>
++        <location filename="../src/include/hwinfostorage.h" line="185"/>
++        <location filename="../src/include/hwinfostorage.h" line="201"/>
++        <location filename="../src/include/hwinfostorage.h" line="213"/>
++        <location filename="../src/include/hwinfostorage.h" line="236"/>
++        <location filename="../src/include/hwinfostorage.h" line="242"/>
++        <location filename="../src/include/hwinfostorage.h" line="249"/>
++        <location filename="../src/include/hwinfostorage.h" line="255"/>
++        <location filename="../src/include/hwinfostorage.h" line="309"/>
++        <location filename="../src/include/hwinfostorage.h" line="318"/>
+         <source>Interface</source>
+         <translation>كۅرۉنمۅ جۉز</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="323"/>
+-        <location filename="../src/hwwidget.h" line="335"/>
++        <location filename="../src/include/hwinfostorage.h" line="202"/>
++        <location filename="../src/include/hwinfostorage.h" line="214"/>
+         <source>Visible Area</source>
+         <translation>كۅرگـۅلۉ بولوتۇرعان رايون ،چۅلكۅم</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="324"/>
+-        <location filename="../src/hwwidget.h" line="336"/>
++        <location filename="../src/include/hwinfostorage.h" line="203"/>
++        <location filename="../src/include/hwinfostorage.h" line="215"/>
+         <source>Gamma</source>
+         <translation>گاما</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="341"/>
+-        <location filename="../src/hwwidget.h" line="348"/>
++        <location filename="../src/include/hwinfostorage.h" line="220"/>
++        <location filename="../src/include/hwinfostorage.h" line="227"/>
+         <source>Bus Address</source>
+         <translation>جالپى ئشتەتىلە تۇرعان  قاتناش دايىن وردۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="382"/>
+-        <location filename="../src/hwwidget.h" line="395"/>
++        <location filename="../src/include/hwinfostorage.h" line="261"/>
++        <location filename="../src/include/hwinfostorage.h" line="274"/>
+         <source>Driver Version</source>
+         <translation>شوپۇر ۉلگۉسۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="474"/>
+-        <location filename="../src/hwwidget.h" line="383"/>
+-        <location filename="../src/hwwidget.h" line="396"/>
++        <location filename="../src/hwwidget.cpp" line="1000"/>
++        <location filename="../src/include/hwinfostorage.h" line="262"/>
++        <location filename="../src/include/hwinfostorage.h" line="275"/>
+         <source>Address</source>
+         <translation>دايىن وردۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="384"/>
+-        <location filename="../src/hwwidget.h" line="397"/>
++        <location filename="../src/include/hwinfostorage.h" line="263"/>
++        <location filename="../src/include/hwinfostorage.h" line="276"/>
+         <source>Link Mode</source>
+         <translation>ۇلانۇۇ ۉلگۉسۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="385"/>
+-        <location filename="../src/hwwidget.h" line="398"/>
++        <location filename="../src/include/hwinfostorage.h" line="264"/>
++        <location filename="../src/include/hwinfostorage.h" line="277"/>
+         <source>Link Policy</source>
+         <translation>ۇلانۇۇ سىياساتى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="387"/>
+-        <location filename="../src/hwwidget.h" line="401"/>
++        <location filename="../src/include/hwinfostorage.h" line="266"/>
++        <location filename="../src/include/hwinfostorage.h" line="280"/>
+         <source>ACL MTU</source>
+         <translation>ACL MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="390"/>
+-        <location filename="../src/hwwidget.h" line="399"/>
++        <location filename="../src/include/hwinfostorage.h" line="269"/>
++        <location filename="../src/include/hwinfostorage.h" line="278"/>
+         <source>Packe Type</source>
+         <translation>پاك تۉرۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="386"/>
+-        <location filename="../src/hwwidget.h" line="400"/>
++        <location filename="../src/include/hwinfostorage.h" line="265"/>
++        <location filename="../src/include/hwinfostorage.h" line="279"/>
+         <source>SCO MTU</source>
+         <translation>SCO MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="389"/>
+-        <location filename="../src/hwwidget.h" line="403"/>
++        <location filename="../src/include/hwinfostorage.h" line="268"/>
++        <location filename="../src/include/hwinfostorage.h" line="282"/>
+         <source>Features</source>
+         <translation>ۅزگۅچۅلۉگۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="408"/>
+-        <location filename="../src/hwwidget.h" line="418"/>
++        <location filename="../src/include/hwinfostorage.h" line="287"/>
++        <location filename="../src/include/hwinfostorage.h" line="297"/>
+         <source>Name</source>
+         <translation>ات</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="412"/>
+-        <location filename="../src/hwwidget.h" line="422"/>
++        <location filename="../src/include/hwinfostorage.h" line="291"/>
++        <location filename="../src/include/hwinfostorage.h" line="301"/>
+         <source>Device Number</source>
+         <translation>شايمان نومۇرۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="456"/>
+-        <location filename="../src/hwwidget.h" line="466"/>
++        <location filename="../src/include/hwinfostorage.h" line="335"/>
++        <location filename="../src/include/hwinfostorage.h" line="345"/>
+         <source>State</source>
+         <translation>ماملەكەت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="457"/>
+-        <location filename="../src/hwwidget.h" line="467"/>
++        <location filename="../src/include/hwinfostorage.h" line="336"/>
++        <location filename="../src/include/hwinfostorage.h" line="346"/>
+         <source>Energy</source>
+         <translation>ەنەرگىيا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="458"/>
+-        <location filename="../src/hwwidget.h" line="468"/>
++        <location filename="../src/include/hwinfostorage.h" line="337"/>
++        <location filename="../src/include/hwinfostorage.h" line="347"/>
+         <source>Used Times</source>
+         <translation>ىشتەتىلەتۇرعان  ۋاقىتلار</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="459"/>
+-        <location filename="../src/hwwidget.h" line="469"/>
++        <location filename="../src/include/hwinfostorage.h" line="338"/>
++        <location filename="../src/include/hwinfostorage.h" line="348"/>
+         <source>Energy Full</source>
+         <translation>ەنەرگىيا تولۇق</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="460"/>
+-        <location filename="../src/hwwidget.h" line="470"/>
++        <location filename="../src/include/hwinfostorage.h" line="339"/>
++        <location filename="../src/include/hwinfostorage.h" line="349"/>
+         <source>Time To Empty</source>
+         <translation>قالدىق ۇباقىت ئېنېرگىيەسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="461"/>
+-        <location filename="../src/hwwidget.h" line="471"/>
++        <location filename="../src/include/hwinfostorage.h" line="340"/>
++        <location filename="../src/include/hwinfostorage.h" line="350"/>
+         <source>Percentage</source>
+         <translation>پىروسەنت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="40"/>
++        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="57"/>
+         <source>Wireless</source>
+         <translation>سەمىز تور</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="42"/>
++        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="59"/>
+         <source>Wired</source>
+         <translation>تارلاشقان</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="87"/>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="121"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="93"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="103"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="150"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="155"/>
+         <source>This CPU model does not support frequency display function</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/device-controller/translations/kylin-os-manager-device-controller_mn.ts b/plugins/device-controller/translations/kylin-os-manager-device-controller_mn.ts
+index 881c019..06a3f02 100644
+--- a/plugins/device-controller/translations/kylin-os-manager-device-controller_mn.ts
++++ b/plugins/device-controller/translations/kylin-os-manager-device-controller_mn.ts
+@@ -214,92 +214,92 @@
+ <context>
+     <name>DriverInstallWidget</name>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
+         <source>Installable Drivers</source>
+         <translation>ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠦᠨ ᠳᠡᠰ ᠳᠠᠷᠠᠭᠠᠯᠠᠯ ᠤᠭᠰᠠᠷᠠᠵᠤ ᠪᠣᠯᠤᠨ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>)</source>
+         <translation></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>(</source>
+         <translation></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+         <source>One-click installation</source>
+         <translation>ᠨᠢᠭᠡ ᠲᠠᠷᠤᠭᠤᠯ ᠢ ᠤᠭᠰᠠᠷᠠᠬᠤ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
+         <source>Upgradable Drivers</source>
+         <translation>ᠳᠡᠰ ᠳᠡᠪᠰᠢᠵᠦ ᠪᠣᠯᠬᠤ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠦᠨ ᠫᠷᠦᠭᠷᠠᠮ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+         <source>One-click upgrade</source>
+         <translation>ᠨᠢᠭᠡ ᠲᠠᠷᠤᠭᠤᠯ ᠤᠨ ᠳᠡᠰ ᠳᠡᠪᠰᠢᠨ᠎ᠡ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
+         <source>Installed Drivers</source>
+         <translation>ᠨᠢᠭᠡᠨᠲᠡ ᠤᠭᠰᠠᠷᠠᠭᠰᠠᠨ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠦᠨ ᠫᠷᠤᠭ᠍ᠷᠠᠮ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>Unrecognized Device</source>
+         <translation>ᠺᠣᠨᠠᠺᠧᠨᠢᠳ᠋ᠸᠧᠰ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1200"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1248"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1213"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1261"/>
+         <source>Uninstalling drivers. Please wait for the uninstallation to complete before clicking again.</source>
+         <translation>ᠦ ᠨᠢᠩᠰᠲ᠋ᠠᠯᠢᠨᠳ᠋ᠯᠢᠳ᠋ᠯᠢᠹᠦᠰ ᠃ ᠫᠷᠢᠰᠸᠲ᠋ᠹᠦᠢᠲ᠋ ᠦᠵᠦᠮᠦᠴᠢᠨ ᠤ ᠰᠲ᠋ᠠᠲᠢᠲ᠋ᠦᠢᠸᠸᠲ᠋ᠲ᠋ᠦᠢᠸᠸᠺᠠᠲ᠋ᠸ ᠺᠸᠯᠢᠲ᠋ᠸᠪᠸᠢᠺᠸᠯᠸᠢᠺᠯᠢ ᠶᠢᠨ ᠠᠭᠠᠨ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1202"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1250"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1215"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1263"/>
+         <source>Uninstall Failed</source>
+         <translation>ᠦᠵᠦᠨᠢᠩᠰᠲ᠋ᠠᠷᠹᠧᠷᠳ᠋᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1205"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1253"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1218"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1266"/>
+         <source>Installing drivers. Please wait for the installation to complete before clicking again.</source>
+         <translation>ᠢᠨᠴᠲ᠋ᠠᠯᠢᠨᠳ᠋ᠯᠢᠹᠹᠦᠢᠰ ᠃ ᠫᠷᠠᠷᠢᠰᠸᠲ᠋ᠹᠦᠢᠰᠲ᠋ᠠᠰᠲ᠋ᠠᠯᠠᠱᠠᠲ᠋ᠲ᠋ᠠᠲ᠋ᠦᠢᠸᠧᠷᠲ᠋ᠠᠲ᠋ ᠺᠠᠫᠦᠢᠲ᠋ᠪᠧᠯᠪᠧᠺᠧᠯᠧᠢ ᠶᠢᠨ ᠠᠭᠠᠨ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1065"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1206"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1254"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1078"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1219"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1267"/>
+         <source>Install Failed</source>
+         <translation>ᠢᠨᠰᠲ᠋ᠠᠷᠹᠧᠷᠳ᠋ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1069"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1082"/>
+         <source>Update</source>
+         <translation>ᠰᠢᠨᠡᠴᠢᠯᠡᠨ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1076"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1089"/>
+         <source>Install</source>
+         <translation>ᠤᠭᠰᠠᠷᠠᠬᠤ ᠃</translation>
+     </message>
+@@ -307,65 +307,70 @@
+ <context>
+     <name>HardWareInfoWidget</name>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="113"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="121"/>
+         <source>Computer Basic Information</source>
+         <translation>ᠺᠣᠮᠫᠢᠦ᠋ᠲ᠋ᠧᠷ ᠦᠨ ᠦᠨᠳᠦᠰᠦᠨ ᠮᠡᠳᠡᠭᠡ ᠵᠠᠩᠭᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="117"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="420"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="125"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="462"/>
+         <source>Host Name</source>
+         <translation>ᠭᠣᠣᠯ ᠮᠠᠰᠢᠨ ᠤ ᠨᠡᠷ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="121"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="421"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="129"/>
++        <source>Operation System Name</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/hardwareinfowidget.cpp" line="133"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="463"/>
+         <source>Operation System Version</source>
+         <translation>ᠠᠵᠢᠯᠯᠠᠬᠤ ᠰᠢᠰᠲ᠋ᠧᠮ ᠦᠨ ᠬᠡᠪᠯᠡᠯ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="125"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="422"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="137"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="464"/>
+         <source>Kernel Version</source>
+         <translation>ᠳᠣᠲᠣᠷ ᠴᠥᠮ᠎ᠡ ᠶᠢᠨ ᠬᠡᠪᠯᠡᠯ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="129"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="423"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="141"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="465"/>
+         <source>Kernel Architecture</source>
+         <translation>ᠳᠣᠲᠣᠷ ᠴᠥᠮ᠎ᠡ ᠶᠢᠨ ᠪᠦᠲᠦᠴᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="133"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="424"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="145"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="466"/>
+         <source>System Bits</source>
+         <translation>ᠰᠢᠰᠲ᠋ᠧᠮ ᠦᠨ ᠪᠠᠶᠢᠷᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="137"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="425"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="149"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="467"/>
+         <source>Manufacturer</source>
+         <translation>ᠦᠢᠯᠡᠳᠦᠭᠴᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="141"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="153"/>
+         <source>Version</source>
+         <translation type="unfinished">ᠬᠡᠪᠯᠡᠯ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="145"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="426"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="157"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="468"/>
+         <source>Model</source>
+         <translation>ᠬᠡᠯᠪᠡᠷᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="149"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="427"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="161"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="469"/>
+         <source>Serial</source>
+         <translation>ᠠᠰᠬᠠᠨ ᠪᠣᠯᠣᠨ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="334"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="375"/>
+         <source>Hardware Display</source>
+         <translation>ᠬᠠᠲᠠᠭᠤ ᠬᠡᠷᠡᠭᠰᠡᠯ ᠡᠴᠡ ᠦᠵᠡᠪᠡᠯ ᠃</translation>
+     </message>
+@@ -386,7 +391,7 @@
+ <context>
+     <name>HardwareInfoGetter</name>
+     <message>
+-        <location filename="../src/hardwareinfogetter.cpp" line="869"/>
++        <location filename="../src/hardwareinfogetter.cpp" line="979"/>
+         <source> inch</source>
+         <translation type="unfinished"></translation>
+     </message>
+@@ -394,112 +399,158 @@
+ <context>
+     <name>HwWidget</name>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="53"/>
++        <location filename="../src/hwwidget.cpp" line="88"/>
+         <source>Disable</source>
+         <translation>ᠳ᠋ᠢᠰᠠᠪᠦᠷ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="72"/>
++        <location filename="../src/hwwidget.cpp" line="116"/>
+         <source>Export To Clipboard</source>
+         <translation></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="73"/>
++        <location filename="../src/hwwidget.cpp" line="117"/>
+         <source>Activate</source>
+         <translation>ᠬᠥᠭᠵᠢᠭᠡᠨ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="74"/>
++        <location filename="../src/hwwidget.cpp" line="118"/>
+         <source>Deactive</source>
+         <translation>ᠬᠡᠷᠡᠭᠯᠡᠬᠦ ᠪᠡᠨ ᠵᠣᠭᠰᠣᠨ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="84"/>
+-        <location filename="../src/hwwidget.cpp" line="87"/>
++        <location filename="../src/hwwidget.cpp" line="128"/>
++        <location filename="../src/hwwidget.cpp" line="131"/>
+         <source>CPU</source>
+         <translation>CPU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="116"/>
+-        <location filename="../src/hwwidget.cpp" line="120"/>
++        <location filename="../src/hwwidget.cpp" line="208"/>
++        <location filename="../src/hwwidget.cpp" line="212"/>
++        <location filename="../src/hwwidget.cpp" line="1330"/>
++        <location filename="../src/hwwidget.cpp" line="1333"/>
+         <source>Memory</source>
+         <translation>ᠳᠣᠲᠣᠭᠠᠳᠤ ᠬᠠᠳᠠᠭᠠᠯᠠᠭᠤᠷ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="148"/>
+-        <location filename="../src/hwwidget.cpp" line="152"/>
++        <location filename="../src/hwwidget.cpp" line="147"/>
++        <location filename="../src/hwwidget.cpp" line="228"/>
++        <location filename="../src/hwwidget.cpp" line="284"/>
++        <location filename="../src/hwwidget.cpp" line="287"/>
++        <location filename="../src/hwwidget.cpp" line="304"/>
++        <location filename="../src/hwwidget.cpp" line="1355"/>
++        <location filename="../src/hwwidget.cpp" line="1358"/>
+         <source>Graphic Card</source>
+         <translation>ᠺᠠᠯᠼᠢ ᠢᠯᠡᠷᠡᠨ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="181"/>
+-        <location filename="../src/hwwidget.cpp" line="184"/>
++        <location filename="../src/hwwidget.cpp" line="91"/>
++        <source>This device can be disabled/enabled</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/hwwidget.cpp" line="358"/>
++        <location filename="../src/hwwidget.cpp" line="361"/>
++        <location filename="../src/hwwidget.cpp" line="378"/>
+         <source>Mother Board</source>
+         <translation>ᠭᠣᠣᠯ ᠰᠠᠮᠪᠠᠷ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="206"/>
+-        <location filename="../src/hwwidget.cpp" line="212"/>
++        <location filename="../src/hwwidget.cpp" line="429"/>
++        <location filename="../src/hwwidget.cpp" line="435"/>
++        <location filename="../src/hwwidget.cpp" line="453"/>
++        <location filename="../src/hwwidget.cpp" line="1381"/>
++        <location filename="../src/hwwidget.cpp" line="1384"/>
+         <source>Network Card</source>
+         <translation>ᠰᠦᠯᠵᠢᠶᠡᠨ ᠺᠠᠯᠼ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="289"/>
+-        <location filename="../src/hwwidget.cpp" line="293"/>
++        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="556"/>
++        <location filename="../src/hwwidget.cpp" line="572"/>
++        <location filename="../src/hwwidget.cpp" line="640"/>
++        <location filename="../src/hwwidget.cpp" line="744"/>
++        <location filename="../src/hwwidget.cpp" line="1407"/>
++        <location filename="../src/hwwidget.cpp" line="1410"/>
+         <source>Disk</source>
+         <translation>ᠫᠠᠨᠰᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="315"/>
+-        <location filename="../src/hwwidget.cpp" line="319"/>
++        <location filename="../src/hwwidget.cpp" line="620"/>
++        <location filename="../src/hwwidget.cpp" line="624"/>
++        <location filename="../src/hwwidget.cpp" line="1432"/>
++        <location filename="../src/hwwidget.cpp" line="1435"/>
+         <source>Monitor</source>
+         <translation>ᠫᠠᠨᠰᠠ ᠃ ...</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="373"/>
+-        <location filename="../src/hwwidget.cpp" line="376"/>
++        <location filename="../src/hwwidget.cpp" line="723"/>
++        <location filename="../src/hwwidget.cpp" line="726"/>
++        <location filename="../src/hwwidget.cpp" line="1458"/>
++        <location filename="../src/hwwidget.cpp" line="1461"/>
+         <source>Sound Card</source>
+         <translation>ᠳᠠᠭᠤᠨ ᠤ ᠺᠠᠷᠲ᠋ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="410"/>
+-        <location filename="../src/hwwidget.cpp" line="414"/>
++        <location filename="../src/hwwidget.cpp" line="824"/>
++        <location filename="../src/hwwidget.cpp" line="828"/>
++        <location filename="../src/hwwidget.cpp" line="844"/>
++        <location filename="../src/hwwidget.cpp" line="1484"/>
++        <location filename="../src/hwwidget.cpp" line="1487"/>
+         <source>Keyboard</source>
+         <translation>ᠲᠠᠷᠤᠭᠤᠯ ᠤᠨ ᠫᠠᠨᠰᠠ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="435"/>
+-        <location filename="../src/hwwidget.cpp" line="439"/>
++        <location filename="../src/hwwidget.cpp" line="890"/>
++        <location filename="../src/hwwidget.cpp" line="894"/>
++        <location filename="../src/hwwidget.cpp" line="910"/>
++        <location filename="../src/hwwidget.cpp" line="1509"/>
++        <location filename="../src/hwwidget.cpp" line="1512"/>
+         <source>Mouse</source>
+         <translation>ᠬᠤᠯᠤᠭᠠᠨ᠎ᠠ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="461"/>
+-        <location filename="../src/hwwidget.cpp" line="466"/>
++        <location filename="../src/hwwidget.cpp" line="959"/>
++        <location filename="../src/hwwidget.cpp" line="962"/>
++        <location filename="../src/hwwidget.cpp" line="980"/>
++        <location filename="../src/hwwidget.cpp" line="1534"/>
++        <location filename="../src/hwwidget.cpp" line="1537"/>
+         <source>Bluetooth</source>
+         <translation>ᠬᠥᠬᠡ ᠰᠢᠳᠦ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="506"/>
+-        <location filename="../src/hwwidget.cpp" line="510"/>
++        <location filename="../src/hwwidget.cpp" line="1049"/>
++        <location filename="../src/hwwidget.cpp" line="1053"/>
++        <location filename="../src/hwwidget.cpp" line="1069"/>
++        <location filename="../src/hwwidget.cpp" line="1559"/>
++        <location filename="../src/hwwidget.cpp" line="1562"/>
+         <source>CD</source>
+         <translation>ᠭᠡᠷᠡᠯ ᠦᠨ ᠬᠥᠭᠡᠭᠡᠭ᠍ᠴᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="531"/>
+-        <location filename="../src/hwwidget.cpp" line="534"/>
++        <location filename="../src/hwwidget.cpp" line="1116"/>
++        <location filename="../src/hwwidget.cpp" line="1119"/>
++        <location filename="../src/hwwidget.cpp" line="1136"/>
++        <location filename="../src/hwwidget.cpp" line="1584"/>
++        <location filename="../src/hwwidget.cpp" line="1587"/>
+         <source>Battery</source>
+         <translation>ᠳ᠋ᠢᠶᠠᠨ ᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="565"/>
+-        <location filename="../src/hwwidget.cpp" line="569"/>
++        <location filename="../src/hwwidget.cpp" line="1192"/>
++        <location filename="../src/hwwidget.cpp" line="1196"/>
++        <location filename="../src/hwwidget.cpp" line="1212"/>
++        <location filename="../src/hwwidget.cpp" line="1609"/>
++        <location filename="../src/hwwidget.cpp" line="1612"/>
+         <source>Fan</source>
+         <translation>ᠰᠠᠯᠬᠢ ᠰᠠᠯᠬᠢᠨ ᠤ ᠵᠦᠯᠭᠦᠭᠦᠷ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="590"/>
+-        <location filename="../src/hwwidget.cpp" line="593"/>
++        <location filename="../src/hwwidget.cpp" line="1259"/>
++        <location filename="../src/hwwidget.cpp" line="1262"/>
++        <location filename="../src/hwwidget.cpp" line="1279"/>
++        <location filename="../src/hwwidget.cpp" line="1634"/>
++        <location filename="../src/hwwidget.cpp" line="1637"/>
+         <source>Camera</source>
+         <translation>ᠭᠡᠷᠡᠯ ᠵᠢᠷᠤᠭ ᠤᠨ ᠮᠠᠰᠢᠨ ᠃</translation>
+     </message>
+@@ -520,76 +571,76 @@
+         <translation>ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠶᠢᠨ ᠬᠠᠮᠢᠶᠠᠷᠤᠯᠲᠠ ᠶᠢᠨ ᠪᠠᠭᠠᠵᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/diskinfo.cpp" line="37"/>
++        <location filename="../src/hardwareinfo/diskinfo.cpp" line="39"/>
+         <location filename="../src/hardwareinfo/monitorinfo.cpp" line="33"/>
+-        <location filename="../src/hwwidget.cpp" line="358"/>
++        <location filename="../src/hwwidget.cpp" line="695"/>
+         <source>Yes</source>
+         <translation>ᠲᠡᠢ᠌ᠮᠦ ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/diskinfo.cpp" line="35"/>
++        <location filename="../src/hardwareinfo/diskinfo.cpp" line="37"/>
+         <location filename="../src/hardwareinfo/monitorinfo.cpp" line="35"/>
+-        <location filename="../src/hwwidget.cpp" line="360"/>
++        <location filename="../src/hwwidget.cpp" line="697"/>
+         <source>No</source>
+         <translation>ᠦᠭᠡᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="103"/>
++        <location filename="../src/hwwidget.cpp" line="177"/>
+         <source>CPU Current Frequency</source>
+         <translation>CPU ᠣᠳᠣᠬᠠᠨ ᠤ ᠳᠠᠪᠲᠠᠮᠵᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="103"/>
++        <location filename="../src/hwwidget.cpp" line="177"/>
+         <source>CPU Usage Rate</source>
+         <translation>CPU ᠶᠢᠨ ᠬᠡᠷᠡᠭᠯᠡᠯᠲᠡ ᠶᠢᠨ ᠨᠣᠷᠮ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="104"/>
++        <location filename="../src/hwwidget.cpp" line="178"/>
+         <source>CPU Temperature</source>
+         <translation>CPU ᠳᠤᠯᠠᠭᠠᠨ ᠤ ᠬᠡᠮᠵᠢᠶ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="136"/>
++        <location filename="../src/hwwidget.cpp" line="258"/>
+         <source>Memory Usage</source>
+         <translation>ᠳᠣᠲᠣᠭᠠᠳᠤ ᠬᠠᠳᠠᠭᠠᠯᠠᠭᠤᠷ ᠬᠡᠷᠡᠭᠯᠡᠭᠰᠡᠨ ᠪᠠᠶᠢᠳᠠᠯ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="169"/>
++        <location filename="../src/hwwidget.cpp" line="334"/>
+         <source>GDDR Size</source>
+         <translation type="unfinished">ᠭᠧᠳ᠋ ᠳᠥᠷᠪᠡᠨ ᠳᠦᠷᠢᠮ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="344"/>
++        <location filename="../src/hwwidget.cpp" line="680"/>
+         <source>Resolution</source>
+         <translation>ᠢᠯᠭᠠᠴᠠ ᠶᠢᠨ ᠨᠣᠷᠮ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="354"/>
++        <location filename="../src/hwwidget.cpp" line="690"/>
+         <source>Main Monitor</source>
+         <translation>ᠭᠣᠤᠯ ᠠᠵᠢᠭᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="551"/>
++        <location filename="../src/hwwidget.cpp" line="1166"/>
+         <source>Energy</source>
+         <translation type="unfinished">ᠴᠠᠬᠢᠯᠭᠠᠨ ᠤ ᠬᠡᠮᠵᠢᠶ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="551"/>
++        <location filename="../src/hwwidget.cpp" line="1166"/>
+         <source>Time To Empty</source>
+         <translation type="unfinished">ᠣᠷᠣᠨ ᠵᠠᠢ ᠶᠢ ᠴᠡᠪᠡᠷᠯᠡᠬᠦ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="1167"/>
+         <source>Percentage</source>
+         <translation type="unfinished">ᠵᠠᠭᠤᠨ ᠤ ᠬᠠᠷᠢᠴᠠᠯ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="1167"/>
+         <source>State</source>
+         <translation type="unfinished">ᠵᠧᠦ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="194"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="210"/>
+         <source>This CPU model does not support temperature display function</source>
+         <translation></translation>
+     </message>
+@@ -611,607 +662,621 @@
+         <translation>ᠳ᠋ᠠᠶᠢᠲ᠋ᠠ ᠬᠥᠮᠥᠷᠭᠡ ᠪᠤᠷᠤᠭᠤ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="144"/>
+-        <location filename="../src/hwwidget.h" line="159"/>
+-        <location filename="../src/hwwidget.h" line="179"/>
+-        <location filename="../src/hwwidget.h" line="192"/>
+-        <location filename="../src/hwwidget.h" line="202"/>
+-        <location filename="../src/hwwidget.h" line="220"/>
+-        <location filename="../src/hwwidget.h" line="239"/>
+-        <location filename="../src/hwwidget.h" line="249"/>
+-        <location filename="../src/hwwidget.h" line="260"/>
+-        <location filename="../src/hwwidget.h" line="273"/>
+-        <location filename="../src/hwwidget.h" line="315"/>
+-        <location filename="../src/hwwidget.h" line="327"/>
+-        <location filename="../src/hwwidget.h" line="340"/>
+-        <location filename="../src/hwwidget.h" line="347"/>
+-        <location filename="../src/hwwidget.h" line="355"/>
+-        <location filename="../src/hwwidget.h" line="361"/>
+-        <location filename="../src/hwwidget.h" line="368"/>
+-        <location filename="../src/hwwidget.h" line="374"/>
+-        <location filename="../src/hwwidget.h" line="380"/>
+-        <location filename="../src/hwwidget.h" line="393"/>
+-        <location filename="../src/hwwidget.h" line="407"/>
+-        <location filename="../src/hwwidget.h" line="417"/>
+-        <location filename="../src/hwwidget.h" line="428"/>
+-        <location filename="../src/hwwidget.h" line="437"/>
+-        <location filename="../src/hwwidget.h" line="454"/>
+-        <location filename="../src/hwwidget.h" line="464"/>
++        <location filename="../src/include/hwinfostorage.h" line="18"/>
++        <location filename="../src/include/hwinfostorage.h" line="33"/>
++        <location filename="../src/include/hwinfostorage.h" line="53"/>
++        <location filename="../src/include/hwinfostorage.h" line="66"/>
++        <location filename="../src/include/hwinfostorage.h" line="76"/>
++        <location filename="../src/include/hwinfostorage.h" line="94"/>
++        <location filename="../src/include/hwinfostorage.h" line="113"/>
++        <location filename="../src/include/hwinfostorage.h" line="123"/>
++        <location filename="../src/include/hwinfostorage.h" line="134"/>
++        <location filename="../src/include/hwinfostorage.h" line="148"/>
++        <location filename="../src/include/hwinfostorage.h" line="194"/>
++        <location filename="../src/include/hwinfostorage.h" line="206"/>
++        <location filename="../src/include/hwinfostorage.h" line="219"/>
++        <location filename="../src/include/hwinfostorage.h" line="226"/>
++        <location filename="../src/include/hwinfostorage.h" line="234"/>
++        <location filename="../src/include/hwinfostorage.h" line="240"/>
++        <location filename="../src/include/hwinfostorage.h" line="247"/>
++        <location filename="../src/include/hwinfostorage.h" line="253"/>
++        <location filename="../src/include/hwinfostorage.h" line="259"/>
++        <location filename="../src/include/hwinfostorage.h" line="272"/>
++        <location filename="../src/include/hwinfostorage.h" line="286"/>
++        <location filename="../src/include/hwinfostorage.h" line="296"/>
++        <location filename="../src/include/hwinfostorage.h" line="307"/>
++        <location filename="../src/include/hwinfostorage.h" line="316"/>
++        <location filename="../src/include/hwinfostorage.h" line="333"/>
++        <location filename="../src/include/hwinfostorage.h" line="343"/>
+         <source>Manufacturer</source>
+         <translation>ᠦᠢᠯᠡᠳᠦᠭᠴᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="145"/>
+-        <location filename="../src/hwwidget.h" line="160"/>
++        <location filename="../src/include/hwinfostorage.h" line="19"/>
++        <location filename="../src/include/hwinfostorage.h" line="34"/>
+         <source>Cores</source>
+         <translation>ᠭᠣᠣᠯᠯᠠᠭᠴᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="146"/>
+-        <location filename="../src/hwwidget.h" line="161"/>
++        <location filename="../src/include/hwinfostorage.h" line="20"/>
++        <location filename="../src/include/hwinfostorage.h" line="35"/>
+         <source>Online Cores</source>
+         <translation>ᠰᠦᠯᠵᠢᠶᠡᠨ ᠳᠡᠭᠡᠷ᠎ᠡ ᠭᠣᠣᠯᠯᠠᠭᠴᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="147"/>
+-        <location filename="../src/hwwidget.h" line="162"/>
++        <location filename="../src/include/hwinfostorage.h" line="21"/>
++        <location filename="../src/include/hwinfostorage.h" line="36"/>
+         <source>Thread Per Cores</source>
+         <translation>ᠭᠣᠣᠯ ᠨᠢᠭᠡᠪᠦᠷᠢ ᠶᠢᠨ ᠤᠲᠠᠰᠤ ᠨᠢᠭᠡᠪᠦᠷᠢ ᠶᠢᠨ ᠲᠣᠭ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="148"/>
+-        <location filename="../src/hwwidget.h" line="163"/>
++        <location filename="../src/include/hwinfostorage.h" line="22"/>
++        <location filename="../src/include/hwinfostorage.h" line="37"/>
+         <source>MAX MHz</source>
+         <translation>ᠬᠠᠮᠤᠭ ᠶᠡᠬᠡ ᠵᠣᠣ ᠾᠧ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="149"/>
+-        <location filename="../src/hwwidget.h" line="164"/>
++        <location filename="../src/include/hwinfostorage.h" line="23"/>
++        <location filename="../src/include/hwinfostorage.h" line="38"/>
+         <source>L1d Cache</source>
+         <translation>L1d ᠬᠣᠶᠢᠰᠢᠯᠠᠭᠤᠯᠪᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="150"/>
+-        <location filename="../src/hwwidget.h" line="165"/>
++        <location filename="../src/include/hwinfostorage.h" line="24"/>
++        <location filename="../src/include/hwinfostorage.h" line="39"/>
+         <source>L1i Cache</source>
+         <translation>L1i ᠬᠣᠶᠢᠰᠢᠯᠠᠭᠤᠯᠪᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="151"/>
+-        <location filename="../src/hwwidget.h" line="166"/>
++        <location filename="../src/include/hwinfostorage.h" line="25"/>
++        <location filename="../src/include/hwinfostorage.h" line="40"/>
+         <source>L2 Cache</source>
+         <translation>L2 ᠬᠣᠶᠢᠰᠢᠯᠠᠭᠤᠯᠬᠤ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="152"/>
+-        <location filename="../src/hwwidget.h" line="167"/>
++        <location filename="../src/include/hwinfostorage.h" line="26"/>
++        <location filename="../src/include/hwinfostorage.h" line="41"/>
+         <source>L3 Cache</source>
+         <translation>L3 ᠬᠣᠶᠢᠰᠢᠯᠠᠭᠤᠯᠬᠤ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="153"/>
+-        <location filename="../src/hwwidget.h" line="168"/>
++        <location filename="../src/include/hwinfostorage.h" line="27"/>
++        <location filename="../src/include/hwinfostorage.h" line="42"/>
+         <source>L4 Cache</source>
+         <translation type="unfinished">L3 ᠬᠣᠶᠢᠰᠢᠯᠠᠭᠤᠯᠬᠤ ᠃ {4 ?}</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="154"/>
+-        <location filename="../src/hwwidget.h" line="169"/>
++        <location filename="../src/include/hwinfostorage.h" line="28"/>
++        <location filename="../src/include/hwinfostorage.h" line="43"/>
+         <source>CPU Current Frequency</source>
+         <translation>CPU ᠣᠳᠣᠬᠠᠨ ᠤ ᠳᠠᠪᠲᠠᠮᠵᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="155"/>
+-        <location filename="../src/hwwidget.h" line="170"/>
++        <location filename="../src/include/hwinfostorage.h" line="29"/>
++        <location filename="../src/include/hwinfostorage.h" line="44"/>
+         <source>CPU Usage Rate</source>
+         <translation>CPU ᠶᠢᠨ ᠬᠡᠷᠡᠭᠯᠡᠯᠲᠡ ᠶᠢᠨ ᠨᠣᠷᠮ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="156"/>
+-        <location filename="../src/hwwidget.h" line="171"/>
++        <location filename="../src/include/hwinfostorage.h" line="30"/>
++        <location filename="../src/include/hwinfostorage.h" line="45"/>
+         <source>CPU Temperature</source>
+         <translation>CPU ᠳᠤᠯᠠᠭᠠᠨ ᠤ ᠬᠡᠮᠵᠢᠶ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="175"/>
+-        <location filename="../src/hwwidget.h" line="188"/>
++        <location filename="../src/include/hwinfostorage.h" line="49"/>
++        <location filename="../src/include/hwinfostorage.h" line="62"/>
+         <source>Bank Locator</source>
+         <translation>ᠪᠠᠩᠭᠢ ᠶᠢᠨ ᠣᠷᠣᠨ ᠪᠠᠶᠢᠷᠢ ᠲᠣᠭᠲᠠᠭᠠᠬᠤ ᠪᠠᠭᠠᠵᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="176"/>
+-        <location filename="../src/hwwidget.h" line="189"/>
++        <location filename="../src/include/hwinfostorage.h" line="50"/>
++        <location filename="../src/include/hwinfostorage.h" line="63"/>
+         <source>Total Width</source>
+         <translation>ᠶᠡᠷᠦᠩᠬᠡᠢ ᠥᠷᠭᠡᠳᠬᠡᠴᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="177"/>
+-        <location filename="../src/hwwidget.h" line="190"/>
+-        <location filename="../src/hwwidget.h" line="290"/>
+-        <location filename="../src/hwwidget.h" line="302"/>
++        <location filename="../src/include/hwinfostorage.h" line="51"/>
++        <location filename="../src/include/hwinfostorage.h" line="64"/>
++        <location filename="../src/include/hwinfostorage.h" line="165"/>
++        <location filename="../src/include/hwinfostorage.h" line="178"/>
+         <source>Size</source>
+         <translation>ᠶᠡᠬᠡ ᠪᠠᠭ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="178"/>
+-        <location filename="../src/hwwidget.h" line="191"/>
+-        <location filename="../src/hwwidget.h" line="245"/>
+-        <location filename="../src/hwwidget.h" line="255"/>
+-        <location filename="../src/hwwidget.h" line="291"/>
+-        <location filename="../src/hwwidget.h" line="303"/>
+-        <location filename="../src/hwwidget.h" line="414"/>
+-        <location filename="../src/hwwidget.h" line="424"/>
+-        <location filename="../src/hwwidget.h" line="455"/>
+-        <location filename="../src/hwwidget.h" line="465"/>
++        <location filename="../src/include/hwinfostorage.h" line="52"/>
++        <location filename="../src/include/hwinfostorage.h" line="65"/>
++        <location filename="../src/include/hwinfostorage.h" line="119"/>
++        <location filename="../src/include/hwinfostorage.h" line="129"/>
++        <location filename="../src/include/hwinfostorage.h" line="167"/>
++        <location filename="../src/include/hwinfostorage.h" line="180"/>
++        <location filename="../src/include/hwinfostorage.h" line="293"/>
++        <location filename="../src/include/hwinfostorage.h" line="303"/>
++        <location filename="../src/include/hwinfostorage.h" line="334"/>
++        <location filename="../src/include/hwinfostorage.h" line="344"/>
+         <source>Serial Number</source>
+         <translation>ᠳᠡᠰ ᠳᠠᠷᠠᠭᠠᠯᠠᠯ ᠤᠨ ᠨᠣᠮᠧᠷ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="180"/>
+-        <location filename="../src/hwwidget.h" line="193"/>
++        <location filename="../src/include/hwinfostorage.h" line="54"/>
++        <location filename="../src/include/hwinfostorage.h" line="67"/>
+         <source>Data Width</source>
+         <translation>ᠲᠣᠭ᠎ᠠ ᠪᠠᠷᠢᠮᠲᠠ ᠶᠢᠨ ᠥᠷᠭᠡᠳᠬᠡᠴᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="181"/>
+-        <location filename="../src/hwwidget.h" line="194"/>
+-        <location filename="../src/hwwidget.h" line="265"/>
+-        <location filename="../src/hwwidget.h" line="278"/>
++        <location filename="../src/include/hwinfostorage.h" line="55"/>
++        <location filename="../src/include/hwinfostorage.h" line="68"/>
++        <location filename="../src/include/hwinfostorage.h" line="139"/>
++        <location filename="../src/include/hwinfostorage.h" line="153"/>
+         <source>Type</source>
+         <translation>ᠲᠦᠷᠦᠯ ᠬᠡᠯᠪᠡᠷᠢ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="182"/>
+-        <location filename="../src/hwwidget.h" line="195"/>
+-        <location filename="../src/hwwidget.h" line="388"/>
+-        <location filename="../src/hwwidget.h" line="402"/>
+-        <location filename="../src/hwwidget.h" line="413"/>
+-        <location filename="../src/hwwidget.h" line="423"/>
+-        <location filename="../src/hwwidget.h" line="434"/>
+-        <location filename="../src/hwwidget.h" line="443"/>
+-        <location filename="../src/hwwidget.h" line="447"/>
+-        <location filename="../src/hwwidget.h" line="450"/>
++        <location filename="../src/include/hwinfostorage.h" line="56"/>
++        <location filename="../src/include/hwinfostorage.h" line="69"/>
++        <location filename="../src/include/hwinfostorage.h" line="140"/>
++        <location filename="../src/include/hwinfostorage.h" line="154"/>
++        <location filename="../src/include/hwinfostorage.h" line="267"/>
++        <location filename="../src/include/hwinfostorage.h" line="281"/>
++        <location filename="../src/include/hwinfostorage.h" line="292"/>
++        <location filename="../src/include/hwinfostorage.h" line="302"/>
++        <location filename="../src/include/hwinfostorage.h" line="313"/>
++        <location filename="../src/include/hwinfostorage.h" line="322"/>
++        <location filename="../src/include/hwinfostorage.h" line="326"/>
++        <location filename="../src/include/hwinfostorage.h" line="329"/>
+         <source>Speed</source>
+         <translation>ᠬᠤᠷᠳᠤᠴᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="183"/>
+-        <location filename="../src/hwwidget.h" line="196"/>
++        <location filename="../src/include/hwinfostorage.h" line="57"/>
++        <location filename="../src/include/hwinfostorage.h" line="70"/>
+         <source>Configured Speed</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="184"/>
+-        <location filename="../src/hwwidget.h" line="197"/>
++        <location filename="../src/include/hwinfostorage.h" line="58"/>
++        <location filename="../src/include/hwinfostorage.h" line="71"/>
+         <source>Part Number</source>
+         <translation>ᠰᠡᠯᠭᠦᠭᠡ ᠲᠣᠨᠣᠭ ᠤᠨ ᠳ᠋ᠤᠭᠠᠷ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="185"/>
+-        <location filename="../src/hwwidget.h" line="198"/>
++        <location filename="../src/include/hwinfostorage.h" line="59"/>
++        <location filename="../src/include/hwinfostorage.h" line="72"/>
+         <source>Memory Usage</source>
+         <translation>ᠳᠣᠲᠣᠭᠠᠳᠤ ᠬᠠᠳᠠᠭᠠᠯᠠᠭᠤᠷ ᠬᠡᠷᠡᠭᠯᠡᠭᠰᠡᠨ ᠪᠠᠶᠢᠳᠠᠯ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="203"/>
+-        <location filename="../src/hwwidget.h" line="221"/>
++        <location filename="../src/include/hwinfostorage.h" line="77"/>
++        <location filename="../src/include/hwinfostorage.h" line="95"/>
+         <source>Sub System Device ID</source>
+         <translation>ᠽᠢ ᠰᠢᠰᠲ᠋ᠧᠮ ᠦᠨ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ID ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="204"/>
+-        <location filename="../src/hwwidget.h" line="222"/>
+-        <location filename="../src/hwwidget.h" line="261"/>
+-        <location filename="../src/hwwidget.h" line="274"/>
+-        <location filename="../src/hwwidget.h" line="289"/>
+-        <location filename="../src/hwwidget.h" line="301"/>
+-        <location filename="../src/hwwidget.h" line="316"/>
+-        <location filename="../src/hwwidget.h" line="328"/>
+-        <location filename="../src/hwwidget.h" line="356"/>
+-        <location filename="../src/hwwidget.h" line="362"/>
+-        <location filename="../src/hwwidget.h" line="369"/>
+-        <location filename="../src/hwwidget.h" line="375"/>
+-        <location filename="../src/hwwidget.h" line="429"/>
+-        <location filename="../src/hwwidget.h" line="438"/>
++        <location filename="../src/include/hwinfostorage.h" line="78"/>
++        <location filename="../src/include/hwinfostorage.h" line="96"/>
++        <location filename="../src/include/hwinfostorage.h" line="135"/>
++        <location filename="../src/include/hwinfostorage.h" line="149"/>
++        <location filename="../src/include/hwinfostorage.h" line="195"/>
++        <location filename="../src/include/hwinfostorage.h" line="207"/>
++        <location filename="../src/include/hwinfostorage.h" line="235"/>
++        <location filename="../src/include/hwinfostorage.h" line="241"/>
++        <location filename="../src/include/hwinfostorage.h" line="248"/>
++        <location filename="../src/include/hwinfostorage.h" line="254"/>
++        <location filename="../src/include/hwinfostorage.h" line="308"/>
++        <location filename="../src/include/hwinfostorage.h" line="317"/>
+         <source>Model</source>
+         <translation>ᠬᠡᠯᠪᠡᠷᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="205"/>
+-        <location filename="../src/hwwidget.h" line="223"/>
++        <location filename="../src/include/hwinfostorage.h" line="79"/>
++        <location filename="../src/include/hwinfostorage.h" line="97"/>
+         <source>Memory</source>
+         <translation>ᠳᠣᠲᠣᠭᠠᠳᠤ ᠬᠠᠳᠠᠭᠠᠯᠠᠭᠤᠷ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="206"/>
+-        <location filename="../src/hwwidget.h" line="224"/>
++        <location filename="../src/include/hwinfostorage.h" line="80"/>
++        <location filename="../src/include/hwinfostorage.h" line="98"/>
+         <source>GPU Type</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="207"/>
+-        <location filename="../src/hwwidget.h" line="225"/>
+-        <location filename="../src/hwwidget.h" line="409"/>
+-        <location filename="../src/hwwidget.h" line="419"/>
+-        <location filename="../src/hwwidget.h" line="433"/>
+-        <location filename="../src/hwwidget.h" line="442"/>
++        <location filename="../src/include/hwinfostorage.h" line="81"/>
++        <location filename="../src/include/hwinfostorage.h" line="99"/>
++        <location filename="../src/include/hwinfostorage.h" line="288"/>
++        <location filename="../src/include/hwinfostorage.h" line="298"/>
++        <location filename="../src/include/hwinfostorage.h" line="312"/>
++        <location filename="../src/include/hwinfostorage.h" line="321"/>
+         <source>Bus Info</source>
+         <translation>ᠠᠦᠢᠲ᠋ᠣ᠋ ᠶᠢᠨ ᠰᠤᠷᠠᠭ ᠵᠠᠩᠭᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="208"/>
+-        <location filename="../src/hwwidget.h" line="226"/>
+-        <location filename="../src/hwwidget.h" line="342"/>
+-        <location filename="../src/hwwidget.h" line="349"/>
++        <location filename="../src/include/hwinfostorage.h" line="82"/>
++        <location filename="../src/include/hwinfostorage.h" line="100"/>
++        <location filename="../src/include/hwinfostorage.h" line="221"/>
++        <location filename="../src/include/hwinfostorage.h" line="228"/>
+         <source>Clock</source>
+         <translation>ᠴᠠᠭ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="209"/>
+-        <location filename="../src/hwwidget.h" line="227"/>
++        <location filename="../src/include/hwinfostorage.h" line="83"/>
++        <location filename="../src/include/hwinfostorage.h" line="101"/>
+         <source>Physics ID</source>
+         <translation>ᠹᠢᠽᠢᠺ ID ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="210"/>
+-        <location filename="../src/hwwidget.h" line="228"/>
+-        <location filename="../src/hwwidget.h" line="240"/>
+-        <location filename="../src/hwwidget.h" line="250"/>
+-        <location filename="../src/hwwidget.h" line="410"/>
+-        <location filename="../src/hwwidget.h" line="420"/>
+-        <location filename="../src/hwwidget.h" line="432"/>
+-        <location filename="../src/hwwidget.h" line="441"/>
++        <location filename="../src/include/hwinfostorage.h" line="84"/>
++        <location filename="../src/include/hwinfostorage.h" line="102"/>
++        <location filename="../src/include/hwinfostorage.h" line="114"/>
++        <location filename="../src/include/hwinfostorage.h" line="124"/>
++        <location filename="../src/include/hwinfostorage.h" line="289"/>
++        <location filename="../src/include/hwinfostorage.h" line="299"/>
++        <location filename="../src/include/hwinfostorage.h" line="311"/>
++        <location filename="../src/include/hwinfostorage.h" line="320"/>
+         <source>Version</source>
+         <translation>ᠬᠡᠪᠯᠡᠯ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="211"/>
+-        <location filename="../src/hwwidget.h" line="229"/>
+-        <location filename="../src/hwwidget.h" line="263"/>
+-        <location filename="../src/hwwidget.h" line="276"/>
+-        <location filename="../src/hwwidget.h" line="343"/>
+-        <location filename="../src/hwwidget.h" line="350"/>
+-        <location filename="../src/hwwidget.h" line="358"/>
+-        <location filename="../src/hwwidget.h" line="364"/>
+-        <location filename="../src/hwwidget.h" line="371"/>
+-        <location filename="../src/hwwidget.h" line="377"/>
+-        <location filename="../src/hwwidget.h" line="381"/>
+-        <location filename="../src/hwwidget.h" line="394"/>
+-        <location filename="../src/hwwidget.h" line="411"/>
+-        <location filename="../src/hwwidget.h" line="421"/>
+-        <location filename="../src/hwwidget.h" line="431"/>
+-        <location filename="../src/hwwidget.h" line="440"/>
++        <location filename="../src/include/hwinfostorage.h" line="85"/>
++        <location filename="../src/include/hwinfostorage.h" line="103"/>
++        <location filename="../src/include/hwinfostorage.h" line="137"/>
++        <location filename="../src/include/hwinfostorage.h" line="151"/>
++        <location filename="../src/include/hwinfostorage.h" line="222"/>
++        <location filename="../src/include/hwinfostorage.h" line="229"/>
++        <location filename="../src/include/hwinfostorage.h" line="237"/>
++        <location filename="../src/include/hwinfostorage.h" line="243"/>
++        <location filename="../src/include/hwinfostorage.h" line="250"/>
++        <location filename="../src/include/hwinfostorage.h" line="256"/>
++        <location filename="../src/include/hwinfostorage.h" line="260"/>
++        <location filename="../src/include/hwinfostorage.h" line="273"/>
++        <location filename="../src/include/hwinfostorage.h" line="290"/>
++        <location filename="../src/include/hwinfostorage.h" line="300"/>
++        <location filename="../src/include/hwinfostorage.h" line="310"/>
++        <location filename="../src/include/hwinfostorage.h" line="319"/>
+         <source>Driver</source>
+         <translation>ᠵᠢᠯᠣᠭᠣᠴᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="212"/>
+-        <location filename="../src/hwwidget.h" line="230"/>
++        <location filename="../src/include/hwinfostorage.h" line="86"/>
++        <location filename="../src/include/hwinfostorage.h" line="104"/>
+         <source>Communication Width</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="344"/>
+-        <location filename="../src/hwwidget.h" line="351"/>
++        <location filename="../src/include/hwinfostorage.h" line="166"/>
++        <location filename="../src/include/hwinfostorage.h" line="179"/>
++        <source>Mount Point</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/include/hwinfostorage.h" line="175"/>
++        <location filename="../src/include/hwinfostorage.h" line="188"/>
++        <source>Rota</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/include/hwinfostorage.h" line="223"/>
++        <location filename="../src/include/hwinfostorage.h" line="230"/>
+         <source>Width</source>
+         <translation>ᠥᠷᠭᠡᠳᠬᠡᠴᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="213"/>
+-        <location filename="../src/hwwidget.h" line="231"/>
++        <location filename="../src/include/hwinfostorage.h" line="87"/>
++        <location filename="../src/include/hwinfostorage.h" line="105"/>
+         <source>GDDR Size</source>
+         <translation>ᠭᠧᠳ᠋ ᠳᠥᠷᠪᠡᠨ ᠳᠦᠷᠢᠮ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="214"/>
+-        <location filename="../src/hwwidget.h" line="232"/>
++        <location filename="../src/include/hwinfostorage.h" line="88"/>
++        <location filename="../src/include/hwinfostorage.h" line="106"/>
+         <source>EGL Version</source>
+         <translation>ᠠᠶᠢᠷᠰᠠᠸᠸᠰᠢ ᠣᠩᠭᠣᠨ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="215"/>
+-        <location filename="../src/hwwidget.h" line="233"/>
++        <location filename="../src/include/hwinfostorage.h" line="89"/>
++        <location filename="../src/include/hwinfostorage.h" line="107"/>
+         <source>EGL Api List</source>
+         <translation>ᠠᠶᠢᠷ ᠠᠫᠢᠯᠢᠰᠲ᠋ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="216"/>
+-        <location filename="../src/hwwidget.h" line="234"/>
++        <location filename="../src/include/hwinfostorage.h" line="90"/>
++        <location filename="../src/include/hwinfostorage.h" line="108"/>
+         <source>OpenGL Version</source>
+         <translation>ᠣᠫᠷᠸᠢᠯᠰᠢ ᠣᠩᠭᠣᠨ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="217"/>
+-        <location filename="../src/hwwidget.h" line="235"/>
++        <location filename="../src/include/hwinfostorage.h" line="91"/>
++        <location filename="../src/include/hwinfostorage.h" line="109"/>
+         <source>GLSL Version</source>
+         <translation>ᠭᠡᠰᠡᠷᠸᠢᠸᠢᠰᠢ ᠣᠩᠭᠣᠨ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="241"/>
+-        <location filename="../src/hwwidget.h" line="251"/>
++        <location filename="../src/include/hwinfostorage.h" line="115"/>
++        <location filename="../src/include/hwinfostorage.h" line="125"/>
+         <source>Chassis Handle</source>
+         <translation>ᠰᠠᠭᠤᠷᠢ ᠫᠠᠨᠰᠠ ᠭᠠᠷ ᠢᠶᠠᠨ ᠪᠠᠷᠢᠨ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="242"/>
+-        <location filename="../src/hwwidget.h" line="252"/>
++        <location filename="../src/include/hwinfostorage.h" line="116"/>
++        <location filename="../src/include/hwinfostorage.h" line="126"/>
+         <source>Bios Vendor</source>
+         <translation>BIOS ᠬᠠᠩᠭ᠋ᠠᠬᠤ ᠬᠤᠳᠠᠯᠳᠤᠭᠠᠴᠢᠨ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="243"/>
+-        <location filename="../src/hwwidget.h" line="253"/>
++        <location filename="../src/include/hwinfostorage.h" line="117"/>
++        <location filename="../src/include/hwinfostorage.h" line="127"/>
+         <source>Bios Version</source>
+         <translation>BIOS ᠬᠡᠪᠯᠡᠯ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="244"/>
+-        <location filename="../src/hwwidget.h" line="254"/>
++        <location filename="../src/include/hwinfostorage.h" line="118"/>
++        <location filename="../src/include/hwinfostorage.h" line="128"/>
+         <source>Chipser</source>
+         <translation>ᠬᠡᠷᠴᠢᠬᠦ ᠮᠠᠰᠢᠨ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="246"/>
+-        <location filename="../src/hwwidget.h" line="256"/>
++        <location filename="../src/include/hwinfostorage.h" line="120"/>
++        <location filename="../src/include/hwinfostorage.h" line="130"/>
+         <source>Publish Date</source>
+         <translation>ᠨᠡᠶᠢᠲᠡᠯᠡᠬᠦ ᠡᠳᠦᠷ ᠬᠤᠭᠤᠴᠠᠭ᠎ᠠ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="262"/>
+-        <location filename="../src/hwwidget.h" line="275"/>
++        <location filename="../src/include/hwinfostorage.h" line="136"/>
++        <location filename="../src/include/hwinfostorage.h" line="150"/>
+         <source>Bus</source>
+         <translation>ᠶᠡᠷᠦᠩᠬᠡᠢ ᠱᠤᠭᠤ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="264"/>
+-        <location filename="../src/hwwidget.h" line="277"/>
++        <location filename="../src/include/hwinfostorage.h" line="138"/>
++        <location filename="../src/include/hwinfostorage.h" line="152"/>
+         <source>MAC Address</source>
+         <translation>MAC ᠬᠠᠶᠢᠭ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="266"/>
+-        <location filename="../src/hwwidget.h" line="279"/>
++        <location filename="../src/include/hwinfostorage.h" line="141"/>
++        <location filename="../src/include/hwinfostorage.h" line="155"/>
+         <source>IP Address</source>
+         <translation>IP ᠬᠠᠶᠢᠭ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="267"/>
+-        <location filename="../src/hwwidget.h" line="280"/>
++        <location filename="../src/include/hwinfostorage.h" line="142"/>
++        <location filename="../src/include/hwinfostorage.h" line="156"/>
+         <source>Net Musk</source>
+         <translation>ᠴᠡᠪᠡᠷ ᠪᠦᠷᠭᠥᠳ ᠦᠨ ᠦᠨᠦᠷ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="268"/>
+-        <location filename="../src/hwwidget.h" line="281"/>
++        <location filename="../src/include/hwinfostorage.h" line="143"/>
++        <location filename="../src/include/hwinfostorage.h" line="157"/>
+         <source>Send Bytes</source>
+         <translation>ᠦᠰᠦᠭ ᠦᠨ ᠪᠠᠶᠠᠷ ᠬᠦᠷᠭᠡᠨ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="269"/>
+-        <location filename="../src/hwwidget.h" line="282"/>
++        <location filename="../src/include/hwinfostorage.h" line="144"/>
++        <location filename="../src/include/hwinfostorage.h" line="158"/>
+         <source>Recved Bytes</source>
+         <translation>ᠬᠦᠯᠢᠶᠡᠨ ᠠᠪᠬᠤ ᠦᠰᠦᠭ ᠦᠨ ᠲᠣᠭ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="270"/>
+-        <location filename="../src/hwwidget.h" line="283"/>
++        <location filename="../src/include/hwinfostorage.h" line="145"/>
++        <location filename="../src/include/hwinfostorage.h" line="159"/>
+         <source>MTU</source>
+         <translation>MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="288"/>
+-        <location filename="../src/hwwidget.h" line="306"/>
++        <location filename="../src/include/hwinfostorage.h" line="164"/>
++        <location filename="../src/include/hwinfostorage.h" line="183"/>
+         <source>Vendor</source>
+         <translation>ᠬᠠᠩᠭ᠋ᠠᠭᠴᠢ ᠬᠤᠳᠠᠯᠳᠤᠭᠠᠴᠢᠨ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="292"/>
++        <location filename="../src/include/hwinfostorage.h" line="168"/>
+         <source>Disk Name</source>
+         <translation>ᠰᠤᠷᠢᠨᠵᠢᠨ ᠫᠠᠨᠰᠠ ᠶᠢᠨ ᠨᠡᠷᠡᠶᠢᠳᠦᠯ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="293"/>
+-        <location filename="../src/hwwidget.h" line="304"/>
++        <location filename="../src/include/hwinfostorage.h" line="169"/>
++        <location filename="../src/include/hwinfostorage.h" line="181"/>
+         <source>Frimwarever Version</source>
+         <translation>ᠹᠷᠠᠨᠮᠧᠨᠠᠸᠷᠠᠸᠷ ᠬᠡᠪᠯᠡᠯ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="294"/>
+-        <location filename="../src/hwwidget.h" line="305"/>
++        <location filename="../src/include/hwinfostorage.h" line="170"/>
++        <location filename="../src/include/hwinfostorage.h" line="182"/>
+         <source>Disk Type</source>
+         <translation>ᠫᠠᠨᠰᠠ ᠶᠢᠨ ᠬᠡᠯᠪᠡᠷᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="295"/>
+-        <location filename="../src/hwwidget.h" line="307"/>
++        <location filename="../src/include/hwinfostorage.h" line="171"/>
++        <location filename="../src/include/hwinfostorage.h" line="184"/>
+         <source>Main Disk</source>
+         <translation>ᠭᠣᠣᠯ ᠫᠠᠨᠰᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="297"/>
+-        <location filename="../src/hwwidget.h" line="309"/>
++        <location filename="../src/include/hwinfostorage.h" line="173"/>
++        <location filename="../src/include/hwinfostorage.h" line="186"/>
+         <source>UFS</source>
+         <translation>UFS</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="298"/>
+-        <location filename="../src/hwwidget.h" line="310"/>
++        <location filename="../src/include/hwinfostorage.h" line="174"/>
++        <location filename="../src/include/hwinfostorage.h" line="187"/>
+         <source>UFS Revision</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="317"/>
+-        <location filename="../src/hwwidget.h" line="329"/>
++        <location filename="../src/include/hwinfostorage.h" line="196"/>
++        <location filename="../src/include/hwinfostorage.h" line="208"/>
+         <source>Monitor Size</source>
+         <translation>ᠳᠡᠯᠭᠡᠴᠡ ᠶᠢᠨ ᠲᠣᠨᠭ᠌᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="318"/>
+-        <location filename="../src/hwwidget.h" line="330"/>
++        <location filename="../src/include/hwinfostorage.h" line="197"/>
++        <location filename="../src/include/hwinfostorage.h" line="209"/>
+         <source>Monitor Ratio</source>
+         <translation>ᠬᠢᠨᠠᠨ ᠡᠵᠡᠮᠳᠡᠬᠦ ᠬᠠᠷᠢᠴᠠᠯ ᠤᠨ ᠨᠤᠷᠮ᠎ᠠ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="319"/>
+-        <location filename="../src/hwwidget.h" line="331"/>
++        <location filename="../src/include/hwinfostorage.h" line="198"/>
++        <location filename="../src/include/hwinfostorage.h" line="210"/>
+         <source>Resolution</source>
+         <translation>ᠢᠯᠭᠠᠴᠠ ᠶᠢᠨ ᠨᠣᠷᠮ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="320"/>
+-        <location filename="../src/hwwidget.h" line="332"/>
++        <location filename="../src/include/hwinfostorage.h" line="199"/>
++        <location filename="../src/include/hwinfostorage.h" line="211"/>
+         <source>Max Resolution</source>
+         <translation>ᠬᠠᠮᠤᠭ ᠶᠡᠬᠡ ᠢᠯᠭᠠᠴᠠ ᠶᠢᠨ ᠨᠣᠷᠮ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="321"/>
+-        <location filename="../src/hwwidget.h" line="333"/>
++        <location filename="../src/include/hwinfostorage.h" line="200"/>
++        <location filename="../src/include/hwinfostorage.h" line="212"/>
+         <source>Main Monitor</source>
+         <translation>ᠭᠣᠤᠯ ᠠᠵᠢᠭᠯᠠᠬᠤ ᠮᠠᠰᠢᠨ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="335"/>
+-        <location filename="../src/hwwidget.h" line="296"/>
+-        <location filename="../src/hwwidget.h" line="308"/>
+-        <location filename="../src/hwwidget.h" line="322"/>
+-        <location filename="../src/hwwidget.h" line="334"/>
+-        <location filename="../src/hwwidget.h" line="357"/>
+-        <location filename="../src/hwwidget.h" line="363"/>
+-        <location filename="../src/hwwidget.h" line="370"/>
+-        <location filename="../src/hwwidget.h" line="376"/>
+-        <location filename="../src/hwwidget.h" line="430"/>
+-        <location filename="../src/hwwidget.h" line="439"/>
++        <location filename="../src/hwwidget.cpp" line="670"/>
++        <location filename="../src/include/hwinfostorage.h" line="172"/>
++        <location filename="../src/include/hwinfostorage.h" line="185"/>
++        <location filename="../src/include/hwinfostorage.h" line="201"/>
++        <location filename="../src/include/hwinfostorage.h" line="213"/>
++        <location filename="../src/include/hwinfostorage.h" line="236"/>
++        <location filename="../src/include/hwinfostorage.h" line="242"/>
++        <location filename="../src/include/hwinfostorage.h" line="249"/>
++        <location filename="../src/include/hwinfostorage.h" line="255"/>
++        <location filename="../src/include/hwinfostorage.h" line="309"/>
++        <location filename="../src/include/hwinfostorage.h" line="318"/>
+         <source>Interface</source>
+         <translation>ᠠᠮᠠ ᠶᠢ ᠲᠤᠰᠬᠤ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="323"/>
+-        <location filename="../src/hwwidget.h" line="335"/>
++        <location filename="../src/include/hwinfostorage.h" line="202"/>
++        <location filename="../src/include/hwinfostorage.h" line="214"/>
+         <source>Visible Area</source>
+         <translation>ᠣᠷᠣᠨ ᠪᠦᠰᠡ ᠶᠢ ᠬᠠᠷᠠᠵᠤ ᠪᠣᠯᠣᠨ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="324"/>
+-        <location filename="../src/hwwidget.h" line="336"/>
++        <location filename="../src/include/hwinfostorage.h" line="203"/>
++        <location filename="../src/include/hwinfostorage.h" line="215"/>
+         <source>Gamma</source>
+         <translation>ᠭᠠᠮᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="341"/>
+-        <location filename="../src/hwwidget.h" line="348"/>
++        <location filename="../src/include/hwinfostorage.h" line="220"/>
++        <location filename="../src/include/hwinfostorage.h" line="227"/>
+         <source>Bus Address</source>
+         <translation>ᠪᠠᠰᠲ᠋ᠧᠷ ᠦᠨ ᠬᠠᠶᠢᠭ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="382"/>
+-        <location filename="../src/hwwidget.h" line="395"/>
++        <location filename="../src/include/hwinfostorage.h" line="261"/>
++        <location filename="../src/include/hwinfostorage.h" line="274"/>
+         <source>Driver Version</source>
+         <translation></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="474"/>
+-        <location filename="../src/hwwidget.h" line="383"/>
+-        <location filename="../src/hwwidget.h" line="396"/>
++        <location filename="../src/hwwidget.cpp" line="1000"/>
++        <location filename="../src/include/hwinfostorage.h" line="262"/>
++        <location filename="../src/include/hwinfostorage.h" line="275"/>
+         <source>Address</source>
+         <translation>ᠫᠷᠤᠭ᠍ᠷᠠᠮ ᠤᠨ ᠬᠡᠪᠯᠡᠯ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="384"/>
+-        <location filename="../src/hwwidget.h" line="397"/>
++        <location filename="../src/include/hwinfostorage.h" line="263"/>
++        <location filename="../src/include/hwinfostorage.h" line="276"/>
+         <source>Link Mode</source>
+         <translation>ᠬᠣᠯᠪᠣᠯᠲᠠ ᠶᠢᠨ ᠵᠠᠭᠪᠤᠷ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="385"/>
+-        <location filename="../src/hwwidget.h" line="398"/>
++        <location filename="../src/include/hwinfostorage.h" line="264"/>
++        <location filename="../src/include/hwinfostorage.h" line="277"/>
+         <source>Link Policy</source>
+         <translation>ᠬᠣᠯᠪᠣᠯᠲᠠ ᠶᠢᠨ ᠲᠥᠷᠥ ᠶᠢᠨ ᠪᠣᠳᠣᠯᠭ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="387"/>
+-        <location filename="../src/hwwidget.h" line="401"/>
++        <location filename="../src/include/hwinfostorage.h" line="266"/>
++        <location filename="../src/include/hwinfostorage.h" line="280"/>
+         <source>ACL MTU</source>
+         <translation>ACL MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="390"/>
+-        <location filename="../src/hwwidget.h" line="399"/>
++        <location filename="../src/include/hwinfostorage.h" line="269"/>
++        <location filename="../src/include/hwinfostorage.h" line="278"/>
+         <source>Packe Type</source>
+         <translation>ᠫᠠᠺᠧ ᠶᠢᠨ ᠬᠡᠯᠪᠡᠷᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="386"/>
+-        <location filename="../src/hwwidget.h" line="400"/>
++        <location filename="../src/include/hwinfostorage.h" line="265"/>
++        <location filename="../src/include/hwinfostorage.h" line="279"/>
+         <source>SCO MTU</source>
+         <translation>SCO MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="389"/>
+-        <location filename="../src/hwwidget.h" line="403"/>
++        <location filename="../src/include/hwinfostorage.h" line="268"/>
++        <location filename="../src/include/hwinfostorage.h" line="282"/>
+         <source>Features</source>
+         <translation>ᠣᠨᠴᠠᠯᠢᠭ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="408"/>
+-        <location filename="../src/hwwidget.h" line="418"/>
++        <location filename="../src/include/hwinfostorage.h" line="287"/>
++        <location filename="../src/include/hwinfostorage.h" line="297"/>
+         <source>Name</source>
+         <translation>ᠨᠡᠷ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="412"/>
+-        <location filename="../src/hwwidget.h" line="422"/>
++        <location filename="../src/include/hwinfostorage.h" line="291"/>
++        <location filename="../src/include/hwinfostorage.h" line="301"/>
+         <source>Device Number</source>
+         <translation>ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠶᠢᠨ ᠨᠣᠮᠧᠷ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="456"/>
+-        <location filename="../src/hwwidget.h" line="466"/>
++        <location filename="../src/include/hwinfostorage.h" line="335"/>
++        <location filename="../src/include/hwinfostorage.h" line="345"/>
+         <source>State</source>
+         <translation>ᠵᠧᠦ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="457"/>
+-        <location filename="../src/hwwidget.h" line="467"/>
++        <location filename="../src/include/hwinfostorage.h" line="336"/>
++        <location filename="../src/include/hwinfostorage.h" line="346"/>
+         <source>Energy</source>
+         <translation>ᠴᠠᠬᠢᠯᠭᠠᠨ ᠤ ᠬᠡᠮᠵᠢᠶ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="458"/>
+-        <location filename="../src/hwwidget.h" line="468"/>
++        <location filename="../src/include/hwinfostorage.h" line="337"/>
++        <location filename="../src/include/hwinfostorage.h" line="347"/>
+         <source>Used Times</source>
+         <translation>ᠴᠠᠭ ᠬᠡᠷᠡᠭ᠍ᠯᠡᠬᠦ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="459"/>
+-        <location filename="../src/hwwidget.h" line="469"/>
++        <location filename="../src/include/hwinfostorage.h" line="338"/>
++        <location filename="../src/include/hwinfostorage.h" line="348"/>
+         <source>Energy Full</source>
+         <translation>ᠤᠶᠤᠨ ᠴᠢᠳᠠᠯ ᠪᠠᠳᠠᠷᠠᠩᠭᠤᠢ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="460"/>
+-        <location filename="../src/hwwidget.h" line="470"/>
++        <location filename="../src/include/hwinfostorage.h" line="339"/>
++        <location filename="../src/include/hwinfostorage.h" line="349"/>
+         <source>Time To Empty</source>
+         <translation>ᠣᠷᠣᠨ ᠵᠠᠢ ᠶᠢ ᠴᠡᠪᠡᠷᠯᠡᠬᠦ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="461"/>
+-        <location filename="../src/hwwidget.h" line="471"/>
++        <location filename="../src/include/hwinfostorage.h" line="340"/>
++        <location filename="../src/include/hwinfostorage.h" line="350"/>
+         <source>Percentage</source>
+         <translation>ᠵᠠᠭᠤᠨ ᠤ ᠬᠠᠷᠢᠴᠠᠯ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="40"/>
++        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="57"/>
+         <source>Wireless</source>
+         <translation>ᠷᠠᠳᠢᠣ᠋ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="42"/>
++        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="59"/>
+         <source>Wired</source>
+         <translation>ᠤᠲᠠᠰᠤ ᠲᠠᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="87"/>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="121"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="93"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="103"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="150"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="155"/>
+         <source>This CPU model does not support frequency display function</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/device-controller/translations/kylin-os-manager-device-controller_ug.ts b/plugins/device-controller/translations/kylin-os-manager-device-controller_ug.ts
+index bf3200b..fe7b1d1 100644
+--- a/plugins/device-controller/translations/kylin-os-manager-device-controller_ug.ts
++++ b/plugins/device-controller/translations/kylin-os-manager-device-controller_ug.ts
+@@ -214,92 +214,92 @@
+ <context>
+     <name>DriverInstallWidget</name>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
+         <source>Installable Drivers</source>
+         <translation>ئورنىتىشقا بولىدىغان شوپۇرلار</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>)</source>
+         <translation></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>(</source>
+         <translation></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+         <source>One-click installation</source>
+         <translation>بىر كۇنۇپكا بىلەن قۇراشتۇرۇش</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
+         <source>Upgradable Drivers</source>
+         <translation>دەرىجىسىنى ئۆستۈرگىلى بولىدىغان شوپۇرلار</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+         <source>One-click upgrade</source>
+         <translation>بىر كۇنۇپكا دەرىجىسىنى ئۆستۈرۈش</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
+         <source>Installed Drivers</source>
+         <translation>ئورنىتىلغان شوپۇرلۇق</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>Unrecognized Device</source>
+         <translation>پەرق ئېتىراپ قىلىنمىغان قۇرۇلما</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1200"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1248"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1213"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1261"/>
+         <source>Uninstalling drivers. Please wait for the uninstallation to complete before clicking again.</source>
+         <translation>شوپۇرنى قۇراشتۇرۇش. قۇراشتۇرۇشنى تاماملىغاندىن كېيىن ئاندىن يەنە چېكىپ بېقىڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1202"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1250"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1215"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1263"/>
+         <source>Uninstall Failed</source>
+         <translation>قۇراشتۇرۇش مەغلۇپ بولدى</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1205"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1253"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1218"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1266"/>
+         <source>Installing drivers. Please wait for the installation to complete before clicking again.</source>
+         <translation>شوپۇرنى ئورنىتىش. قۇراشتۇرۇش تاماملانغاندىن كېيىن يەنە چېكىپ بېقىڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1065"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1206"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1254"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1078"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1219"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1267"/>
+         <source>Install Failed</source>
+         <translation>قۇراشتۇرۇش مەغلۇپ بولدى</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1069"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1082"/>
+         <source>Update</source>
+         <translation>يېڭىلاش</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1076"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1089"/>
+         <source>Install</source>
+         <translation>قۇراشتۇرۇش</translation>
+     </message>
+@@ -307,65 +307,70 @@
+ <context>
+     <name>HardWareInfoWidget</name>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="113"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="121"/>
+         <source>Computer Basic Information</source>
+         <translation>كومپيۇتېر ئاساسىي ئۇچۇرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="117"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="420"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="125"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="462"/>
+         <source>Host Name</source>
+         <translation>رىياسەتچى نامى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="121"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="421"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="129"/>
++        <source>Operation System Name</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/hardwareinfowidget.cpp" line="133"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="463"/>
+         <source>Operation System Version</source>
+         <translation>مەشغۇلات سىستېمىسى نۇسخىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="125"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="422"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="137"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="464"/>
+         <source>Kernel Version</source>
+         <translation>يادرو نۇسخىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="129"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="423"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="141"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="465"/>
+         <source>Kernel Architecture</source>
+         <translation>يادرو قۇرۇلمىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="133"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="424"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="145"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="466"/>
+         <source>System Bits</source>
+         <translation>سىستېما بىت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="137"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="425"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="149"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="467"/>
+         <source>Manufacturer</source>
+         <translation>زاۋۇت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="141"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="153"/>
+         <source>Version</source>
+         <translation>نۇسخىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="145"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="426"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="157"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="468"/>
+         <source>Model</source>
+         <translation>مودېل</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="149"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="427"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="161"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="469"/>
+         <source>Serial</source>
+         <translation>زاتتا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="334"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="375"/>
+         <source>Hardware Display</source>
+         <translation></translation>
+     </message>
+@@ -386,7 +391,7 @@
+ <context>
+     <name>HardwareInfoGetter</name>
+     <message>
+-        <location filename="../src/hardwareinfogetter.cpp" line="869"/>
++        <location filename="../src/hardwareinfogetter.cpp" line="979"/>
+         <source> inch</source>
+         <translation type="unfinished"></translation>
+     </message>
+@@ -394,112 +399,158 @@
+ <context>
+     <name>HwWidget</name>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="53"/>
++        <location filename="../src/hwwidget.cpp" line="88"/>
+         <source>Disable</source>
+         <translation>توختىتىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="72"/>
++        <location filename="../src/hwwidget.cpp" line="116"/>
+         <source>Export To Clipboard</source>
+         <translation>ئېكسپورت قىلىنىش تاختىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="73"/>
++        <location filename="../src/hwwidget.cpp" line="117"/>
+         <source>Activate</source>
+         <translation>قوزغىتىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="74"/>
++        <location filename="../src/hwwidget.cpp" line="118"/>
+         <source>Deactive</source>
+         <translation>ئاكتىپ بولماسلىق</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="84"/>
+-        <location filename="../src/hwwidget.cpp" line="87"/>
++        <location filename="../src/hwwidget.cpp" line="128"/>
++        <location filename="../src/hwwidget.cpp" line="131"/>
+         <source>CPU</source>
+         <translation>CPU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="116"/>
+-        <location filename="../src/hwwidget.cpp" line="120"/>
++        <location filename="../src/hwwidget.cpp" line="208"/>
++        <location filename="../src/hwwidget.cpp" line="212"/>
++        <location filename="../src/hwwidget.cpp" line="1330"/>
++        <location filename="../src/hwwidget.cpp" line="1333"/>
+         <source>Memory</source>
+         <translation>ئەسلىمە</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="148"/>
+-        <location filename="../src/hwwidget.cpp" line="152"/>
++        <location filename="../src/hwwidget.cpp" line="147"/>
++        <location filename="../src/hwwidget.cpp" line="228"/>
++        <location filename="../src/hwwidget.cpp" line="284"/>
++        <location filename="../src/hwwidget.cpp" line="287"/>
++        <location filename="../src/hwwidget.cpp" line="304"/>
++        <location filename="../src/hwwidget.cpp" line="1355"/>
++        <location filename="../src/hwwidget.cpp" line="1358"/>
+         <source>Graphic Card</source>
+         <translation>سۈرەت كارتىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="181"/>
+-        <location filename="../src/hwwidget.cpp" line="184"/>
++        <location filename="../src/hwwidget.cpp" line="91"/>
++        <source>This device can be disabled/enabled</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/hwwidget.cpp" line="358"/>
++        <location filename="../src/hwwidget.cpp" line="361"/>
++        <location filename="../src/hwwidget.cpp" line="378"/>
+         <source>Mother Board</source>
+         <translation>ئاساسىي تاختا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="206"/>
+-        <location filename="../src/hwwidget.cpp" line="212"/>
++        <location filename="../src/hwwidget.cpp" line="429"/>
++        <location filename="../src/hwwidget.cpp" line="435"/>
++        <location filename="../src/hwwidget.cpp" line="453"/>
++        <location filename="../src/hwwidget.cpp" line="1381"/>
++        <location filename="../src/hwwidget.cpp" line="1384"/>
+         <source>Network Card</source>
+         <translation>تور كارتىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="289"/>
+-        <location filename="../src/hwwidget.cpp" line="293"/>
++        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="556"/>
++        <location filename="../src/hwwidget.cpp" line="572"/>
++        <location filename="../src/hwwidget.cpp" line="640"/>
++        <location filename="../src/hwwidget.cpp" line="744"/>
++        <location filename="../src/hwwidget.cpp" line="1407"/>
++        <location filename="../src/hwwidget.cpp" line="1410"/>
+         <source>Disk</source>
+         <translation>قاتتىق دىسكا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="315"/>
+-        <location filename="../src/hwwidget.cpp" line="319"/>
++        <location filename="../src/hwwidget.cpp" line="620"/>
++        <location filename="../src/hwwidget.cpp" line="624"/>
++        <location filename="../src/hwwidget.cpp" line="1432"/>
++        <location filename="../src/hwwidget.cpp" line="1435"/>
+         <source>Monitor</source>
+         <translation>سىنىپ باشلىقى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="373"/>
+-        <location filename="../src/hwwidget.cpp" line="376"/>
++        <location filename="../src/hwwidget.cpp" line="723"/>
++        <location filename="../src/hwwidget.cpp" line="726"/>
++        <location filename="../src/hwwidget.cpp" line="1458"/>
++        <location filename="../src/hwwidget.cpp" line="1461"/>
+         <source>Sound Card</source>
+         <translation>ئاۋاز كارتىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="410"/>
+-        <location filename="../src/hwwidget.cpp" line="414"/>
++        <location filename="../src/hwwidget.cpp" line="824"/>
++        <location filename="../src/hwwidget.cpp" line="828"/>
++        <location filename="../src/hwwidget.cpp" line="844"/>
++        <location filename="../src/hwwidget.cpp" line="1484"/>
++        <location filename="../src/hwwidget.cpp" line="1487"/>
+         <source>Keyboard</source>
+         <translation>كۇنۇپكا تاختىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="435"/>
+-        <location filename="../src/hwwidget.cpp" line="439"/>
++        <location filename="../src/hwwidget.cpp" line="890"/>
++        <location filename="../src/hwwidget.cpp" line="894"/>
++        <location filename="../src/hwwidget.cpp" line="910"/>
++        <location filename="../src/hwwidget.cpp" line="1509"/>
++        <location filename="../src/hwwidget.cpp" line="1512"/>
+         <source>Mouse</source>
+         <translation>مائۇس</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="461"/>
+-        <location filename="../src/hwwidget.cpp" line="466"/>
++        <location filename="../src/hwwidget.cpp" line="959"/>
++        <location filename="../src/hwwidget.cpp" line="962"/>
++        <location filename="../src/hwwidget.cpp" line="980"/>
++        <location filename="../src/hwwidget.cpp" line="1534"/>
++        <location filename="../src/hwwidget.cpp" line="1537"/>
+         <source>Bluetooth</source>
+         <translation>كۆك چىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="506"/>
+-        <location filename="../src/hwwidget.cpp" line="510"/>
++        <location filename="../src/hwwidget.cpp" line="1049"/>
++        <location filename="../src/hwwidget.cpp" line="1053"/>
++        <location filename="../src/hwwidget.cpp" line="1069"/>
++        <location filename="../src/hwwidget.cpp" line="1559"/>
++        <location filename="../src/hwwidget.cpp" line="1562"/>
+         <source>CD</source>
+         <translation>دىسكا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="531"/>
+-        <location filename="../src/hwwidget.cpp" line="534"/>
++        <location filename="../src/hwwidget.cpp" line="1116"/>
++        <location filename="../src/hwwidget.cpp" line="1119"/>
++        <location filename="../src/hwwidget.cpp" line="1136"/>
++        <location filename="../src/hwwidget.cpp" line="1584"/>
++        <location filename="../src/hwwidget.cpp" line="1587"/>
+         <source>Battery</source>
+         <translation>دىسكا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="565"/>
+-        <location filename="../src/hwwidget.cpp" line="569"/>
++        <location filename="../src/hwwidget.cpp" line="1192"/>
++        <location filename="../src/hwwidget.cpp" line="1196"/>
++        <location filename="../src/hwwidget.cpp" line="1212"/>
++        <location filename="../src/hwwidget.cpp" line="1609"/>
++        <location filename="../src/hwwidget.cpp" line="1612"/>
+         <source>Fan</source>
+         <translation>مەستانىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="590"/>
+-        <location filename="../src/hwwidget.cpp" line="593"/>
++        <location filename="../src/hwwidget.cpp" line="1259"/>
++        <location filename="../src/hwwidget.cpp" line="1262"/>
++        <location filename="../src/hwwidget.cpp" line="1279"/>
++        <location filename="../src/hwwidget.cpp" line="1634"/>
++        <location filename="../src/hwwidget.cpp" line="1637"/>
+         <source>Camera</source>
+         <translation>مەستانىسى</translation>
+     </message>
+@@ -520,76 +571,76 @@
+         <translation>ئۈسكۈنە باشقۇرغۇچ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/diskinfo.cpp" line="37"/>
++        <location filename="../src/hardwareinfo/diskinfo.cpp" line="39"/>
+         <location filename="../src/hardwareinfo/monitorinfo.cpp" line="33"/>
+-        <location filename="../src/hwwidget.cpp" line="358"/>
++        <location filename="../src/hwwidget.cpp" line="695"/>
+         <source>Yes</source>
+         <translation>شۇنداق</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/diskinfo.cpp" line="35"/>
++        <location filename="../src/hardwareinfo/diskinfo.cpp" line="37"/>
+         <location filename="../src/hardwareinfo/monitorinfo.cpp" line="35"/>
+-        <location filename="../src/hwwidget.cpp" line="360"/>
++        <location filename="../src/hwwidget.cpp" line="697"/>
+         <source>No</source>
+         <translation>ياق</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="103"/>
++        <location filename="../src/hwwidget.cpp" line="177"/>
+         <source>CPU Current Frequency</source>
+         <translation>CPU ئېقىم چاستوتىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="103"/>
++        <location filename="../src/hwwidget.cpp" line="177"/>
+         <source>CPU Usage Rate</source>
+         <translation>CPU ئىشلىتىش نىسبىتى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="104"/>
++        <location filename="../src/hwwidget.cpp" line="178"/>
+         <source>CPU Temperature</source>
+         <translation>CPU تېمپېراتۇرىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="136"/>
++        <location filename="../src/hwwidget.cpp" line="258"/>
+         <source>Memory Usage</source>
+         <translation>ئىچكى ساقلىغۇچ ئىشلىتىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="169"/>
++        <location filename="../src/hwwidget.cpp" line="334"/>
+         <source>GDDR Size</source>
+         <translation>GDDR چوڭ-كىچىك</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="344"/>
++        <location filename="../src/hwwidget.cpp" line="680"/>
+         <source>Resolution</source>
+         <translation>قارار</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="354"/>
++        <location filename="../src/hwwidget.cpp" line="690"/>
+         <source>Main Monitor</source>
+         <translation>ئاساسىي سىنىپ باشلىقى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="551"/>
++        <location filename="../src/hwwidget.cpp" line="1166"/>
+         <source>Energy</source>
+         <translation>ئېنېرگىيە</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="551"/>
++        <location filename="../src/hwwidget.cpp" line="1166"/>
+         <source>Time To Empty</source>
+         <translation>قالدۇق ۋاقىت ئېنېرگىيەسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="1167"/>
+         <source>Percentage</source>
+         <translation>پىرسەنت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="1167"/>
+         <source>State</source>
+         <translation>دۆلەت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="194"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="210"/>
+         <source>This CPU model does not support temperature display function</source>
+         <translation>بۇ CPU مودېلى تېمپېراتۇرا كۆرسىتىش ئىقتىدارىنى قوللىمايدۇ</translation>
+     </message>
+@@ -611,607 +662,621 @@
+         <translation>سانلىق مەلۇمات ئامبىرى خاتالىق</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="144"/>
+-        <location filename="../src/hwwidget.h" line="159"/>
+-        <location filename="../src/hwwidget.h" line="179"/>
+-        <location filename="../src/hwwidget.h" line="192"/>
+-        <location filename="../src/hwwidget.h" line="202"/>
+-        <location filename="../src/hwwidget.h" line="220"/>
+-        <location filename="../src/hwwidget.h" line="239"/>
+-        <location filename="../src/hwwidget.h" line="249"/>
+-        <location filename="../src/hwwidget.h" line="260"/>
+-        <location filename="../src/hwwidget.h" line="273"/>
+-        <location filename="../src/hwwidget.h" line="315"/>
+-        <location filename="../src/hwwidget.h" line="327"/>
+-        <location filename="../src/hwwidget.h" line="340"/>
+-        <location filename="../src/hwwidget.h" line="347"/>
+-        <location filename="../src/hwwidget.h" line="355"/>
+-        <location filename="../src/hwwidget.h" line="361"/>
+-        <location filename="../src/hwwidget.h" line="368"/>
+-        <location filename="../src/hwwidget.h" line="374"/>
+-        <location filename="../src/hwwidget.h" line="380"/>
+-        <location filename="../src/hwwidget.h" line="393"/>
+-        <location filename="../src/hwwidget.h" line="407"/>
+-        <location filename="../src/hwwidget.h" line="417"/>
+-        <location filename="../src/hwwidget.h" line="428"/>
+-        <location filename="../src/hwwidget.h" line="437"/>
+-        <location filename="../src/hwwidget.h" line="454"/>
+-        <location filename="../src/hwwidget.h" line="464"/>
++        <location filename="../src/include/hwinfostorage.h" line="18"/>
++        <location filename="../src/include/hwinfostorage.h" line="33"/>
++        <location filename="../src/include/hwinfostorage.h" line="53"/>
++        <location filename="../src/include/hwinfostorage.h" line="66"/>
++        <location filename="../src/include/hwinfostorage.h" line="76"/>
++        <location filename="../src/include/hwinfostorage.h" line="94"/>
++        <location filename="../src/include/hwinfostorage.h" line="113"/>
++        <location filename="../src/include/hwinfostorage.h" line="123"/>
++        <location filename="../src/include/hwinfostorage.h" line="134"/>
++        <location filename="../src/include/hwinfostorage.h" line="148"/>
++        <location filename="../src/include/hwinfostorage.h" line="194"/>
++        <location filename="../src/include/hwinfostorage.h" line="206"/>
++        <location filename="../src/include/hwinfostorage.h" line="219"/>
++        <location filename="../src/include/hwinfostorage.h" line="226"/>
++        <location filename="../src/include/hwinfostorage.h" line="234"/>
++        <location filename="../src/include/hwinfostorage.h" line="240"/>
++        <location filename="../src/include/hwinfostorage.h" line="247"/>
++        <location filename="../src/include/hwinfostorage.h" line="253"/>
++        <location filename="../src/include/hwinfostorage.h" line="259"/>
++        <location filename="../src/include/hwinfostorage.h" line="272"/>
++        <location filename="../src/include/hwinfostorage.h" line="286"/>
++        <location filename="../src/include/hwinfostorage.h" line="296"/>
++        <location filename="../src/include/hwinfostorage.h" line="307"/>
++        <location filename="../src/include/hwinfostorage.h" line="316"/>
++        <location filename="../src/include/hwinfostorage.h" line="333"/>
++        <location filename="../src/include/hwinfostorage.h" line="343"/>
+         <source>Manufacturer</source>
+         <translation>زاۋۇت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="145"/>
+-        <location filename="../src/hwwidget.h" line="160"/>
++        <location filename="../src/include/hwinfostorage.h" line="19"/>
++        <location filename="../src/include/hwinfostorage.h" line="34"/>
+         <source>Cores</source>
+         <translation>يادرو</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="146"/>
+-        <location filename="../src/hwwidget.h" line="161"/>
++        <location filename="../src/include/hwinfostorage.h" line="20"/>
++        <location filename="../src/include/hwinfostorage.h" line="35"/>
+         <source>Online Cores</source>
+         <translation>توردا يادرو</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="147"/>
+-        <location filename="../src/hwwidget.h" line="162"/>
++        <location filename="../src/include/hwinfostorage.h" line="21"/>
++        <location filename="../src/include/hwinfostorage.h" line="36"/>
+         <source>Thread Per Cores</source>
+         <translation>ھەر بىر يادرو يىپ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="148"/>
+-        <location filename="../src/hwwidget.h" line="163"/>
++        <location filename="../src/include/hwinfostorage.h" line="22"/>
++        <location filename="../src/include/hwinfostorage.h" line="37"/>
+         <source>MAX MHz</source>
+         <translation>ئەڭ يۇقىرى MHz</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="149"/>
+-        <location filename="../src/hwwidget.h" line="164"/>
++        <location filename="../src/include/hwinfostorage.h" line="23"/>
++        <location filename="../src/include/hwinfostorage.h" line="38"/>
+         <source>L1d Cache</source>
+         <translation>L1D بۇففېرلىق ساقلىغۇچ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="150"/>
+-        <location filename="../src/hwwidget.h" line="165"/>
++        <location filename="../src/include/hwinfostorage.h" line="24"/>
++        <location filename="../src/include/hwinfostorage.h" line="39"/>
+         <source>L1i Cache</source>
+         <translation>L1i بۇففېرلىق ساقلىغۇچ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="151"/>
+-        <location filename="../src/hwwidget.h" line="166"/>
++        <location filename="../src/include/hwinfostorage.h" line="25"/>
++        <location filename="../src/include/hwinfostorage.h" line="40"/>
+         <source>L2 Cache</source>
+         <translation>2 دەرىجىلىك بۇففېرلىق ساقلىغۇچ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="152"/>
+-        <location filename="../src/hwwidget.h" line="167"/>
++        <location filename="../src/include/hwinfostorage.h" line="26"/>
++        <location filename="../src/include/hwinfostorage.h" line="41"/>
+         <source>L3 Cache</source>
+         <translation>L3 بۇففېرلىق ساقلىغۇچ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="153"/>
+-        <location filename="../src/hwwidget.h" line="168"/>
++        <location filename="../src/include/hwinfostorage.h" line="27"/>
++        <location filename="../src/include/hwinfostorage.h" line="42"/>
+         <source>L4 Cache</source>
+         <translation type="unfinished">L3 بۇفېرلىق ساقلىغۇچ {4 ?}</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="154"/>
+-        <location filename="../src/hwwidget.h" line="169"/>
++        <location filename="../src/include/hwinfostorage.h" line="28"/>
++        <location filename="../src/include/hwinfostorage.h" line="43"/>
+         <source>CPU Current Frequency</source>
+         <translation>CPU ئېقىم چاستوتىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="155"/>
+-        <location filename="../src/hwwidget.h" line="170"/>
++        <location filename="../src/include/hwinfostorage.h" line="29"/>
++        <location filename="../src/include/hwinfostorage.h" line="44"/>
+         <source>CPU Usage Rate</source>
+         <translation>CPU ئىشلىتىش نىسبىتى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="156"/>
+-        <location filename="../src/hwwidget.h" line="171"/>
++        <location filename="../src/include/hwinfostorage.h" line="30"/>
++        <location filename="../src/include/hwinfostorage.h" line="45"/>
+         <source>CPU Temperature</source>
+         <translation>CPU تېمپېراتۇرىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="175"/>
+-        <location filename="../src/hwwidget.h" line="188"/>
++        <location filename="../src/include/hwinfostorage.h" line="49"/>
++        <location filename="../src/include/hwinfostorage.h" line="62"/>
+         <source>Bank Locator</source>
+         <translation>بانكا ئورۇن بەلگىلەش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="176"/>
+-        <location filename="../src/hwwidget.h" line="189"/>
++        <location filename="../src/include/hwinfostorage.h" line="50"/>
++        <location filename="../src/include/hwinfostorage.h" line="63"/>
+         <source>Total Width</source>
+         <translation>ئومۇمىي كەڭلىكى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="177"/>
+-        <location filename="../src/hwwidget.h" line="190"/>
+-        <location filename="../src/hwwidget.h" line="290"/>
+-        <location filename="../src/hwwidget.h" line="302"/>
++        <location filename="../src/include/hwinfostorage.h" line="51"/>
++        <location filename="../src/include/hwinfostorage.h" line="64"/>
++        <location filename="../src/include/hwinfostorage.h" line="165"/>
++        <location filename="../src/include/hwinfostorage.h" line="178"/>
+         <source>Size</source>
+         <translation>چوڭ-كىچىك</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="178"/>
+-        <location filename="../src/hwwidget.h" line="191"/>
+-        <location filename="../src/hwwidget.h" line="245"/>
+-        <location filename="../src/hwwidget.h" line="255"/>
+-        <location filename="../src/hwwidget.h" line="291"/>
+-        <location filename="../src/hwwidget.h" line="303"/>
+-        <location filename="../src/hwwidget.h" line="414"/>
+-        <location filename="../src/hwwidget.h" line="424"/>
+-        <location filename="../src/hwwidget.h" line="455"/>
+-        <location filename="../src/hwwidget.h" line="465"/>
++        <location filename="../src/include/hwinfostorage.h" line="52"/>
++        <location filename="../src/include/hwinfostorage.h" line="65"/>
++        <location filename="../src/include/hwinfostorage.h" line="119"/>
++        <location filename="../src/include/hwinfostorage.h" line="129"/>
++        <location filename="../src/include/hwinfostorage.h" line="167"/>
++        <location filename="../src/include/hwinfostorage.h" line="180"/>
++        <location filename="../src/include/hwinfostorage.h" line="293"/>
++        <location filename="../src/include/hwinfostorage.h" line="303"/>
++        <location filename="../src/include/hwinfostorage.h" line="334"/>
++        <location filename="../src/include/hwinfostorage.h" line="344"/>
+         <source>Serial Number</source>
+         <translation>رەت نومۇرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="180"/>
+-        <location filename="../src/hwwidget.h" line="193"/>
++        <location filename="../src/include/hwinfostorage.h" line="54"/>
++        <location filename="../src/include/hwinfostorage.h" line="67"/>
+         <source>Data Width</source>
+         <translation>سانلىق مەلۇمات كەڭلىكى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="181"/>
+-        <location filename="../src/hwwidget.h" line="194"/>
+-        <location filename="../src/hwwidget.h" line="265"/>
+-        <location filename="../src/hwwidget.h" line="278"/>
++        <location filename="../src/include/hwinfostorage.h" line="55"/>
++        <location filename="../src/include/hwinfostorage.h" line="68"/>
++        <location filename="../src/include/hwinfostorage.h" line="139"/>
++        <location filename="../src/include/hwinfostorage.h" line="153"/>
+         <source>Type</source>
+         <translation>تۈرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="182"/>
+-        <location filename="../src/hwwidget.h" line="195"/>
+-        <location filename="../src/hwwidget.h" line="388"/>
+-        <location filename="../src/hwwidget.h" line="402"/>
+-        <location filename="../src/hwwidget.h" line="413"/>
+-        <location filename="../src/hwwidget.h" line="423"/>
+-        <location filename="../src/hwwidget.h" line="434"/>
+-        <location filename="../src/hwwidget.h" line="443"/>
+-        <location filename="../src/hwwidget.h" line="447"/>
+-        <location filename="../src/hwwidget.h" line="450"/>
++        <location filename="../src/include/hwinfostorage.h" line="56"/>
++        <location filename="../src/include/hwinfostorage.h" line="69"/>
++        <location filename="../src/include/hwinfostorage.h" line="140"/>
++        <location filename="../src/include/hwinfostorage.h" line="154"/>
++        <location filename="../src/include/hwinfostorage.h" line="267"/>
++        <location filename="../src/include/hwinfostorage.h" line="281"/>
++        <location filename="../src/include/hwinfostorage.h" line="292"/>
++        <location filename="../src/include/hwinfostorage.h" line="302"/>
++        <location filename="../src/include/hwinfostorage.h" line="313"/>
++        <location filename="../src/include/hwinfostorage.h" line="322"/>
++        <location filename="../src/include/hwinfostorage.h" line="326"/>
++        <location filename="../src/include/hwinfostorage.h" line="329"/>
+         <source>Speed</source>
+         <translation>سۈرئەت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="183"/>
+-        <location filename="../src/hwwidget.h" line="196"/>
++        <location filename="../src/include/hwinfostorage.h" line="57"/>
++        <location filename="../src/include/hwinfostorage.h" line="70"/>
+         <source>Configured Speed</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="184"/>
+-        <location filename="../src/hwwidget.h" line="197"/>
++        <location filename="../src/include/hwinfostorage.h" line="58"/>
++        <location filename="../src/include/hwinfostorage.h" line="71"/>
+         <source>Part Number</source>
+         <translation>زاپاس نومۇرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="185"/>
+-        <location filename="../src/hwwidget.h" line="198"/>
++        <location filename="../src/include/hwinfostorage.h" line="59"/>
++        <location filename="../src/include/hwinfostorage.h" line="72"/>
+         <source>Memory Usage</source>
+         <translation>ئىچكى ساقلىغۇچ ئىشلىتىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="203"/>
+-        <location filename="../src/hwwidget.h" line="221"/>
++        <location filename="../src/include/hwinfostorage.h" line="77"/>
++        <location filename="../src/include/hwinfostorage.h" line="95"/>
+         <source>Sub System Device ID</source>
+         <translation>تارماق سىستېما قۇرۇلمىسى ID</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="204"/>
+-        <location filename="../src/hwwidget.h" line="222"/>
+-        <location filename="../src/hwwidget.h" line="261"/>
+-        <location filename="../src/hwwidget.h" line="274"/>
+-        <location filename="../src/hwwidget.h" line="289"/>
+-        <location filename="../src/hwwidget.h" line="301"/>
+-        <location filename="../src/hwwidget.h" line="316"/>
+-        <location filename="../src/hwwidget.h" line="328"/>
+-        <location filename="../src/hwwidget.h" line="356"/>
+-        <location filename="../src/hwwidget.h" line="362"/>
+-        <location filename="../src/hwwidget.h" line="369"/>
+-        <location filename="../src/hwwidget.h" line="375"/>
+-        <location filename="../src/hwwidget.h" line="429"/>
+-        <location filename="../src/hwwidget.h" line="438"/>
++        <location filename="../src/include/hwinfostorage.h" line="78"/>
++        <location filename="../src/include/hwinfostorage.h" line="96"/>
++        <location filename="../src/include/hwinfostorage.h" line="135"/>
++        <location filename="../src/include/hwinfostorage.h" line="149"/>
++        <location filename="../src/include/hwinfostorage.h" line="195"/>
++        <location filename="../src/include/hwinfostorage.h" line="207"/>
++        <location filename="../src/include/hwinfostorage.h" line="235"/>
++        <location filename="../src/include/hwinfostorage.h" line="241"/>
++        <location filename="../src/include/hwinfostorage.h" line="248"/>
++        <location filename="../src/include/hwinfostorage.h" line="254"/>
++        <location filename="../src/include/hwinfostorage.h" line="308"/>
++        <location filename="../src/include/hwinfostorage.h" line="317"/>
+         <source>Model</source>
+         <translation>مودېل</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="205"/>
+-        <location filename="../src/hwwidget.h" line="223"/>
++        <location filename="../src/include/hwinfostorage.h" line="79"/>
++        <location filename="../src/include/hwinfostorage.h" line="97"/>
+         <source>Memory</source>
+         <translation>ئەسلىمە</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="206"/>
+-        <location filename="../src/hwwidget.h" line="224"/>
++        <location filename="../src/include/hwinfostorage.h" line="80"/>
++        <location filename="../src/include/hwinfostorage.h" line="98"/>
+         <source>GPU Type</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="207"/>
+-        <location filename="../src/hwwidget.h" line="225"/>
+-        <location filename="../src/hwwidget.h" line="409"/>
+-        <location filename="../src/hwwidget.h" line="419"/>
+-        <location filename="../src/hwwidget.h" line="433"/>
+-        <location filename="../src/hwwidget.h" line="442"/>
++        <location filename="../src/include/hwinfostorage.h" line="81"/>
++        <location filename="../src/include/hwinfostorage.h" line="99"/>
++        <location filename="../src/include/hwinfostorage.h" line="288"/>
++        <location filename="../src/include/hwinfostorage.h" line="298"/>
++        <location filename="../src/include/hwinfostorage.h" line="312"/>
++        <location filename="../src/include/hwinfostorage.h" line="321"/>
+         <source>Bus Info</source>
+         <translation>ئاممىۋى قاتناش ئۇچۇرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="208"/>
+-        <location filename="../src/hwwidget.h" line="226"/>
+-        <location filename="../src/hwwidget.h" line="342"/>
+-        <location filename="../src/hwwidget.h" line="349"/>
++        <location filename="../src/include/hwinfostorage.h" line="82"/>
++        <location filename="../src/include/hwinfostorage.h" line="100"/>
++        <location filename="../src/include/hwinfostorage.h" line="221"/>
++        <location filename="../src/include/hwinfostorage.h" line="228"/>
+         <source>Clock</source>
+         <translation>سائەت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="209"/>
+-        <location filename="../src/hwwidget.h" line="227"/>
++        <location filename="../src/include/hwinfostorage.h" line="83"/>
++        <location filename="../src/include/hwinfostorage.h" line="101"/>
+         <source>Physics ID</source>
+         <translation>فىزىكا ID</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="210"/>
+-        <location filename="../src/hwwidget.h" line="228"/>
+-        <location filename="../src/hwwidget.h" line="240"/>
+-        <location filename="../src/hwwidget.h" line="250"/>
+-        <location filename="../src/hwwidget.h" line="410"/>
+-        <location filename="../src/hwwidget.h" line="420"/>
+-        <location filename="../src/hwwidget.h" line="432"/>
+-        <location filename="../src/hwwidget.h" line="441"/>
++        <location filename="../src/include/hwinfostorage.h" line="84"/>
++        <location filename="../src/include/hwinfostorage.h" line="102"/>
++        <location filename="../src/include/hwinfostorage.h" line="114"/>
++        <location filename="../src/include/hwinfostorage.h" line="124"/>
++        <location filename="../src/include/hwinfostorage.h" line="289"/>
++        <location filename="../src/include/hwinfostorage.h" line="299"/>
++        <location filename="../src/include/hwinfostorage.h" line="311"/>
++        <location filename="../src/include/hwinfostorage.h" line="320"/>
+         <source>Version</source>
+         <translation>نۇسخىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="211"/>
+-        <location filename="../src/hwwidget.h" line="229"/>
+-        <location filename="../src/hwwidget.h" line="263"/>
+-        <location filename="../src/hwwidget.h" line="276"/>
+-        <location filename="../src/hwwidget.h" line="343"/>
+-        <location filename="../src/hwwidget.h" line="350"/>
+-        <location filename="../src/hwwidget.h" line="358"/>
+-        <location filename="../src/hwwidget.h" line="364"/>
+-        <location filename="../src/hwwidget.h" line="371"/>
+-        <location filename="../src/hwwidget.h" line="377"/>
+-        <location filename="../src/hwwidget.h" line="381"/>
+-        <location filename="../src/hwwidget.h" line="394"/>
+-        <location filename="../src/hwwidget.h" line="411"/>
+-        <location filename="../src/hwwidget.h" line="421"/>
+-        <location filename="../src/hwwidget.h" line="431"/>
+-        <location filename="../src/hwwidget.h" line="440"/>
++        <location filename="../src/include/hwinfostorage.h" line="85"/>
++        <location filename="../src/include/hwinfostorage.h" line="103"/>
++        <location filename="../src/include/hwinfostorage.h" line="137"/>
++        <location filename="../src/include/hwinfostorage.h" line="151"/>
++        <location filename="../src/include/hwinfostorage.h" line="222"/>
++        <location filename="../src/include/hwinfostorage.h" line="229"/>
++        <location filename="../src/include/hwinfostorage.h" line="237"/>
++        <location filename="../src/include/hwinfostorage.h" line="243"/>
++        <location filename="../src/include/hwinfostorage.h" line="250"/>
++        <location filename="../src/include/hwinfostorage.h" line="256"/>
++        <location filename="../src/include/hwinfostorage.h" line="260"/>
++        <location filename="../src/include/hwinfostorage.h" line="273"/>
++        <location filename="../src/include/hwinfostorage.h" line="290"/>
++        <location filename="../src/include/hwinfostorage.h" line="300"/>
++        <location filename="../src/include/hwinfostorage.h" line="310"/>
++        <location filename="../src/include/hwinfostorage.h" line="319"/>
+         <source>Driver</source>
+         <translation>شوپۇر</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="212"/>
+-        <location filename="../src/hwwidget.h" line="230"/>
++        <location filename="../src/include/hwinfostorage.h" line="86"/>
++        <location filename="../src/include/hwinfostorage.h" line="104"/>
+         <source>Communication Width</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="344"/>
+-        <location filename="../src/hwwidget.h" line="351"/>
++        <location filename="../src/include/hwinfostorage.h" line="166"/>
++        <location filename="../src/include/hwinfostorage.h" line="179"/>
++        <source>Mount Point</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/include/hwinfostorage.h" line="175"/>
++        <location filename="../src/include/hwinfostorage.h" line="188"/>
++        <source>Rota</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/include/hwinfostorage.h" line="223"/>
++        <location filename="../src/include/hwinfostorage.h" line="230"/>
+         <source>Width</source>
+         <translation>كەڭلىكى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="213"/>
+-        <location filename="../src/hwwidget.h" line="231"/>
++        <location filename="../src/include/hwinfostorage.h" line="87"/>
++        <location filename="../src/include/hwinfostorage.h" line="105"/>
+         <source>GDDR Size</source>
+         <translation>GDDR چوڭ-كىچىك</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="214"/>
+-        <location filename="../src/hwwidget.h" line="232"/>
++        <location filename="../src/include/hwinfostorage.h" line="88"/>
++        <location filename="../src/include/hwinfostorage.h" line="106"/>
+         <source>EGL Version</source>
+         <translation>EGL نۇسخىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="215"/>
+-        <location filename="../src/hwwidget.h" line="233"/>
++        <location filename="../src/include/hwinfostorage.h" line="89"/>
++        <location filename="../src/include/hwinfostorage.h" line="107"/>
+         <source>EGL Api List</source>
+         <translation>EGL خام ئەشيا دورا تىزىملىكى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="216"/>
+-        <location filename="../src/hwwidget.h" line="234"/>
++        <location filename="../src/include/hwinfostorage.h" line="90"/>
++        <location filename="../src/include/hwinfostorage.h" line="108"/>
+         <source>OpenGL Version</source>
+         <translation>OpenGL نۇسخىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="217"/>
+-        <location filename="../src/hwwidget.h" line="235"/>
++        <location filename="../src/include/hwinfostorage.h" line="91"/>
++        <location filename="../src/include/hwinfostorage.h" line="109"/>
+         <source>GLSL Version</source>
+         <translation>GLSL نۇسخىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="241"/>
+-        <location filename="../src/hwwidget.h" line="251"/>
++        <location filename="../src/include/hwinfostorage.h" line="115"/>
++        <location filename="../src/include/hwinfostorage.h" line="125"/>
+         <source>Chassis Handle</source>
+         <translation>تەگلىك تۇتقۇچ</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="242"/>
+-        <location filename="../src/hwwidget.h" line="252"/>
++        <location filename="../src/include/hwinfostorage.h" line="116"/>
++        <location filename="../src/include/hwinfostorage.h" line="126"/>
+         <source>Bios Vendor</source>
+         <translation>BIOS سودىگىرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="243"/>
+-        <location filename="../src/hwwidget.h" line="253"/>
++        <location filename="../src/include/hwinfostorage.h" line="117"/>
++        <location filename="../src/include/hwinfostorage.h" line="127"/>
+         <source>Bios Version</source>
+         <translation>BIOS نۇسخىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="244"/>
+-        <location filename="../src/hwwidget.h" line="254"/>
++        <location filename="../src/include/hwinfostorage.h" line="118"/>
++        <location filename="../src/include/hwinfostorage.h" line="128"/>
+         <source>Chipser</source>
+         <translation>ئۆزەك ماشىنىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="246"/>
+-        <location filename="../src/hwwidget.h" line="256"/>
++        <location filename="../src/include/hwinfostorage.h" line="120"/>
++        <location filename="../src/include/hwinfostorage.h" line="130"/>
+         <source>Publish Date</source>
+         <translation>ئېلان قىلىش ۋاقتى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="262"/>
+-        <location filename="../src/hwwidget.h" line="275"/>
++        <location filename="../src/include/hwinfostorage.h" line="136"/>
++        <location filename="../src/include/hwinfostorage.h" line="150"/>
+         <source>Bus</source>
+         <translation>ئاممىۋى قاتناش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="264"/>
+-        <location filename="../src/hwwidget.h" line="277"/>
++        <location filename="../src/include/hwinfostorage.h" line="138"/>
++        <location filename="../src/include/hwinfostorage.h" line="152"/>
+         <source>MAC Address</source>
+         <translation>MAC ئادرېسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="266"/>
+-        <location filename="../src/hwwidget.h" line="279"/>
++        <location filename="../src/include/hwinfostorage.h" line="141"/>
++        <location filename="../src/include/hwinfostorage.h" line="155"/>
+         <source>IP Address</source>
+         <translation>IP ئادرېسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="267"/>
+-        <location filename="../src/hwwidget.h" line="280"/>
++        <location filename="../src/include/hwinfostorage.h" line="142"/>
++        <location filename="../src/include/hwinfostorage.h" line="156"/>
+         <source>Net Musk</source>
+         <translation>تور نىقاب</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="268"/>
+-        <location filename="../src/hwwidget.h" line="281"/>
++        <location filename="../src/include/hwinfostorage.h" line="143"/>
++        <location filename="../src/include/hwinfostorage.h" line="157"/>
+         <source>Send Bytes</source>
+         <translation>بايت ئەۋەتىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="269"/>
+-        <location filename="../src/hwwidget.h" line="282"/>
++        <location filename="../src/include/hwinfostorage.h" line="144"/>
++        <location filename="../src/include/hwinfostorage.h" line="158"/>
+         <source>Recved Bytes</source>
+         <translation>قايتا قايتا بايت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="270"/>
+-        <location filename="../src/hwwidget.h" line="283"/>
++        <location filename="../src/include/hwinfostorage.h" line="145"/>
++        <location filename="../src/include/hwinfostorage.h" line="159"/>
+         <source>MTU</source>
+         <translation>MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="288"/>
+-        <location filename="../src/hwwidget.h" line="306"/>
++        <location filename="../src/include/hwinfostorage.h" line="164"/>
++        <location filename="../src/include/hwinfostorage.h" line="183"/>
+         <source>Vendor</source>
+         <translation>ياساش سودىگىرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="292"/>
++        <location filename="../src/include/hwinfostorage.h" line="168"/>
+         <source>Disk Name</source>
+         <translation>دىسكا نامى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="293"/>
+-        <location filename="../src/hwwidget.h" line="304"/>
++        <location filename="../src/include/hwinfostorage.h" line="169"/>
++        <location filename="../src/include/hwinfostorage.h" line="181"/>
+         <source>Frimwarever Version</source>
+         <translation>Frimwarever نۇسخىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="294"/>
+-        <location filename="../src/hwwidget.h" line="305"/>
++        <location filename="../src/include/hwinfostorage.h" line="170"/>
++        <location filename="../src/include/hwinfostorage.h" line="182"/>
+         <source>Disk Type</source>
+         <translation>دىسكا تىپى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="295"/>
+-        <location filename="../src/hwwidget.h" line="307"/>
++        <location filename="../src/include/hwinfostorage.h" line="171"/>
++        <location filename="../src/include/hwinfostorage.h" line="184"/>
+         <source>Main Disk</source>
+         <translation>ئاساسىي دىسكا</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="297"/>
+-        <location filename="../src/hwwidget.h" line="309"/>
++        <location filename="../src/include/hwinfostorage.h" line="173"/>
++        <location filename="../src/include/hwinfostorage.h" line="186"/>
+         <source>UFS</source>
+         <translation>UFS</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="298"/>
+-        <location filename="../src/hwwidget.h" line="310"/>
++        <location filename="../src/include/hwinfostorage.h" line="174"/>
++        <location filename="../src/include/hwinfostorage.h" line="187"/>
+         <source>UFS Revision</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="317"/>
+-        <location filename="../src/hwwidget.h" line="329"/>
++        <location filename="../src/include/hwinfostorage.h" line="196"/>
++        <location filename="../src/include/hwinfostorage.h" line="208"/>
+         <source>Monitor Size</source>
+         <translation>كۆزىتىش ئۆلچىمى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="318"/>
+-        <location filename="../src/hwwidget.h" line="330"/>
++        <location filename="../src/include/hwinfostorage.h" line="197"/>
++        <location filename="../src/include/hwinfostorage.h" line="209"/>
+         <source>Monitor Ratio</source>
+         <translation>نازارەت قىلىش نىسبىتى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="319"/>
+-        <location filename="../src/hwwidget.h" line="331"/>
++        <location filename="../src/include/hwinfostorage.h" line="198"/>
++        <location filename="../src/include/hwinfostorage.h" line="210"/>
+         <source>Resolution</source>
+         <translation>قارار</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="320"/>
+-        <location filename="../src/hwwidget.h" line="332"/>
++        <location filename="../src/include/hwinfostorage.h" line="199"/>
++        <location filename="../src/include/hwinfostorage.h" line="211"/>
+         <source>Max Resolution</source>
+         <translation>ئەڭ يۇقىرى پەرق ئېتىش نىسبىتى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="321"/>
+-        <location filename="../src/hwwidget.h" line="333"/>
++        <location filename="../src/include/hwinfostorage.h" line="200"/>
++        <location filename="../src/include/hwinfostorage.h" line="212"/>
+         <source>Main Monitor</source>
+         <translation>ئاساسىي سىنىپ باشلىقى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="335"/>
+-        <location filename="../src/hwwidget.h" line="296"/>
+-        <location filename="../src/hwwidget.h" line="308"/>
+-        <location filename="../src/hwwidget.h" line="322"/>
+-        <location filename="../src/hwwidget.h" line="334"/>
+-        <location filename="../src/hwwidget.h" line="357"/>
+-        <location filename="../src/hwwidget.h" line="363"/>
+-        <location filename="../src/hwwidget.h" line="370"/>
+-        <location filename="../src/hwwidget.h" line="376"/>
+-        <location filename="../src/hwwidget.h" line="430"/>
+-        <location filename="../src/hwwidget.h" line="439"/>
++        <location filename="../src/hwwidget.cpp" line="670"/>
++        <location filename="../src/include/hwinfostorage.h" line="172"/>
++        <location filename="../src/include/hwinfostorage.h" line="185"/>
++        <location filename="../src/include/hwinfostorage.h" line="201"/>
++        <location filename="../src/include/hwinfostorage.h" line="213"/>
++        <location filename="../src/include/hwinfostorage.h" line="236"/>
++        <location filename="../src/include/hwinfostorage.h" line="242"/>
++        <location filename="../src/include/hwinfostorage.h" line="249"/>
++        <location filename="../src/include/hwinfostorage.h" line="255"/>
++        <location filename="../src/include/hwinfostorage.h" line="309"/>
++        <location filename="../src/include/hwinfostorage.h" line="318"/>
+         <source>Interface</source>
+         <translation>كۆرۈنمە يۈز</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="323"/>
+-        <location filename="../src/hwwidget.h" line="335"/>
++        <location filename="../src/include/hwinfostorage.h" line="202"/>
++        <location filename="../src/include/hwinfostorage.h" line="214"/>
+         <source>Visible Area</source>
+         <translation>كۆرگىلى بولىدىغان رايون</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="324"/>
+-        <location filename="../src/hwwidget.h" line="336"/>
++        <location filename="../src/include/hwinfostorage.h" line="203"/>
++        <location filename="../src/include/hwinfostorage.h" line="215"/>
+         <source>Gamma</source>
+         <translation>گاما</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="341"/>
+-        <location filename="../src/hwwidget.h" line="348"/>
++        <location filename="../src/include/hwinfostorage.h" line="220"/>
++        <location filename="../src/include/hwinfostorage.h" line="227"/>
+         <source>Bus Address</source>
+         <translation>ئاممىۋى قاتناش ئادرېسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="382"/>
+-        <location filename="../src/hwwidget.h" line="395"/>
++        <location filename="../src/include/hwinfostorage.h" line="261"/>
++        <location filename="../src/include/hwinfostorage.h" line="274"/>
+         <source>Driver Version</source>
+         <translation>شوپۇر نۇسخىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="474"/>
+-        <location filename="../src/hwwidget.h" line="383"/>
+-        <location filename="../src/hwwidget.h" line="396"/>
++        <location filename="../src/hwwidget.cpp" line="1000"/>
++        <location filename="../src/include/hwinfostorage.h" line="262"/>
++        <location filename="../src/include/hwinfostorage.h" line="275"/>
+         <source>Address</source>
+         <translation>ئادرېس</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="384"/>
+-        <location filename="../src/hwwidget.h" line="397"/>
++        <location filename="../src/include/hwinfostorage.h" line="263"/>
++        <location filename="../src/include/hwinfostorage.h" line="276"/>
+         <source>Link Mode</source>
+         <translation>ئۇلىنىش ئەندىزىسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="385"/>
+-        <location filename="../src/hwwidget.h" line="398"/>
++        <location filename="../src/include/hwinfostorage.h" line="264"/>
++        <location filename="../src/include/hwinfostorage.h" line="277"/>
+         <source>Link Policy</source>
+         <translation>ئۇلىنىش سىياسىتى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="387"/>
+-        <location filename="../src/hwwidget.h" line="401"/>
++        <location filename="../src/include/hwinfostorage.h" line="266"/>
++        <location filename="../src/include/hwinfostorage.h" line="280"/>
+         <source>ACL MTU</source>
+         <translation>ACL MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="390"/>
+-        <location filename="../src/hwwidget.h" line="399"/>
++        <location filename="../src/include/hwinfostorage.h" line="269"/>
++        <location filename="../src/include/hwinfostorage.h" line="278"/>
+         <source>Packe Type</source>
+         <translation>پاك تىپى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="386"/>
+-        <location filename="../src/hwwidget.h" line="400"/>
++        <location filename="../src/include/hwinfostorage.h" line="265"/>
++        <location filename="../src/include/hwinfostorage.h" line="279"/>
+         <source>SCO MTU</source>
+         <translation>SCO MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="389"/>
+-        <location filename="../src/hwwidget.h" line="403"/>
++        <location filename="../src/include/hwinfostorage.h" line="268"/>
++        <location filename="../src/include/hwinfostorage.h" line="282"/>
+         <source>Features</source>
+         <translation>ئالاھىدىلىكى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="408"/>
+-        <location filename="../src/hwwidget.h" line="418"/>
++        <location filename="../src/include/hwinfostorage.h" line="287"/>
++        <location filename="../src/include/hwinfostorage.h" line="297"/>
+         <source>Name</source>
+         <translation>ئىسىم</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="412"/>
+-        <location filename="../src/hwwidget.h" line="422"/>
++        <location filename="../src/include/hwinfostorage.h" line="291"/>
++        <location filename="../src/include/hwinfostorage.h" line="301"/>
+         <source>Device Number</source>
+         <translation>ئۈسكۈنە نومۇرى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="456"/>
+-        <location filename="../src/hwwidget.h" line="466"/>
++        <location filename="../src/include/hwinfostorage.h" line="335"/>
++        <location filename="../src/include/hwinfostorage.h" line="345"/>
+         <source>State</source>
+         <translation>دۆلەت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="457"/>
+-        <location filename="../src/hwwidget.h" line="467"/>
++        <location filename="../src/include/hwinfostorage.h" line="336"/>
++        <location filename="../src/include/hwinfostorage.h" line="346"/>
+         <source>Energy</source>
+         <translation>ئېنېرگىيە</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="458"/>
+-        <location filename="../src/hwwidget.h" line="468"/>
++        <location filename="../src/include/hwinfostorage.h" line="337"/>
++        <location filename="../src/include/hwinfostorage.h" line="347"/>
+         <source>Used Times</source>
+         <translation>ئىشلىتىلىدىغان ۋاقىتلار</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="459"/>
+-        <location filename="../src/hwwidget.h" line="469"/>
++        <location filename="../src/include/hwinfostorage.h" line="338"/>
++        <location filename="../src/include/hwinfostorage.h" line="348"/>
+         <source>Energy Full</source>
+         <translation>ئېنېرگىيە تولۇق</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="460"/>
+-        <location filename="../src/hwwidget.h" line="470"/>
++        <location filename="../src/include/hwinfostorage.h" line="339"/>
++        <location filename="../src/include/hwinfostorage.h" line="349"/>
+         <source>Time To Empty</source>
+         <translation>قالدۇق ۋاقىت ئېنېرگىيەسى</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="461"/>
+-        <location filename="../src/hwwidget.h" line="471"/>
++        <location filename="../src/include/hwinfostorage.h" line="340"/>
++        <location filename="../src/include/hwinfostorage.h" line="350"/>
+         <source>Percentage</source>
+         <translation>پىرسەنت</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="40"/>
++        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="57"/>
+         <source>Wireless</source>
+         <translation>سىمسىز تور</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="42"/>
++        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="59"/>
+         <source>Wired</source>
+         <translation>تارلاشقان</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="87"/>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="121"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="93"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="103"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="150"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="155"/>
+         <source>This CPU model does not support frequency display function</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/device-controller/translations/kylin-os-manager-device-controller_zh_CN.ts b/plugins/device-controller/translations/kylin-os-manager-device-controller_zh_CN.ts
+index f4ebcbf..69c9078 100644
+--- a/plugins/device-controller/translations/kylin-os-manager-device-controller_zh_CN.ts
++++ b/plugins/device-controller/translations/kylin-os-manager-device-controller_zh_CN.ts
+@@ -214,92 +214,92 @@
+ <context>
+     <name>DriverInstallWidget</name>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
+         <source>Installable Drivers</source>
+         <translation>可安装驱动</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>)</source>
+         <translation>个)</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>(</source>
+         <translation>(</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+         <source>One-click installation</source>
+         <translation>一键安装</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
+         <source>Upgradable Drivers</source>
+         <translation>可升级驱动</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+         <source>One-click upgrade</source>
+         <translation>一键升级</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
+         <source>Installed Drivers</source>
+         <translation>已安装驱动</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>Unrecognized Device</source>
+         <translation>未识别的设备</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1200"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1248"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1213"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1261"/>
+         <source>Uninstalling drivers. Please wait for the uninstallation to complete before clicking again.</source>
+         <translation>驱动卸载中,请等待卸载完成后再次点击。</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1202"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1250"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1215"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1263"/>
+         <source>Uninstall Failed</source>
+         <translation>卸载失败</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1205"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1253"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1218"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1266"/>
+         <source>Installing drivers. Please wait for the installation to complete before clicking again.</source>
+         <translation>驱动安装中。请等待安装完成后重新点击</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1065"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1206"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1254"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1078"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1219"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1267"/>
+         <source>Install Failed</source>
+         <translation>安装失败</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1069"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1082"/>
+         <source>Update</source>
+         <translation>升级</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1076"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1089"/>
+         <source>Install</source>
+         <translation>安装</translation>
+     </message>
+@@ -307,65 +307,70 @@
+ <context>
+     <name>HardWareInfoWidget</name>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="113"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="121"/>
+         <source>Computer Basic Information</source>
+         <translation>电脑基本信息</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="117"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="420"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="125"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="462"/>
+         <source>Host Name</source>
+         <translation>主机名</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="121"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="421"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="129"/>
++        <source>Operation System Name</source>
++        <translation>操作系统名称</translation>
++    </message>
++    <message>
++        <location filename="../src/hardwareinfowidget.cpp" line="133"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="463"/>
+         <source>Operation System Version</source>
+         <translation>操作系统版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="125"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="422"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="137"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="464"/>
+         <source>Kernel Version</source>
+         <translation>内核版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="129"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="423"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="141"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="465"/>
+         <source>Kernel Architecture</source>
+         <translation>内核架构</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="133"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="424"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="145"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="466"/>
+         <source>System Bits</source>
+         <translation>系统位数</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="137"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="425"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="149"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="467"/>
+         <source>Manufacturer</source>
+         <translation>制造商</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="141"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="153"/>
+         <source>Version</source>
+         <translation>版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="145"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="426"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="157"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="468"/>
+         <source>Model</source>
+         <translation>型号</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="149"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="427"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="161"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="469"/>
+         <source>Serial</source>
+         <translation>序列号</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="334"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="375"/>
+         <source>Hardware Display</source>
+         <translation>硬件展示</translation>
+     </message>
+@@ -386,7 +391,7 @@
+ <context>
+     <name>HardwareInfoGetter</name>
+     <message>
+-        <location filename="../src/hardwareinfogetter.cpp" line="869"/>
++        <location filename="../src/hardwareinfogetter.cpp" line="979"/>
+         <source> inch</source>
+         <translation>英寸</translation>
+     </message>
+@@ -394,112 +399,158 @@
+ <context>
+     <name>HwWidget</name>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="53"/>
++        <location filename="../src/hwwidget.cpp" line="88"/>
+         <source>Disable</source>
+         <translation>已禁用</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="72"/>
++        <location filename="../src/hwwidget.cpp" line="116"/>
+         <source>Export To Clipboard</source>
+         <translation>导出至剪切板</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="73"/>
++        <location filename="../src/hwwidget.cpp" line="117"/>
+         <source>Activate</source>
+         <translation>启用</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="74"/>
++        <location filename="../src/hwwidget.cpp" line="118"/>
+         <source>Deactive</source>
+         <translation>禁用</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="84"/>
+-        <location filename="../src/hwwidget.cpp" line="87"/>
++        <location filename="../src/hwwidget.cpp" line="128"/>
++        <location filename="../src/hwwidget.cpp" line="131"/>
+         <source>CPU</source>
+         <translation>处理器</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="116"/>
+-        <location filename="../src/hwwidget.cpp" line="120"/>
++        <location filename="../src/hwwidget.cpp" line="208"/>
++        <location filename="../src/hwwidget.cpp" line="212"/>
++        <location filename="../src/hwwidget.cpp" line="1330"/>
++        <location filename="../src/hwwidget.cpp" line="1333"/>
+         <source>Memory</source>
+         <translation>内存</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="148"/>
+-        <location filename="../src/hwwidget.cpp" line="152"/>
++        <location filename="../src/hwwidget.cpp" line="147"/>
++        <location filename="../src/hwwidget.cpp" line="228"/>
++        <location filename="../src/hwwidget.cpp" line="284"/>
++        <location filename="../src/hwwidget.cpp" line="287"/>
++        <location filename="../src/hwwidget.cpp" line="304"/>
++        <location filename="../src/hwwidget.cpp" line="1355"/>
++        <location filename="../src/hwwidget.cpp" line="1358"/>
+         <source>Graphic Card</source>
+         <translation>显卡</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="181"/>
+-        <location filename="../src/hwwidget.cpp" line="184"/>
++        <location filename="../src/hwwidget.cpp" line="91"/>
++        <source>This device can be disabled/enabled</source>
++        <translation>支持右键对该设备启用/禁用</translation>
++    </message>
++    <message>
++        <location filename="../src/hwwidget.cpp" line="358"/>
++        <location filename="../src/hwwidget.cpp" line="361"/>
++        <location filename="../src/hwwidget.cpp" line="378"/>
+         <source>Mother Board</source>
+         <translation>主板</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="206"/>
+-        <location filename="../src/hwwidget.cpp" line="212"/>
++        <location filename="../src/hwwidget.cpp" line="429"/>
++        <location filename="../src/hwwidget.cpp" line="435"/>
++        <location filename="../src/hwwidget.cpp" line="453"/>
++        <location filename="../src/hwwidget.cpp" line="1381"/>
++        <location filename="../src/hwwidget.cpp" line="1384"/>
+         <source>Network Card</source>
+         <translation>网卡</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="289"/>
+-        <location filename="../src/hwwidget.cpp" line="293"/>
++        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="556"/>
++        <location filename="../src/hwwidget.cpp" line="572"/>
++        <location filename="../src/hwwidget.cpp" line="640"/>
++        <location filename="../src/hwwidget.cpp" line="744"/>
++        <location filename="../src/hwwidget.cpp" line="1407"/>
++        <location filename="../src/hwwidget.cpp" line="1410"/>
+         <source>Disk</source>
+         <translation>硬盘</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="315"/>
+-        <location filename="../src/hwwidget.cpp" line="319"/>
++        <location filename="../src/hwwidget.cpp" line="620"/>
++        <location filename="../src/hwwidget.cpp" line="624"/>
++        <location filename="../src/hwwidget.cpp" line="1432"/>
++        <location filename="../src/hwwidget.cpp" line="1435"/>
+         <source>Monitor</source>
+         <translation>显示器</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="373"/>
+-        <location filename="../src/hwwidget.cpp" line="376"/>
++        <location filename="../src/hwwidget.cpp" line="723"/>
++        <location filename="../src/hwwidget.cpp" line="726"/>
++        <location filename="../src/hwwidget.cpp" line="1458"/>
++        <location filename="../src/hwwidget.cpp" line="1461"/>
+         <source>Sound Card</source>
+         <translation>声卡</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="410"/>
+-        <location filename="../src/hwwidget.cpp" line="414"/>
++        <location filename="../src/hwwidget.cpp" line="824"/>
++        <location filename="../src/hwwidget.cpp" line="828"/>
++        <location filename="../src/hwwidget.cpp" line="844"/>
++        <location filename="../src/hwwidget.cpp" line="1484"/>
++        <location filename="../src/hwwidget.cpp" line="1487"/>
+         <source>Keyboard</source>
+         <translation>键盘</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="435"/>
+-        <location filename="../src/hwwidget.cpp" line="439"/>
++        <location filename="../src/hwwidget.cpp" line="890"/>
++        <location filename="../src/hwwidget.cpp" line="894"/>
++        <location filename="../src/hwwidget.cpp" line="910"/>
++        <location filename="../src/hwwidget.cpp" line="1509"/>
++        <location filename="../src/hwwidget.cpp" line="1512"/>
+         <source>Mouse</source>
+         <translation>鼠标</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="461"/>
+-        <location filename="../src/hwwidget.cpp" line="466"/>
++        <location filename="../src/hwwidget.cpp" line="959"/>
++        <location filename="../src/hwwidget.cpp" line="962"/>
++        <location filename="../src/hwwidget.cpp" line="980"/>
++        <location filename="../src/hwwidget.cpp" line="1534"/>
++        <location filename="../src/hwwidget.cpp" line="1537"/>
+         <source>Bluetooth</source>
+         <translation>蓝牙</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="506"/>
+-        <location filename="../src/hwwidget.cpp" line="510"/>
++        <location filename="../src/hwwidget.cpp" line="1049"/>
++        <location filename="../src/hwwidget.cpp" line="1053"/>
++        <location filename="../src/hwwidget.cpp" line="1069"/>
++        <location filename="../src/hwwidget.cpp" line="1559"/>
++        <location filename="../src/hwwidget.cpp" line="1562"/>
+         <source>CD</source>
+         <translation>光驱</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="531"/>
+-        <location filename="../src/hwwidget.cpp" line="534"/>
++        <location filename="../src/hwwidget.cpp" line="1116"/>
++        <location filename="../src/hwwidget.cpp" line="1119"/>
++        <location filename="../src/hwwidget.cpp" line="1136"/>
++        <location filename="../src/hwwidget.cpp" line="1584"/>
++        <location filename="../src/hwwidget.cpp" line="1587"/>
+         <source>Battery</source>
+         <translation>电池</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="565"/>
+-        <location filename="../src/hwwidget.cpp" line="569"/>
++        <location filename="../src/hwwidget.cpp" line="1192"/>
++        <location filename="../src/hwwidget.cpp" line="1196"/>
++        <location filename="../src/hwwidget.cpp" line="1212"/>
++        <location filename="../src/hwwidget.cpp" line="1609"/>
++        <location filename="../src/hwwidget.cpp" line="1612"/>
+         <source>Fan</source>
+         <translation>风扇</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="590"/>
+-        <location filename="../src/hwwidget.cpp" line="593"/>
++        <location filename="../src/hwwidget.cpp" line="1259"/>
++        <location filename="../src/hwwidget.cpp" line="1262"/>
++        <location filename="../src/hwwidget.cpp" line="1279"/>
++        <location filename="../src/hwwidget.cpp" line="1634"/>
++        <location filename="../src/hwwidget.cpp" line="1637"/>
+         <source>Camera</source>
+         <translation>摄像头</translation>
+     </message>
+@@ -520,76 +571,76 @@
+         <translation>设备管理</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/diskinfo.cpp" line="37"/>
++        <location filename="../src/hardwareinfo/diskinfo.cpp" line="39"/>
+         <location filename="../src/hardwareinfo/monitorinfo.cpp" line="33"/>
+-        <location filename="../src/hwwidget.cpp" line="358"/>
++        <location filename="../src/hwwidget.cpp" line="695"/>
+         <source>Yes</source>
+         <translation>是</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/diskinfo.cpp" line="35"/>
++        <location filename="../src/hardwareinfo/diskinfo.cpp" line="37"/>
+         <location filename="../src/hardwareinfo/monitorinfo.cpp" line="35"/>
+-        <location filename="../src/hwwidget.cpp" line="360"/>
++        <location filename="../src/hwwidget.cpp" line="697"/>
+         <source>No</source>
+         <translation>否</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="103"/>
++        <location filename="../src/hwwidget.cpp" line="177"/>
+         <source>CPU Current Frequency</source>
+         <translation>CPU当前频率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="103"/>
++        <location filename="../src/hwwidget.cpp" line="177"/>
+         <source>CPU Usage Rate</source>
+         <translation>CPU使用率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="104"/>
++        <location filename="../src/hwwidget.cpp" line="178"/>
+         <source>CPU Temperature</source>
+         <translation>CPU温度</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="136"/>
++        <location filename="../src/hwwidget.cpp" line="258"/>
+         <source>Memory Usage</source>
+         <translation>内存使用率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="169"/>
++        <location filename="../src/hwwidget.cpp" line="334"/>
+         <source>GDDR Size</source>
+         <translation>GDDR 容量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="344"/>
++        <location filename="../src/hwwidget.cpp" line="680"/>
+         <source>Resolution</source>
+         <translation>分辨率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="354"/>
++        <location filename="../src/hwwidget.cpp" line="690"/>
+         <source>Main Monitor</source>
+         <translation>主显示器(是/否)</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="551"/>
++        <location filename="../src/hwwidget.cpp" line="1166"/>
+         <source>Energy</source>
+         <translation>电量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="551"/>
++        <location filename="../src/hwwidget.cpp" line="1166"/>
+         <source>Time To Empty</source>
+         <translation>电池续航时间</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="1167"/>
+         <source>Percentage</source>
+         <translation>电量百分比</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="1167"/>
+         <source>State</source>
+         <translation>状态</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="194"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="210"/>
+         <source>This CPU model does not support temperature display function</source>
+         <translation>此型号CPU不支持温度显示功能</translation>
+     </message>
+@@ -611,607 +662,621 @@
+         <translation>数据库错误</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="144"/>
+-        <location filename="../src/hwwidget.h" line="159"/>
+-        <location filename="../src/hwwidget.h" line="179"/>
+-        <location filename="../src/hwwidget.h" line="192"/>
+-        <location filename="../src/hwwidget.h" line="202"/>
+-        <location filename="../src/hwwidget.h" line="220"/>
+-        <location filename="../src/hwwidget.h" line="239"/>
+-        <location filename="../src/hwwidget.h" line="249"/>
+-        <location filename="../src/hwwidget.h" line="260"/>
+-        <location filename="../src/hwwidget.h" line="273"/>
+-        <location filename="../src/hwwidget.h" line="315"/>
+-        <location filename="../src/hwwidget.h" line="327"/>
+-        <location filename="../src/hwwidget.h" line="340"/>
+-        <location filename="../src/hwwidget.h" line="347"/>
+-        <location filename="../src/hwwidget.h" line="355"/>
+-        <location filename="../src/hwwidget.h" line="361"/>
+-        <location filename="../src/hwwidget.h" line="368"/>
+-        <location filename="../src/hwwidget.h" line="374"/>
+-        <location filename="../src/hwwidget.h" line="380"/>
+-        <location filename="../src/hwwidget.h" line="393"/>
+-        <location filename="../src/hwwidget.h" line="407"/>
+-        <location filename="../src/hwwidget.h" line="417"/>
+-        <location filename="../src/hwwidget.h" line="428"/>
+-        <location filename="../src/hwwidget.h" line="437"/>
+-        <location filename="../src/hwwidget.h" line="454"/>
+-        <location filename="../src/hwwidget.h" line="464"/>
++        <location filename="../src/include/hwinfostorage.h" line="18"/>
++        <location filename="../src/include/hwinfostorage.h" line="33"/>
++        <location filename="../src/include/hwinfostorage.h" line="53"/>
++        <location filename="../src/include/hwinfostorage.h" line="66"/>
++        <location filename="../src/include/hwinfostorage.h" line="76"/>
++        <location filename="../src/include/hwinfostorage.h" line="94"/>
++        <location filename="../src/include/hwinfostorage.h" line="113"/>
++        <location filename="../src/include/hwinfostorage.h" line="123"/>
++        <location filename="../src/include/hwinfostorage.h" line="134"/>
++        <location filename="../src/include/hwinfostorage.h" line="148"/>
++        <location filename="../src/include/hwinfostorage.h" line="194"/>
++        <location filename="../src/include/hwinfostorage.h" line="206"/>
++        <location filename="../src/include/hwinfostorage.h" line="219"/>
++        <location filename="../src/include/hwinfostorage.h" line="226"/>
++        <location filename="../src/include/hwinfostorage.h" line="234"/>
++        <location filename="../src/include/hwinfostorage.h" line="240"/>
++        <location filename="../src/include/hwinfostorage.h" line="247"/>
++        <location filename="../src/include/hwinfostorage.h" line="253"/>
++        <location filename="../src/include/hwinfostorage.h" line="259"/>
++        <location filename="../src/include/hwinfostorage.h" line="272"/>
++        <location filename="../src/include/hwinfostorage.h" line="286"/>
++        <location filename="../src/include/hwinfostorage.h" line="296"/>
++        <location filename="../src/include/hwinfostorage.h" line="307"/>
++        <location filename="../src/include/hwinfostorage.h" line="316"/>
++        <location filename="../src/include/hwinfostorage.h" line="333"/>
++        <location filename="../src/include/hwinfostorage.h" line="343"/>
+         <source>Manufacturer</source>
+         <translation>制造商</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="145"/>
+-        <location filename="../src/hwwidget.h" line="160"/>
++        <location filename="../src/include/hwinfostorage.h" line="19"/>
++        <location filename="../src/include/hwinfostorage.h" line="34"/>
+         <source>Cores</source>
+         <translation>核心数</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="146"/>
+-        <location filename="../src/hwwidget.h" line="161"/>
++        <location filename="../src/include/hwinfostorage.h" line="20"/>
++        <location filename="../src/include/hwinfostorage.h" line="35"/>
+         <source>Online Cores</source>
+         <translation>在线核心数</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="147"/>
+-        <location filename="../src/hwwidget.h" line="162"/>
++        <location filename="../src/include/hwinfostorage.h" line="21"/>
++        <location filename="../src/include/hwinfostorage.h" line="36"/>
+         <source>Thread Per Cores</source>
+         <translation>每核线程数</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="148"/>
+-        <location filename="../src/hwwidget.h" line="163"/>
++        <location filename="../src/include/hwinfostorage.h" line="22"/>
++        <location filename="../src/include/hwinfostorage.h" line="37"/>
+         <source>MAX MHz</source>
+         <translation>最大 MHz</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="149"/>
+-        <location filename="../src/hwwidget.h" line="164"/>
++        <location filename="../src/include/hwinfostorage.h" line="23"/>
++        <location filename="../src/include/hwinfostorage.h" line="38"/>
+         <source>L1d Cache</source>
+         <translation>L1d 缓存</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="150"/>
+-        <location filename="../src/hwwidget.h" line="165"/>
++        <location filename="../src/include/hwinfostorage.h" line="24"/>
++        <location filename="../src/include/hwinfostorage.h" line="39"/>
+         <source>L1i Cache</source>
+         <translation>L1i 缓存</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="151"/>
+-        <location filename="../src/hwwidget.h" line="166"/>
++        <location filename="../src/include/hwinfostorage.h" line="25"/>
++        <location filename="../src/include/hwinfostorage.h" line="40"/>
+         <source>L2 Cache</source>
+         <translation>L2 缓存</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="152"/>
+-        <location filename="../src/hwwidget.h" line="167"/>
++        <location filename="../src/include/hwinfostorage.h" line="26"/>
++        <location filename="../src/include/hwinfostorage.h" line="41"/>
+         <source>L3 Cache</source>
+         <translation>L3 缓存</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="153"/>
+-        <location filename="../src/hwwidget.h" line="168"/>
++        <location filename="../src/include/hwinfostorage.h" line="27"/>
++        <location filename="../src/include/hwinfostorage.h" line="42"/>
+         <source>L4 Cache</source>
+         <translation>L4 缓存</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="154"/>
+-        <location filename="../src/hwwidget.h" line="169"/>
++        <location filename="../src/include/hwinfostorage.h" line="28"/>
++        <location filename="../src/include/hwinfostorage.h" line="43"/>
+         <source>CPU Current Frequency</source>
+         <translation>CPU当前频率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="155"/>
+-        <location filename="../src/hwwidget.h" line="170"/>
++        <location filename="../src/include/hwinfostorage.h" line="29"/>
++        <location filename="../src/include/hwinfostorage.h" line="44"/>
+         <source>CPU Usage Rate</source>
+         <translation>CPU使用率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="156"/>
+-        <location filename="../src/hwwidget.h" line="171"/>
++        <location filename="../src/include/hwinfostorage.h" line="30"/>
++        <location filename="../src/include/hwinfostorage.h" line="45"/>
+         <source>CPU Temperature</source>
+         <translation>CPU温度</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="175"/>
+-        <location filename="../src/hwwidget.h" line="188"/>
++        <location filename="../src/include/hwinfostorage.h" line="49"/>
++        <location filename="../src/include/hwinfostorage.h" line="62"/>
+         <source>Bank Locator</source>
+         <translation>插槽号</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="176"/>
+-        <location filename="../src/hwwidget.h" line="189"/>
++        <location filename="../src/include/hwinfostorage.h" line="50"/>
++        <location filename="../src/include/hwinfostorage.h" line="63"/>
+         <source>Total Width</source>
+         <translation>总位宽</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="177"/>
+-        <location filename="../src/hwwidget.h" line="190"/>
+-        <location filename="../src/hwwidget.h" line="290"/>
+-        <location filename="../src/hwwidget.h" line="302"/>
++        <location filename="../src/include/hwinfostorage.h" line="51"/>
++        <location filename="../src/include/hwinfostorage.h" line="64"/>
++        <location filename="../src/include/hwinfostorage.h" line="165"/>
++        <location filename="../src/include/hwinfostorage.h" line="178"/>
+         <source>Size</source>
+         <translation>容量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="178"/>
+-        <location filename="../src/hwwidget.h" line="191"/>
+-        <location filename="../src/hwwidget.h" line="245"/>
+-        <location filename="../src/hwwidget.h" line="255"/>
+-        <location filename="../src/hwwidget.h" line="291"/>
+-        <location filename="../src/hwwidget.h" line="303"/>
+-        <location filename="../src/hwwidget.h" line="414"/>
+-        <location filename="../src/hwwidget.h" line="424"/>
+-        <location filename="../src/hwwidget.h" line="455"/>
+-        <location filename="../src/hwwidget.h" line="465"/>
++        <location filename="../src/include/hwinfostorage.h" line="52"/>
++        <location filename="../src/include/hwinfostorage.h" line="65"/>
++        <location filename="../src/include/hwinfostorage.h" line="119"/>
++        <location filename="../src/include/hwinfostorage.h" line="129"/>
++        <location filename="../src/include/hwinfostorage.h" line="167"/>
++        <location filename="../src/include/hwinfostorage.h" line="180"/>
++        <location filename="../src/include/hwinfostorage.h" line="293"/>
++        <location filename="../src/include/hwinfostorage.h" line="303"/>
++        <location filename="../src/include/hwinfostorage.h" line="334"/>
++        <location filename="../src/include/hwinfostorage.h" line="344"/>
+         <source>Serial Number</source>
+         <translation>序列号</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="180"/>
+-        <location filename="../src/hwwidget.h" line="193"/>
++        <location filename="../src/include/hwinfostorage.h" line="54"/>
++        <location filename="../src/include/hwinfostorage.h" line="67"/>
+         <source>Data Width</source>
+         <translation>数据位宽</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="181"/>
+-        <location filename="../src/hwwidget.h" line="194"/>
+-        <location filename="../src/hwwidget.h" line="265"/>
+-        <location filename="../src/hwwidget.h" line="278"/>
++        <location filename="../src/include/hwinfostorage.h" line="55"/>
++        <location filename="../src/include/hwinfostorage.h" line="68"/>
++        <location filename="../src/include/hwinfostorage.h" line="139"/>
++        <location filename="../src/include/hwinfostorage.h" line="153"/>
+         <source>Type</source>
+         <translation>类型</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="182"/>
+-        <location filename="../src/hwwidget.h" line="195"/>
+-        <location filename="../src/hwwidget.h" line="388"/>
+-        <location filename="../src/hwwidget.h" line="402"/>
+-        <location filename="../src/hwwidget.h" line="413"/>
+-        <location filename="../src/hwwidget.h" line="423"/>
+-        <location filename="../src/hwwidget.h" line="434"/>
+-        <location filename="../src/hwwidget.h" line="443"/>
+-        <location filename="../src/hwwidget.h" line="447"/>
+-        <location filename="../src/hwwidget.h" line="450"/>
++        <location filename="../src/include/hwinfostorage.h" line="56"/>
++        <location filename="../src/include/hwinfostorage.h" line="69"/>
++        <location filename="../src/include/hwinfostorage.h" line="140"/>
++        <location filename="../src/include/hwinfostorage.h" line="154"/>
++        <location filename="../src/include/hwinfostorage.h" line="267"/>
++        <location filename="../src/include/hwinfostorage.h" line="281"/>
++        <location filename="../src/include/hwinfostorage.h" line="292"/>
++        <location filename="../src/include/hwinfostorage.h" line="302"/>
++        <location filename="../src/include/hwinfostorage.h" line="313"/>
++        <location filename="../src/include/hwinfostorage.h" line="322"/>
++        <location filename="../src/include/hwinfostorage.h" line="326"/>
++        <location filename="../src/include/hwinfostorage.h" line="329"/>
+         <source>Speed</source>
+         <translation>速率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="183"/>
+-        <location filename="../src/hwwidget.h" line="196"/>
++        <location filename="../src/include/hwinfostorage.h" line="57"/>
++        <location filename="../src/include/hwinfostorage.h" line="70"/>
+         <source>Configured Speed</source>
+         <translation>配置速率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="184"/>
+-        <location filename="../src/hwwidget.h" line="197"/>
++        <location filename="../src/include/hwinfostorage.h" line="58"/>
++        <location filename="../src/include/hwinfostorage.h" line="71"/>
+         <source>Part Number</source>
+         <translation>数组程序</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="185"/>
+-        <location filename="../src/hwwidget.h" line="198"/>
++        <location filename="../src/include/hwinfostorage.h" line="59"/>
++        <location filename="../src/include/hwinfostorage.h" line="72"/>
+         <source>Memory Usage</source>
+         <translation>内存使用率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="203"/>
+-        <location filename="../src/hwwidget.h" line="221"/>
++        <location filename="../src/include/hwinfostorage.h" line="77"/>
++        <location filename="../src/include/hwinfostorage.h" line="95"/>
+         <source>Sub System Device ID</source>
+         <translation>子系统设备号</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="204"/>
+-        <location filename="../src/hwwidget.h" line="222"/>
+-        <location filename="../src/hwwidget.h" line="261"/>
+-        <location filename="../src/hwwidget.h" line="274"/>
+-        <location filename="../src/hwwidget.h" line="289"/>
+-        <location filename="../src/hwwidget.h" line="301"/>
+-        <location filename="../src/hwwidget.h" line="316"/>
+-        <location filename="../src/hwwidget.h" line="328"/>
+-        <location filename="../src/hwwidget.h" line="356"/>
+-        <location filename="../src/hwwidget.h" line="362"/>
+-        <location filename="../src/hwwidget.h" line="369"/>
+-        <location filename="../src/hwwidget.h" line="375"/>
+-        <location filename="../src/hwwidget.h" line="429"/>
+-        <location filename="../src/hwwidget.h" line="438"/>
++        <location filename="../src/include/hwinfostorage.h" line="78"/>
++        <location filename="../src/include/hwinfostorage.h" line="96"/>
++        <location filename="../src/include/hwinfostorage.h" line="135"/>
++        <location filename="../src/include/hwinfostorage.h" line="149"/>
++        <location filename="../src/include/hwinfostorage.h" line="195"/>
++        <location filename="../src/include/hwinfostorage.h" line="207"/>
++        <location filename="../src/include/hwinfostorage.h" line="235"/>
++        <location filename="../src/include/hwinfostorage.h" line="241"/>
++        <location filename="../src/include/hwinfostorage.h" line="248"/>
++        <location filename="../src/include/hwinfostorage.h" line="254"/>
++        <location filename="../src/include/hwinfostorage.h" line="308"/>
++        <location filename="../src/include/hwinfostorage.h" line="317"/>
+         <source>Model</source>
+         <translation>型号</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="205"/>
+-        <location filename="../src/hwwidget.h" line="223"/>
++        <location filename="../src/include/hwinfostorage.h" line="79"/>
++        <location filename="../src/include/hwinfostorage.h" line="97"/>
+         <source>Memory</source>
+         <translation>内存</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="206"/>
+-        <location filename="../src/hwwidget.h" line="224"/>
++        <location filename="../src/include/hwinfostorage.h" line="80"/>
++        <location filename="../src/include/hwinfostorage.h" line="98"/>
+         <source>GPU Type</source>
+         <translation>GPU类型</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="207"/>
+-        <location filename="../src/hwwidget.h" line="225"/>
+-        <location filename="../src/hwwidget.h" line="409"/>
+-        <location filename="../src/hwwidget.h" line="419"/>
+-        <location filename="../src/hwwidget.h" line="433"/>
+-        <location filename="../src/hwwidget.h" line="442"/>
++        <location filename="../src/include/hwinfostorage.h" line="81"/>
++        <location filename="../src/include/hwinfostorage.h" line="99"/>
++        <location filename="../src/include/hwinfostorage.h" line="288"/>
++        <location filename="../src/include/hwinfostorage.h" line="298"/>
++        <location filename="../src/include/hwinfostorage.h" line="312"/>
++        <location filename="../src/include/hwinfostorage.h" line="321"/>
+         <source>Bus Info</source>
+         <translation>总线信息</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="208"/>
+-        <location filename="../src/hwwidget.h" line="226"/>
+-        <location filename="../src/hwwidget.h" line="342"/>
+-        <location filename="../src/hwwidget.h" line="349"/>
++        <location filename="../src/include/hwinfostorage.h" line="82"/>
++        <location filename="../src/include/hwinfostorage.h" line="100"/>
++        <location filename="../src/include/hwinfostorage.h" line="221"/>
++        <location filename="../src/include/hwinfostorage.h" line="228"/>
+         <source>Clock</source>
+         <translation>时钟频率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="209"/>
+-        <location filename="../src/hwwidget.h" line="227"/>
++        <location filename="../src/include/hwinfostorage.h" line="83"/>
++        <location filename="../src/include/hwinfostorage.h" line="101"/>
+         <source>Physics ID</source>
+         <translation>物理ID</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="210"/>
+-        <location filename="../src/hwwidget.h" line="228"/>
+-        <location filename="../src/hwwidget.h" line="240"/>
+-        <location filename="../src/hwwidget.h" line="250"/>
+-        <location filename="../src/hwwidget.h" line="410"/>
+-        <location filename="../src/hwwidget.h" line="420"/>
+-        <location filename="../src/hwwidget.h" line="432"/>
+-        <location filename="../src/hwwidget.h" line="441"/>
++        <location filename="../src/include/hwinfostorage.h" line="84"/>
++        <location filename="../src/include/hwinfostorage.h" line="102"/>
++        <location filename="../src/include/hwinfostorage.h" line="114"/>
++        <location filename="../src/include/hwinfostorage.h" line="124"/>
++        <location filename="../src/include/hwinfostorage.h" line="289"/>
++        <location filename="../src/include/hwinfostorage.h" line="299"/>
++        <location filename="../src/include/hwinfostorage.h" line="311"/>
++        <location filename="../src/include/hwinfostorage.h" line="320"/>
+         <source>Version</source>
+         <translation>版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="211"/>
+-        <location filename="../src/hwwidget.h" line="229"/>
+-        <location filename="../src/hwwidget.h" line="263"/>
+-        <location filename="../src/hwwidget.h" line="276"/>
+-        <location filename="../src/hwwidget.h" line="343"/>
+-        <location filename="../src/hwwidget.h" line="350"/>
+-        <location filename="../src/hwwidget.h" line="358"/>
+-        <location filename="../src/hwwidget.h" line="364"/>
+-        <location filename="../src/hwwidget.h" line="371"/>
+-        <location filename="../src/hwwidget.h" line="377"/>
+-        <location filename="../src/hwwidget.h" line="381"/>
+-        <location filename="../src/hwwidget.h" line="394"/>
+-        <location filename="../src/hwwidget.h" line="411"/>
+-        <location filename="../src/hwwidget.h" line="421"/>
+-        <location filename="../src/hwwidget.h" line="431"/>
+-        <location filename="../src/hwwidget.h" line="440"/>
++        <location filename="../src/include/hwinfostorage.h" line="85"/>
++        <location filename="../src/include/hwinfostorage.h" line="103"/>
++        <location filename="../src/include/hwinfostorage.h" line="137"/>
++        <location filename="../src/include/hwinfostorage.h" line="151"/>
++        <location filename="../src/include/hwinfostorage.h" line="222"/>
++        <location filename="../src/include/hwinfostorage.h" line="229"/>
++        <location filename="../src/include/hwinfostorage.h" line="237"/>
++        <location filename="../src/include/hwinfostorage.h" line="243"/>
++        <location filename="../src/include/hwinfostorage.h" line="250"/>
++        <location filename="../src/include/hwinfostorage.h" line="256"/>
++        <location filename="../src/include/hwinfostorage.h" line="260"/>
++        <location filename="../src/include/hwinfostorage.h" line="273"/>
++        <location filename="../src/include/hwinfostorage.h" line="290"/>
++        <location filename="../src/include/hwinfostorage.h" line="300"/>
++        <location filename="../src/include/hwinfostorage.h" line="310"/>
++        <location filename="../src/include/hwinfostorage.h" line="319"/>
+         <source>Driver</source>
+         <translation>驱动</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="212"/>
+-        <location filename="../src/hwwidget.h" line="230"/>
++        <location filename="../src/include/hwinfostorage.h" line="86"/>
++        <location filename="../src/include/hwinfostorage.h" line="104"/>
+         <source>Communication Width</source>
+-        <translation type="unfinished"></translation>
++        <translation>通信位宽</translation>
++    </message>
++    <message>
++        <location filename="../src/include/hwinfostorage.h" line="166"/>
++        <location filename="../src/include/hwinfostorage.h" line="179"/>
++        <source>Mount Point</source>
++        <translation>挂载点</translation>
++    </message>
++    <message>
++        <location filename="../src/include/hwinfostorage.h" line="175"/>
++        <location filename="../src/include/hwinfostorage.h" line="188"/>
++        <source>Rota</source>
++        <translation>转速</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="344"/>
+-        <location filename="../src/hwwidget.h" line="351"/>
++        <location filename="../src/include/hwinfostorage.h" line="223"/>
++        <location filename="../src/include/hwinfostorage.h" line="230"/>
+         <source>Width</source>
+         <translation>位宽</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="213"/>
+-        <location filename="../src/hwwidget.h" line="231"/>
++        <location filename="../src/include/hwinfostorage.h" line="87"/>
++        <location filename="../src/include/hwinfostorage.h" line="105"/>
+         <source>GDDR Size</source>
+         <translation>GDDR 容量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="214"/>
+-        <location filename="../src/hwwidget.h" line="232"/>
++        <location filename="../src/include/hwinfostorage.h" line="88"/>
++        <location filename="../src/include/hwinfostorage.h" line="106"/>
+         <source>EGL Version</source>
+         <translation>EGL 版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="215"/>
+-        <location filename="../src/hwwidget.h" line="233"/>
++        <location filename="../src/include/hwinfostorage.h" line="89"/>
++        <location filename="../src/include/hwinfostorage.h" line="107"/>
+         <source>EGL Api List</source>
+         <translation>EGL接口</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="216"/>
+-        <location filename="../src/hwwidget.h" line="234"/>
++        <location filename="../src/include/hwinfostorage.h" line="90"/>
++        <location filename="../src/include/hwinfostorage.h" line="108"/>
+         <source>OpenGL Version</source>
+         <translation>OPenGL 版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="217"/>
+-        <location filename="../src/hwwidget.h" line="235"/>
++        <location filename="../src/include/hwinfostorage.h" line="91"/>
++        <location filename="../src/include/hwinfostorage.h" line="109"/>
+         <source>GLSL Version</source>
+         <translation>GLSL 版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="241"/>
+-        <location filename="../src/hwwidget.h" line="251"/>
++        <location filename="../src/include/hwinfostorage.h" line="115"/>
++        <location filename="../src/include/hwinfostorage.h" line="125"/>
+         <source>Chassis Handle</source>
+         <translation>机箱识别号</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="242"/>
+-        <location filename="../src/hwwidget.h" line="252"/>
++        <location filename="../src/include/hwinfostorage.h" line="116"/>
++        <location filename="../src/include/hwinfostorage.h" line="126"/>
+         <source>Bios Vendor</source>
+         <translation>Bios制造商</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="243"/>
+-        <location filename="../src/hwwidget.h" line="253"/>
++        <location filename="../src/include/hwinfostorage.h" line="117"/>
++        <location filename="../src/include/hwinfostorage.h" line="127"/>
+         <source>Bios Version</source>
+         <translation>Bios版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="244"/>
+-        <location filename="../src/hwwidget.h" line="254"/>
++        <location filename="../src/include/hwinfostorage.h" line="118"/>
++        <location filename="../src/include/hwinfostorage.h" line="128"/>
+         <source>Chipser</source>
+         <translation>芯片组</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="246"/>
+-        <location filename="../src/hwwidget.h" line="256"/>
++        <location filename="../src/include/hwinfostorage.h" line="120"/>
++        <location filename="../src/include/hwinfostorage.h" line="130"/>
+         <source>Publish Date</source>
+         <translation>发布日期</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="262"/>
+-        <location filename="../src/hwwidget.h" line="275"/>
++        <location filename="../src/include/hwinfostorage.h" line="136"/>
++        <location filename="../src/include/hwinfostorage.h" line="150"/>
+         <source>Bus</source>
+         <translation>总线信息</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="264"/>
+-        <location filename="../src/hwwidget.h" line="277"/>
++        <location filename="../src/include/hwinfostorage.h" line="138"/>
++        <location filename="../src/include/hwinfostorage.h" line="152"/>
+         <source>MAC Address</source>
+         <translation>MAC地址</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="266"/>
+-        <location filename="../src/hwwidget.h" line="279"/>
++        <location filename="../src/include/hwinfostorage.h" line="141"/>
++        <location filename="../src/include/hwinfostorage.h" line="155"/>
+         <source>IP Address</source>
+         <translation>IP地址</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="267"/>
+-        <location filename="../src/hwwidget.h" line="280"/>
++        <location filename="../src/include/hwinfostorage.h" line="142"/>
++        <location filename="../src/include/hwinfostorage.h" line="156"/>
+         <source>Net Musk</source>
+         <translation>子网掩码</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="268"/>
+-        <location filename="../src/hwwidget.h" line="281"/>
++        <location filename="../src/include/hwinfostorage.h" line="143"/>
++        <location filename="../src/include/hwinfostorage.h" line="157"/>
+         <source>Send Bytes</source>
+         <translation>发送数据量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="269"/>
+-        <location filename="../src/hwwidget.h" line="282"/>
++        <location filename="../src/include/hwinfostorage.h" line="144"/>
++        <location filename="../src/include/hwinfostorage.h" line="158"/>
+         <source>Recved Bytes</source>
+         <translation>接收数据量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="270"/>
+-        <location filename="../src/hwwidget.h" line="283"/>
++        <location filename="../src/include/hwinfostorage.h" line="145"/>
++        <location filename="../src/include/hwinfostorage.h" line="159"/>
+         <source>MTU</source>
+         <translation>MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="288"/>
+-        <location filename="../src/hwwidget.h" line="306"/>
++        <location filename="../src/include/hwinfostorage.h" line="164"/>
++        <location filename="../src/include/hwinfostorage.h" line="183"/>
+         <source>Vendor</source>
+         <translation>制造商</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="292"/>
++        <location filename="../src/include/hwinfostorage.h" line="168"/>
+         <source>Disk Name</source>
+         <translation>硬盘名称</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="293"/>
+-        <location filename="../src/hwwidget.h" line="304"/>
++        <location filename="../src/include/hwinfostorage.h" line="169"/>
++        <location filename="../src/include/hwinfostorage.h" line="181"/>
+         <source>Frimwarever Version</source>
+         <translation>固件版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="294"/>
+-        <location filename="../src/hwwidget.h" line="305"/>
++        <location filename="../src/include/hwinfostorage.h" line="170"/>
++        <location filename="../src/include/hwinfostorage.h" line="182"/>
+         <source>Disk Type</source>
+         <translation>硬盘类型</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="295"/>
+-        <location filename="../src/hwwidget.h" line="307"/>
++        <location filename="../src/include/hwinfostorage.h" line="171"/>
++        <location filename="../src/include/hwinfostorage.h" line="184"/>
+         <source>Main Disk</source>
+         <translation>主硬盘(是/否)</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="297"/>
+-        <location filename="../src/hwwidget.h" line="309"/>
++        <location filename="../src/include/hwinfostorage.h" line="173"/>
++        <location filename="../src/include/hwinfostorage.h" line="186"/>
+         <source>UFS</source>
+         <translation>UFS</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="298"/>
+-        <location filename="../src/hwwidget.h" line="310"/>
++        <location filename="../src/include/hwinfostorage.h" line="174"/>
++        <location filename="../src/include/hwinfostorage.h" line="187"/>
+         <source>UFS Revision</source>
+         <translation>UFS固件版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="317"/>
+-        <location filename="../src/hwwidget.h" line="329"/>
++        <location filename="../src/include/hwinfostorage.h" line="196"/>
++        <location filename="../src/include/hwinfostorage.h" line="208"/>
+         <source>Monitor Size</source>
+         <translation>显示器尺寸</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="318"/>
+-        <location filename="../src/hwwidget.h" line="330"/>
++        <location filename="../src/include/hwinfostorage.h" line="197"/>
++        <location filename="../src/include/hwinfostorage.h" line="209"/>
+         <source>Monitor Ratio</source>
+         <translation>显示宽高比</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="319"/>
+-        <location filename="../src/hwwidget.h" line="331"/>
++        <location filename="../src/include/hwinfostorage.h" line="198"/>
++        <location filename="../src/include/hwinfostorage.h" line="210"/>
+         <source>Resolution</source>
+         <translation>分辨率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="320"/>
+-        <location filename="../src/hwwidget.h" line="332"/>
++        <location filename="../src/include/hwinfostorage.h" line="199"/>
++        <location filename="../src/include/hwinfostorage.h" line="211"/>
+         <source>Max Resolution</source>
+         <translation>最大分辨率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="321"/>
+-        <location filename="../src/hwwidget.h" line="333"/>
++        <location filename="../src/include/hwinfostorage.h" line="200"/>
++        <location filename="../src/include/hwinfostorage.h" line="212"/>
+         <source>Main Monitor</source>
+         <translation>主显示器(是/否)</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="335"/>
+-        <location filename="../src/hwwidget.h" line="296"/>
+-        <location filename="../src/hwwidget.h" line="308"/>
+-        <location filename="../src/hwwidget.h" line="322"/>
+-        <location filename="../src/hwwidget.h" line="334"/>
+-        <location filename="../src/hwwidget.h" line="357"/>
+-        <location filename="../src/hwwidget.h" line="363"/>
+-        <location filename="../src/hwwidget.h" line="370"/>
+-        <location filename="../src/hwwidget.h" line="376"/>
+-        <location filename="../src/hwwidget.h" line="430"/>
+-        <location filename="../src/hwwidget.h" line="439"/>
++        <location filename="../src/hwwidget.cpp" line="670"/>
++        <location filename="../src/include/hwinfostorage.h" line="172"/>
++        <location filename="../src/include/hwinfostorage.h" line="185"/>
++        <location filename="../src/include/hwinfostorage.h" line="201"/>
++        <location filename="../src/include/hwinfostorage.h" line="213"/>
++        <location filename="../src/include/hwinfostorage.h" line="236"/>
++        <location filename="../src/include/hwinfostorage.h" line="242"/>
++        <location filename="../src/include/hwinfostorage.h" line="249"/>
++        <location filename="../src/include/hwinfostorage.h" line="255"/>
++        <location filename="../src/include/hwinfostorage.h" line="309"/>
++        <location filename="../src/include/hwinfostorage.h" line="318"/>
+         <source>Interface</source>
+         <translation>接口</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="323"/>
+-        <location filename="../src/hwwidget.h" line="335"/>
++        <location filename="../src/include/hwinfostorage.h" line="202"/>
++        <location filename="../src/include/hwinfostorage.h" line="214"/>
+         <source>Visible Area</source>
+         <translation>可视面积</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="324"/>
+-        <location filename="../src/hwwidget.h" line="336"/>
++        <location filename="../src/include/hwinfostorage.h" line="203"/>
++        <location filename="../src/include/hwinfostorage.h" line="215"/>
+         <source>Gamma</source>
+         <translation>伽马值</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="341"/>
+-        <location filename="../src/hwwidget.h" line="348"/>
++        <location filename="../src/include/hwinfostorage.h" line="220"/>
++        <location filename="../src/include/hwinfostorage.h" line="227"/>
+         <source>Bus Address</source>
+         <translation>总线地址</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="382"/>
+-        <location filename="../src/hwwidget.h" line="395"/>
++        <location filename="../src/include/hwinfostorage.h" line="261"/>
++        <location filename="../src/include/hwinfostorage.h" line="274"/>
+         <source>Driver Version</source>
+         <translation>驱动版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="474"/>
+-        <location filename="../src/hwwidget.h" line="383"/>
+-        <location filename="../src/hwwidget.h" line="396"/>
++        <location filename="../src/hwwidget.cpp" line="1000"/>
++        <location filename="../src/include/hwinfostorage.h" line="262"/>
++        <location filename="../src/include/hwinfostorage.h" line="275"/>
+         <source>Address</source>
+         <translation>地址</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="384"/>
+-        <location filename="../src/hwwidget.h" line="397"/>
++        <location filename="../src/include/hwinfostorage.h" line="263"/>
++        <location filename="../src/include/hwinfostorage.h" line="276"/>
+         <source>Link Mode</source>
+         <translation>连接模式</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="385"/>
+-        <location filename="../src/hwwidget.h" line="398"/>
++        <location filename="../src/include/hwinfostorage.h" line="264"/>
++        <location filename="../src/include/hwinfostorage.h" line="277"/>
+         <source>Link Policy</source>
+         <translation>连接策略</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="387"/>
+-        <location filename="../src/hwwidget.h" line="401"/>
++        <location filename="../src/include/hwinfostorage.h" line="266"/>
++        <location filename="../src/include/hwinfostorage.h" line="280"/>
+         <source>ACL MTU</source>
+         <translation>ACL MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="390"/>
+-        <location filename="../src/hwwidget.h" line="399"/>
++        <location filename="../src/include/hwinfostorage.h" line="269"/>
++        <location filename="../src/include/hwinfostorage.h" line="278"/>
+         <source>Packe Type</source>
+         <translation>数据包类型</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="386"/>
+-        <location filename="../src/hwwidget.h" line="400"/>
++        <location filename="../src/include/hwinfostorage.h" line="265"/>
++        <location filename="../src/include/hwinfostorage.h" line="279"/>
+         <source>SCO MTU</source>
+         <translation>SCO MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="389"/>
+-        <location filename="../src/hwwidget.h" line="403"/>
++        <location filename="../src/include/hwinfostorage.h" line="268"/>
++        <location filename="../src/include/hwinfostorage.h" line="282"/>
+         <source>Features</source>
+         <translation>特征</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="408"/>
+-        <location filename="../src/hwwidget.h" line="418"/>
++        <location filename="../src/include/hwinfostorage.h" line="287"/>
++        <location filename="../src/include/hwinfostorage.h" line="297"/>
+         <source>Name</source>
+         <translation>名称</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="412"/>
+-        <location filename="../src/hwwidget.h" line="422"/>
++        <location filename="../src/include/hwinfostorage.h" line="291"/>
++        <location filename="../src/include/hwinfostorage.h" line="301"/>
+         <source>Device Number</source>
+         <translation>设备号</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="456"/>
+-        <location filename="../src/hwwidget.h" line="466"/>
++        <location filename="../src/include/hwinfostorage.h" line="335"/>
++        <location filename="../src/include/hwinfostorage.h" line="345"/>
+         <source>State</source>
+         <translation>状态</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="457"/>
+-        <location filename="../src/hwwidget.h" line="467"/>
++        <location filename="../src/include/hwinfostorage.h" line="336"/>
++        <location filename="../src/include/hwinfostorage.h" line="346"/>
+         <source>Energy</source>
+         <translation>电量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="458"/>
+-        <location filename="../src/hwwidget.h" line="468"/>
++        <location filename="../src/include/hwinfostorage.h" line="337"/>
++        <location filename="../src/include/hwinfostorage.h" line="347"/>
+         <source>Used Times</source>
+         <translation>使用时间</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="459"/>
+-        <location filename="../src/hwwidget.h" line="469"/>
++        <location filename="../src/include/hwinfostorage.h" line="338"/>
++        <location filename="../src/include/hwinfostorage.h" line="348"/>
+         <source>Energy Full</source>
+         <translation>完全充满容量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="460"/>
+-        <location filename="../src/hwwidget.h" line="470"/>
++        <location filename="../src/include/hwinfostorage.h" line="339"/>
++        <location filename="../src/include/hwinfostorage.h" line="349"/>
+         <source>Time To Empty</source>
+         <translation>电池续航时间</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="461"/>
+-        <location filename="../src/hwwidget.h" line="471"/>
++        <location filename="../src/include/hwinfostorage.h" line="340"/>
++        <location filename="../src/include/hwinfostorage.h" line="350"/>
+         <source>Percentage</source>
+         <translation>电量百分比</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="40"/>
++        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="57"/>
+         <source>Wireless</source>
+         <translation>无线</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="42"/>
++        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="59"/>
+         <source>Wired</source>
+         <translation>有线</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="87"/>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="121"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="93"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="103"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="150"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="155"/>
+         <source>This CPU model does not support frequency display function</source>
+         <translation>该型号cpu不支持频率显示功能</translation>
+     </message>
+diff --git a/plugins/device-controller/translations/kylin-os-manager-device-controller_zh_HK.ts b/plugins/device-controller/translations/kylin-os-manager-device-controller_zh_HK.ts
+index e461415..695d417 100644
+--- a/plugins/device-controller/translations/kylin-os-manager-device-controller_zh_HK.ts
++++ b/plugins/device-controller/translations/kylin-os-manager-device-controller_zh_HK.ts
+@@ -214,92 +214,92 @@
+ <context>
+     <name>DriverInstallWidget</name>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
+         <source>Installable Drivers</source>
+         <translation>可安裝驅動</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>)</source>
+         <translation>個)</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="53"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="223"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="225"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>(</source>
+         <translation>(</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="55"/>
++        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+         <source>One-click installation</source>
+         <translation>一鍵安裝</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="57"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="226"/>
++        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="228"/>
+         <source>Upgradable Drivers</source>
+         <translation>可升級驅動</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="59"/>
++        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+         <source>One-click upgrade</source>
+         <translation>一鍵升級</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="61"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="229"/>
++        <location filename="../src/driverinstallwidget.cpp" line="63"/>
++        <location filename="../src/driverinstallwidget.cpp" line="231"/>
+         <source>Installed Drivers</source>
+         <translation>已安裝驅動</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="233"/>
++        <location filename="../src/driverinstallwidget.cpp" line="235"/>
+         <source>Unrecognized Device</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1200"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1248"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1213"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1261"/>
+         <source>Uninstalling drivers. Please wait for the uninstallation to complete before clicking again.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1202"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1250"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1215"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1263"/>
+         <source>Uninstall Failed</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1205"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1253"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1218"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1266"/>
+         <source>Installing drivers. Please wait for the installation to complete before clicking again.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1065"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1206"/>
+-        <location filename="../src/driverinstallwidget.cpp" line="1254"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1078"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1219"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1267"/>
+         <source>Install Failed</source>
+         <translation>安裝失敗</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1069"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1082"/>
+         <source>Update</source>
+         <translation>升級</translation>
+     </message>
+     <message>
+-        <location filename="../src/driverinstallwidget.cpp" line="1076"/>
++        <location filename="../src/driverinstallwidget.cpp" line="1089"/>
+         <source>Install</source>
+         <translation>安裝</translation>
+     </message>
+@@ -307,65 +307,70 @@
+ <context>
+     <name>HardWareInfoWidget</name>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="113"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="121"/>
+         <source>Computer Basic Information</source>
+         <translation>電腦基本信息</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="117"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="420"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="125"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="462"/>
+         <source>Host Name</source>
+         <translation>主機名</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="121"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="421"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="129"/>
++        <source>Operation System Name</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/hardwareinfowidget.cpp" line="133"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="463"/>
+         <source>Operation System Version</source>
+         <translation>操作係統版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="125"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="422"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="137"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="464"/>
+         <source>Kernel Version</source>
+         <translation>內核版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="129"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="423"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="141"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="465"/>
+         <source>Kernel Architecture</source>
+         <translation>內核架構</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="133"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="424"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="145"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="466"/>
+         <source>System Bits</source>
+         <translation>係統位數</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="137"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="425"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="149"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="467"/>
+         <source>Manufacturer</source>
+         <translation>製造商</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="141"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="153"/>
+         <source>Version</source>
+         <translation type="unfinished">版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="145"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="426"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="157"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="468"/>
+         <source>Model</source>
+         <translation>型號</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="149"/>
+-        <location filename="../src/hardwareinfowidget.cpp" line="427"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="161"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="469"/>
+         <source>Serial</source>
+         <translation>序列號</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfowidget.cpp" line="334"/>
++        <location filename="../src/hardwareinfowidget.cpp" line="375"/>
+         <source>Hardware Display</source>
+         <translation>硬件展示</translation>
+     </message>
+@@ -386,7 +391,7 @@
+ <context>
+     <name>HardwareInfoGetter</name>
+     <message>
+-        <location filename="../src/hardwareinfogetter.cpp" line="869"/>
++        <location filename="../src/hardwareinfogetter.cpp" line="979"/>
+         <source> inch</source>
+         <translation type="unfinished"></translation>
+     </message>
+@@ -394,112 +399,158 @@
+ <context>
+     <name>HwWidget</name>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="53"/>
++        <location filename="../src/hwwidget.cpp" line="88"/>
+         <source>Disable</source>
+         <translation>已禁用</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="72"/>
++        <location filename="../src/hwwidget.cpp" line="116"/>
+         <source>Export To Clipboard</source>
+         <translation>導出至剪切板</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="73"/>
++        <location filename="../src/hwwidget.cpp" line="117"/>
+         <source>Activate</source>
+         <translation>啟用</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="74"/>
++        <location filename="../src/hwwidget.cpp" line="118"/>
+         <source>Deactive</source>
+         <translation>禁用</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="84"/>
+-        <location filename="../src/hwwidget.cpp" line="87"/>
++        <location filename="../src/hwwidget.cpp" line="128"/>
++        <location filename="../src/hwwidget.cpp" line="131"/>
+         <source>CPU</source>
+         <translation>處理器</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="116"/>
+-        <location filename="../src/hwwidget.cpp" line="120"/>
++        <location filename="../src/hwwidget.cpp" line="208"/>
++        <location filename="../src/hwwidget.cpp" line="212"/>
++        <location filename="../src/hwwidget.cpp" line="1330"/>
++        <location filename="../src/hwwidget.cpp" line="1333"/>
+         <source>Memory</source>
+         <translation>內存</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="148"/>
+-        <location filename="../src/hwwidget.cpp" line="152"/>
++        <location filename="../src/hwwidget.cpp" line="147"/>
++        <location filename="../src/hwwidget.cpp" line="228"/>
++        <location filename="../src/hwwidget.cpp" line="284"/>
++        <location filename="../src/hwwidget.cpp" line="287"/>
++        <location filename="../src/hwwidget.cpp" line="304"/>
++        <location filename="../src/hwwidget.cpp" line="1355"/>
++        <location filename="../src/hwwidget.cpp" line="1358"/>
+         <source>Graphic Card</source>
+         <translation>顯卡</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="181"/>
+-        <location filename="../src/hwwidget.cpp" line="184"/>
++        <location filename="../src/hwwidget.cpp" line="91"/>
++        <source>This device can be disabled/enabled</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/hwwidget.cpp" line="358"/>
++        <location filename="../src/hwwidget.cpp" line="361"/>
++        <location filename="../src/hwwidget.cpp" line="378"/>
+         <source>Mother Board</source>
+         <translation>主闆</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="206"/>
+-        <location filename="../src/hwwidget.cpp" line="212"/>
++        <location filename="../src/hwwidget.cpp" line="429"/>
++        <location filename="../src/hwwidget.cpp" line="435"/>
++        <location filename="../src/hwwidget.cpp" line="453"/>
++        <location filename="../src/hwwidget.cpp" line="1381"/>
++        <location filename="../src/hwwidget.cpp" line="1384"/>
+         <source>Network Card</source>
+         <translation>網卡</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="289"/>
+-        <location filename="../src/hwwidget.cpp" line="293"/>
++        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="556"/>
++        <location filename="../src/hwwidget.cpp" line="572"/>
++        <location filename="../src/hwwidget.cpp" line="640"/>
++        <location filename="../src/hwwidget.cpp" line="744"/>
++        <location filename="../src/hwwidget.cpp" line="1407"/>
++        <location filename="../src/hwwidget.cpp" line="1410"/>
+         <source>Disk</source>
+         <translation>硬盤</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="315"/>
+-        <location filename="../src/hwwidget.cpp" line="319"/>
++        <location filename="../src/hwwidget.cpp" line="620"/>
++        <location filename="../src/hwwidget.cpp" line="624"/>
++        <location filename="../src/hwwidget.cpp" line="1432"/>
++        <location filename="../src/hwwidget.cpp" line="1435"/>
+         <source>Monitor</source>
+         <translation>顯示器</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="373"/>
+-        <location filename="../src/hwwidget.cpp" line="376"/>
++        <location filename="../src/hwwidget.cpp" line="723"/>
++        <location filename="../src/hwwidget.cpp" line="726"/>
++        <location filename="../src/hwwidget.cpp" line="1458"/>
++        <location filename="../src/hwwidget.cpp" line="1461"/>
+         <source>Sound Card</source>
+         <translation>聲卡</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="410"/>
+-        <location filename="../src/hwwidget.cpp" line="414"/>
++        <location filename="../src/hwwidget.cpp" line="824"/>
++        <location filename="../src/hwwidget.cpp" line="828"/>
++        <location filename="../src/hwwidget.cpp" line="844"/>
++        <location filename="../src/hwwidget.cpp" line="1484"/>
++        <location filename="../src/hwwidget.cpp" line="1487"/>
+         <source>Keyboard</source>
+         <translation>鍵盤</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="435"/>
+-        <location filename="../src/hwwidget.cpp" line="439"/>
++        <location filename="../src/hwwidget.cpp" line="890"/>
++        <location filename="../src/hwwidget.cpp" line="894"/>
++        <location filename="../src/hwwidget.cpp" line="910"/>
++        <location filename="../src/hwwidget.cpp" line="1509"/>
++        <location filename="../src/hwwidget.cpp" line="1512"/>
+         <source>Mouse</source>
+         <translation>鼠標</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="461"/>
+-        <location filename="../src/hwwidget.cpp" line="466"/>
++        <location filename="../src/hwwidget.cpp" line="959"/>
++        <location filename="../src/hwwidget.cpp" line="962"/>
++        <location filename="../src/hwwidget.cpp" line="980"/>
++        <location filename="../src/hwwidget.cpp" line="1534"/>
++        <location filename="../src/hwwidget.cpp" line="1537"/>
+         <source>Bluetooth</source>
+         <translation>藍牙</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="506"/>
+-        <location filename="../src/hwwidget.cpp" line="510"/>
++        <location filename="../src/hwwidget.cpp" line="1049"/>
++        <location filename="../src/hwwidget.cpp" line="1053"/>
++        <location filename="../src/hwwidget.cpp" line="1069"/>
++        <location filename="../src/hwwidget.cpp" line="1559"/>
++        <location filename="../src/hwwidget.cpp" line="1562"/>
+         <source>CD</source>
+         <translation>光驅</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="531"/>
+-        <location filename="../src/hwwidget.cpp" line="534"/>
++        <location filename="../src/hwwidget.cpp" line="1116"/>
++        <location filename="../src/hwwidget.cpp" line="1119"/>
++        <location filename="../src/hwwidget.cpp" line="1136"/>
++        <location filename="../src/hwwidget.cpp" line="1584"/>
++        <location filename="../src/hwwidget.cpp" line="1587"/>
+         <source>Battery</source>
+         <translation>電池</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="565"/>
+-        <location filename="../src/hwwidget.cpp" line="569"/>
++        <location filename="../src/hwwidget.cpp" line="1192"/>
++        <location filename="../src/hwwidget.cpp" line="1196"/>
++        <location filename="../src/hwwidget.cpp" line="1212"/>
++        <location filename="../src/hwwidget.cpp" line="1609"/>
++        <location filename="../src/hwwidget.cpp" line="1612"/>
+         <source>Fan</source>
+         <translation>風扇</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="590"/>
+-        <location filename="../src/hwwidget.cpp" line="593"/>
++        <location filename="../src/hwwidget.cpp" line="1259"/>
++        <location filename="../src/hwwidget.cpp" line="1262"/>
++        <location filename="../src/hwwidget.cpp" line="1279"/>
++        <location filename="../src/hwwidget.cpp" line="1634"/>
++        <location filename="../src/hwwidget.cpp" line="1637"/>
+         <source>Camera</source>
+         <translation>攝像頭</translation>
+     </message>
+@@ -520,76 +571,76 @@
+         <translation>設備管理</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/diskinfo.cpp" line="37"/>
++        <location filename="../src/hardwareinfo/diskinfo.cpp" line="39"/>
+         <location filename="../src/hardwareinfo/monitorinfo.cpp" line="33"/>
+-        <location filename="../src/hwwidget.cpp" line="358"/>
++        <location filename="../src/hwwidget.cpp" line="695"/>
+         <source>Yes</source>
+         <translation>是</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/diskinfo.cpp" line="35"/>
++        <location filename="../src/hardwareinfo/diskinfo.cpp" line="37"/>
+         <location filename="../src/hardwareinfo/monitorinfo.cpp" line="35"/>
+-        <location filename="../src/hwwidget.cpp" line="360"/>
++        <location filename="../src/hwwidget.cpp" line="697"/>
+         <source>No</source>
+         <translation>否</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="103"/>
++        <location filename="../src/hwwidget.cpp" line="177"/>
+         <source>CPU Current Frequency</source>
+         <translation>CPU當前頻率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="103"/>
++        <location filename="../src/hwwidget.cpp" line="177"/>
+         <source>CPU Usage Rate</source>
+         <translation>CPU使用率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="104"/>
++        <location filename="../src/hwwidget.cpp" line="178"/>
+         <source>CPU Temperature</source>
+         <translation>CPU溫度</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="136"/>
++        <location filename="../src/hwwidget.cpp" line="258"/>
+         <source>Memory Usage</source>
+         <translation>內存使用率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="169"/>
++        <location filename="../src/hwwidget.cpp" line="334"/>
+         <source>GDDR Size</source>
+         <translation type="unfinished">GDDR 容量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="344"/>
++        <location filename="../src/hwwidget.cpp" line="680"/>
+         <source>Resolution</source>
+         <translation>分辨率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="354"/>
++        <location filename="../src/hwwidget.cpp" line="690"/>
+         <source>Main Monitor</source>
+         <translation>主顯示器(是/否)</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="551"/>
++        <location filename="../src/hwwidget.cpp" line="1166"/>
+         <source>Energy</source>
+         <translation type="unfinished">電量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="551"/>
++        <location filename="../src/hwwidget.cpp" line="1166"/>
+         <source>Time To Empty</source>
+         <translation type="unfinished">電池續航時間</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="1167"/>
+         <source>Percentage</source>
+         <translation type="unfinished">電量百分比</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="552"/>
++        <location filename="../src/hwwidget.cpp" line="1167"/>
+         <source>State</source>
+         <translation type="unfinished">狀態</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="194"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="210"/>
+         <source>This CPU model does not support temperature display function</source>
+         <translation>這個型號的CPU不支持溫度顯示功能</translation>
+     </message>
+@@ -611,607 +662,621 @@
+         <translation>數據庫錯誤</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="144"/>
+-        <location filename="../src/hwwidget.h" line="159"/>
+-        <location filename="../src/hwwidget.h" line="179"/>
+-        <location filename="../src/hwwidget.h" line="192"/>
+-        <location filename="../src/hwwidget.h" line="202"/>
+-        <location filename="../src/hwwidget.h" line="220"/>
+-        <location filename="../src/hwwidget.h" line="239"/>
+-        <location filename="../src/hwwidget.h" line="249"/>
+-        <location filename="../src/hwwidget.h" line="260"/>
+-        <location filename="../src/hwwidget.h" line="273"/>
+-        <location filename="../src/hwwidget.h" line="315"/>
+-        <location filename="../src/hwwidget.h" line="327"/>
+-        <location filename="../src/hwwidget.h" line="340"/>
+-        <location filename="../src/hwwidget.h" line="347"/>
+-        <location filename="../src/hwwidget.h" line="355"/>
+-        <location filename="../src/hwwidget.h" line="361"/>
+-        <location filename="../src/hwwidget.h" line="368"/>
+-        <location filename="../src/hwwidget.h" line="374"/>
+-        <location filename="../src/hwwidget.h" line="380"/>
+-        <location filename="../src/hwwidget.h" line="393"/>
+-        <location filename="../src/hwwidget.h" line="407"/>
+-        <location filename="../src/hwwidget.h" line="417"/>
+-        <location filename="../src/hwwidget.h" line="428"/>
+-        <location filename="../src/hwwidget.h" line="437"/>
+-        <location filename="../src/hwwidget.h" line="454"/>
+-        <location filename="../src/hwwidget.h" line="464"/>
++        <location filename="../src/include/hwinfostorage.h" line="18"/>
++        <location filename="../src/include/hwinfostorage.h" line="33"/>
++        <location filename="../src/include/hwinfostorage.h" line="53"/>
++        <location filename="../src/include/hwinfostorage.h" line="66"/>
++        <location filename="../src/include/hwinfostorage.h" line="76"/>
++        <location filename="../src/include/hwinfostorage.h" line="94"/>
++        <location filename="../src/include/hwinfostorage.h" line="113"/>
++        <location filename="../src/include/hwinfostorage.h" line="123"/>
++        <location filename="../src/include/hwinfostorage.h" line="134"/>
++        <location filename="../src/include/hwinfostorage.h" line="148"/>
++        <location filename="../src/include/hwinfostorage.h" line="194"/>
++        <location filename="../src/include/hwinfostorage.h" line="206"/>
++        <location filename="../src/include/hwinfostorage.h" line="219"/>
++        <location filename="../src/include/hwinfostorage.h" line="226"/>
++        <location filename="../src/include/hwinfostorage.h" line="234"/>
++        <location filename="../src/include/hwinfostorage.h" line="240"/>
++        <location filename="../src/include/hwinfostorage.h" line="247"/>
++        <location filename="../src/include/hwinfostorage.h" line="253"/>
++        <location filename="../src/include/hwinfostorage.h" line="259"/>
++        <location filename="../src/include/hwinfostorage.h" line="272"/>
++        <location filename="../src/include/hwinfostorage.h" line="286"/>
++        <location filename="../src/include/hwinfostorage.h" line="296"/>
++        <location filename="../src/include/hwinfostorage.h" line="307"/>
++        <location filename="../src/include/hwinfostorage.h" line="316"/>
++        <location filename="../src/include/hwinfostorage.h" line="333"/>
++        <location filename="../src/include/hwinfostorage.h" line="343"/>
+         <source>Manufacturer</source>
+         <translation>製造商</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="145"/>
+-        <location filename="../src/hwwidget.h" line="160"/>
++        <location filename="../src/include/hwinfostorage.h" line="19"/>
++        <location filename="../src/include/hwinfostorage.h" line="34"/>
+         <source>Cores</source>
+         <translation>核心數</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="146"/>
+-        <location filename="../src/hwwidget.h" line="161"/>
++        <location filename="../src/include/hwinfostorage.h" line="20"/>
++        <location filename="../src/include/hwinfostorage.h" line="35"/>
+         <source>Online Cores</source>
+         <translation>在線核心數</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="147"/>
+-        <location filename="../src/hwwidget.h" line="162"/>
++        <location filename="../src/include/hwinfostorage.h" line="21"/>
++        <location filename="../src/include/hwinfostorage.h" line="36"/>
+         <source>Thread Per Cores</source>
+         <translation>每核線程數</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="148"/>
+-        <location filename="../src/hwwidget.h" line="163"/>
++        <location filename="../src/include/hwinfostorage.h" line="22"/>
++        <location filename="../src/include/hwinfostorage.h" line="37"/>
+         <source>MAX MHz</source>
+         <translation>最大 MHz</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="149"/>
+-        <location filename="../src/hwwidget.h" line="164"/>
++        <location filename="../src/include/hwinfostorage.h" line="23"/>
++        <location filename="../src/include/hwinfostorage.h" line="38"/>
+         <source>L1d Cache</source>
+         <translation>L1d 緩存</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="150"/>
+-        <location filename="../src/hwwidget.h" line="165"/>
++        <location filename="../src/include/hwinfostorage.h" line="24"/>
++        <location filename="../src/include/hwinfostorage.h" line="39"/>
+         <source>L1i Cache</source>
+         <translation>L1i 緩存</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="151"/>
+-        <location filename="../src/hwwidget.h" line="166"/>
++        <location filename="../src/include/hwinfostorage.h" line="25"/>
++        <location filename="../src/include/hwinfostorage.h" line="40"/>
+         <source>L2 Cache</source>
+         <translation>L2 緩存</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="152"/>
+-        <location filename="../src/hwwidget.h" line="167"/>
++        <location filename="../src/include/hwinfostorage.h" line="26"/>
++        <location filename="../src/include/hwinfostorage.h" line="41"/>
+         <source>L3 Cache</source>
+         <translation>L3 緩存</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="153"/>
+-        <location filename="../src/hwwidget.h" line="168"/>
++        <location filename="../src/include/hwinfostorage.h" line="27"/>
++        <location filename="../src/include/hwinfostorage.h" line="42"/>
+         <source>L4 Cache</source>
+         <translation type="unfinished">L3 緩存 {4 ?}</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="154"/>
+-        <location filename="../src/hwwidget.h" line="169"/>
++        <location filename="../src/include/hwinfostorage.h" line="28"/>
++        <location filename="../src/include/hwinfostorage.h" line="43"/>
+         <source>CPU Current Frequency</source>
+         <translation>CPU當前頻率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="155"/>
+-        <location filename="../src/hwwidget.h" line="170"/>
++        <location filename="../src/include/hwinfostorage.h" line="29"/>
++        <location filename="../src/include/hwinfostorage.h" line="44"/>
+         <source>CPU Usage Rate</source>
+         <translation>CPU使用率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="156"/>
+-        <location filename="../src/hwwidget.h" line="171"/>
++        <location filename="../src/include/hwinfostorage.h" line="30"/>
++        <location filename="../src/include/hwinfostorage.h" line="45"/>
+         <source>CPU Temperature</source>
+         <translation>CPU溫度</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="175"/>
+-        <location filename="../src/hwwidget.h" line="188"/>
++        <location filename="../src/include/hwinfostorage.h" line="49"/>
++        <location filename="../src/include/hwinfostorage.h" line="62"/>
+         <source>Bank Locator</source>
+         <translation>插槽號</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="176"/>
+-        <location filename="../src/hwwidget.h" line="189"/>
++        <location filename="../src/include/hwinfostorage.h" line="50"/>
++        <location filename="../src/include/hwinfostorage.h" line="63"/>
+         <source>Total Width</source>
+         <translation>總位寬</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="177"/>
+-        <location filename="../src/hwwidget.h" line="190"/>
+-        <location filename="../src/hwwidget.h" line="290"/>
+-        <location filename="../src/hwwidget.h" line="302"/>
++        <location filename="../src/include/hwinfostorage.h" line="51"/>
++        <location filename="../src/include/hwinfostorage.h" line="64"/>
++        <location filename="../src/include/hwinfostorage.h" line="165"/>
++        <location filename="../src/include/hwinfostorage.h" line="178"/>
+         <source>Size</source>
+         <translation>容量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="178"/>
+-        <location filename="../src/hwwidget.h" line="191"/>
+-        <location filename="../src/hwwidget.h" line="245"/>
+-        <location filename="../src/hwwidget.h" line="255"/>
+-        <location filename="../src/hwwidget.h" line="291"/>
+-        <location filename="../src/hwwidget.h" line="303"/>
+-        <location filename="../src/hwwidget.h" line="414"/>
+-        <location filename="../src/hwwidget.h" line="424"/>
+-        <location filename="../src/hwwidget.h" line="455"/>
+-        <location filename="../src/hwwidget.h" line="465"/>
++        <location filename="../src/include/hwinfostorage.h" line="52"/>
++        <location filename="../src/include/hwinfostorage.h" line="65"/>
++        <location filename="../src/include/hwinfostorage.h" line="119"/>
++        <location filename="../src/include/hwinfostorage.h" line="129"/>
++        <location filename="../src/include/hwinfostorage.h" line="167"/>
++        <location filename="../src/include/hwinfostorage.h" line="180"/>
++        <location filename="../src/include/hwinfostorage.h" line="293"/>
++        <location filename="../src/include/hwinfostorage.h" line="303"/>
++        <location filename="../src/include/hwinfostorage.h" line="334"/>
++        <location filename="../src/include/hwinfostorage.h" line="344"/>
+         <source>Serial Number</source>
+         <translation>序列號</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="180"/>
+-        <location filename="../src/hwwidget.h" line="193"/>
++        <location filename="../src/include/hwinfostorage.h" line="54"/>
++        <location filename="../src/include/hwinfostorage.h" line="67"/>
+         <source>Data Width</source>
+         <translation>數據位寬</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="181"/>
+-        <location filename="../src/hwwidget.h" line="194"/>
+-        <location filename="../src/hwwidget.h" line="265"/>
+-        <location filename="../src/hwwidget.h" line="278"/>
++        <location filename="../src/include/hwinfostorage.h" line="55"/>
++        <location filename="../src/include/hwinfostorage.h" line="68"/>
++        <location filename="../src/include/hwinfostorage.h" line="139"/>
++        <location filename="../src/include/hwinfostorage.h" line="153"/>
+         <source>Type</source>
+         <translation>類型</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="182"/>
+-        <location filename="../src/hwwidget.h" line="195"/>
+-        <location filename="../src/hwwidget.h" line="388"/>
+-        <location filename="../src/hwwidget.h" line="402"/>
+-        <location filename="../src/hwwidget.h" line="413"/>
+-        <location filename="../src/hwwidget.h" line="423"/>
+-        <location filename="../src/hwwidget.h" line="434"/>
+-        <location filename="../src/hwwidget.h" line="443"/>
+-        <location filename="../src/hwwidget.h" line="447"/>
+-        <location filename="../src/hwwidget.h" line="450"/>
++        <location filename="../src/include/hwinfostorage.h" line="56"/>
++        <location filename="../src/include/hwinfostorage.h" line="69"/>
++        <location filename="../src/include/hwinfostorage.h" line="140"/>
++        <location filename="../src/include/hwinfostorage.h" line="154"/>
++        <location filename="../src/include/hwinfostorage.h" line="267"/>
++        <location filename="../src/include/hwinfostorage.h" line="281"/>
++        <location filename="../src/include/hwinfostorage.h" line="292"/>
++        <location filename="../src/include/hwinfostorage.h" line="302"/>
++        <location filename="../src/include/hwinfostorage.h" line="313"/>
++        <location filename="../src/include/hwinfostorage.h" line="322"/>
++        <location filename="../src/include/hwinfostorage.h" line="326"/>
++        <location filename="../src/include/hwinfostorage.h" line="329"/>
+         <source>Speed</source>
+         <translation>速率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="183"/>
+-        <location filename="../src/hwwidget.h" line="196"/>
++        <location filename="../src/include/hwinfostorage.h" line="57"/>
++        <location filename="../src/include/hwinfostorage.h" line="70"/>
+         <source>Configured Speed</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="184"/>
+-        <location filename="../src/hwwidget.h" line="197"/>
++        <location filename="../src/include/hwinfostorage.h" line="58"/>
++        <location filename="../src/include/hwinfostorage.h" line="71"/>
+         <source>Part Number</source>
+         <translation>數組程序</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="185"/>
+-        <location filename="../src/hwwidget.h" line="198"/>
++        <location filename="../src/include/hwinfostorage.h" line="59"/>
++        <location filename="../src/include/hwinfostorage.h" line="72"/>
+         <source>Memory Usage</source>
+         <translation>內存使用率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="203"/>
+-        <location filename="../src/hwwidget.h" line="221"/>
++        <location filename="../src/include/hwinfostorage.h" line="77"/>
++        <location filename="../src/include/hwinfostorage.h" line="95"/>
+         <source>Sub System Device ID</source>
+         <translation>子係統設備號</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="204"/>
+-        <location filename="../src/hwwidget.h" line="222"/>
+-        <location filename="../src/hwwidget.h" line="261"/>
+-        <location filename="../src/hwwidget.h" line="274"/>
+-        <location filename="../src/hwwidget.h" line="289"/>
+-        <location filename="../src/hwwidget.h" line="301"/>
+-        <location filename="../src/hwwidget.h" line="316"/>
+-        <location filename="../src/hwwidget.h" line="328"/>
+-        <location filename="../src/hwwidget.h" line="356"/>
+-        <location filename="../src/hwwidget.h" line="362"/>
+-        <location filename="../src/hwwidget.h" line="369"/>
+-        <location filename="../src/hwwidget.h" line="375"/>
+-        <location filename="../src/hwwidget.h" line="429"/>
+-        <location filename="../src/hwwidget.h" line="438"/>
++        <location filename="../src/include/hwinfostorage.h" line="78"/>
++        <location filename="../src/include/hwinfostorage.h" line="96"/>
++        <location filename="../src/include/hwinfostorage.h" line="135"/>
++        <location filename="../src/include/hwinfostorage.h" line="149"/>
++        <location filename="../src/include/hwinfostorage.h" line="195"/>
++        <location filename="../src/include/hwinfostorage.h" line="207"/>
++        <location filename="../src/include/hwinfostorage.h" line="235"/>
++        <location filename="../src/include/hwinfostorage.h" line="241"/>
++        <location filename="../src/include/hwinfostorage.h" line="248"/>
++        <location filename="../src/include/hwinfostorage.h" line="254"/>
++        <location filename="../src/include/hwinfostorage.h" line="308"/>
++        <location filename="../src/include/hwinfostorage.h" line="317"/>
+         <source>Model</source>
+         <translation>型號</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="205"/>
+-        <location filename="../src/hwwidget.h" line="223"/>
++        <location filename="../src/include/hwinfostorage.h" line="79"/>
++        <location filename="../src/include/hwinfostorage.h" line="97"/>
+         <source>Memory</source>
+         <translation>內存</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="206"/>
+-        <location filename="../src/hwwidget.h" line="224"/>
++        <location filename="../src/include/hwinfostorage.h" line="80"/>
++        <location filename="../src/include/hwinfostorage.h" line="98"/>
+         <source>GPU Type</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="207"/>
+-        <location filename="../src/hwwidget.h" line="225"/>
+-        <location filename="../src/hwwidget.h" line="409"/>
+-        <location filename="../src/hwwidget.h" line="419"/>
+-        <location filename="../src/hwwidget.h" line="433"/>
+-        <location filename="../src/hwwidget.h" line="442"/>
++        <location filename="../src/include/hwinfostorage.h" line="81"/>
++        <location filename="../src/include/hwinfostorage.h" line="99"/>
++        <location filename="../src/include/hwinfostorage.h" line="288"/>
++        <location filename="../src/include/hwinfostorage.h" line="298"/>
++        <location filename="../src/include/hwinfostorage.h" line="312"/>
++        <location filename="../src/include/hwinfostorage.h" line="321"/>
+         <source>Bus Info</source>
+         <translation>總線信息</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="208"/>
+-        <location filename="../src/hwwidget.h" line="226"/>
+-        <location filename="../src/hwwidget.h" line="342"/>
+-        <location filename="../src/hwwidget.h" line="349"/>
++        <location filename="../src/include/hwinfostorage.h" line="82"/>
++        <location filename="../src/include/hwinfostorage.h" line="100"/>
++        <location filename="../src/include/hwinfostorage.h" line="221"/>
++        <location filename="../src/include/hwinfostorage.h" line="228"/>
+         <source>Clock</source>
+         <translation>時鐘頻率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="209"/>
+-        <location filename="../src/hwwidget.h" line="227"/>
++        <location filename="../src/include/hwinfostorage.h" line="83"/>
++        <location filename="../src/include/hwinfostorage.h" line="101"/>
+         <source>Physics ID</source>
+         <translation>物理ID</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="210"/>
+-        <location filename="../src/hwwidget.h" line="228"/>
+-        <location filename="../src/hwwidget.h" line="240"/>
+-        <location filename="../src/hwwidget.h" line="250"/>
+-        <location filename="../src/hwwidget.h" line="410"/>
+-        <location filename="../src/hwwidget.h" line="420"/>
+-        <location filename="../src/hwwidget.h" line="432"/>
+-        <location filename="../src/hwwidget.h" line="441"/>
++        <location filename="../src/include/hwinfostorage.h" line="84"/>
++        <location filename="../src/include/hwinfostorage.h" line="102"/>
++        <location filename="../src/include/hwinfostorage.h" line="114"/>
++        <location filename="../src/include/hwinfostorage.h" line="124"/>
++        <location filename="../src/include/hwinfostorage.h" line="289"/>
++        <location filename="../src/include/hwinfostorage.h" line="299"/>
++        <location filename="../src/include/hwinfostorage.h" line="311"/>
++        <location filename="../src/include/hwinfostorage.h" line="320"/>
+         <source>Version</source>
+         <translation>版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="211"/>
+-        <location filename="../src/hwwidget.h" line="229"/>
+-        <location filename="../src/hwwidget.h" line="263"/>
+-        <location filename="../src/hwwidget.h" line="276"/>
+-        <location filename="../src/hwwidget.h" line="343"/>
+-        <location filename="../src/hwwidget.h" line="350"/>
+-        <location filename="../src/hwwidget.h" line="358"/>
+-        <location filename="../src/hwwidget.h" line="364"/>
+-        <location filename="../src/hwwidget.h" line="371"/>
+-        <location filename="../src/hwwidget.h" line="377"/>
+-        <location filename="../src/hwwidget.h" line="381"/>
+-        <location filename="../src/hwwidget.h" line="394"/>
+-        <location filename="../src/hwwidget.h" line="411"/>
+-        <location filename="../src/hwwidget.h" line="421"/>
+-        <location filename="../src/hwwidget.h" line="431"/>
+-        <location filename="../src/hwwidget.h" line="440"/>
++        <location filename="../src/include/hwinfostorage.h" line="85"/>
++        <location filename="../src/include/hwinfostorage.h" line="103"/>
++        <location filename="../src/include/hwinfostorage.h" line="137"/>
++        <location filename="../src/include/hwinfostorage.h" line="151"/>
++        <location filename="../src/include/hwinfostorage.h" line="222"/>
++        <location filename="../src/include/hwinfostorage.h" line="229"/>
++        <location filename="../src/include/hwinfostorage.h" line="237"/>
++        <location filename="../src/include/hwinfostorage.h" line="243"/>
++        <location filename="../src/include/hwinfostorage.h" line="250"/>
++        <location filename="../src/include/hwinfostorage.h" line="256"/>
++        <location filename="../src/include/hwinfostorage.h" line="260"/>
++        <location filename="../src/include/hwinfostorage.h" line="273"/>
++        <location filename="../src/include/hwinfostorage.h" line="290"/>
++        <location filename="../src/include/hwinfostorage.h" line="300"/>
++        <location filename="../src/include/hwinfostorage.h" line="310"/>
++        <location filename="../src/include/hwinfostorage.h" line="319"/>
+         <source>Driver</source>
+         <translation>驅動</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="212"/>
+-        <location filename="../src/hwwidget.h" line="230"/>
++        <location filename="../src/include/hwinfostorage.h" line="86"/>
++        <location filename="../src/include/hwinfostorage.h" line="104"/>
+         <source>Communication Width</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="344"/>
+-        <location filename="../src/hwwidget.h" line="351"/>
++        <location filename="../src/include/hwinfostorage.h" line="166"/>
++        <location filename="../src/include/hwinfostorage.h" line="179"/>
++        <source>Mount Point</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/include/hwinfostorage.h" line="175"/>
++        <location filename="../src/include/hwinfostorage.h" line="188"/>
++        <source>Rota</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/include/hwinfostorage.h" line="223"/>
++        <location filename="../src/include/hwinfostorage.h" line="230"/>
+         <source>Width</source>
+         <translation>位寬</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="213"/>
+-        <location filename="../src/hwwidget.h" line="231"/>
++        <location filename="../src/include/hwinfostorage.h" line="87"/>
++        <location filename="../src/include/hwinfostorage.h" line="105"/>
+         <source>GDDR Size</source>
+         <translation>GDDR 容量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="214"/>
+-        <location filename="../src/hwwidget.h" line="232"/>
++        <location filename="../src/include/hwinfostorage.h" line="88"/>
++        <location filename="../src/include/hwinfostorage.h" line="106"/>
+         <source>EGL Version</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="215"/>
+-        <location filename="../src/hwwidget.h" line="233"/>
++        <location filename="../src/include/hwinfostorage.h" line="89"/>
++        <location filename="../src/include/hwinfostorage.h" line="107"/>
+         <source>EGL Api List</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="216"/>
+-        <location filename="../src/hwwidget.h" line="234"/>
++        <location filename="../src/include/hwinfostorage.h" line="90"/>
++        <location filename="../src/include/hwinfostorage.h" line="108"/>
+         <source>OpenGL Version</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="217"/>
+-        <location filename="../src/hwwidget.h" line="235"/>
++        <location filename="../src/include/hwinfostorage.h" line="91"/>
++        <location filename="../src/include/hwinfostorage.h" line="109"/>
+         <source>GLSL Version</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="241"/>
+-        <location filename="../src/hwwidget.h" line="251"/>
++        <location filename="../src/include/hwinfostorage.h" line="115"/>
++        <location filename="../src/include/hwinfostorage.h" line="125"/>
+         <source>Chassis Handle</source>
+         <translation>機箱識彆號</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="242"/>
+-        <location filename="../src/hwwidget.h" line="252"/>
++        <location filename="../src/include/hwinfostorage.h" line="116"/>
++        <location filename="../src/include/hwinfostorage.h" line="126"/>
+         <source>Bios Vendor</source>
+         <translation>Bios製造商</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="243"/>
+-        <location filename="../src/hwwidget.h" line="253"/>
++        <location filename="../src/include/hwinfostorage.h" line="117"/>
++        <location filename="../src/include/hwinfostorage.h" line="127"/>
+         <source>Bios Version</source>
+         <translation>Bios版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="244"/>
+-        <location filename="../src/hwwidget.h" line="254"/>
++        <location filename="../src/include/hwinfostorage.h" line="118"/>
++        <location filename="../src/include/hwinfostorage.h" line="128"/>
+         <source>Chipser</source>
+         <translation>芯片組</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="246"/>
+-        <location filename="../src/hwwidget.h" line="256"/>
++        <location filename="../src/include/hwinfostorage.h" line="120"/>
++        <location filename="../src/include/hwinfostorage.h" line="130"/>
+         <source>Publish Date</source>
+         <translation>發佈日期</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="262"/>
+-        <location filename="../src/hwwidget.h" line="275"/>
++        <location filename="../src/include/hwinfostorage.h" line="136"/>
++        <location filename="../src/include/hwinfostorage.h" line="150"/>
+         <source>Bus</source>
+         <translation>總線信息</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="264"/>
+-        <location filename="../src/hwwidget.h" line="277"/>
++        <location filename="../src/include/hwinfostorage.h" line="138"/>
++        <location filename="../src/include/hwinfostorage.h" line="152"/>
+         <source>MAC Address</source>
+         <translation>MAC地址</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="266"/>
+-        <location filename="../src/hwwidget.h" line="279"/>
++        <location filename="../src/include/hwinfostorage.h" line="141"/>
++        <location filename="../src/include/hwinfostorage.h" line="155"/>
+         <source>IP Address</source>
+         <translation>IP地址</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="267"/>
+-        <location filename="../src/hwwidget.h" line="280"/>
++        <location filename="../src/include/hwinfostorage.h" line="142"/>
++        <location filename="../src/include/hwinfostorage.h" line="156"/>
+         <source>Net Musk</source>
+         <translation>子網掩碼</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="268"/>
+-        <location filename="../src/hwwidget.h" line="281"/>
++        <location filename="../src/include/hwinfostorage.h" line="143"/>
++        <location filename="../src/include/hwinfostorage.h" line="157"/>
+         <source>Send Bytes</source>
+         <translation>發送數據量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="269"/>
+-        <location filename="../src/hwwidget.h" line="282"/>
++        <location filename="../src/include/hwinfostorage.h" line="144"/>
++        <location filename="../src/include/hwinfostorage.h" line="158"/>
+         <source>Recved Bytes</source>
+         <translation>接收數據量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="270"/>
+-        <location filename="../src/hwwidget.h" line="283"/>
++        <location filename="../src/include/hwinfostorage.h" line="145"/>
++        <location filename="../src/include/hwinfostorage.h" line="159"/>
+         <source>MTU</source>
+         <translation>MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="288"/>
+-        <location filename="../src/hwwidget.h" line="306"/>
++        <location filename="../src/include/hwinfostorage.h" line="164"/>
++        <location filename="../src/include/hwinfostorage.h" line="183"/>
+         <source>Vendor</source>
+         <translation>製造商</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="292"/>
++        <location filename="../src/include/hwinfostorage.h" line="168"/>
+         <source>Disk Name</source>
+         <translation>硬盤名稱</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="293"/>
+-        <location filename="../src/hwwidget.h" line="304"/>
++        <location filename="../src/include/hwinfostorage.h" line="169"/>
++        <location filename="../src/include/hwinfostorage.h" line="181"/>
+         <source>Frimwarever Version</source>
+         <translation>固件版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="294"/>
+-        <location filename="../src/hwwidget.h" line="305"/>
++        <location filename="../src/include/hwinfostorage.h" line="170"/>
++        <location filename="../src/include/hwinfostorage.h" line="182"/>
+         <source>Disk Type</source>
+         <translation>硬盤類型</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="295"/>
+-        <location filename="../src/hwwidget.h" line="307"/>
++        <location filename="../src/include/hwinfostorage.h" line="171"/>
++        <location filename="../src/include/hwinfostorage.h" line="184"/>
+         <source>Main Disk</source>
+         <translation>主硬盤(是/否)</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="297"/>
+-        <location filename="../src/hwwidget.h" line="309"/>
++        <location filename="../src/include/hwinfostorage.h" line="173"/>
++        <location filename="../src/include/hwinfostorage.h" line="186"/>
+         <source>UFS</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="298"/>
+-        <location filename="../src/hwwidget.h" line="310"/>
++        <location filename="../src/include/hwinfostorage.h" line="174"/>
++        <location filename="../src/include/hwinfostorage.h" line="187"/>
+         <source>UFS Revision</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="317"/>
+-        <location filename="../src/hwwidget.h" line="329"/>
++        <location filename="../src/include/hwinfostorage.h" line="196"/>
++        <location filename="../src/include/hwinfostorage.h" line="208"/>
+         <source>Monitor Size</source>
+         <translation>顯示器尺寸</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="318"/>
+-        <location filename="../src/hwwidget.h" line="330"/>
++        <location filename="../src/include/hwinfostorage.h" line="197"/>
++        <location filename="../src/include/hwinfostorage.h" line="209"/>
+         <source>Monitor Ratio</source>
+         <translation>顯示寬高比</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="319"/>
+-        <location filename="../src/hwwidget.h" line="331"/>
++        <location filename="../src/include/hwinfostorage.h" line="198"/>
++        <location filename="../src/include/hwinfostorage.h" line="210"/>
+         <source>Resolution</source>
+         <translation>分辨率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="320"/>
+-        <location filename="../src/hwwidget.h" line="332"/>
++        <location filename="../src/include/hwinfostorage.h" line="199"/>
++        <location filename="../src/include/hwinfostorage.h" line="211"/>
+         <source>Max Resolution</source>
+         <translation>最大分辨率</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="321"/>
+-        <location filename="../src/hwwidget.h" line="333"/>
++        <location filename="../src/include/hwinfostorage.h" line="200"/>
++        <location filename="../src/include/hwinfostorage.h" line="212"/>
+         <source>Main Monitor</source>
+         <translation>主顯示器(是/否)</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="335"/>
+-        <location filename="../src/hwwidget.h" line="296"/>
+-        <location filename="../src/hwwidget.h" line="308"/>
+-        <location filename="../src/hwwidget.h" line="322"/>
+-        <location filename="../src/hwwidget.h" line="334"/>
+-        <location filename="../src/hwwidget.h" line="357"/>
+-        <location filename="../src/hwwidget.h" line="363"/>
+-        <location filename="../src/hwwidget.h" line="370"/>
+-        <location filename="../src/hwwidget.h" line="376"/>
+-        <location filename="../src/hwwidget.h" line="430"/>
+-        <location filename="../src/hwwidget.h" line="439"/>
++        <location filename="../src/hwwidget.cpp" line="670"/>
++        <location filename="../src/include/hwinfostorage.h" line="172"/>
++        <location filename="../src/include/hwinfostorage.h" line="185"/>
++        <location filename="../src/include/hwinfostorage.h" line="201"/>
++        <location filename="../src/include/hwinfostorage.h" line="213"/>
++        <location filename="../src/include/hwinfostorage.h" line="236"/>
++        <location filename="../src/include/hwinfostorage.h" line="242"/>
++        <location filename="../src/include/hwinfostorage.h" line="249"/>
++        <location filename="../src/include/hwinfostorage.h" line="255"/>
++        <location filename="../src/include/hwinfostorage.h" line="309"/>
++        <location filename="../src/include/hwinfostorage.h" line="318"/>
+         <source>Interface</source>
+         <translation>接口</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="323"/>
+-        <location filename="../src/hwwidget.h" line="335"/>
++        <location filename="../src/include/hwinfostorage.h" line="202"/>
++        <location filename="../src/include/hwinfostorage.h" line="214"/>
+         <source>Visible Area</source>
+         <translation>可視麵積</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="324"/>
+-        <location filename="../src/hwwidget.h" line="336"/>
++        <location filename="../src/include/hwinfostorage.h" line="203"/>
++        <location filename="../src/include/hwinfostorage.h" line="215"/>
+         <source>Gamma</source>
+         <translation>伽馬值</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="341"/>
+-        <location filename="../src/hwwidget.h" line="348"/>
++        <location filename="../src/include/hwinfostorage.h" line="220"/>
++        <location filename="../src/include/hwinfostorage.h" line="227"/>
+         <source>Bus Address</source>
+         <translation>總線地址</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="382"/>
+-        <location filename="../src/hwwidget.h" line="395"/>
++        <location filename="../src/include/hwinfostorage.h" line="261"/>
++        <location filename="../src/include/hwinfostorage.h" line="274"/>
+         <source>Driver Version</source>
+         <translation>驅動版本</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.cpp" line="474"/>
+-        <location filename="../src/hwwidget.h" line="383"/>
+-        <location filename="../src/hwwidget.h" line="396"/>
++        <location filename="../src/hwwidget.cpp" line="1000"/>
++        <location filename="../src/include/hwinfostorage.h" line="262"/>
++        <location filename="../src/include/hwinfostorage.h" line="275"/>
+         <source>Address</source>
+         <translation>地址</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="384"/>
+-        <location filename="../src/hwwidget.h" line="397"/>
++        <location filename="../src/include/hwinfostorage.h" line="263"/>
++        <location filename="../src/include/hwinfostorage.h" line="276"/>
+         <source>Link Mode</source>
+         <translation>連接模式</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="385"/>
+-        <location filename="../src/hwwidget.h" line="398"/>
++        <location filename="../src/include/hwinfostorage.h" line="264"/>
++        <location filename="../src/include/hwinfostorage.h" line="277"/>
+         <source>Link Policy</source>
+         <translation>連接策略</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="387"/>
+-        <location filename="../src/hwwidget.h" line="401"/>
++        <location filename="../src/include/hwinfostorage.h" line="266"/>
++        <location filename="../src/include/hwinfostorage.h" line="280"/>
+         <source>ACL MTU</source>
+         <translation>ACL MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="390"/>
+-        <location filename="../src/hwwidget.h" line="399"/>
++        <location filename="../src/include/hwinfostorage.h" line="269"/>
++        <location filename="../src/include/hwinfostorage.h" line="278"/>
+         <source>Packe Type</source>
+         <translation>數據包類型</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="386"/>
+-        <location filename="../src/hwwidget.h" line="400"/>
++        <location filename="../src/include/hwinfostorage.h" line="265"/>
++        <location filename="../src/include/hwinfostorage.h" line="279"/>
+         <source>SCO MTU</source>
+         <translation>SCO MTU</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="389"/>
+-        <location filename="../src/hwwidget.h" line="403"/>
++        <location filename="../src/include/hwinfostorage.h" line="268"/>
++        <location filename="../src/include/hwinfostorage.h" line="282"/>
+         <source>Features</source>
+         <translation>特徵</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="408"/>
+-        <location filename="../src/hwwidget.h" line="418"/>
++        <location filename="../src/include/hwinfostorage.h" line="287"/>
++        <location filename="../src/include/hwinfostorage.h" line="297"/>
+         <source>Name</source>
+         <translation>名稱</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="412"/>
+-        <location filename="../src/hwwidget.h" line="422"/>
++        <location filename="../src/include/hwinfostorage.h" line="291"/>
++        <location filename="../src/include/hwinfostorage.h" line="301"/>
+         <source>Device Number</source>
+         <translation>設備號</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="456"/>
+-        <location filename="../src/hwwidget.h" line="466"/>
++        <location filename="../src/include/hwinfostorage.h" line="335"/>
++        <location filename="../src/include/hwinfostorage.h" line="345"/>
+         <source>State</source>
+         <translation>狀態</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="457"/>
+-        <location filename="../src/hwwidget.h" line="467"/>
++        <location filename="../src/include/hwinfostorage.h" line="336"/>
++        <location filename="../src/include/hwinfostorage.h" line="346"/>
+         <source>Energy</source>
+         <translation>電量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="458"/>
+-        <location filename="../src/hwwidget.h" line="468"/>
++        <location filename="../src/include/hwinfostorage.h" line="337"/>
++        <location filename="../src/include/hwinfostorage.h" line="347"/>
+         <source>Used Times</source>
+         <translation>使用時間</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="459"/>
+-        <location filename="../src/hwwidget.h" line="469"/>
++        <location filename="../src/include/hwinfostorage.h" line="338"/>
++        <location filename="../src/include/hwinfostorage.h" line="348"/>
+         <source>Energy Full</source>
+         <translation>完全充滿容量</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="460"/>
+-        <location filename="../src/hwwidget.h" line="470"/>
++        <location filename="../src/include/hwinfostorage.h" line="339"/>
++        <location filename="../src/include/hwinfostorage.h" line="349"/>
+         <source>Time To Empty</source>
+         <translation>電池續航時間</translation>
+     </message>
+     <message>
+-        <location filename="../src/hwwidget.h" line="461"/>
+-        <location filename="../src/hwwidget.h" line="471"/>
++        <location filename="../src/include/hwinfostorage.h" line="340"/>
++        <location filename="../src/include/hwinfostorage.h" line="350"/>
+         <source>Percentage</source>
+         <translation>電量百分比</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="40"/>
++        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="57"/>
+         <source>Wireless</source>
+         <translation>無線</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="42"/>
++        <location filename="../src/hardwareinfo/networkcardinfo.cpp" line="59"/>
+         <source>Wired</source>
+         <translation>有線</translation>
+     </message>
+     <message>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="87"/>
+-        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="121"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="93"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="103"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="150"/>
++        <location filename="../src/hardwareinfo/cpuinfo.cpp" line="155"/>
+         <source>This CPU model does not support frequency display function</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/fault_diagnosis/CMakeLists.txt b/plugins/fault_diagnosis/CMakeLists.txt
+index 9df7622..2b5135c 100644
+--- a/plugins/fault_diagnosis/CMakeLists.txt
++++ b/plugins/fault_diagnosis/CMakeLists.txt
+@@ -132,7 +132,7 @@ else ()
+     target_link_libraries(${PROJECT_NAME} PRIVATE compatibility)
+ endif ()
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /opt/kylin-os-manager/plugins/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/plugins/)
+ install(FILES ${SRC_DIR}/data/i18n.conf DESTINATION /usr/share/kylin-os-manager/fault-diagnosis/)
+ install(FILES ${QM_FILES} DESTINATION /usr/share/kylin-os-manager/fault-diagnosis/translations/)
+ 
+diff --git a/plugins/fault_diagnosis/component/text_label.cpp b/plugins/fault_diagnosis/component/text_label.cpp
+index 871bfce..36b494c 100644
+--- a/plugins/fault_diagnosis/component/text_label.cpp
++++ b/plugins/fault_diagnosis/component/text_label.cpp
+@@ -3,9 +3,11 @@
+ #include <QFontMetrics>
+ #include <QPainter>
+ #include <QHBoxLayout>
+-#include <QGSettings/QGSettings>
+ #include <QTimer>
+-#include "kom-ukui-gsettings.h"
++#include <QColor>
++#include <QPalette>
++#include <QGSettings/QGSettings>
++#include <QApplication>
+ #include "utils.h"
+ #include "text_label.h"
+ 
+@@ -22,7 +24,8 @@ TextLabel::TextLabel(QWidget *parent)
+     : QLabel(parent),
+       internal_label_(new QLabel(this)),
+       pixel_size_(DEFAULT_PIXEL_SIZE),
+-      is_bold_(false)
++      is_bold_(false),
++      font_color_enum_(FontColor::kNone)
+ {
+     auto hbox_layout = new QHBoxLayout;
+     hbox_layout->setSpacing(0);
+@@ -30,16 +33,31 @@ TextLabel::TextLabel(QWidget *parent)
+     hbox_layout->addWidget(internal_label_);
+     setLayout(hbox_layout);
+ 
+-    connect(kom::UkuiGsettings::getInstance(), &kom::UkuiGsettings::fontSizeChange, this, [this]() {
+-        SetPixelSize(pixel_size_, is_bold_);
+-    });
+-
+-    // 监听字体变化
++    // 监听字体,字号,主题变化
+     auto *gsettings = new QGSettings("org.ukui.style", "", this);
+     connect(gsettings, &QGSettings::changed, this, [this](QString key)  {
+-        if (key == "system-font" || key == "systemFont") {
++        // 设置字体和字号
++        if (key == "system-font" ||
++            key == "systemFont" ||
++            key == "system-font-size" ||
++            key == "systemFontSize")
++        {
+             SetPixelSize(pixel_size_, is_bold_);
+         }
++
++        // 当主题改变时,会重置调色板的颜色,导致之前设置的字体颜色失效。
++        // 此处监听主题改变,当主题改变后重设字体颜色
++        if (key == "style-name" || key == "styleName") {
++            // 优先级: font_color_ -> font_color_enum
++            if (font_color_.isValid()) {
++                SetFontColor(font_color_);
++            } else if (font_color_enum_ != FontColor::kNone) {
++                SetFontColor(font_color_enum_);
++            } else {
++                // 没有给控件设置过字体颜色,不做处理
++                ;
++            }
++        }
+     });
+ 
+     // 处理控制面板切换字体后不会同步更新的问题
+@@ -70,12 +88,40 @@ void TextLabel::SetPixelSize(double pixel_size, bool is_bold) {
+ }
+ 
+ void TextLabel::SetFontColor(const QColor &color) {
++    font_color_ = color;
+     auto p = internal_label_->palette();
+     p.setColor(QPalette::Text, color);
+     setPalette(p);
+     internal_label_->setPalette(p);
+ }
+ 
++void TextLabel::SetFontColor(const enum FontColor color) {
++    font_color_enum_ = color;
++
++    QColor target_color;
++    switch (color) {
++        case FontColor::kPlaceholderText: {
++            target_color = Utils::CurrentPlaceholderTextColor();
++            break;
++        }
++        case FontColor::kText: {
++            target_color = qApp->palette().color(QPalette::ColorRole::Text);
++            break;
++        }
++        default: {
++            qCritical() << "Text label set font color: unsupported specified color";
++            break;
++        }
++    }
++
++    if (target_color.isValid()) {
++        auto p = internal_label_->palette();
++        p.setColor(QPalette::Text, target_color);
++        setPalette(p);
++        internal_label_->setPalette(p);
++    }
++}
++
+ void TextLabel::HandleText(std::function<QString(QString)> handle_text_func) {
+     handle_text_func_ = handle_text_func;
+ }
+diff --git a/plugins/fault_diagnosis/component/text_label.h b/plugins/fault_diagnosis/component/text_label.h
+index 99ce743..0482aad 100644
+--- a/plugins/fault_diagnosis/component/text_label.h
++++ b/plugins/fault_diagnosis/component/text_label.h
+@@ -11,22 +11,31 @@ namespace K {
+ class TextLabel: public QLabel {
+     Q_OBJECT
+ public:
++    enum class FontColor {
++        kNone = 0,
++        kPlaceholderText,
++        kText,
++    };
++
+     TextLabel(QWidget *parent = nullptr);
+     ~TextLabel();
+     void SetText(const QString &text);
+     void HandleText(std::function<QString(QString)> handle_text_func);
+     void SetPixelSize(double pixel_size, bool is_bold = false);
+     void SetFontColor(const QColor &color);
++    void SetFontColor(const enum FontColor color);
+ 
+ protected:
+     void paintEvent(QPaintEvent *event) override;
+ 
+ private:
+-    QString text_;
++    QString                         text_;
+     std::function<QString(QString)> handle_text_func_;
+-    QLabel *internal_label_;
+-    double pixel_size_;
+-    bool is_bold_;
++    QLabel *                        internal_label_;
++    double                          pixel_size_;
++    bool                            is_bold_;
++    QColor                          font_color_;
++    enum FontColor                  font_color_enum_;
+ };
+ 
+ }
+diff --git a/plugins/fault_diagnosis/component/utils.cpp b/plugins/fault_diagnosis/component/utils.cpp
+index b5ee6d4..3a97aea 100644
+--- a/plugins/fault_diagnosis/component/utils.cpp
++++ b/plugins/fault_diagnosis/component/utils.cpp
+@@ -3,6 +3,7 @@
+ #include <QWidget>
+ #include <QFileInfo>
+ #include <QFile>
++#include <QGSettings/QGSettings>
+ #include "kom-ukui-gsettings.h"
+ #include "utils.h"
+ 
+@@ -66,7 +67,7 @@ QString Utils::ByteToString(quint64 byte) {
+ quint64 Utils::CalculateDirSize(const QDir &dir) {
+     quint64 total_size{0};
+ 
+-    auto entries = dir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
++    auto entries = dir.entryList(QDir::Files | QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot);
+     for (const auto &entry: entries) {
+         auto absolute_file_path = dir.absoluteFilePath(entry);
+         QFileInfo file_info(absolute_file_path);
+@@ -103,4 +104,45 @@ void Utils::RemoveDir(const QString &dir_path) {
+     dir.rmpath(dir_path);
+ }
+ 
++enum Utils::Theme Utils::CurrentTheme() {
++    QGSettings s("org.ukui.style", "");
++    if (s.keys().contains("styleName")) {
++        auto theme_name = s.get("styleName").toString();
++        if (theme_name == "ukui-default") {
++            return Utils::Theme::kUkuiDefault;
++        }
++        if (theme_name == "ukui-light") {
++            return Utils::Theme::kUkuiLight;
++        }
++        if (theme_name == "ukui-dark") {
++            return Utils::Theme::kUkuiDark;
++        }
++    }
++
++    return Utils::Theme::kUkuiDefault;
++}
++
++QColor Utils::CurrentPlaceholderTextColor() {
++    QColor color;
++    auto theme = CurrentTheme();
++    switch (theme) {
++        case K::Utils::Theme::kUkuiDark: {
++            color.setRed(255);
++            color.setGreen(255);
++            color.setBlue(255);
++            color.setAlphaF(0.35);
++            break;
++        }
++        default: {
++            color.setRed(0);
++            color.setGreen(0);
++            color.setBlue(0);
++            color.setAlphaF(0.35);
++            break;
++        }
++    }
++
++    return color;
++}
++
+ }
+diff --git a/plugins/fault_diagnosis/component/utils.h b/plugins/fault_diagnosis/component/utils.h
+index 2140e8f..a65ce82 100644
+--- a/plugins/fault_diagnosis/component/utils.h
++++ b/plugins/fault_diagnosis/component/utils.h
+@@ -3,6 +3,7 @@
+ 
+ #include <QPixmap>
+ #include <QDir>
++#include <QColor>
+ 
+ namespace K {
+ 
+@@ -10,11 +11,26 @@ class Utils {
+ public:
+     Utils();
+     ~Utils();
++
++    enum class Theme {
++        kUkuiDefault = 0,
++        kUkuiLight,
++        kUkuiDark,
++    };
++
+     static double AdaptPixelSizeToPointSize(double pixel_size);
+     static QPixmap ChangePixmapColor(const QPixmap &pixmap, const QColor &color);
+     static QString ByteToString(quint64 byte);
+     static quint64 CalculateDirSize(const QDir &dir);
+     static void RemoveDir(const QString &dir_path);
++    /**
++     * @brief: 获取当前主题
++     */
++    static enum Theme CurrentTheme();
++    /**
++     * @brief: 获取当前主题下的 PlaceholderText 颜色
++     */
++     static QColor CurrentPlaceholderTextColor();
+ };
+ 
+ }
+diff --git a/plugins/fault_diagnosis/diagnoses/complete_machine.cpp b/plugins/fault_diagnosis/diagnoses/complete_machine.cpp
+index 79f7cc9..70c19d8 100644
+--- a/plugins/fault_diagnosis/diagnoses/complete_machine.cpp
++++ b/plugins/fault_diagnosis/diagnoses/complete_machine.cpp
+@@ -72,13 +72,7 @@ bool CompleteMachine::DiagnosticsList(QList<DiagnosticCategory> &diagnostic_cate
+         return false;
+     }
+ 
+-    // 0: 主线
+-    // 1: 工行
+-#if defined(ICBC_ENVIRONMENT)
+-    QDBusReply<QString> reply = interface_->call("GetCheckList", qint64(1));
+-#else
+     QDBusReply<QString> reply = interface_->call("GetCheckList", qint64(0));
+-#endif
+     if (!reply.isValid()) {
+         qCritical() << "Complete machine diagnosis DiagnosticsList dbus interface return is not vaild";
+         return false;
+diff --git a/plugins/fault_diagnosis/diagnosis_core.cpp b/plugins/fault_diagnosis/diagnosis_core.cpp
+index 604d05a..c87af2f 100644
+--- a/plugins/fault_diagnosis/diagnosis_core.cpp
++++ b/plugins/fault_diagnosis/diagnosis_core.cpp
+@@ -54,7 +54,7 @@ void DiagnosisCore::Init() {
+     if (application != NULL) {
+         diagnosis_type_i18n_.insert(DiagnosisType::kApplication, application);
+     }
+-    // 系统更新检测
++    // 系统在线更新检测
+     g_autofree gchar *system_update = g_key_file_get_locale_string(key_file, "Category", "SystemUpdate", NULL, &error);
+     if (system_update != NULL) {
+         diagnosis_type_i18n_.insert(DiagnosisType::kSystemUpdate, system_update);
+diff --git a/plugins/fault_diagnosis/diagnosis_entry_widget.cpp b/plugins/fault_diagnosis/diagnosis_entry_widget.cpp
+index 9ac90f3..3581b19 100644
+--- a/plugins/fault_diagnosis/diagnosis_entry_widget.cpp
++++ b/plugins/fault_diagnosis/diagnosis_entry_widget.cpp
+@@ -28,12 +28,12 @@ DiagnosisEntryWidget::DiagnosisEntryWidget(const DiagnosticEntry &diagnostic_ent
+     setMinimumHeight(36);
+     setFixedWidth(820);
+ 
+-    select_seat_label_->setFixedSize(16, 16);
++    select_seat_label_->setFixedSize(18, 18);
+     select_seat_vbox_layout_->setSpacing(0);
+     select_seat_vbox_layout_->setContentsMargins(0, 0, 0, 0);
+     select_checkbox_->hide();
+     name_label_->SetText(diagnostic_entry_.item.base.name);
+-    desc_label_->SetFontColor(qApp->palette().color(QPalette::PlaceholderText));
++    desc_label_->SetFontColor(K::TextLabel::FontColor::kPlaceholderText);
+     desc_label_->SetText(diagnostic_entry_.item.base.describe);
+     contact_technical_service_btn_->setText(tr("Please contact technical service"));
+     contact_technical_service_btn_->hide();
+@@ -112,7 +112,7 @@ void DiagnosisEntryWidget::SetStatus(enum Status status) {
+             break;
+         case DiagnosisEntryWidget::Status::kDiagnosising:
+             status_ = DiagnosisEntryWidget::Status::kDiagnosising;
+-            status_label_->SetFontColor(qApp->palette().color(QPalette::Text));
++            status_label_->SetFontColor(K::TextLabel::FontColor::kText);
+             status_label_->SetText(tr("Diagnosising..."));
+             break;
+         case DiagnosisEntryWidget::Status::kFixed:
+@@ -122,7 +122,7 @@ void DiagnosisEntryWidget::SetStatus(enum Status status) {
+             break;
+         case DiagnosisEntryWidget::Status::kRepairing:
+             status_ = DiagnosisEntryWidget::Status::kRepairing;
+-            status_label_->SetFontColor(qApp->palette().color(QPalette::Text));
++            status_label_->SetFontColor(K::TextLabel::FontColor::kText);
+             status_label_->SetText(tr("Repairing..."));
+             break;
+         case DiagnosisEntryWidget::Status::KReapriFailed:
+diff --git a/plugins/fault_diagnosis/diagnosis_subentry_widget.cpp b/plugins/fault_diagnosis/diagnosis_subentry_widget.cpp
+index c4013f1..a306bec 100644
+--- a/plugins/fault_diagnosis/diagnosis_subentry_widget.cpp
++++ b/plugins/fault_diagnosis/diagnosis_subentry_widget.cpp
+@@ -23,14 +23,14 @@ DiagnosisSubentryWidget::DiagnosisSubentryWidget(const DiagnosticItem &diagnosti
+     setMinimumHeight(36);
+     setFixedWidth(820);
+ 
+-    select_seat_label_->setFixedSize(16, 16);
++    select_seat_label_->setFixedSize(18, 18);
+     select_seat_vbox_layout_->setSpacing(0);
+     select_seat_vbox_layout_->setContentsMargins(0, 0, 0, 0);
+     select_checkbox_->hide();
+     connect(select_checkbox_, &QCheckBox::stateChanged, this, &DiagnosisSubentryWidget::sig_SelectChange);
+ 
+     name_label_->SetText(diagnostic_item_.name);
+-    desc_label_->SetFontColor(qApp->palette().color(QPalette::PlaceholderText));
++    desc_label_->SetFontColor(K::TextLabel::FontColor::kPlaceholderText);
+     desc_label_->SetText(diagnostic_item_.describe);
+ 
+     contact_technical_service_btn_->setText(tr("Please contact technical service"));
+@@ -75,7 +75,7 @@ void DiagnosisSubentryWidget::SetStatus(enum Status status) {
+             break;
+         case Status::kDiagnosising:
+             status_ = DiagnosisSubentryWidget::Status::kDiagnosising;
+-            status_label_->SetFontColor(qApp->palette().color(QPalette::Text));
++            status_label_->SetFontColor(K::TextLabel::FontColor::kText);
+             status_label_->SetText(tr("Diagnosising..."));
+             break;
+         case Status::kNormal:
+@@ -90,7 +90,7 @@ void DiagnosisSubentryWidget::SetStatus(enum Status status) {
+             break;
+         case Status::kRepairing:
+             status_ = DiagnosisSubentryWidget::Status::kRepairing;
+-            status_label_->SetFontColor(qApp->palette().color(QPalette::Text));
++            status_label_->SetFontColor(K::TextLabel::FontColor::kText);
+             status_label_->SetText(tr("Repairing..."));
+             break;
+         case Status::kFixed:
+diff --git a/plugins/fault_diagnosis/fault_diagnosis.cpp b/plugins/fault_diagnosis/fault_diagnosis.cpp
+index 8a91b51..0a24643 100644
+--- a/plugins/fault_diagnosis/fault_diagnosis.cpp
++++ b/plugins/fault_diagnosis/fault_diagnosis.cpp
+@@ -92,11 +92,7 @@ std::string FaultDiagnosis::name() {
+ }
+ 
+ std::string FaultDiagnosis::i18nName() {
+-#if defined(ICBC_ENVIRONMENT)
+-    return QObject::tr("Health examination").toStdString();
+-#else
+     return QObject::tr("FaultDiagnosis").toStdString();
+-#endif
+ }
+ 
+ std::string FaultDiagnosis::icon() {
+diff --git a/plugins/fault_diagnosis/home_page_widget.cpp b/plugins/fault_diagnosis/home_page_widget.cpp
+index e9c8150..330cd1b 100644
+--- a/plugins/fault_diagnosis/home_page_widget.cpp
++++ b/plugins/fault_diagnosis/home_page_widget.cpp
+@@ -93,21 +93,6 @@ HomePageWidget::HomePageWidget()
+     one_click_detection_btn_->setProperty("isImportant", true);
+     connect(one_click_detection_btn_, &QPushButton::clicked, this, &HomePageWidget::sig_OneClickDetection);
+ 
+-#ifdef ICBC_ENVIRONMENT
+-    auto information_vbox_layout = new QVBoxLayout;
+-    information_vbox_layout->setSpacing(0);
+-    information_vbox_layout->setContentsMargins(0, 0, 0, 0);
+-    information_vbox_layout->addWidget(describe_label_);
+-    information_vbox_layout->addSpacing(8);
+-    information_vbox_layout->addWidget(details_label_);
+-
+-    auto information_layout = new QHBoxLayout;
+-    information_layout->setSpacing(0);
+-    information_layout->setContentsMargins(0, 0, 0, 0);
+-    information_layout->addLayout(information_vbox_layout);
+-    information_layout->addStretch();
+-    information_layout->addWidget(one_click_detection_btn_);
+-#else
+     auto *one_click_detection_hbox_layout = new QHBoxLayout;
+     one_click_detection_hbox_layout->setSpacing(0);
+     one_click_detection_hbox_layout->setContentsMargins(0, 0, 0, 0);
+@@ -140,7 +125,6 @@ HomePageWidget::HomePageWidget()
+     information_layout->addLayout(information_vbox_layout);
+     information_layout->addSpacing(16);
+     information_layout->addWidget(icon_label_);
+-#endif
+ 
+     // 分类检测
+     // 网络检测
+@@ -149,10 +133,10 @@ HomePageWidget::HomePageWidget()
+                                                            tr("Troubleshooting issues with inablilty to access the internet"),
+                                                            this);
+     network_diagnosis_btn->hide();
+-    // 系统性能与组件检测
++    // 系统组件与性能检测
+     auto *performance_component_diagnosis_btn = new CategoryDiagnosisBtn("ukui-bf-fast-symbolic",
+-                                                                         tr("System performance and component detection"),
+-                                                                         tr("Hardware health and system performance issues"),
++                                                                         tr("System components and performance detection"),
++                                                                         tr("Resolve hardware health and system performance issues"),
+                                                                          this);
+     performance_component_diagnosis_btn->hide();
+     // 应用程序检测
+@@ -161,9 +145,9 @@ HomePageWidget::HomePageWidget()
+                                                                tr("Application caching and permission settings"),
+                                                                this);
+     application_diagnosis_btn->hide();
+-    // 系统更新检测
++    // 系统在线更新检测
+     auto *system_update_diagnosis_btn = new CategoryDiagnosisBtn("software-update-available-symbolic",
+-                                                                 tr("System update detection"),
++                                                                 tr("Online system update detection"),
+                                                                  tr("Resolve issues encountered during updates and upgrades"),
+                                                                  this);
+     system_update_diagnosis_btn->hide();
+@@ -201,38 +185,19 @@ HomePageWidget::HomePageWidget()
+     connect(wired_network_diagnosis_btn, &kdk::KPushButton::clicked, this, &HomePageWidget::sig_WiredNetworkDetection);
+     connect(wireless_network_diagnosis_btn, &kdk::KPushButton::clicked, this, &HomePageWidget::sig_WirelessNetworkDetection);
+ 
+-#ifdef ICBC_ENVIRONMENT
+-    wired_network_diagnosis_btn->show();
+-    wireless_network_diagnosis_btn->show();
+-    software_store_diagnosis_btn->show();
+-    system_update_diagnosis_btn->show();
+-    disk_diagnosis_btn->show();
+-
+-    auto *category_diagnosis_layout = new QGridLayout;
+-    category_diagnosis_layout->setContentsMargins(0, 0, 0, 0);
+-    category_diagnosis_layout->setHorizontalSpacing(24);
+-    category_diagnosis_layout->setVerticalSpacing(24);
+-    category_diagnosis_layout->addWidget(wired_network_diagnosis_btn, 0, 0);
+-    category_diagnosis_layout->addWidget(wireless_network_diagnosis_btn, 0, 1);
+-    category_diagnosis_layout->addWidget(software_store_diagnosis_btn, 0, 2);
+-    category_diagnosis_layout->addWidget(system_update_diagnosis_btn, 1, 0);
+-    category_diagnosis_layout->addWidget(disk_diagnosis_btn, 1, 1);
+-#else
+     network_diagnosis_btn->show();
+     system_update_diagnosis_btn->show();
++    performance_component_diagnosis_btn->show();
+ 
+     auto *category_diagnosis_layout = new QHBoxLayout;
+     category_diagnosis_layout->setSpacing(0);
+     category_diagnosis_layout->setContentsMargins(0, 0, 0, 0);
+     category_diagnosis_layout->addWidget(network_diagnosis_btn);
+     category_diagnosis_layout->addSpacing(24);
+-    //category_diagnosox_layout->addWidget(performance_component_diagnosis_btn);
+-    //category_diagnosox_layout->addSpacing(24);
+-    //category_diagnosox_layout->addWidget(application_diagnosis_btn);
+-    //category_diagnosox_layout->addSpacing(24);
+     category_diagnosis_layout->addWidget(system_update_diagnosis_btn);
++    category_diagnosis_layout->addSpacing(24);
++    category_diagnosis_layout->addWidget(performance_component_diagnosis_btn);
+     category_diagnosis_layout->addStretch();
+-#endif
+ 
+     // 内网检测
+     internal_network_detection_btn_->setText(tr("Internal network detection"));
+diff --git a/plugins/fault_diagnosis/mainwindow.cpp b/plugins/fault_diagnosis/mainwindow.cpp
+index 4b0e354..57e2d93 100644
+--- a/plugins/fault_diagnosis/mainwindow.cpp
++++ b/plugins/fault_diagnosis/mainwindow.cpp
+@@ -1,5 +1,6 @@
+ #include "mainwindow.h"
+ #include <fstream>
++#include <qmessagebox.h>
+ #include <sstream>
+ #include <iomanip>
+ #include <QHBoxLayout>
+@@ -338,7 +339,7 @@ void MainWindow::SwitchToDiagnosisComplete() {
+     }
+     UpdateStatusDetailLabel();
+     progress_bar_->setValue(100);
+-    
++
+     // 扫描完成音效
+     kdk::KSoundEffects::playSound(kdk::SoundType::COMPLETE);
+ }
+@@ -719,6 +720,11 @@ void MainWindow::Reset() {
+ }
+ 
+ void MainWindow::HandleSpecificErrorChecked(const DiagnosticResult &diagnostic_result) {
++    // 如果检测已经取消则直接忽略检测结果
++    if (specific_error_widget_->State() == RepairSpecificErrorWidget::State::kCancel) {
++        return;
++    }
++
+     // 目前只考虑只有一个错误码的情况
+     if (diagnostic_result.specific_errors.isEmpty()) {
+         qCritical() << "Specific error check result is empty";
+@@ -1466,6 +1472,11 @@ NEXT_REPAIR_FLAG:
+ }
+ 
+ void MainWindow::HandleSpecificErrorFixed(bool ok) {
++    // 如果已经取消,则直接忽略结果
++    if (specific_error_widget_->State() == RepairSpecificErrorWidget::State::kCancel) {
++        return;
++    }
++
+     if (specific_error_widget_->State() == RepairSpecificErrorWidget::State::kRepairing) {
+         // 自动修复的情况
+         RepairSpecificErrorWidget::ShowContent show_content;
+@@ -1496,7 +1507,9 @@ void MainWindow::HandleSpecificErrorFixed(bool ok) {
+ }
+ 
+ void MainWindow::HandleSpecificErrorRepairFinish(bool ok) {
+-    if (specific_error_widget_->State() != RepairSpecificErrorWidget::State::kRepairFinish) {
++    if (specific_error_widget_->State() != RepairSpecificErrorWidget::State::kRepairFinish &&
++        specific_error_widget_->State() != RepairSpecificErrorWidget::State::kCancel)
++    {
+         // 未接收到修复结果
+         HandleSpecificErrorFixed(ok);
+     }
+@@ -1618,7 +1631,6 @@ void MainWindow::on_Cancel() {
+ }
+ 
+ void MainWindow::on_Return() {
+-#ifndef ICBC_ENVIRONMENT
+     if (!is_handle_mainwindow_close_evnet && status_ == Status::kRepairComplete) {
+         // 弹窗收集用户体验信息
+         // 因为弹窗需要居中应用显示,此处寻找主界面指针,做为弹窗的父类
+@@ -1636,7 +1648,6 @@ void MainWindow::on_Return() {
+         });
+         user_experience_dialog.exec();
+     }
+-#endif
+ 
+     Q_EMIT sig_Return();
+ }
+@@ -1696,6 +1707,7 @@ void MainWindow::SetSpecificError(RepairSpecificErrorWidget *widget, enum Specif
+ 
+     connect(specific_error_widget_, &RepairSpecificErrorWidget::sig_Repair, this, &MainWindow::on_SpecificErrorRepair, Qt::UniqueConnection);
+     connect(specific_error_widget_, &RepairSpecificErrorWidget::sig_Return, this, &MainWindow::sig_Return, Qt::UniqueConnection);
++    connect(specific_error_widget_, &RepairSpecificErrorWidget::sig_Cancel, this, &MainWindow::sig_Return, Qt::UniqueConnection);
+ }
+ 
+ void MainWindow::SetSpecificDiagnosisType(enum fault_diagnosis::DiagnosisType diagnosis_type) {
+@@ -1776,21 +1788,21 @@ QString MainWindow::SystemArch() const {
+ }
+ 
+ void MainWindow::HandleAppCloseEvent(QCloseEvent *mainwindow_close_event) {
+-#ifndef ICBC_ENVIRONMENT
++    // 因为弹窗需要居中应用显示,此处寻找主界面指针,做为弹窗的父类
++    QWidget *parent = this;
++    QWidget *pointer = this;
++    while ((pointer = pointer->parentWidget()) != nullptr) {
++        if (pointer->objectName() == "main_frame_interface") {
++            parent = pointer;
++            break;
++        }
++    }
++
+     if (!is_handle_mainwindow_close_evnet && status_ == Status::kRepairComplete) {
+         // 修复完成后,从主界面直接关闭应用,此时弹窗询问用户使用体验
+         is_handle_mainwindow_close_evnet = true;
+         mainwindow_close_event->ignore();
+ 
+-        // 因为弹窗需要居中应用显示,此处寻找主界面指针,做为弹窗的父类
+-        QWidget *parent = this;
+-        QWidget *pointer = this;
+-        while ((pointer = pointer->parentWidget()) != nullptr) {
+-            if (pointer->objectName() == "main_frame_interface") {
+-                parent = pointer;
+-                break;
+-            }
+-        }
+         K::UserExperienceDialog user_experience_dialog(parent);
+         user_experience_dialog.SetFeedBackCallback([]() {
+             Frame::SwitchToProblemFeedback();
+@@ -1801,7 +1813,29 @@ void MainWindow::HandleAppCloseEvent(QCloseEvent *mainwindow_close_event) {
+         user_experience_dialog.exec();
+         return;
+     }
+-#endif
++
++    // 如果当前正处于运行状态,则弹窗询问用户是否要关闭应用
++    if (status_ == Status::kDiagnosising ||
++        status_ == Status::kDiagnosisCanceling ||
++        status_ == Status::kRepairing ||
++        status_ == Status::kRepairCanceling)
++    {
++        QMessageBox box(parent);
++        box.setIcon(QMessageBox::Icon::Question);
++        box.setText(tr("Fault diagnosis is running, are you sure you want to exit?"));
++        box.addButton(tr("Cancel"), QMessageBox::ButtonRole::NoRole);
++        box.addButton(tr("Ok"), QMessageBox::ButtonRole::YesRole);
++
++        const auto result = box.exec();
++        if (result) {
++            // 点击了确认按钮
++            mainwindow_close_event->accept();
++        } else {
++            // 点击了取消按钮或者直接关闭了窗口
++            mainwindow_close_event->ignore();
++        }
++        return;
++    }
+ 
+     mainwindow_close_event->accept();
+ }
+diff --git a/plugins/fault_diagnosis/repair_specific_error_widget.cpp b/plugins/fault_diagnosis/repair_specific_error_widget.cpp
+index 43457e2..e13cf73 100644
+--- a/plugins/fault_diagnosis/repair_specific_error_widget.cpp
++++ b/plugins/fault_diagnosis/repair_specific_error_widget.cpp
+@@ -94,6 +94,10 @@ void RepairSpecificErrorWidget::SwitchRunning() {
+ 
+     auto *cancel_btn = new QPushButton(widget);
+     cancel_btn->setText(tr("Cancel"));
++    connect(cancel_btn, &QPushButton::clicked, this, [this]() {
++        SetState(State::kCancel);
++        Q_EMIT sig_Cancel();
++    });
+     auto *cancel_hbox_layout = new QHBoxLayout;
+     cancel_hbox_layout->setSpacing(0);
+     cancel_hbox_layout->setContentsMargins(0, 0, 0, 0);
+diff --git a/plugins/fault_diagnosis/repair_specific_error_widget.h b/plugins/fault_diagnosis/repair_specific_error_widget.h
+index dd767ca..029c27c 100644
+--- a/plugins/fault_diagnosis/repair_specific_error_widget.h
++++ b/plugins/fault_diagnosis/repair_specific_error_widget.h
+@@ -19,6 +19,7 @@ public:
+     enum State {
+         kNone,
+         kDiagnosising,    // 诊断中状态
++        kCancel,          // 已取消
+         kRepairing,       // 修复中状态
+         kResult,          // 显示结果状态
+         kRepairFinish,    // 修复完成状态
+@@ -55,6 +56,7 @@ public:
+     void SetRepairResult(enum SpecificErrorModule module, bool ok);
+ 
+ Q_SIGNALS:
++    void sig_Cancel();
+     void sig_Repair(QString error_code);
+     void sig_Return();
+ 
+diff --git a/plugins/fault_diagnosis/test/CMakeLists.txt b/plugins/fault_diagnosis/test/CMakeLists.txt
+index a6dbb57..04a9f9d 100644
+--- a/plugins/fault_diagnosis/test/CMakeLists.txt
++++ b/plugins/fault_diagnosis/test/CMakeLists.txt
+@@ -20,5 +20,5 @@ add_executable(${PROJECT_NAME} ${SRCS})
+ target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets)
+ target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::DBus)
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/share/kylin-os-manager/fault-diagnosis/test/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/bin/)
+ install(FILES solution_key.db DESTINATION /usr/share/kylin-os-manager/fault-diagnosis/test/)
+diff --git a/plugins/fault_diagnosis/translations/fault-diagnosis_bo_CN.ts b/plugins/fault_diagnosis/translations/fault-diagnosis_bo_CN.ts
+index 5d34890..3737d28 100644
+--- a/plugins/fault_diagnosis/translations/fault-diagnosis_bo_CN.ts
++++ b/plugins/fault_diagnosis/translations/fault-diagnosis_bo_CN.ts
+@@ -149,12 +149,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="96"/>
+-        <source>Health examination</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../fault_diagnosis.cpp" line="98"/>
++        <location filename="../fault_diagnosis.cpp" line="95"/>
+         <source>FaultDiagnosis</source>
+         <translation>བར་ཆད་བྱུང་རིགས་བརྟག་དཔྱད་བྱེད་པ།</translation>
+     </message>
+@@ -320,22 +315,22 @@
+ <context>
+     <name>fault_diagnosis::FaultDiagnosis</name>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="152"/>
++        <location filename="../fault_diagnosis.cpp" line="148"/>
+         <source>Fault Diagnosis</source>
+         <translation>བར་ཆད་བྱུང་རིགས་བརྟག་དཔྱད་བྱེད་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="152"/>
++        <location filename="../fault_diagnosis.cpp" line="148"/>
+         <source>Currently running, please try again after finishing.</source>
+         <translation>མིག་སྔར་འཁོར་སྐྱོད་ཀྱི་རྣམ་པར་གནས་ཡོད་པས་མཇུག་བསྒྲིལ་རྗེས་སླར་ཡང་ཚོད་ལྟ་གནང་རོགས།.</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="208"/>
++        <location filename="../fault_diagnosis.cpp" line="204"/>
+         <source>The module is not supported</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="224"/>
++        <location filename="../fault_diagnosis.cpp" line="220"/>
+         <source>The diagnostic type is not supported</source>
+         <translation>ཞིབ་དཔྱད་ཚད་ལེན་གྱི་རིགས་དབྱིབས་ལ་རྒྱབ་སྐྱོར་མི་བྱེད</translation>
+     </message>
+@@ -353,98 +348,98 @@
+         <translation>མྱུར་དུ་ཞིབ་དཔྱད་ཚད་ལེན་བྱས་ནས་སྐྱོན་ཤོར་བའི་གནད་དོན་ལ་ཞིབ་དཔྱད་ཚད་ལེན་བྱས་ཏེ་ཁྱེད་ཀྱི་གློག་ཀླད་བདེ་ཐང་ལ་སྲུང་སྐྱོབ་བྱེད་དགོས།</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="148"/>
++        <location filename="../home_page_widget.cpp" line="132"/>
+         <source>Network detection</source>
+         <translation>དྲ་རྒྱའི་ཞིབ་དཔྱད་ཚད་ལེན།</translation>
+     </message>
+     <message>
+         <location filename="../home_page_widget.cpp" line="91"/>
+-        <location filename="../home_page_widget.cpp" line="280"/>
++        <location filename="../home_page_widget.cpp" line="245"/>
+         <source>One click detection</source>
+         <translation>ཞིབ་དཔྱད་ཚད་ལེན་ཞིག</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="149"/>
++        <location filename="../home_page_widget.cpp" line="133"/>
+         <source>Troubleshooting issues with inablilty to access the internet</source>
+         <translation>དྲ་འཇུག་བྱེད་མི་ཐུབ་པའི་གནད་དོན་གྲལ་བཤེར་བྱ་དགོས</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="154"/>
+-        <source>System performance and component detection</source>
+-        <translation>མ་ལག་རང་བཞིན་དང་ཚན་ཆུང་གི་ཞིབ་དཔྱད་ཚད་ལེན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../home_page_widget.cpp" line="155"/>
+-        <source>Hardware health and system performance issues</source>
+-        <translation>མཁྲེགས་ཆས་བདེ་ཐང་དང་མ་ལག་རང་བཞིན་གྱི་གནད་དོན།</translation>
+-    </message>
+-    <message>
+-        <location filename="../home_page_widget.cpp" line="160"/>
++        <location filename="../home_page_widget.cpp" line="144"/>
+         <source>Application detection</source>
+         <translation>ཉེར་སྤྱོད་གོ་རིམ་ལ་ཞིབ་དཔྱད་ཚད་ལེན་བྱ་</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="161"/>
++        <location filename="../home_page_widget.cpp" line="145"/>
+         <source>Application caching and permission settings</source>
+         <translation>བཀོལ་སྤྱོད་དལ་ཉར་དང་དབང་ཚད་བཀོད་སྒྲིག་བྱ།</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="166"/>
+-        <source>System update detection</source>
++        <location filename="../home_page_widget.cpp" line="138"/>
++        <source>System components and performance detection</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../home_page_widget.cpp" line="139"/>
++        <source>Resolve hardware health and system performance issues</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="167"/>
++        <location filename="../home_page_widget.cpp" line="150"/>
++        <source>Online system update detection</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../home_page_widget.cpp" line="151"/>
+         <source>Resolve issues encountered during updates and upgrades</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="172"/>
++        <location filename="../home_page_widget.cpp" line="156"/>
+         <source>Software store detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="173"/>
++        <location filename="../home_page_widget.cpp" line="157"/>
+         <source>Resolve issues encountered in software stores</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="178"/>
++        <location filename="../home_page_widget.cpp" line="162"/>
+         <source>System disk availability detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="179"/>
++        <location filename="../home_page_widget.cpp" line="163"/>
+         <source>Check the health status of the disk</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="184"/>
++        <location filename="../home_page_widget.cpp" line="168"/>
+         <source>Wired network detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="185"/>
++        <location filename="../home_page_widget.cpp" line="169"/>
+         <source>Troubleshooting the issue of not being able to access the internet</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="190"/>
++        <location filename="../home_page_widget.cpp" line="174"/>
+         <source>Wireless network detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="191"/>
++        <location filename="../home_page_widget.cpp" line="175"/>
+         <source>Troubleshooting wireless network anomalies</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="238"/>
++        <location filename="../home_page_widget.cpp" line="203"/>
+         <source>Internal network detection</source>
+         <translation>ནང་གི་དྲ་རྒྱའི་ཞིབ་དཔྱད་ཚད་ལེན་སྒྲིག་གཞི།</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="284"/>
++        <location filename="../home_page_widget.cpp" line="249"/>
+         <source>Preparing...</source>
+         <translation>གྲ་སྒྲིག་བྱེད་སྐབས།...</translation>
+     </message>
+@@ -452,299 +447,310 @@
+ <context>
+     <name>fault_diagnosis::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="97"/>
++        <location filename="../mainwindow.cpp" line="98"/>
++        <location filename="../mainwindow.cpp" line="1826"/>
+         <source>Cancel</source>
+         <translation>མེད་པར་བཟོ་དགོས།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="98"/>
++        <location filename="../mainwindow.cpp" line="99"/>
+         <source>Return</source>
+         <translation>ཕྱིར་ལོག་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="237"/>
++        <location filename="../mainwindow.cpp" line="238"/>
+         <source>Update detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="240"/>
++        <location filename="../mainwindow.cpp" line="241"/>
+         <source>Application detection</source>
+         <translation type="unfinished">ཉེར་སྤྱོད་གོ་རིམ་ལ་ཞིབ་དཔྱད་ཚད་ལེན་བྱ་</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="284"/>
++        <location filename="../mainwindow.cpp" line="285"/>
+         <source>Detecting...</source>
+         <translation>ཞིབ་དཔྱད་ཚད་ལེན་བྱེད་བཞིན་པའི་སྒང་རེད།...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="296"/>
+-        <location filename="../mainwindow.cpp" line="360"/>
++        <location filename="../mainwindow.cpp" line="297"/>
++        <location filename="../mainwindow.cpp" line="361"/>
+         <source>Canceling in progress...</source>
+         <translation>མེད་པར་བཟོ་བའི་ཁྲོད་...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="308"/>
++        <location filename="../mainwindow.cpp" line="309"/>
+         <source>Detection interruption, no issues found</source>
+         <translation>ཞིབ་དཔྱད་ཚད་ལེན་བྱེད་མཚམས་བཞག་ནས་གནད་དོན་མ་རྙེད་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="311"/>
++        <location filename="../mainwindow.cpp" line="312"/>
+         <source>Detected interruption and found %1 issues</source>
+         <translation>ཞིབ་དཔྱད་ཚད་ལེན་བྱེད་མཚམས་ཆད་པ་དང་བརྒྱ་ཆ་%1གི་གནད་དོན་ཤེས་རྟོགས་བྱུང་།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="316"/>
+-        <location filename="../mainwindow.cpp" line="328"/>
++        <location filename="../mainwindow.cpp" line="317"/>
++        <location filename="../mainwindow.cpp" line="329"/>
+         <source>Rediagnosis</source>
+         <translation>ཡང་བསྐྱར་ཞིབ་དཔྱད་ཚད་ལེན་བྱ་</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="327"/>
++        <location filename="../mainwindow.cpp" line="328"/>
+         <source>No issues fount</source>
+         <translation>གནད་དོན་མ་རྙེད་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="333"/>
++        <location filename="../mainwindow.cpp" line="334"/>
+         <source>Found %1 issues</source>
+         <translation>བརྒྱ་ཆ་%1གི་གནད་དོན་ཤེས་རྟོགས་བྱུང་།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="335"/>
++        <location filename="../mainwindow.cpp" line="336"/>
+         <source>One click repair</source>
+         <translation>ཉམས་གསོ་མཐེབ་བཀྱག་ཅིག</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="349"/>
++        <location filename="../mainwindow.cpp" line="350"/>
+         <source>Repairing...</source>
+         <translation>ཉམས་གསོ་བྱེད་བཞིན་པའི་སྒང་རེད།...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="372"/>
+-        <location filename="../mainwindow.cpp" line="394"/>
+-        <location filename="../mainwindow.cpp" line="799"/>
+-        <location filename="../mainwindow.cpp" line="1488"/>
++        <location filename="../mainwindow.cpp" line="373"/>
++        <location filename="../mainwindow.cpp" line="395"/>
++        <location filename="../mainwindow.cpp" line="805"/>
++        <location filename="../mainwindow.cpp" line="1499"/>
+         <source>Repair failed</source>
+         <translation>ཉམས་གསོ་ཕམ་ཉེས་བྱུང་བ་རེད།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="373"/>
++        <location filename="../mainwindow.cpp" line="374"/>
+         <source>Repair</source>
+         <translation>བསྐྱར་དུ་ཉམས་གསོ་བྱ་དགོས།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="377"/>
+-        <location filename="../mainwindow.cpp" line="397"/>
+-        <location filename="../mainwindow.cpp" line="795"/>
+-        <location filename="../mainwindow.cpp" line="1483"/>
++        <location filename="../mainwindow.cpp" line="378"/>
++        <location filename="../mainwindow.cpp" line="398"/>
++        <location filename="../mainwindow.cpp" line="801"/>
++        <location filename="../mainwindow.cpp" line="1494"/>
+         <source>Repair successful</source>
+         <translation>ཉམས་གསོ་ལེགས་འགྲུབ་བྱུང་ཡོད།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="424"/>
++        <location filename="../mainwindow.cpp" line="425"/>
+         <source>%1 items have been tested, no issues found</source>
+         <translation>ཞིབ་དཔྱད་ཚད་ལེན་གྱི་བརྒྱ་ཆ་%1ཟིན་པ་དང་གནད་དོན་མ་རྙེད་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="426"/>
++        <location filename="../mainwindow.cpp" line="427"/>
+         <source>%1 items have been tested and %2 issues have been found</source>
+         <translation>ཞིབ་དཔྱད་ཚད་ལེན་གྱི་བརྒྱ་ཆ་%1ཟིན་པ་དེས་%2ཡི་གནད་དོན་ཤེས་རྟོགས་བྱུང་།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="433"/>
++        <location filename="../mainwindow.cpp" line="434"/>
+         <source>I suggest you conduct a complete inspection again</source>
+         <translation>ཁྱེད་རང་ལ་ཡང་བསྐྱར་ཞིབ་དཔྱད་ཚད་ལེན་ཆ་ཚང་བྱ་རྒྱུའི་གྲོས་འགོ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="435"/>
++        <location filename="../mainwindow.cpp" line="436"/>
+         <source>Please repair and retest</source>
+         <translation>ཉམས་གསོ་བྱས་རྗེས་ཡང་བསྐྱར་ཞིབ་དཔྱད་ཚད་ལེན་གནང་རོགས།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="440"/>
++        <location filename="../mainwindow.cpp" line="441"/>
+         <source>Please continue to maintain and regularly undergo physical examinations</source>
+         <translation>ཁྱེད་ཀྱིས་མུ་མཐུད་དུ་རྒྱུན་འཁྱོངས་བྱེད་པ་མ་ཟད་དུས་ཚོད་ངེས་ཅན</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="442"/>
++        <location filename="../mainwindow.cpp" line="443"/>
+         <source>The scan has been completed. if there are any issues, please handle them as soon as possible</source>
+         <translation>ཕྱགས་འགོད་ལེགས་གྲུབ་ཟིན་པས་གནད་དོན་ཡོད་ན་གང་མགྱོགས་ཐག་གཅོད་བྱ་དགོས།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="446"/>
++        <location filename="../mainwindow.cpp" line="447"/>
+         <source>Please wait for the repair to complete</source>
+         <translation>ཉམས་གསོ་ལེགས་འགྲུབ་ཡོང་བར་སྒུག་རོགས།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="454"/>
++        <location filename="../mainwindow.cpp" line="455"/>
+         <source>There is still %1 issue that has not been successfully fixed. it is recommended to manually fix it</source>
+         <translation>ད་དུང་གནད་དོན་ཁག་%1ལ་ཉམས་གསོ་ལེགས་འགྲུབ་བྱུང་མེད་པ་དང་། ལག་པ་འགུལ་ནས་ཉམས་གསོ་བྱེད་དགོས་པའི་གྲོས་འགོ་</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="456"/>
++        <location filename="../mainwindow.cpp" line="457"/>
+         <source>Regular physical examinations can effectively improve the user experience</source>
+         <translation>རྒྱུན་དུ་གཟུགས་པོར་བརྟག་དཔྱད་བྱས་ན་བཀོལ་སྤྱོད་ཀྱི་ཉམས་ལེན་ནུས་ལྡན་བྱེད་ཐུབ།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="962"/>
+-        <location filename="../mainwindow.cpp" line="981"/>
++        <location filename="../mainwindow.cpp" line="968"/>
++        <location filename="../mainwindow.cpp" line="987"/>
+         <source>Backend detection exception</source>
+         <translation>རྗེས་ཀྱི་ཞིབ་དཔྱད་ཚད་ལེན་རྒྱུན་ལྡན་མིན་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1237"/>
++        <location filename="../mainwindow.cpp" line="1243"/>
+         <source>Please select the item that needs to be repaired.</source>
+         <translation>ཞིག་གསོ་བྱེད་དགོས་པའི་རྣམ་གྲངས་བདམས་རོགས།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1477"/>
++        <location filename="../mainwindow.cpp" line="1488"/>
+         <source>The issue has been successfully fixed, please try updating again</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1480"/>
++        <location filename="../mainwindow.cpp" line="1491"/>
+         <source>The issue has been successfully fixed, please reinstall the software package again</source>
+         <translation type="unfinished"></translation>
+     </message>
++    <message>
++        <location filename="../mainwindow.cpp" line="1825"/>
++        <source>Fault diagnosis is running, are you sure you want to exit?</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../mainwindow.cpp" line="1827"/>
++        <source>Ok</source>
++        <translation type="unfinished"></translation>
++    </message>
+ </context>
+ <context>
+     <name>fault_diagnosis::RepairSpecificErrorWidget</name>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="87"/>
++        <location filename="../repair_specific_error_widget.cpp" line="86"/>
+         <source>Detecting and attempting to fix the issue</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="96"/>
++        <location filename="../repair_specific_error_widget.cpp" line="95"/>
+         <source>Cancel</source>
+         <translation type="unfinished">མེད་པར་བཟོ་དགོས།</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="216"/>
++        <location filename="../repair_specific_error_widget.cpp" line="219"/>
+         <source>Solution suggestions</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="237"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="545"/>
++        <location filename="../repair_specific_error_widget.cpp" line="240"/>
++        <location filename="../repair_specific_error_widget.cpp" line="548"/>
+         <source>Report issues</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="258"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="389"/>
++        <location filename="../repair_specific_error_widget.cpp" line="261"/>
++        <location filename="../repair_specific_error_widget.cpp" line="392"/>
+         <source>Run</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="260"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="391"/>
++        <location filename="../repair_specific_error_widget.cpp" line="263"/>
++        <location filename="../repair_specific_error_widget.cpp" line="394"/>
+         <source>Running...</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="232"/>
++        <location filename="../repair_specific_error_widget.cpp" line="235"/>
+         <source>If the above suggestions still fail to solve the problem, you may need to report the issue to the system maintenance personnel.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="234"/>
++        <location filename="../repair_specific_error_widget.cpp" line="237"/>
+         <source>To attempt to resolve the issue, you may need to report the issue to the system maintenance personnel.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="256"/>
++        <location filename="../repair_specific_error_widget.cpp" line="259"/>
+         <source>The network is normal but the update cannot be completed, allow the system to run automated scripts to attempt to fix the problem.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="288"/>
++        <location filename="../repair_specific_error_widget.cpp" line="291"/>
+         <source>Please check if the the network connection is normal and update again.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="295"/>
++        <location filename="../repair_specific_error_widget.cpp" line="298"/>
+         <source>Network normal</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="299"/>
++        <location filename="../repair_specific_error_widget.cpp" line="302"/>
+         <source>Network exception</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="322"/>
++        <location filename="../repair_specific_error_widget.cpp" line="325"/>
+         <source>Access</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="324"/>
++        <location filename="../repair_specific_error_widget.cpp" line="327"/>
+         <source>KylinOS official website</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="329"/>
++        <location filename="../repair_specific_error_widget.cpp" line="332"/>
+         <source>view common problems and solutions. For more help, please scan the QR code below: </source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="366"/>
++        <location filename="../repair_specific_error_widget.cpp" line="369"/>
+         <source>The system will run automated scripts to try to solve the problem, which will uninstall some software packages or lower the version of some software packages (</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="369"/>
++        <location filename="../repair_specific_error_widget.cpp" line="372"/>
+         <source>click to view details</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="371"/>
++        <location filename="../repair_specific_error_widget.cpp" line="374"/>
+         <source>).</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="381"/>
++        <location filename="../repair_specific_error_widget.cpp" line="384"/>
+         <source>Is it running?</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="426"/>
++        <location filename="../repair_specific_error_widget.cpp" line="429"/>
+         <source>Your disk space is insufficient, please click the button on the right to clean it up.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="428"/>
++        <location filename="../repair_specific_error_widget.cpp" line="431"/>
+         <source>Clear</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="447"/>
++        <location filename="../repair_specific_error_widget.cpp" line="450"/>
+         <source>Return</source>
+         <translation type="unfinished">ཕྱིར་ལོག་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="488"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="505"/>
++        <location filename="../repair_specific_error_widget.cpp" line="491"/>
++        <location filename="../repair_specific_error_widget.cpp" line="508"/>
+         <source>Repair successful</source>
+         <translation type="unfinished">ཉམས་གསོ་ལེགས་འགྲུབ་བྱུང་ཡོད།</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="491"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="508"/>
++        <location filename="../repair_specific_error_widget.cpp" line="494"/>
++        <location filename="../repair_specific_error_widget.cpp" line="511"/>
+         <source>Repair failed</source>
+         <translation type="unfinished">ཉམས་གསོ་ཕམ་ཉེས་བྱུང་བ་རེད།</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="521"/>
++        <location filename="../repair_specific_error_widget.cpp" line="524"/>
+         <source>Reporting...</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="549"/>
++        <location filename="../repair_specific_error_widget.cpp" line="552"/>
+         <source>Successfully reported</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="551"/>
++        <location filename="../repair_specific_error_widget.cpp" line="554"/>
+         <source>Report failed</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/fault_diagnosis/translations/fault-diagnosis_kk.ts b/plugins/fault_diagnosis/translations/fault-diagnosis_kk.ts
+index 74cbbef..042ebcf 100644
+--- a/plugins/fault_diagnosis/translations/fault-diagnosis_kk.ts
++++ b/plugins/fault_diagnosis/translations/fault-diagnosis_kk.ts
+@@ -149,12 +149,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="96"/>
+-        <source>Health examination</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../fault_diagnosis.cpp" line="98"/>
++        <location filename="../fault_diagnosis.cpp" line="95"/>
+         <source>FaultDiagnosis</source>
+         <translation>كەدەرگى دىياگنوز قويۋ</translation>
+     </message>
+@@ -320,22 +315,22 @@
+ <context>
+     <name>fault_diagnosis::FaultDiagnosis</name>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="152"/>
++        <location filename="../fault_diagnosis.cpp" line="148"/>
+         <source>Fault Diagnosis</source>
+         <translation>كەدەرگى كورىلەدى دىياگنوز قويۋ</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="152"/>
++        <location filename="../fault_diagnosis.cpp" line="148"/>
+         <source>Currently running, please try again after finishing.</source>
+         <translation>كەزەكتە يۈگۈرۈشنى تامامداعاننان كەيىن جانە بٸر رەت سىناپ كور.</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="208"/>
++        <location filename="../fault_diagnosis.cpp" line="204"/>
+         <source>The module is not supported</source>
+         <translation>ۇلگى قولدامايدى</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="224"/>
++        <location filename="../fault_diagnosis.cpp" line="220"/>
+         <source>The diagnostic type is not supported</source>
+         <translation>دىياگنوز قويۋ تيپى قولدامايدى</translation>
+     </message>
+@@ -353,98 +348,98 @@
+         <translation>كەدەرگى ماسەلەلەردى تەز باقىلاۋ ۋا رەمونىت ەتۋ، كومپيوتوردىڭ ساغلاملىقىغا كەپىلدىك ەتۋ</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="148"/>
++        <location filename="../home_page_widget.cpp" line="132"/>
+         <source>Network detection</source>
+         <translation>تور تەكسەرۋ</translation>
+     </message>
+     <message>
+         <location filename="../home_page_widget.cpp" line="91"/>
+-        <location filename="../home_page_widget.cpp" line="280"/>
++        <location filename="../home_page_widget.cpp" line="245"/>
+         <source>One click detection</source>
+         <translation>بٸر چېكىلىشنى تەكسەرۋ</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="149"/>
++        <location filename="../home_page_widget.cpp" line="133"/>
+         <source>Troubleshooting issues with inablilty to access the internet</source>
+         <translation>تورعا شىعۋدى قىيىنلاشتۇرۇش ماسەلەنى پەسكويغا جاريالاۋ</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="154"/>
+-        <source>System performance and component detection</source>
+-        <translation>سەستيما رولدارٸ ۋا دەتال تەكسەرۋ</translation>
+-    </message>
+-    <message>
+-        <location filename="../home_page_widget.cpp" line="155"/>
+-        <source>Hardware health and system performance issues</source>
+-        <translation>ەرەكشە دەتال ساغلاملىقى ۋا سەستيما رولٸ ماسەلەسى</translation>
+-    </message>
+-    <message>
+-        <location filename="../home_page_widget.cpp" line="160"/>
++        <location filename="../home_page_widget.cpp" line="144"/>
+         <source>Application detection</source>
+         <translation>قولدانعىش تەكسەرۋ</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="161"/>
++        <location filename="../home_page_widget.cpp" line="145"/>
+         <source>Application caching and permission settings</source>
+         <translation>پروگرامما caching ۋا ماقۇلداۋ تەڭشەۋلەرى</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="166"/>
+-        <source>System update detection</source>
++        <location filename="../home_page_widget.cpp" line="138"/>
++        <source>System components and performance detection</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../home_page_widget.cpp" line="139"/>
++        <source>Resolve hardware health and system performance issues</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="167"/>
++        <location filename="../home_page_widget.cpp" line="150"/>
++        <source>Online system update detection</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../home_page_widget.cpp" line="151"/>
+         <source>Resolve issues encountered during updates and upgrades</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="172"/>
++        <location filename="../home_page_widget.cpp" line="156"/>
+         <source>Software store detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="173"/>
++        <location filename="../home_page_widget.cpp" line="157"/>
+         <source>Resolve issues encountered in software stores</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="178"/>
++        <location filename="../home_page_widget.cpp" line="162"/>
+         <source>System disk availability detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="179"/>
++        <location filename="../home_page_widget.cpp" line="163"/>
+         <source>Check the health status of the disk</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="184"/>
++        <location filename="../home_page_widget.cpp" line="168"/>
+         <source>Wired network detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="185"/>
++        <location filename="../home_page_widget.cpp" line="169"/>
+         <source>Troubleshooting the issue of not being able to access the internet</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="190"/>
++        <location filename="../home_page_widget.cpp" line="174"/>
+         <source>Wireless network detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="191"/>
++        <location filename="../home_page_widget.cpp" line="175"/>
+         <source>Troubleshooting wireless network anomalies</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="238"/>
++        <location filename="../home_page_widget.cpp" line="203"/>
+         <source>Internal network detection</source>
+         <translation>ٸشكٸ تور تەكسەرۋ</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="284"/>
++        <location filename="../home_page_widget.cpp" line="249"/>
+         <source>Preparing...</source>
+         <translation>دايٸندالٸپجاتٸر...</translation>
+     </message>
+@@ -452,156 +447,167 @@
+ <context>
+     <name>fault_diagnosis::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="97"/>
++        <location filename="../mainwindow.cpp" line="98"/>
++        <location filename="../mainwindow.cpp" line="1826"/>
+         <source>Cancel</source>
+         <translation>كۇشىنەن قالدىرۋ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="284"/>
++        <location filename="../mainwindow.cpp" line="285"/>
+         <source>Detecting...</source>
+         <translation>باقىلاۋ...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="327"/>
++        <location filename="../mainwindow.cpp" line="328"/>
+         <source>No issues fount</source>
+         <translation>ماسەلە جوق فونتان</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="316"/>
+-        <location filename="../mainwindow.cpp" line="328"/>
++        <location filename="../mainwindow.cpp" line="317"/>
++        <location filename="../mainwindow.cpp" line="329"/>
+         <source>Rediagnosis</source>
+         <translation>قاتە كەۋدە</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="237"/>
++        <location filename="../mainwindow.cpp" line="238"/>
+         <source>Update detection</source>
+         <translation>جاڭالاۋ تەكسەرۋ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="240"/>
++        <location filename="../mainwindow.cpp" line="241"/>
+         <source>Application detection</source>
+         <translation>قولدانعىش تەكسەرۋ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="296"/>
+-        <location filename="../mainwindow.cpp" line="360"/>
++        <location filename="../mainwindow.cpp" line="297"/>
++        <location filename="../mainwindow.cpp" line="361"/>
+         <source>Canceling in progress...</source>
+         <translation>كۇشىنەن قالدىرىلىپ جاتىر...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="308"/>
++        <location filename="../mainwindow.cpp" line="309"/>
+         <source>Detection interruption, no issues found</source>
+         <translation>تەكسەرۋ ٷزٸلٸپ قىلۋ، ماسەلە بايقالمادٸ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="311"/>
++        <location filename="../mainwindow.cpp" line="312"/>
+         <source>Detected interruption and found %1 issues</source>
+         <translation>ٷزٸلٸپ قالعاندىعى بايقالدٸ ۋا %1ماسەلە بايقالدٸ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="333"/>
++        <location filename="../mainwindow.cpp" line="334"/>
+         <source>Found %1 issues</source>
+         <translation>%1 ماسەلە بايقالدٸ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="335"/>
++        <location filename="../mainwindow.cpp" line="336"/>
+         <source>One click repair</source>
+         <translation>بٸر تۇرتىپ رەمونىت ەتۋ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="349"/>
++        <location filename="../mainwindow.cpp" line="350"/>
+         <source>Repairing...</source>
+         <translation>رەمونىت ەتۋ...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="372"/>
+-        <location filename="../mainwindow.cpp" line="394"/>
+-        <location filename="../mainwindow.cpp" line="799"/>
+-        <location filename="../mainwindow.cpp" line="1488"/>
++        <location filename="../mainwindow.cpp" line="373"/>
++        <location filename="../mainwindow.cpp" line="395"/>
++        <location filename="../mainwindow.cpp" line="805"/>
++        <location filename="../mainwindow.cpp" line="1499"/>
+         <source>Repair failed</source>
+         <translation>رەمونىت جەڭىلىپ قالدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="373"/>
++        <location filename="../mainwindow.cpp" line="374"/>
+         <source>Repair</source>
+         <translation>رەمونىت ەتۋ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="377"/>
+-        <location filename="../mainwindow.cpp" line="397"/>
+-        <location filename="../mainwindow.cpp" line="795"/>
+-        <location filename="../mainwindow.cpp" line="1483"/>
++        <location filename="../mainwindow.cpp" line="378"/>
++        <location filename="../mainwindow.cpp" line="398"/>
++        <location filename="../mainwindow.cpp" line="801"/>
++        <location filename="../mainwindow.cpp" line="1494"/>
+         <source>Repair successful</source>
+         <translation>رەمونىت ناتيجەلى قالدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="424"/>
++        <location filename="../mainwindow.cpp" line="425"/>
+         <source>%1 items have been tested, no issues found</source>
+         <translation>%1 تۇر سىناق قىلىندى، ماسەلە بايقالمادٸ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="426"/>
++        <location filename="../mainwindow.cpp" line="427"/>
+         <source>%1 items have been tested and %2 issues have been found</source>
+         <translation>%1 تۇر سىناق قىلىندى ۋا%2 ماسەلە بايقالدٸ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="433"/>
++        <location filename="../mainwindow.cpp" line="434"/>
+         <source>I suggest you conduct a complete inspection again</source>
+         <translation>سىزدىڭ جانە بٸر رەت كەمەلدى تەكسەرۋ الىپ بەرۋىڭىزدى ۇسٸنٸس بەرۋ ورىندايمىن</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="435"/>
++        <location filename="../mainwindow.cpp" line="436"/>
+         <source>Please repair and retest</source>
+         <translation>رەمونىت ىستەڭ ۋا قاتە ياسىۋېلىڭ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="440"/>
++        <location filename="../mainwindow.cpp" line="441"/>
+         <source>Please continue to maintain and regularly undergo physical examinations</source>
+         <translation>سالەمەتتك تەكشۈرتۈشنى جالعاستى جالعاستىرۋ ۋا مەرزىمدى قالدا تەكشۈرتۈش كەرەك</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="442"/>
++        <location filename="../mainwindow.cpp" line="443"/>
+         <source>The scan has been completed. if there are any issues, please handle them as soon as possible</source>
+         <translation>كەسكىندەۋ تامامدالدٸ. قيسٸق بٸرەر ماسەلە بولسا تەزدەن بٸر جاق ىستەڭ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="446"/>
++        <location filename="../mainwindow.cpp" line="447"/>
+         <source>Please wait for the repair to complete</source>
+         <translation>رېمونتنىڭ پۈتۈشىنى كۇتىڭىز</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="454"/>
++        <location filename="../mainwindow.cpp" line="455"/>
+         <source>There is still %1 issue that has not been successfully fixed. it is recommended to manually fix it</source>
+         <translation>جانەدە %1 ماسەلە ٴساتتٸ جيناقتاۋ بولا الماعان. قولدا دۇرستا ۇسٸنٸس بەرۋ قىلىندى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="456"/>
++        <location filename="../mainwindow.cpp" line="457"/>
+         <source>Regular physical examinations can effectively improve the user experience</source>
+         <translation>مەرزىمدى سالەمەتتك تەكشۈرتۈش ارقىلى قاريدارلاردىڭ تاجىريبەسىن ونٸمدٸ جوعارعى كوتەرگەلى بولادٸ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="962"/>
+-        <location filename="../mainwindow.cpp" line="981"/>
++        <location filename="../mainwindow.cpp" line="968"/>
++        <location filename="../mainwindow.cpp" line="987"/>
+         <source>Backend detection exception</source>
+         <translation>ارتى قوشۇمچىلارنى باقىلاۋ ەرەكشە احۋالدارى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1237"/>
++        <location filename="../mainwindow.cpp" line="1243"/>
+         <source>Please select the item that needs to be repaired.</source>
+         <translation>رەمونىت ىستەۋگە تىيىستى زاتتى تالدا.</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1477"/>
++        <location filename="../mainwindow.cpp" line="1488"/>
+         <source>The issue has been successfully fixed, please try updating again</source>
+         <translation>ماسەلە ٴساتتٸ تۇزەلدى، قاتە جاڭالاۋدى سىناپ كور</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1480"/>
++        <location filename="../mainwindow.cpp" line="1491"/>
+         <source>The issue has been successfully fixed, please reinstall the software package again</source>
+         <translation>ماسەلە ٴساتتٸ تۇزەلدى، جۇمساق دەتال بوقشاسٸن قاتە تۇسىرىڭىز</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="98"/>
++        <location filename="../mainwindow.cpp" line="1825"/>
++        <source>Fault diagnosis is running, are you sure you want to exit?</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../mainwindow.cpp" line="1827"/>
++        <source>Ok</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../mainwindow.cpp" line="99"/>
+         <source>Return</source>
+         <translation>قايتۋ</translation>
+     </message>
+@@ -609,142 +615,142 @@
+ <context>
+     <name>fault_diagnosis::RepairSpecificErrorWidget</name>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="87"/>
++        <location filename="../repair_specific_error_widget.cpp" line="86"/>
+         <source>Detecting and attempting to fix the issue</source>
+         <translation>ماسەلەنى باقىلاۋ ۋا شەشىم ەتۋ ىستەۋگە كەسۋ</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="96"/>
++        <location filename="../repair_specific_error_widget.cpp" line="95"/>
+         <source>Cancel</source>
+         <translation>كۇشىنەن قالدىرۋ</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="216"/>
++        <location filename="../repair_specific_error_widget.cpp" line="219"/>
+         <source>Solution suggestions</source>
+         <translation>شەشىم ەتۋ ەتۋ ۇسنستى</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="237"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="545"/>
++        <location filename="../repair_specific_error_widget.cpp" line="240"/>
++        <location filename="../repair_specific_error_widget.cpp" line="548"/>
+         <source>Report issues</source>
+         <translation>ماسەلەلەردى اشىلۋ ەتۋ</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="258"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="389"/>
++        <location filename="../repair_specific_error_widget.cpp" line="261"/>
++        <location filename="../repair_specific_error_widget.cpp" line="392"/>
+         <source>Run</source>
+         <translation>يۈگۈرۈش</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="260"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="391"/>
++        <location filename="../repair_specific_error_widget.cpp" line="263"/>
++        <location filename="../repair_specific_error_widget.cpp" line="394"/>
+         <source>Running...</source>
+         <translation>يۈگۈرۈش...</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="232"/>
++        <location filename="../repair_specific_error_widget.cpp" line="235"/>
+         <source>If the above suggestions still fail to solve the problem, you may need to report the issue to the system maintenance personnel.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="234"/>
++        <location filename="../repair_specific_error_widget.cpp" line="237"/>
+         <source>To attempt to resolve the issue, you may need to report the issue to the system maintenance personnel.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="256"/>
++        <location filename="../repair_specific_error_widget.cpp" line="259"/>
+         <source>The network is normal but the update cannot be completed, allow the system to run automated scripts to attempt to fix the problem.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="288"/>
++        <location filename="../repair_specific_error_widget.cpp" line="291"/>
+         <source>Please check if the the network connection is normal and update again.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="295"/>
++        <location filename="../repair_specific_error_widget.cpp" line="298"/>
+         <source>Network normal</source>
+         <translation>تور نورمال</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="299"/>
++        <location filename="../repair_specific_error_widget.cpp" line="302"/>
+         <source>Network exception</source>
+         <translation>توردان سىرتىنا</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="322"/>
++        <location filename="../repair_specific_error_widget.cpp" line="325"/>
+         <source>Access</source>
+         <translation>كىرۋ جاردەمى</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="324"/>
++        <location filename="../repair_specific_error_widget.cpp" line="327"/>
+         <source>KylinOS official website</source>
+         <translation>KylinOS رەسىمي تور بەكەتٸ</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="329"/>
++        <location filename="../repair_specific_error_widget.cpp" line="332"/>
+         <source>view common problems and solutions. For more help, please scan the QR code below: </source>
+         <translation>كورۋ ورتاق ماسەلە ۋا شەشىم ەتۋ ەتۋ ٵدٸسٸ الٸدە كوپ جاردەم ٷشٸن تۆۋاندىكى QR بەلگىنى سكانىرلاڭىز: </translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="366"/>
++        <location filename="../repair_specific_error_widget.cpp" line="369"/>
+         <source>The system will run automated scripts to try to solve the problem, which will uninstall some software packages or lower the version of some software packages (</source>
+         <translation>سەستيما اۆتوماتتاستىرعان سەستامالارىن اتقار ورىنداپ ماسەلەنى شەشىم ەتۋ ىستەۋگە قۇلشٸنادٸ، نۇ ارقىلى بارٸ جۇمساق دەتال سومكاسى تۇسىرۋدى كۆتۈرۈۋېتىدۇ ياكي بارٸ جۇمساق دەتال سومكاسى باسىلىمدى تومەندەتىلەدى (</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="369"/>
++        <location filename="../repair_specific_error_widget.cpp" line="372"/>
+         <source>click to view details</source>
+         <translation>ناقتى مازمۇنىن كورۋ ٷشٸن تالدا</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="371"/>
++        <location filename="../repair_specific_error_widget.cpp" line="374"/>
+         <source>).</source>
+         <translation>).</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="381"/>
++        <location filename="../repair_specific_error_widget.cpp" line="384"/>
+         <source>Is it running?</source>
+         <translation>يۈگرەۋاتامدۇ؟</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="426"/>
++        <location filename="../repair_specific_error_widget.cpp" line="429"/>
+         <source>Your disk space is insufficient, please click the button on the right to clean it up.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="428"/>
++        <location filename="../repair_specific_error_widget.cpp" line="431"/>
+         <source>Clear</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="447"/>
++        <location filename="../repair_specific_error_widget.cpp" line="450"/>
+         <source>Return</source>
+         <translation>قايتۋ</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="488"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="505"/>
++        <location filename="../repair_specific_error_widget.cpp" line="491"/>
++        <location filename="../repair_specific_error_widget.cpp" line="508"/>
+         <source>Repair successful</source>
+         <translation>رەمونىت ناتيجەلى قالدى</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="491"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="508"/>
++        <location filename="../repair_specific_error_widget.cpp" line="494"/>
++        <location filename="../repair_specific_error_widget.cpp" line="511"/>
+         <source>Repair failed</source>
+         <translation>رەمونىت جەڭىلىپ قالدى</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="521"/>
++        <location filename="../repair_specific_error_widget.cpp" line="524"/>
+         <source>Reporting...</source>
+         <translation>اشىلۋ ەتۋ...</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="549"/>
++        <location filename="../repair_specific_error_widget.cpp" line="552"/>
+         <source>Successfully reported</source>
+         <translation>مۇۋەپىقيەتلىك دوكلات</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="551"/>
++        <location filename="../repair_specific_error_widget.cpp" line="554"/>
+         <source>Report failed</source>
+         <translation>دوكلات جەڭىلىپ قالدى</translation>
+     </message>
+diff --git a/plugins/fault_diagnosis/translations/fault-diagnosis_ky.ts b/plugins/fault_diagnosis/translations/fault-diagnosis_ky.ts
+index 5ee05fb..8b0a0cd 100644
+--- a/plugins/fault_diagnosis/translations/fault-diagnosis_ky.ts
++++ b/plugins/fault_diagnosis/translations/fault-diagnosis_ky.ts
+@@ -149,12 +149,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="96"/>
+-        <source>Health examination</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../fault_diagnosis.cpp" line="98"/>
++        <location filename="../fault_diagnosis.cpp" line="95"/>
+         <source>FaultDiagnosis</source>
+         <translation>كەشەلە دىياگنوز قويۇش</translation>
+     </message>
+@@ -320,22 +315,22 @@
+ <context>
+     <name>fault_diagnosis::FaultDiagnosis</name>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="152"/>
++        <location filename="../fault_diagnosis.cpp" line="148"/>
+         <source>Fault Diagnosis</source>
+         <translation>كەشەلە  كۅرۉلۅت  دىياگنوز قويۇش</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="152"/>
++        <location filename="../fault_diagnosis.cpp" line="148"/>
+         <source>Currently running, please try again after finishing.</source>
+         <translation>گەزەكتە  يۈگۈرۈشنى بۉتۉرۉلگۅندۅن  كىيىن داعى بىر  ىرەت  سىناپ باعىڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="208"/>
++        <location filename="../fault_diagnosis.cpp" line="204"/>
+         <source>The module is not supported</source>
+         <translation>مودەل قولدوبويت</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="224"/>
++        <location filename="../fault_diagnosis.cpp" line="220"/>
+         <source>The diagnostic type is not supported</source>
+         <translation>دىياگنوز قويۇش  تۉرۉ قولدوبويت</translation>
+     </message>
+@@ -353,98 +348,98 @@
+         <translation>كەشەلە مەسىلىلىرىنى تەز بايقوو جانا رىمونت جاسوو ،اتقارۇۇ ، ەلەكتىروندۇق مەە  ساغلاملىقىغا ەەبولۇۇ  جاسوو ،اتقارۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="148"/>
++        <location filename="../home_page_widget.cpp" line="132"/>
+         <source>Network detection</source>
+         <translation>تور  تەكشەرىش</translation>
+     </message>
+     <message>
+         <location filename="../home_page_widget.cpp" line="91"/>
+-        <location filename="../home_page_widget.cpp" line="280"/>
++        <location filename="../home_page_widget.cpp" line="245"/>
+         <source>One click detection</source>
+         <translation>بىر  چېكىلىشنى تەكشەرىش</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="149"/>
++        <location filename="../home_page_widget.cpp" line="133"/>
+         <source>Troubleshooting issues with inablilty to access the internet</source>
+         <translation>تورعو چىعۇۇنۇ قىيىنلاشتۇرۇش ماسەلەسىن پەسكويغا ۅندۉرۉش</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="154"/>
+-        <source>System performance and component detection</source>
+-        <translation>ساامالىق  قۇرباتى  جانا تەتىك  تەكشەرىش</translation>
+-    </message>
+-    <message>
+-        <location filename="../home_page_widget.cpp" line="155"/>
+-        <source>Hardware health and system performance issues</source>
+-        <translation>قاتۇۇ تەتىك  ساغلاملىقى جانا ساامالىق  قۇربات ، جۅندۅم  كەشەلەسى</translation>
+-    </message>
+-    <message>
+-        <location filename="../home_page_widget.cpp" line="160"/>
++        <location filename="../home_page_widget.cpp" line="144"/>
+         <source>Application detection</source>
+         <translation>قولدونۇشچان تەكشەرىش</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="161"/>
++        <location filename="../home_page_widget.cpp" line="145"/>
+         <source>Application caching and permission settings</source>
+         <translation>پراگرامما caching جانا ۇرۇقسات  تەڭشەكتەرى</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="166"/>
+-        <source>System update detection</source>
++        <location filename="../home_page_widget.cpp" line="138"/>
++        <source>System components and performance detection</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../home_page_widget.cpp" line="139"/>
++        <source>Resolve hardware health and system performance issues</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="167"/>
++        <location filename="../home_page_widget.cpp" line="150"/>
++        <source>Online system update detection</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../home_page_widget.cpp" line="151"/>
+         <source>Resolve issues encountered during updates and upgrades</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="172"/>
++        <location filename="../home_page_widget.cpp" line="156"/>
+         <source>Software store detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="173"/>
++        <location filename="../home_page_widget.cpp" line="157"/>
+         <source>Resolve issues encountered in software stores</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="178"/>
++        <location filename="../home_page_widget.cpp" line="162"/>
+         <source>System disk availability detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="179"/>
++        <location filename="../home_page_widget.cpp" line="163"/>
+         <source>Check the health status of the disk</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="184"/>
++        <location filename="../home_page_widget.cpp" line="168"/>
+         <source>Wired network detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="185"/>
++        <location filename="../home_page_widget.cpp" line="169"/>
+         <source>Troubleshooting the issue of not being able to access the internet</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="190"/>
++        <location filename="../home_page_widget.cpp" line="174"/>
+         <source>Wireless network detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="191"/>
++        <location filename="../home_page_widget.cpp" line="175"/>
+         <source>Troubleshooting wireless network anomalies</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="238"/>
++        <location filename="../home_page_widget.cpp" line="203"/>
+         <source>Internal network detection</source>
+         <translation>ىچكى  تور  تەكشەرىش</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="284"/>
++        <location filename="../home_page_widget.cpp" line="249"/>
+         <source>Preparing...</source>
+         <translation>داياردالىپ جاتات...</translation>
+     </message>
+@@ -452,156 +447,167 @@
+ <context>
+     <name>fault_diagnosis::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="97"/>
++        <location filename="../mainwindow.cpp" line="98"/>
++        <location filename="../mainwindow.cpp" line="1826"/>
+         <source>Cancel</source>
+         <translation>ارعادان  قالتىرىش</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="284"/>
++        <location filename="../mainwindow.cpp" line="285"/>
+         <source>Detecting...</source>
+         <translation>بايقوو...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="327"/>
++        <location filename="../mainwindow.cpp" line="328"/>
+         <source>No issues fount</source>
+         <translation>كەشەلە  جوق فونتان</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="316"/>
+-        <location filename="../mainwindow.cpp" line="328"/>
++        <location filename="../mainwindow.cpp" line="317"/>
++        <location filename="../mainwindow.cpp" line="329"/>
+         <source>Rediagnosis</source>
+         <translation>قايرا مۉچۅسۉ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="237"/>
++        <location filename="../mainwindow.cpp" line="238"/>
+         <source>Update detection</source>
+         <translation>جاڭىلوو تەكشەرىش</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="240"/>
++        <location filename="../mainwindow.cpp" line="241"/>
+         <source>Application detection</source>
+         <translation>قولدونۇشچان تەكشەرىش</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="296"/>
+-        <location filename="../mainwindow.cpp" line="360"/>
++        <location filename="../mainwindow.cpp" line="297"/>
++        <location filename="../mainwindow.cpp" line="361"/>
+         <source>Canceling in progress...</source>
+         <translation>ارعادان  قالدىرىپ جاتات...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="308"/>
++        <location filename="../mainwindow.cpp" line="309"/>
+         <source>Detection interruption, no issues found</source>
+         <translation>تەكشەرىش  ۉزۉلۉپ قىلۇۇ، كەشەلە  بايقالبادى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="311"/>
++        <location filename="../mainwindow.cpp" line="312"/>
+         <source>Detected interruption and found %1 issues</source>
+         <translation>ۉزۉلۉپ قالعاندىعى بايقالدى جانا %1كەشەلە  بايقالدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="333"/>
++        <location filename="../mainwindow.cpp" line="334"/>
+         <source>Found %1 issues</source>
+         <translation>%1 كەشەلە  بايقالدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="335"/>
++        <location filename="../mainwindow.cpp" line="336"/>
+         <source>One click repair</source>
+         <translation>بىر  چەگىپ رىمونت جاسوو ،اتقارۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="349"/>
++        <location filename="../mainwindow.cpp" line="350"/>
+         <source>Repairing...</source>
+         <translation>رىمونت جاسوو ،اتقارۇۇ ...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="372"/>
+-        <location filename="../mainwindow.cpp" line="394"/>
+-        <location filename="../mainwindow.cpp" line="799"/>
+-        <location filename="../mainwindow.cpp" line="1488"/>
++        <location filename="../mainwindow.cpp" line="373"/>
++        <location filename="../mainwindow.cpp" line="395"/>
++        <location filename="../mainwindow.cpp" line="805"/>
++        <location filename="../mainwindow.cpp" line="1499"/>
+         <source>Repair failed</source>
+         <translation>رىمونت جەڭىلۉۉ بولدۇ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="373"/>
++        <location filename="../mainwindow.cpp" line="374"/>
+         <source>Repair</source>
+         <translation>رىمونت جاسوو ،اتقارۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="377"/>
+-        <location filename="../mainwindow.cpp" line="397"/>
+-        <location filename="../mainwindow.cpp" line="795"/>
+-        <location filename="../mainwindow.cpp" line="1483"/>
++        <location filename="../mainwindow.cpp" line="378"/>
++        <location filename="../mainwindow.cpp" line="398"/>
++        <location filename="../mainwindow.cpp" line="801"/>
++        <location filename="../mainwindow.cpp" line="1494"/>
+         <source>Repair successful</source>
+         <translation>رىمونت جەڭىشتۉۉ بولدۇ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="424"/>
++        <location filename="../mainwindow.cpp" line="425"/>
+         <source>%1 items have been tested, no issues found</source>
+         <translation>%1 تۉر سىناق اتقارىلدى ، كەشەلە  بايقالبادى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="426"/>
++        <location filename="../mainwindow.cpp" line="427"/>
+         <source>%1 items have been tested and %2 issues have been found</source>
+         <translation>%1 تۉر سىناق اتقارىلدى  جانا%2 كەشەلە  بايقالدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="433"/>
++        <location filename="../mainwindow.cpp" line="434"/>
+         <source>I suggest you conduct a complete inspection again</source>
+         <translation>سىزدىن داعى بىر  ىرەت   تۇرۇقتۇۇ تەكشەرىش  الىپ بېرىشىڭىزنى كەڭەش قىلام</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="435"/>
++        <location filename="../mainwindow.cpp" line="436"/>
+         <source>Please repair and retest</source>
+         <translation>رىمونت قىلىڭ جانا قايرا ياسىۋېلىڭ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="440"/>
++        <location filename="../mainwindow.cpp" line="441"/>
+         <source>Please continue to maintain and regularly undergo physical examinations</source>
+         <translation>سالاماتتىق تەكشۈرتۈشنى جالعاشتۇۇ  جالعاشتىرىش  جانا مۅنۅتتۉ ابالدا تەكشۈرتۈش كەرەك</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="442"/>
++        <location filename="../mainwindow.cpp" line="443"/>
+         <source>The scan has been completed. if there are any issues, please handle them as soon as possible</source>
+         <translation>ىسكاننىردوو  بۉتۉردۉ دىققات. ەگەر  بىر ەر كەشەلە  بولسو تەزدەن بىر  تاراپ قىلىڭ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="446"/>
++        <location filename="../mainwindow.cpp" line="447"/>
+         <source>Please wait for the repair to complete</source>
+         <translation>رېمونتنىڭ پۈتۈشىنى كۉتۉڭ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="454"/>
++        <location filename="../mainwindow.cpp" line="455"/>
+         <source>There is still %1 issue that has not been successfully fixed. it is recommended to manually fix it</source>
+         <translation>داعى ەلە %1 كەشەلە  جەڭىشتۉۉ تۇراقتاپ بولالمىغان. قولدو وڭشوو كەڭەش جاسالات</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="456"/>
++        <location filename="../mainwindow.cpp" line="457"/>
+         <source>Regular physical examinations can effectively improve the user experience</source>
+         <translation>مۅنۅتتۉ سالاماتتىق تەكشۈرتۈش ارقىلۇۇ ابونىتتاردىن تەجرىبىسىنى ۅنۉمدۉ جوعورۇ كۅتۅرگۅلۉ بولوت</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="962"/>
+-        <location filename="../mainwindow.cpp" line="981"/>
++        <location filename="../mainwindow.cpp" line="968"/>
++        <location filename="../mainwindow.cpp" line="987"/>
+         <source>Backend detection exception</source>
+         <translation>ارقا قوشۇمچىلارنى بايقوو ۆزگۆچۆ  جاعدايلارى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1237"/>
++        <location filename="../mainwindow.cpp" line="1243"/>
+         <source>Please select the item that needs to be repaired.</source>
+         <translation>رىمونت جاسووعو اقىلۇۇ  بۇيۇمنى تانداڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1477"/>
++        <location filename="../mainwindow.cpp" line="1488"/>
+         <source>The issue has been successfully fixed, please try updating again</source>
+         <translation>كەشەلە  جەڭىشتۉۉ ئوڭشالدى، قايرا جاڭىلوونۇ سىناپ باعىڭ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1480"/>
++        <location filename="../mainwindow.cpp" line="1491"/>
+         <source>The issue has been successfully fixed, please reinstall the software package again</source>
+         <translation>كەشەلە  جەڭىشتۉۉ ئوڭشالدى، جۇمشاق تەتىك  بوقچوسۇن قايرا قاچالاڭ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="98"/>
++        <location filename="../mainwindow.cpp" line="1825"/>
++        <source>Fault diagnosis is running, are you sure you want to exit?</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../mainwindow.cpp" line="1827"/>
++        <source>Ok</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../mainwindow.cpp" line="99"/>
+         <source>Return</source>
+         <translation>قايتۇۇ</translation>
+     </message>
+@@ -609,142 +615,142 @@
+ <context>
+     <name>fault_diagnosis::RepairSpecificErrorWidget</name>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="87"/>
++        <location filename="../repair_specific_error_widget.cpp" line="86"/>
+         <source>Detecting and attempting to fix the issue</source>
+         <translation>ماسەلەنى بايقوو جانا بىر تاراپ قىلۇۇ جاسووعو ۇرۇنۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="96"/>
++        <location filename="../repair_specific_error_widget.cpp" line="95"/>
+         <source>Cancel</source>
+         <translation>ارعادان  قالتىرىش</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="216"/>
++        <location filename="../repair_specific_error_widget.cpp" line="219"/>
+         <source>Solution suggestions</source>
+         <translation>بىر تاراپ قىلۇۇ جاسوو ،اتقارۇۇ  سۇنۇشۇ</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="237"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="545"/>
++        <location filename="../repair_specific_error_widget.cpp" line="240"/>
++        <location filename="../repair_specific_error_widget.cpp" line="548"/>
+         <source>Report issues</source>
+         <translation>ماسەلەلەردى  پاش جاسوو ،اتقارۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="258"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="389"/>
++        <location filename="../repair_specific_error_widget.cpp" line="261"/>
++        <location filename="../repair_specific_error_widget.cpp" line="392"/>
+         <source>Run</source>
+         <translation>يۈگۈرۈش</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="260"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="391"/>
++        <location filename="../repair_specific_error_widget.cpp" line="263"/>
++        <location filename="../repair_specific_error_widget.cpp" line="394"/>
+         <source>Running...</source>
+         <translation>يۈگۈرۈش...</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="232"/>
++        <location filename="../repair_specific_error_widget.cpp" line="235"/>
+         <source>If the above suggestions still fail to solve the problem, you may need to report the issue to the system maintenance personnel.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="234"/>
++        <location filename="../repair_specific_error_widget.cpp" line="237"/>
+         <source>To attempt to resolve the issue, you may need to report the issue to the system maintenance personnel.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="256"/>
++        <location filename="../repair_specific_error_widget.cpp" line="259"/>
+         <source>The network is normal but the update cannot be completed, allow the system to run automated scripts to attempt to fix the problem.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="288"/>
++        <location filename="../repair_specific_error_widget.cpp" line="291"/>
+         <source>Please check if the the network connection is normal and update again.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="295"/>
++        <location filename="../repair_specific_error_widget.cpp" line="298"/>
+         <source>Network normal</source>
+         <translation>تور  نورماال</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="299"/>
++        <location filename="../repair_specific_error_widget.cpp" line="302"/>
+         <source>Network exception</source>
+         <translation>توردون مۇستەسنا</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="322"/>
++        <location filename="../repair_specific_error_widget.cpp" line="325"/>
+         <source>Access</source>
+         <translation>كىرۉۉ  ئىجازىتى</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="324"/>
++        <location filename="../repair_specific_error_widget.cpp" line="327"/>
+         <source>KylinOS official website</source>
+         <translation>KylinOS چىنىعى تور  بەكەتى</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="329"/>
++        <location filename="../repair_specific_error_widget.cpp" line="332"/>
+         <source>view common problems and solutions. For more help, please scan the QR code below: </source>
+         <translation>كۅرۉۉ  ورتوق كەشەلە  جانا بىر تاراپ قىلۇۇ جاسوو ،اتقارۇۇ  چارىسى داعى ەلە كۅپ جەرلىك  ۉچۉن  تۆجاناندىكى QR قۇپۇيا نومۇرۇن  ىسكاننىرداڭ: </translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="366"/>
++        <location filename="../repair_specific_error_widget.cpp" line="369"/>
+         <source>The system will run automated scripts to try to solve the problem, which will uninstall some software packages or lower the version of some software packages (</source>
+         <translation>ساامالىق  ئاپتوماتلاشقان  سەستىمالاردى اتقارماق  جاساپ  ماسەلەنى بىر تاراپ قىلۇۇ جاسووعو تىرىشات، بۇل ارقىلۇۇ گەەبىر جۇمشاق تەتىك  تولۇق  قاچالوونۇ كۆتۈرۈۋېتىدۇ كۅرۉنۉشتۅرۉ گەەبىر جۇمشاق تەتىك  تولۇق  باسماسىن  تۅمۅندۅتۅت (</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="369"/>
++        <location filename="../repair_specific_error_widget.cpp" line="372"/>
+         <source>click to view details</source>
+         <translation>جۅن جايىن  كۅرۉۉ  ۉچۉن  چەگىڭ</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="371"/>
++        <location filename="../repair_specific_error_widget.cpp" line="374"/>
+         <source>).</source>
+         <translation>).</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="381"/>
++        <location filename="../repair_specific_error_widget.cpp" line="384"/>
+         <source>Is it running?</source>
+         <translation>يۈگرەۋاتامدۇ؟</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="426"/>
++        <location filename="../repair_specific_error_widget.cpp" line="429"/>
+         <source>Your disk space is insufficient, please click the button on the right to clean it up.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="428"/>
++        <location filename="../repair_specific_error_widget.cpp" line="431"/>
+         <source>Clear</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="447"/>
++        <location filename="../repair_specific_error_widget.cpp" line="450"/>
+         <source>Return</source>
+         <translation>قايتۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="488"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="505"/>
++        <location filename="../repair_specific_error_widget.cpp" line="491"/>
++        <location filename="../repair_specific_error_widget.cpp" line="508"/>
+         <source>Repair successful</source>
+         <translation>رىمونت جەڭىشتۉۉ بولدۇ</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="491"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="508"/>
++        <location filename="../repair_specific_error_widget.cpp" line="494"/>
++        <location filename="../repair_specific_error_widget.cpp" line="511"/>
+         <source>Repair failed</source>
+         <translation>رىمونت جەڭىلۉۉ بولدۇ</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="521"/>
++        <location filename="../repair_specific_error_widget.cpp" line="524"/>
+         <source>Reporting...</source>
+         <translation>پاش جاسوو ،اتقارۇۇ ...</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="549"/>
++        <location filename="../repair_specific_error_widget.cpp" line="552"/>
+         <source>Successfully reported</source>
+         <translation>مۇۋەپىقيەتلىك بايانداما بەرۉۉ</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="551"/>
++        <location filename="../repair_specific_error_widget.cpp" line="554"/>
+         <source>Report failed</source>
+         <translation>بايانداما بەرۉۉ  جەڭىلۉۉ بولدۇ</translation>
+     </message>
+diff --git a/plugins/fault_diagnosis/translations/fault-diagnosis_mn.ts b/plugins/fault_diagnosis/translations/fault-diagnosis_mn.ts
+index 5be4923..8e17232 100644
+--- a/plugins/fault_diagnosis/translations/fault-diagnosis_mn.ts
++++ b/plugins/fault_diagnosis/translations/fault-diagnosis_mn.ts
+@@ -149,12 +149,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="96"/>
+-        <source>Health examination</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../fault_diagnosis.cpp" line="98"/>
++        <location filename="../fault_diagnosis.cpp" line="95"/>
+         <source>FaultDiagnosis</source>
+         <translation>ᠭᠡᠮᠲᠦᠯ ᠢ ᠣᠨᠣᠰᠢᠯᠠᠨ᠎ᠠ ᠃</translation>
+     </message>
+@@ -320,22 +315,22 @@
+ <context>
+     <name>fault_diagnosis::FaultDiagnosis</name>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="152"/>
++        <location filename="../fault_diagnosis.cpp" line="148"/>
+         <source>Fault Diagnosis</source>
+         <translation>ᠭᠡᠮᠲᠦᠯ ᠢ ᠣᠨᠣᠰᠢᠯᠠᠨ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="152"/>
++        <location filename="../fault_diagnosis.cpp" line="148"/>
+         <source>Currently running, please try again after finishing.</source>
+         <translation>ᠣᠳᠣᠬᠠᠨ ᠳᠤ ᠠᠵᠢᠯᠯᠠᠭᠠᠨ ᠤ ᠪᠠᠶᠢᠳᠠᠯ ᠳᠤ ᠣᠷᠣᠰᠢᠵᠤ ᠪᠠᠶᠢᠨ᠎ᠠ ᠂ ᠳᠠᠭᠤᠰᠤᠭᠰᠠᠨ ᠤ ᠳᠠᠷᠠᠭ᠎ᠠ ᠳᠠᠬᠢᠨ ᠲᠤᠷᠰᠢᠵᠤ ᠦᠵᠡᠭᠡᠷᠡᠢ ᠃.</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="208"/>
++        <location filename="../fault_diagnosis.cpp" line="204"/>
+         <source>The module is not supported</source>
+         <translation>ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠬᠤ ᠲᠣᠨᠣᠭ ᠨᠢ ᠳᠡᠮᠵᠢᠬᠦ ᠦᠭᠡᠶ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="224"/>
++        <location filename="../fault_diagnosis.cpp" line="220"/>
+         <source>The diagnostic type is not supported</source>
+         <translation>ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠬᠦ ᠲᠥᠷᠥᠯ ᠬᠡᠯᠪᠡᠷᠢ ᠨᠢ ᠳᠡᠮᠵᠢᠬᠦ ᠦᠭᠡᠶ᠃</translation>
+     </message>
+@@ -353,98 +348,98 @@
+         <translation>ᠭᠡᠮ ᠭᠠᠷᠤᠭᠰᠠᠨ ᠠᠰᠠᠭᠤᠳᠠᠯ ᠢ ᠲᠦᠷᠭᠡᠨ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠵᠦ ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠵᠤ ᠰᠡᠷᠭᠦᠭᠡᠵᠦ ᠂ ᠲᠠᠨ ᠤ ᠺᠣᠮᠫᠢᠦ᠋ᠲ᠋ᠧᠷ ᠦᠨ ᠡᠷᠡᠭᠦᠯ ᠮᠡᠨᠳᠦ ᠶᠢ ᠬᠠᠮᠠᠭᠠᠯᠠᠵᠤ ᠥᠭ᠍ᠭᠥᠨ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="148"/>
++        <location filename="../home_page_widget.cpp" line="132"/>
+         <source>Network detection</source>
+         <translation>ᠰᠦᠯᠵᠢᠶᠡᠨ ᠦ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠯᠲᠡ ᠃</translation>
+     </message>
+     <message>
+         <location filename="../home_page_widget.cpp" line="91"/>
+-        <location filename="../home_page_widget.cpp" line="280"/>
++        <location filename="../home_page_widget.cpp" line="245"/>
+         <source>One click detection</source>
+         <translation>ᠨᠢᠭᠡ ᠲᠠᠷᠤᠭᠤᠯ ᠢ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠨ᠎ᠡ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="149"/>
++        <location filename="../home_page_widget.cpp" line="133"/>
+         <source>Troubleshooting issues with inablilty to access the internet</source>
+         <translation>ᠰᠦᠯᠵᠢᠶᠡᠨ ᠳᠦ ᠭᠠᠷᠴᠦ ᠪᠣᠯᠬᠤ ᠦᠭᠡᠶ ᠠᠰᠠᠭᠤᠳᠠᠯ ᠢ ᠵᠢᠭᠰᠠᠭᠠᠨ ᠪᠠᠶᠢᠴᠠᠭᠠᠬᠤ ᠬᠡᠷᠡᠭᠲᠡᠶ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="154"/>
+-        <source>System performance and component detection</source>
+-        <translation>ᠰᠢᠰᠲ᠋ᠧᠮ ᠦᠨ ᠴᠢᠳᠠᠪᠬᠢ ᠬᠢᠭᠡᠳ ᠲᠣᠨᠣᠭᠯᠠᠯ ᠤᠨ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠯᠲᠡ ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../home_page_widget.cpp" line="155"/>
+-        <source>Hardware health and system performance issues</source>
+-        <translation>ᠬᠠᠲᠠᠭᠤ ᠬᠡᠷᠡᠭᠰᠡᠯ ᠦᠨ ᠡᠷᠡᠭᠦᠯ ᠮᠡᠨᠳᠦ ᠬᠢᠭᠡᠳ ᠰᠢᠰᠲ᠋ᠧᠮ ᠦᠨ ᠴᠢᠳᠠᠪᠬᠢ ᠶᠢᠨ ᠠᠰᠠᠭᠤᠳᠠᠯ᠃</translation>
+-    </message>
+-    <message>
+-        <location filename="../home_page_widget.cpp" line="160"/>
++        <location filename="../home_page_widget.cpp" line="144"/>
+         <source>Application detection</source>
+         <translation>ᠬᠡᠷᠡᠭᠯᠡᠭᠡᠨ ᠦ ᠳᠡᠰ ᠳᠠᠷᠠᠭᠠᠯᠠᠯ ᠢ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠬᠦ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="161"/>
++        <location filename="../home_page_widget.cpp" line="145"/>
+         <source>Application caching and permission settings</source>
+         <translation>ᠬᠡᠷᠡᠭᠯᠡᠭᠡᠨ ᠦ ᠬᠣᠶᠢᠰᠢᠯᠠᠭᠤᠯᠤᠨ ᠬᠠᠳᠠᠭᠠᠯᠠᠬᠤ ᠪᠠ ᠡᠷᠬᠡ ᠮᠡᠳᠡᠯ ᠦᠨ ᠲᠣᠬᠢᠷᠠᠭᠤᠯᠤᠯᠲᠠ ᠶᠢ ᠬᠡᠷᠡᠭᠯᠡᠨ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="166"/>
+-        <source>System update detection</source>
++        <location filename="../home_page_widget.cpp" line="138"/>
++        <source>System components and performance detection</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../home_page_widget.cpp" line="139"/>
++        <source>Resolve hardware health and system performance issues</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="167"/>
++        <location filename="../home_page_widget.cpp" line="150"/>
++        <source>Online system update detection</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../home_page_widget.cpp" line="151"/>
+         <source>Resolve issues encountered during updates and upgrades</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="172"/>
++        <location filename="../home_page_widget.cpp" line="156"/>
+         <source>Software store detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="173"/>
++        <location filename="../home_page_widget.cpp" line="157"/>
+         <source>Resolve issues encountered in software stores</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="178"/>
++        <location filename="../home_page_widget.cpp" line="162"/>
+         <source>System disk availability detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="179"/>
++        <location filename="../home_page_widget.cpp" line="163"/>
+         <source>Check the health status of the disk</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="184"/>
++        <location filename="../home_page_widget.cpp" line="168"/>
+         <source>Wired network detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="185"/>
++        <location filename="../home_page_widget.cpp" line="169"/>
+         <source>Troubleshooting the issue of not being able to access the internet</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="190"/>
++        <location filename="../home_page_widget.cpp" line="174"/>
+         <source>Wireless network detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="191"/>
++        <location filename="../home_page_widget.cpp" line="175"/>
+         <source>Troubleshooting wireless network anomalies</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="238"/>
++        <location filename="../home_page_widget.cpp" line="203"/>
+         <source>Internal network detection</source>
+         <translation>ᠳᠣᠲᠣᠭᠠᠳᠤ ᠰᠦᠯᠵᠢᠶ᠎ᠡ ᠶᠢ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠵᠦ ᠪᠠᠶᠢᠷᠢᠯᠠᠭᠤᠯᠤᠨ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="284"/>
++        <location filename="../home_page_widget.cpp" line="249"/>
+         <source>Preparing...</source>
+         <translation>ᠪᠡᠯᠡᠳᠬᠡᠯ ᠳᠤᠮᠳᠠ ᠃...</translation>
+     </message>
+@@ -452,299 +447,310 @@
+ <context>
+     <name>fault_diagnosis::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="97"/>
++        <location filename="../mainwindow.cpp" line="98"/>
++        <location filename="../mainwindow.cpp" line="1826"/>
+         <source>Cancel</source>
+         <translation>ᠬᠦᠴᠦᠨ ᠦᠭᠡᠶ ᠪᠣᠯᠭᠠᠨ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="98"/>
++        <location filename="../mainwindow.cpp" line="99"/>
+         <source>Return</source>
+         <translation>ᠪᠤᠴᠠᠵᠤ ᠢᠷᠡᠨ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="237"/>
++        <location filename="../mainwindow.cpp" line="238"/>
+         <source>Update detection</source>
+         <translation>ᠰᠢᠨᠡᠳᠬᠡᠨ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠬᠦ ᠬᠡᠷᠡᠭᠲᠡᠶ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="240"/>
++        <location filename="../mainwindow.cpp" line="241"/>
+         <source>Application detection</source>
+         <translation>ᠬᠡᠷᠡᠭᠯᠡᠭᠡᠨ ᠦ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠯᠲᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="284"/>
++        <location filename="../mainwindow.cpp" line="285"/>
+         <source>Detecting...</source>
+         <translation>ᠶᠠᠭ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠵᠦ ᠪᠠᠶᠢᠬᠤ ᠳᠤᠮᠳᠠ ᠁...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="296"/>
+-        <location filename="../mainwindow.cpp" line="360"/>
++        <location filename="../mainwindow.cpp" line="297"/>
++        <location filename="../mainwindow.cpp" line="361"/>
+         <source>Canceling in progress...</source>
+         <translation>ᠶᠠᠭ ᠦᠭᠡᠶᠢᠰᠬᠡᠵᠦ ᠪᠠᠶᠢᠬᠤ ᠳᠤᠮᠳᠠ ᠁...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="308"/>
++        <location filename="../mainwindow.cpp" line="309"/>
+         <source>Detection interruption, no issues found</source>
+         <translation>ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠬᠦ ᠲᠠᠰᠤᠷᠠᠭᠰᠠᠨ ᠠᠴᠠ ᠠᠰᠠᠭᠤᠳᠠᠯ ᠢ ᠣᠯᠵᠤ ᠮᠡᠳᠡᠭᠰᠡᠨ ᠦᠭᠡᠶ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="311"/>
++        <location filename="../mainwindow.cpp" line="312"/>
+         <source>Detected interruption and found %1 issues</source>
+         <translation>ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠯᠲᠡ ᠲᠠᠰᠤᠷᠠᠵᠤ ᠂ %1ア ᠵᠦᠢᠯ ᠦᠨ ᠠᠰᠠᠭᠤᠳᠠᠯ ᠢ ᠣᠯᠵᠤ ᠮᠡᠳᠡᠪᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="316"/>
+-        <location filename="../mainwindow.cpp" line="328"/>
++        <location filename="../mainwindow.cpp" line="317"/>
++        <location filename="../mainwindow.cpp" line="329"/>
+         <source>Rediagnosis</source>
+         <translation>ᠳᠠᠬᠢᠵᠤ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠬᠦ ᠬᠡᠷᠡᠭᠲᠡᠶ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="327"/>
++        <location filename="../mainwindow.cpp" line="328"/>
+         <source>No issues fount</source>
+         <translation>ᠠᠰᠠᠭᠤᠳᠠᠯ ᠢ ᠣᠯᠵᠤ ᠮᠡᠳᠡᠭᠰᠡᠨ ᠦᠭᠡᠶ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="333"/>
++        <location filename="../mainwindow.cpp" line="334"/>
+         <source>Found %1 issues</source>
+         <translation>%1 ᠵᠦᠢᠯ ᠦᠨ ᠠᠰᠠᠭᠤᠳᠠᠯ ᠢ ᠣᠯᠵᠤ ᠮᠡᠳᠡᠪᠡ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="335"/>
++        <location filename="../mainwindow.cpp" line="336"/>
+         <source>One click repair</source>
+         <translation>ᠨᠢᠭᠡ ᠲᠠᠷᠤᠭᠤᠯ ᠢ ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠨ ᠰᠡᠷᠭᠦᠭᠡᠨ᠎ᠡ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="349"/>
++        <location filename="../mainwindow.cpp" line="350"/>
+         <source>Repairing...</source>
+         <translation>ᠶᠠᠭ ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠵᠤ ᠪᠠᠶᠢᠬᠤ ᠳᠤᠮᠳᠠ ᠁...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="372"/>
+-        <location filename="../mainwindow.cpp" line="394"/>
+-        <location filename="../mainwindow.cpp" line="799"/>
+-        <location filename="../mainwindow.cpp" line="1488"/>
++        <location filename="../mainwindow.cpp" line="373"/>
++        <location filename="../mainwindow.cpp" line="395"/>
++        <location filename="../mainwindow.cpp" line="805"/>
++        <location filename="../mainwindow.cpp" line="1499"/>
+         <source>Repair failed</source>
+         <translation>ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠵᠤ ᠢᠯᠠᠭᠳᠠᠯ ᠳᠤ ᠢᠯᠠᠭᠳᠠᠪᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="373"/>
++        <location filename="../mainwindow.cpp" line="374"/>
+         <source>Repair</source>
+         <translation>ᠳᠠᠬᠢᠵᠤ ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠨ ᠰᠡᠷᠭᠦᠭᠡᠬᠦ ᠬᠡᠷᠡᠭᠲᠡᠶ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="377"/>
+-        <location filename="../mainwindow.cpp" line="397"/>
+-        <location filename="../mainwindow.cpp" line="795"/>
+-        <location filename="../mainwindow.cpp" line="1483"/>
++        <location filename="../mainwindow.cpp" line="378"/>
++        <location filename="../mainwindow.cpp" line="398"/>
++        <location filename="../mainwindow.cpp" line="801"/>
++        <location filename="../mainwindow.cpp" line="1494"/>
+         <source>Repair successful</source>
+         <translation>ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠭᠠᠳ ᠠᠮᠵᠢᠯᠲᠠ ᠣᠯᠪᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="424"/>
++        <location filename="../mainwindow.cpp" line="425"/>
+         <source>%1 items have been tested, no issues found</source>
+         <translation>ᠨᠢᠭᠡᠨᠲᠡ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠭᠰᠡᠨ ᠨᠢ %1 ᠵᠦᠢᠯ ᠦᠨ ᠠᠰᠠᠭᠤᠳᠠᠯ ᠢ ᠣᠯᠵᠤ ᠮᠡᠳᠡᠭᠰᠡᠨ ᠦᠭᠡᠶ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="426"/>
++        <location filename="../mainwindow.cpp" line="427"/>
+         <source>%1 items have been tested and %2 issues have been found</source>
+         <translation>ᠨᠢᠭᠡᠨᠲᠡ %1 ᠵᠦᠢᠯ ᠢ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠵᠦ᠂ %2 ᠵᠦᠢᠯ ᠦᠨ ᠠᠰᠠᠭᠤᠳᠠᠯ ᠢ ᠣᠯᠵᠤ ᠮᠡᠳᠡᠪᠡ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="433"/>
++        <location filename="../mainwindow.cpp" line="434"/>
+         <source>I suggest you conduct a complete inspection again</source>
+         <translation>ᠲᠠᠨ ᠳᠤ ᠳᠠᠬᠢᠨ ᠪᠦᠷᠢᠨ ᠪᠦᠲᠦᠨ ᠪᠠᠢ᠌ᠴᠠᠭᠠᠯᠲᠠ ᠬᠢᠯᠭᠡᠬᠦ ᠶᠢ ᠰᠠᠨᠠᠭᠤᠯᠤᠶ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="435"/>
++        <location filename="../mainwindow.cpp" line="436"/>
+         <source>Please repair and retest</source>
+         <translation>ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠭᠰᠠᠨ ᠤ ᠳᠠᠷᠠᠭ᠎ᠠ ᠳᠠᠬᠢᠨ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠬᠡᠮᠵᠢᠭᠡᠷᠡᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="440"/>
++        <location filename="../mainwindow.cpp" line="441"/>
+         <source>Please continue to maintain and regularly undergo physical examinations</source>
+         <translation>ᠦᠷᠭᠦᠯᠵᠢᠯᠡᠨ ᠲᠣᠭᠲᠠᠭᠰᠠᠨ ᠴᠠᠭ ᠤᠨ ᠪᠡᠶ᠎ᠡ ᠶᠢᠨ ᠪᠠᠶᠢᠴᠠᠭᠠᠯᠲᠠ ᠶᠢ ᠦᠷᠭᠦᠯᠵᠢᠯᠡᠨ ᠪᠠᠲᠤᠯᠠᠬᠤ ᠶᠢᠨ ᠬᠠᠮᠲᠤ ᠲᠣᠭᠲᠠᠭᠰᠠᠨ ᠴᠠᠭ ᠲᠤ ᠪᠡᠶ᠎ᠡ ᠶᠢᠨ ᠪᠠᠶᠢᠴᠠᠭᠠ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="442"/>
++        <location filename="../mainwindow.cpp" line="443"/>
+         <source>The scan has been completed. if there are any issues, please handle them as soon as possible</source>
+         <translation>ᠰᠢᠷᠦᠭᠦᠨ ᠰᠢᠷᠦᠭᠦᠷ ᠢ ᠨᠢᠭᠡᠨᠲᠡ ᠪᠡᠶᠡᠯᠡᠭᠦᠯᠦᠭᠰᠡᠨ ᠪᠣᠯᠪᠠᠴᠤ ᠠᠰᠠᠭᠤᠳᠠᠯ ᠲᠠᠶ ᠪᠣᠯ ᠳᠠᠷᠤᠶᠢᠬᠠᠨ ᠰᠢᠶᠳᠪᠦᠷᠢᠯᠡᠭᠡᠷᠡᠶ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="446"/>
++        <location filename="../mainwindow.cpp" line="447"/>
+         <source>Please wait for the repair to complete</source>
+         <translation>ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠵᠤ ᠳᠠᠭᠤᠰᠬᠤ ᠶᠢ ᠬᠦᠯᠢᠶᠡᠭᠡᠷᠡᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="454"/>
++        <location filename="../mainwindow.cpp" line="455"/>
+         <source>There is still %1 issue that has not been successfully fixed. it is recommended to manually fix it</source>
+         <translation>ᠪᠠᠰᠠ %1ア ᠵᠦᠢᠯ ᠦᠨ ᠠᠰᠠᠭᠤᠳᠠᠯ ᠢ ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠭᠠᠳᠤᠶ ᠪᠣᠯᠬᠣᠷ ᠭᠠᠷ ᠢᠶᠠᠷ ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠬᠤ ᠶᠢ ᠰᠠᠨᠠᠭᠤᠯᠵᠠᠶ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="456"/>
++        <location filename="../mainwindow.cpp" line="457"/>
+         <source>Regular physical examinations can effectively improve the user experience</source>
+         <translation>ᠪᠠᠶᠢᠩᠭᠤ ᠪᠡᠶ᠎ᠡ ᠶᠢᠨ ᠪᠠᠶᠢᠴᠠᠭᠠᠯᠲᠠ ᠬᠢᠪᠡᠯ ᠂ ᠬᠡᠷᠡᠭᠯᠡᠯᠲᠡ ᠶᠢᠨ ᠲᠤᠷᠰᠢᠯᠭ᠎ᠠ ᠶᠢ ᠪᠦᠲᠦᠮᠵᠢᠲᠡᠶ ᠳᠡᠭᠡᠭᠰᠢᠯᠡᠭᠦᠯᠵᠦ ᠴᠢᠳᠠᠨ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="962"/>
+-        <location filename="../mainwindow.cpp" line="981"/>
++        <location filename="../mainwindow.cpp" line="968"/>
++        <location filename="../mainwindow.cpp" line="987"/>
+         <source>Backend detection exception</source>
+         <translation>ᠠᠷᠤ ᠲᠠᠯ᠎ᠠ ᠶᠢᠨ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠰᠢᠯᠭᠠᠯᠲᠠ ᠨᠢ ᠬᠡᠪ ᠦᠨ ᠪᠤᠰᠤ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1237"/>
++        <location filename="../mainwindow.cpp" line="1243"/>
+         <source>Please select the item that needs to be repaired.</source>
+         <translation>ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠬᠤ ᠴᠢᠬᠤᠯᠠ ᠲᠠᠢ ᠵᠦᠢᠯ ᠢ ᠰᠤᠩᠭ᠋ᠤᠭᠠᠷᠠᠢ.</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1477"/>
++        <location filename="../mainwindow.cpp" line="1488"/>
+         <source>The issue has been successfully fixed, please try updating again</source>
+         <translation>ᠨᠢᠭᠡᠨᠲᠡ ᠠᠮᠵᠢᠯᠲᠠ ᠲᠠᠶ ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠬᠤ ᠠᠰᠠᠭᠤᠳᠠᠯ ᠢ ᠳᠠᠬᠢᠨᠲᠠ ᠰᠢᠨᠡᠳᠬᠡᠬᠦ ᠪᠡᠷ ᠲᠤᠷᠰᠢᠭᠠᠷᠠᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1480"/>
++        <location filename="../mainwindow.cpp" line="1491"/>
+         <source>The issue has been successfully fixed, please reinstall the software package again</source>
+         <translation>ᠨᠢᠭᠡᠨᠲᠡ ᠠᠰᠠᠭᠤᠳᠠᠯ ᠢ ᠨᠢᠭᠡᠨᠲᠡ ᠠᠮᠵᠢᠯᠲᠠ ᠲᠠᠢ ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠵᠠᠢ ᠂ ᠳᠠᠬᠢᠨᠲᠠ ᠵᠥᠭᠡᠯᠡᠨ ᠲᠣᠨᠣᠭ ᠤᠨ ᠪᠣᠭᠴᠣ ᠤᠭᠰᠠᠷᠠᠭᠠᠷᠠᠢ ᠃</translation>
+     </message>
++    <message>
++        <location filename="../mainwindow.cpp" line="1825"/>
++        <source>Fault diagnosis is running, are you sure you want to exit?</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../mainwindow.cpp" line="1827"/>
++        <source>Ok</source>
++        <translation type="unfinished"></translation>
++    </message>
+ </context>
+ <context>
+     <name>fault_diagnosis::RepairSpecificErrorWidget</name>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="87"/>
++        <location filename="../repair_specific_error_widget.cpp" line="86"/>
+         <source>Detecting and attempting to fix the issue</source>
+         <translation>ᠶᠠᠭ ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠬᠤ ᠠᠰᠠᠭᠤᠳᠠᠯ ᠢ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠰᠢᠯᠭᠠᠵᠤ ᠦᠵᠡᠵᠦ ᠦᠵᠡᠵᠦ ᠪᠠᠶᠢᠨ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="96"/>
++        <location filename="../repair_specific_error_widget.cpp" line="95"/>
+         <source>Cancel</source>
+         <translation>ᠬᠦᠴᠦᠨ ᠦᠭᠡᠶ ᠪᠣᠯᠭᠠᠨ᠎ᠠ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="216"/>
++        <location filename="../repair_specific_error_widget.cpp" line="219"/>
+         <source>Solution suggestions</source>
+         <translation>ᠰᠠᠨᠠᠭᠤᠯᠭ᠎ᠠ ᠶᠢ ᠰᠢᠶᠳᠪᠦᠷᠢᠯᠡᠨ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="237"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="545"/>
++        <location filename="../repair_specific_error_widget.cpp" line="240"/>
++        <location filename="../repair_specific_error_widget.cpp" line="548"/>
+         <source>Report issues</source>
+         <translation>ᠳᠡᠭᠡᠭᠰᠢ ᠮᠡᠳᠡᠭᠦᠯᠬᠦ ᠠᠰᠠᠭᠤᠳᠠᠯ ᠢ ᠳᠡᠭᠡᠭᠰᠢ ᠮᠡᠳᠡᠭᠦᠯᠬᠦ ᠬᠡᠷᠡᠭᠲᠡᠶ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="258"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="389"/>
++        <location filename="../repair_specific_error_widget.cpp" line="261"/>
++        <location filename="../repair_specific_error_widget.cpp" line="392"/>
+         <source>Run</source>
+         <translation>ᠠᠵᠢᠯᠯᠠᠭᠠᠨ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="260"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="391"/>
++        <location filename="../repair_specific_error_widget.cpp" line="263"/>
++        <location filename="../repair_specific_error_widget.cpp" line="394"/>
+         <source>Running...</source>
+         <translation>ᠠᠵᠢᠯᠯᠠᠭᠠᠨ ᠤ ᠳᠤᠮᠳᠠ...</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="232"/>
++        <location filename="../repair_specific_error_widget.cpp" line="235"/>
+         <source>If the above suggestions still fail to solve the problem, you may need to report the issue to the system maintenance personnel.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="234"/>
++        <location filename="../repair_specific_error_widget.cpp" line="237"/>
+         <source>To attempt to resolve the issue, you may need to report the issue to the system maintenance personnel.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="256"/>
++        <location filename="../repair_specific_error_widget.cpp" line="259"/>
+         <source>The network is normal but the update cannot be completed, allow the system to run automated scripts to attempt to fix the problem.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="288"/>
++        <location filename="../repair_specific_error_widget.cpp" line="291"/>
+         <source>Please check if the the network connection is normal and update again.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="295"/>
++        <location filename="../repair_specific_error_widget.cpp" line="298"/>
+         <source>Network normal</source>
+         <translation>ᠲᠣᠣᠷ ᠰᠦᠯᠵᠢᠶ᠎ᠡ ᠬᠡᠪ ᠦᠨ ᠪᠠᠶᠢᠳᠠᠯ ᠲᠠᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="299"/>
++        <location filename="../repair_specific_error_widget.cpp" line="302"/>
+         <source>Network exception</source>
+         <translation>ᠲᠣᠣᠷ ᠰᠦᠯᠵᠢᠶ᠎ᠡ ᠬᠡᠪ ᠦᠨ ᠪᠤᠰᠤ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="322"/>
++        <location filename="../repair_specific_error_widget.cpp" line="325"/>
+         <source>Access</source>
+         <translation>ᠠᠶᠢᠯᠴᠢᠯᠠᠯᠲᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="324"/>
++        <location filename="../repair_specific_error_widget.cpp" line="327"/>
+         <source>KylinOS official website</source>
+         <translation>KylinOS ᠠᠯᠪᠠᠨ ᠤ ᠰᠦᠯᠵᠢᠶ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="329"/>
++        <location filename="../repair_specific_error_widget.cpp" line="332"/>
+         <source>view common problems and solutions. For more help, please scan the QR code below: </source>
+         <translation>ᠦᠷᠭᠦᠯᠵᠢ ᠲᠣᠬᠢᠶᠠᠯᠳᠤᠳᠠᠭ ᠠᠰᠠᠭᠤᠳᠠᠯ ᠬᠢᠭᠡᠳ ᠰᠢᠶᠳᠪᠦᠷᠢᠯᠡᠬᠦ ᠲᠥᠰᠦᠯ ᠢ ᠪᠠᠶᠢᠴᠠᠭᠠᠨ ᠦᠵᠡᠨ᠎ᠡ᠃ ᠨᠡᠩ ᠠᠷᠪᠢᠨ ᠬᠠᠪᠰᠤᠷᠤᠯᠭ᠎ᠠ ᠶᠢᠨ ᠳᠣᠣᠷᠠᠬᠢ ᠬᠣᠶᠠᠷ ᠨᠣᠮᠧᠷ ᠢ ᠱᠦᠭᠦᠷᠳᠡᠭᠦᠯᠬᠦ ᠴᠢᠬᠤᠯᠠ ᠲᠠᠢ: </translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="366"/>
++        <location filename="../repair_specific_error_widget.cpp" line="369"/>
+         <source>The system will run automated scripts to try to solve the problem, which will uninstall some software packages or lower the version of some software packages (</source>
+         <translation>ᠰᠢᠰᠲ᠋ᠧᠮ ᠨᠢ ᠠᠦᠢᠲ᠋ᠣᠴᠢᠯᠠᠭᠰᠠᠨ ᠬᠥᠯ ᠳᠡᠪᠲᠡᠷ ᠢ ᠲᠤᠰ ᠠᠰᠠᠭᠤᠳᠠᠯ ᠢ ᠰᠢᠢᠳᠪᠦᠷᠢᠯᠡᠬᠦ ᠪᠡᠷ ᠲᠤᠷᠰᠢᠨ᠎ᠠ ᠂ ᠡᠨᠡ ᠨᠢ ᠵᠠᠷᠢᠮ ᠵᠥᠭᠡᠯᠡᠨ ᠲᠣᠨᠣᠭ ᠤᠨ ᠪᠣᠭᠴᠣ ᠶᠢ ᠪᠠᠭᠤᠯᠭᠠᠬᠤ ᠪᠤᠶᠤ ᠵᠠᠷᠢᠮ ᠵᠥᠭᠡᠯᠡᠨ ᠲᠣᠨᠣᠭ ᠤᠨ ᠪᠣᠭᠴᠣ ᠶᠢ ᠪᠠᠭᠤᠷᠠᠭᠤᠯᠬᠤ ᠬᠡᠪᠯᠡᠯ ᠪᠣᠯᠣᠨ᠎</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="369"/>
++        <location filename="../repair_specific_error_widget.cpp" line="372"/>
+         <source>click to view details</source>
+         <translation>ᠨᠠᠷᠢᠨ ᠪᠠᠢ᠌ᠳᠠᠯ ᠢ ᠳᠠᠷᠤᠵᠤ ᠦᠵᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="371"/>
++        <location filename="../repair_specific_error_widget.cpp" line="374"/>
+         <source>).</source>
+         <translation>).</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="381"/>
++        <location filename="../repair_specific_error_widget.cpp" line="384"/>
+         <source>Is it running?</source>
+         <translation>ᠠᠵᠢᠯᠯᠠᠭᠠᠨ ᠲᠠᠢ ᠤᠤ ?</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="426"/>
++        <location filename="../repair_specific_error_widget.cpp" line="429"/>
+         <source>Your disk space is insufficient, please click the button on the right to clean it up.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="428"/>
++        <location filename="../repair_specific_error_widget.cpp" line="431"/>
+         <source>Clear</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="447"/>
++        <location filename="../repair_specific_error_widget.cpp" line="450"/>
+         <source>Return</source>
+         <translation>ᠪᠤᠴᠠᠵᠤ ᠢᠷᠡᠨ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="488"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="505"/>
++        <location filename="../repair_specific_error_widget.cpp" line="491"/>
++        <location filename="../repair_specific_error_widget.cpp" line="508"/>
+         <source>Repair successful</source>
+         <translation>ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠭᠠᠳ ᠠᠮᠵᠢᠯᠲᠠ ᠣᠯᠪᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="491"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="508"/>
++        <location filename="../repair_specific_error_widget.cpp" line="494"/>
++        <location filename="../repair_specific_error_widget.cpp" line="511"/>
+         <source>Repair failed</source>
+         <translation>ᠰᠡᠯᠪᠢᠨ ᠵᠠᠰᠠᠵᠤ ᠢᠯᠠᠭᠳᠠᠯ ᠳᠤ ᠢᠯᠠᠭᠳᠠᠪᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="521"/>
++        <location filename="../repair_specific_error_widget.cpp" line="524"/>
+         <source>Reporting...</source>
+         <translation>ᠶᠠᠭ ᠳᠡᠭᠡᠭᠰᠢ ᠮᠡᠳᠡᠭᠦᠯᠵᠦ ᠪᠠᠶᠢᠨ᠎ᠠ...</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="549"/>
++        <location filename="../repair_specific_error_widget.cpp" line="552"/>
+         <source>Successfully reported</source>
+         <translation>ᠳᠡᠭᠡᠭᠰᠢ ᠮᠡᠳᠡᠭᠦᠯᠦᠯᠲᠡ ᠠᠮᠵᠢᠯᠲᠠ ᠣᠯᠪᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="551"/>
++        <location filename="../repair_specific_error_widget.cpp" line="554"/>
+         <source>Report failed</source>
+         <translation>ᠳᠡᠭᠡᠭᠰᠢ ᠮᠡᠳᠡᠭᠦᠯᠦᠯᠲᠡ ᠢᠯᠠᠭᠳᠠᠨ᠎ᠠ ᠃</translation>
+     </message>
+diff --git a/plugins/fault_diagnosis/translations/fault-diagnosis_ug.ts b/plugins/fault_diagnosis/translations/fault-diagnosis_ug.ts
+index 06df7d5..6507285 100644
+--- a/plugins/fault_diagnosis/translations/fault-diagnosis_ug.ts
++++ b/plugins/fault_diagnosis/translations/fault-diagnosis_ug.ts
+@@ -149,12 +149,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="96"/>
+-        <source>Health examination</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../fault_diagnosis.cpp" line="98"/>
++        <location filename="../fault_diagnosis.cpp" line="95"/>
+         <source>FaultDiagnosis</source>
+         <translation>كاشىلا دىياگنوز قويۇش</translation>
+     </message>
+@@ -320,22 +315,22 @@
+ <context>
+     <name>fault_diagnosis::FaultDiagnosis</name>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="152"/>
++        <location filename="../fault_diagnosis.cpp" line="148"/>
+         <source>Fault Diagnosis</source>
+         <translation>كاشىلا كۆرۈلىدۇ دىياگنوز قويۇش</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="152"/>
++        <location filename="../fault_diagnosis.cpp" line="148"/>
+         <source>Currently running, please try again after finishing.</source>
+         <translation>نۆۋەتتە يۈگۈرۈشنى تاماملىغاندىن كېيىن يەنە بىر قېتىم سىناپ بېقىڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="208"/>
++        <location filename="../fault_diagnosis.cpp" line="204"/>
+         <source>The module is not supported</source>
+         <translation>مودېل قوللىمايدۇ</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="224"/>
++        <location filename="../fault_diagnosis.cpp" line="220"/>
+         <source>The diagnostic type is not supported</source>
+         <translation>دىياگنوز قويۇش تىپى قوللىمايدۇ</translation>
+     </message>
+@@ -353,98 +348,98 @@
+         <translation>كاشىلا مەسىلىلىرىنى تېز بايقاش ۋە رېمونت قىلىش، كومپيۇتېرنىڭ ساغلاملىقىغا كاپالەتلىك قىلىش</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="148"/>
++        <location filename="../home_page_widget.cpp" line="132"/>
+         <source>Network detection</source>
+         <translation>تور تەكشۈرۈش</translation>
+     </message>
+     <message>
+         <location filename="../home_page_widget.cpp" line="91"/>
+-        <location filename="../home_page_widget.cpp" line="280"/>
++        <location filename="../home_page_widget.cpp" line="245"/>
+         <source>One click detection</source>
+         <translation>بىر چېكىلىشنى تەكشۈرۈش</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="149"/>
++        <location filename="../home_page_widget.cpp" line="133"/>
+         <source>Troubleshooting issues with inablilty to access the internet</source>
+         <translation>تورغا چىقىشنى قىيىنلاشتۇرۇش مەسىلىسىنى پەسكويغا چىقىرىش</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="154"/>
+-        <source>System performance and component detection</source>
+-        <translation>سىستېما ئىقتىدارى ۋە دېتال تەكشۈرۈش</translation>
+-    </message>
+-    <message>
+-        <location filename="../home_page_widget.cpp" line="155"/>
+-        <source>Hardware health and system performance issues</source>
+-        <translation>قاتتىق دېتال ساغلاملىقى ۋە سىستېما ئىقتىدار مەسىلىسى</translation>
+-    </message>
+-    <message>
+-        <location filename="../home_page_widget.cpp" line="160"/>
++        <location filename="../home_page_widget.cpp" line="144"/>
+         <source>Application detection</source>
+         <translation>قوللىنىشچان تەكشۈرۈش</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="161"/>
++        <location filename="../home_page_widget.cpp" line="145"/>
+         <source>Application caching and permission settings</source>
+         <translation>پىروگرامما caching ۋە ئىجازەت تەڭشەكلىرى</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="166"/>
+-        <source>System update detection</source>
++        <location filename="../home_page_widget.cpp" line="138"/>
++        <source>System components and performance detection</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../home_page_widget.cpp" line="139"/>
++        <source>Resolve hardware health and system performance issues</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="167"/>
++        <location filename="../home_page_widget.cpp" line="150"/>
++        <source>Online system update detection</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../home_page_widget.cpp" line="151"/>
+         <source>Resolve issues encountered during updates and upgrades</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="172"/>
++        <location filename="../home_page_widget.cpp" line="156"/>
+         <source>Software store detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="173"/>
++        <location filename="../home_page_widget.cpp" line="157"/>
+         <source>Resolve issues encountered in software stores</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="178"/>
++        <location filename="../home_page_widget.cpp" line="162"/>
+         <source>System disk availability detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="179"/>
++        <location filename="../home_page_widget.cpp" line="163"/>
+         <source>Check the health status of the disk</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="184"/>
++        <location filename="../home_page_widget.cpp" line="168"/>
+         <source>Wired network detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="185"/>
++        <location filename="../home_page_widget.cpp" line="169"/>
+         <source>Troubleshooting the issue of not being able to access the internet</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="190"/>
++        <location filename="../home_page_widget.cpp" line="174"/>
+         <source>Wireless network detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="191"/>
++        <location filename="../home_page_widget.cpp" line="175"/>
+         <source>Troubleshooting wireless network anomalies</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="238"/>
++        <location filename="../home_page_widget.cpp" line="203"/>
+         <source>Internal network detection</source>
+         <translation>ئىچكى تور تەكشۈرۈش</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="284"/>
++        <location filename="../home_page_widget.cpp" line="249"/>
+         <source>Preparing...</source>
+         <translation>تەييارلىنىۋاتىدۇ...</translation>
+     </message>
+@@ -452,156 +447,167 @@
+ <context>
+     <name>fault_diagnosis::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="97"/>
++        <location filename="../mainwindow.cpp" line="98"/>
++        <location filename="../mainwindow.cpp" line="1826"/>
+         <source>Cancel</source>
+         <translation>ئەمەلدىن قالدۇرۇش</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="284"/>
++        <location filename="../mainwindow.cpp" line="285"/>
+         <source>Detecting...</source>
+         <translation>بايقاش...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="327"/>
++        <location filename="../mainwindow.cpp" line="328"/>
+         <source>No issues fount</source>
+         <translation>مەسىلە يوق فونتان</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="316"/>
+-        <location filename="../mainwindow.cpp" line="328"/>
++        <location filename="../mainwindow.cpp" line="317"/>
++        <location filename="../mainwindow.cpp" line="329"/>
+         <source>Rediagnosis</source>
+         <translation>قايتا گەۋدە</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="237"/>
++        <location filename="../mainwindow.cpp" line="238"/>
+         <source>Update detection</source>
+         <translation>يېڭىلاش تەكشۈرۈش</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="240"/>
++        <location filename="../mainwindow.cpp" line="241"/>
+         <source>Application detection</source>
+         <translation>قوللىنىشچان تەكشۈرۈش</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="296"/>
+-        <location filename="../mainwindow.cpp" line="360"/>
++        <location filename="../mainwindow.cpp" line="297"/>
++        <location filename="../mainwindow.cpp" line="361"/>
+         <source>Canceling in progress...</source>
+         <translation>ئەمەلدىن قالدۇرۇۋاتىدۇ...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="308"/>
++        <location filename="../mainwindow.cpp" line="309"/>
+         <source>Detection interruption, no issues found</source>
+         <translation>تەكشۈرۈش ئۈزۈلۈپ قېلىش، مەسىلە بايقالمىدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="311"/>
++        <location filename="../mainwindow.cpp" line="312"/>
+         <source>Detected interruption and found %1 issues</source>
+         <translation>ئۈزۈلۈپ قالغانلىقى بايقالدى ۋە %1مەسىلە بايقالدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="333"/>
++        <location filename="../mainwindow.cpp" line="334"/>
+         <source>Found %1 issues</source>
+         <translation>%1 مەسىلە بايقالدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="335"/>
++        <location filename="../mainwindow.cpp" line="336"/>
+         <source>One click repair</source>
+         <translation>بىر چېكىپ رېمونت قىلىش</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="349"/>
++        <location filename="../mainwindow.cpp" line="350"/>
+         <source>Repairing...</source>
+         <translation>رېمونت قىلىش...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="372"/>
+-        <location filename="../mainwindow.cpp" line="394"/>
+-        <location filename="../mainwindow.cpp" line="799"/>
+-        <location filename="../mainwindow.cpp" line="1488"/>
++        <location filename="../mainwindow.cpp" line="373"/>
++        <location filename="../mainwindow.cpp" line="395"/>
++        <location filename="../mainwindow.cpp" line="805"/>
++        <location filename="../mainwindow.cpp" line="1499"/>
+         <source>Repair failed</source>
+         <translation>رېمونت مەغلۇپ بولدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="373"/>
++        <location filename="../mainwindow.cpp" line="374"/>
+         <source>Repair</source>
+         <translation>رېمونت قىلىش</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="377"/>
+-        <location filename="../mainwindow.cpp" line="397"/>
+-        <location filename="../mainwindow.cpp" line="795"/>
+-        <location filename="../mainwindow.cpp" line="1483"/>
++        <location filename="../mainwindow.cpp" line="378"/>
++        <location filename="../mainwindow.cpp" line="398"/>
++        <location filename="../mainwindow.cpp" line="801"/>
++        <location filename="../mainwindow.cpp" line="1494"/>
+         <source>Repair successful</source>
+         <translation>رېمونت مۇۋەپپەقىيەتلىك بولدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="424"/>
++        <location filename="../mainwindow.cpp" line="425"/>
+         <source>%1 items have been tested, no issues found</source>
+         <translation>%1 تۈر سىناق قىلىندى، مەسىلە بايقالمىدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="426"/>
++        <location filename="../mainwindow.cpp" line="427"/>
+         <source>%1 items have been tested and %2 issues have been found</source>
+         <translation>%1 تۈر سىناق قىلىندى ۋە%2 مەسىلە بايقالدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="433"/>
++        <location filename="../mainwindow.cpp" line="434"/>
+         <source>I suggest you conduct a complete inspection again</source>
+         <translation>سىزنىڭ يەنە بىر قېتىم مۇكەممەل تەكشۈرۈش ئېلىپ بېرىشىڭىزنى تەۋسىيە قىلىمەن</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="435"/>
++        <location filename="../mainwindow.cpp" line="436"/>
+         <source>Please repair and retest</source>
+         <translation>رېمونت قىلىڭ ۋە قايتا ياسىۋېلىڭ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="440"/>
++        <location filename="../mainwindow.cpp" line="441"/>
+         <source>Please continue to maintain and regularly undergo physical examinations</source>
+         <translation>سالامەتلىك تەكشۈرتۈشنى داۋاملىق داۋاملاشتۇرۇش ۋە قەرەللىك ھالدا تەكشۈرتۈش كېرەك</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="442"/>
++        <location filename="../mainwindow.cpp" line="443"/>
+         <source>The scan has been completed. if there are any issues, please handle them as soon as possible</source>
+         <translation>سىكاننېرلاش تاماملاندى. ئەگەر بىرەر مەسىلە بولسا تېزدىن بىر تەرەپ قىلىڭ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="446"/>
++        <location filename="../mainwindow.cpp" line="447"/>
+         <source>Please wait for the repair to complete</source>
+         <translation>رېمونتنىڭ پۈتۈشىنى كۈتۈڭ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="454"/>
++        <location filename="../mainwindow.cpp" line="455"/>
+         <source>There is still %1 issue that has not been successfully fixed. it is recommended to manually fix it</source>
+         <translation>يەنىلا %1 مەسىلە ئوڭۇشلۇق مۇقىملاپ بولالمىغان. قولدا ئوڭشاش تەۋسىيە قىلىنىدۇ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="456"/>
++        <location filename="../mainwindow.cpp" line="457"/>
+         <source>Regular physical examinations can effectively improve the user experience</source>
+         <translation>قەرەللىك سالامەتلىك تەكشۈرتۈش ئارقىلىق ئابونتلارنىڭ تەجرىبىسىنى ئۈنۈملۈك يۇقىرى كۆتۈرگىلى بولىدۇ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="962"/>
+-        <location filename="../mainwindow.cpp" line="981"/>
++        <location filename="../mainwindow.cpp" line="968"/>
++        <location filename="../mainwindow.cpp" line="987"/>
+         <source>Backend detection exception</source>
+         <translation>ئارقا قوشۇمچىلارنى بايقاش ئالاھىدە ئەھۋاللىرى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1237"/>
++        <location filename="../mainwindow.cpp" line="1243"/>
+         <source>Please select the item that needs to be repaired.</source>
+         <translation>رېمونت قىلىشقا تېگىشلىك بۇيۇمنى تاللاڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1477"/>
++        <location filename="../mainwindow.cpp" line="1488"/>
+         <source>The issue has been successfully fixed, please try updating again</source>
+         <translation>مەسىلە ئوڭۇشلۇق ئوڭشالدى، قايتا يېڭىلاشنى سىناپ بېقىڭ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1480"/>
++        <location filename="../mainwindow.cpp" line="1491"/>
+         <source>The issue has been successfully fixed, please reinstall the software package again</source>
+         <translation>مەسىلە ئوڭۇشلۇق ئوڭشالدى، يۇمشاق دېتال بوغچىسىنى قايتا قاچىلاڭ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="98"/>
++        <location filename="../mainwindow.cpp" line="1825"/>
++        <source>Fault diagnosis is running, are you sure you want to exit?</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../mainwindow.cpp" line="1827"/>
++        <source>Ok</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../mainwindow.cpp" line="99"/>
+         <source>Return</source>
+         <translation>قايتىش</translation>
+     </message>
+@@ -609,142 +615,142 @@
+ <context>
+     <name>fault_diagnosis::RepairSpecificErrorWidget</name>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="87"/>
++        <location filename="../repair_specific_error_widget.cpp" line="86"/>
+         <source>Detecting and attempting to fix the issue</source>
+         <translation>مەسىلىنى بايقاش ۋە ھەل قىلىشقا ئۇرۇنۇش</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="96"/>
++        <location filename="../repair_specific_error_widget.cpp" line="95"/>
+         <source>Cancel</source>
+         <translation>ئەمەلدىن قالدۇرۇش</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="216"/>
++        <location filename="../repair_specific_error_widget.cpp" line="219"/>
+         <source>Solution suggestions</source>
+         <translation>ھەل قىلىش تەكلىپى</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="237"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="545"/>
++        <location filename="../repair_specific_error_widget.cpp" line="240"/>
++        <location filename="../repair_specific_error_widget.cpp" line="548"/>
+         <source>Report issues</source>
+         <translation>مەسىلىلەرنى پاش قىلىش</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="258"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="389"/>
++        <location filename="../repair_specific_error_widget.cpp" line="261"/>
++        <location filename="../repair_specific_error_widget.cpp" line="392"/>
+         <source>Run</source>
+         <translation>يۈگۈرۈش</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="260"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="391"/>
++        <location filename="../repair_specific_error_widget.cpp" line="263"/>
++        <location filename="../repair_specific_error_widget.cpp" line="394"/>
+         <source>Running...</source>
+         <translation>يۈگۈرۈش...</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="232"/>
++        <location filename="../repair_specific_error_widget.cpp" line="235"/>
+         <source>If the above suggestions still fail to solve the problem, you may need to report the issue to the system maintenance personnel.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="234"/>
++        <location filename="../repair_specific_error_widget.cpp" line="237"/>
+         <source>To attempt to resolve the issue, you may need to report the issue to the system maintenance personnel.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="256"/>
++        <location filename="../repair_specific_error_widget.cpp" line="259"/>
+         <source>The network is normal but the update cannot be completed, allow the system to run automated scripts to attempt to fix the problem.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="288"/>
++        <location filename="../repair_specific_error_widget.cpp" line="291"/>
+         <source>Please check if the the network connection is normal and update again.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="295"/>
++        <location filename="../repair_specific_error_widget.cpp" line="298"/>
+         <source>Network normal</source>
+         <translation>تور نورمال</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="299"/>
++        <location filename="../repair_specific_error_widget.cpp" line="302"/>
+         <source>Network exception</source>
+         <translation>توردىن مۇستەسنا</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="322"/>
++        <location filename="../repair_specific_error_widget.cpp" line="325"/>
+         <source>Access</source>
+         <translation>كىرىش ئىجازىتى</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="324"/>
++        <location filename="../repair_specific_error_widget.cpp" line="327"/>
+         <source>KylinOS official website</source>
+         <translation>KylinOS رەسمىي تور بېكىتى</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="329"/>
++        <location filename="../repair_specific_error_widget.cpp" line="332"/>
+         <source>view common problems and solutions. For more help, please scan the QR code below: </source>
+         <translation>كۆرۈش ئورتاق مەسىلە ۋە ھەل قىلىش چارىسى تېخىمۇ كۆپ ياردەم ئۈچۈن تۆۋەندىكى QR كودىنى سىكاننېرلاڭ: </translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="366"/>
++        <location filename="../repair_specific_error_widget.cpp" line="369"/>
+         <source>The system will run automated scripts to try to solve the problem, which will uninstall some software packages or lower the version of some software packages (</source>
+         <translation>سىستېما ئاپتوماتلاشقان سىستېمىلارنى ئىجرا قىلىپ مەسىلىنى ھەل قىلىشقا تىرىشىدۇ، بۇ ئارقىلىق بەزى يۇمشاق دېتال بولىقى قاچىلاشنى كۆتۈرۈۋېتىدۇ ياكى بەزى يۇمشاق دېتال بولىقى نەشرىنى تۆۋەنلىتىدۇ (</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="369"/>
++        <location filename="../repair_specific_error_widget.cpp" line="372"/>
+         <source>click to view details</source>
+         <translation>تەپسىلاتىنى كۆرۈش ئۈچۈن چېكىڭ</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="371"/>
++        <location filename="../repair_specific_error_widget.cpp" line="374"/>
+         <source>).</source>
+         <translation>).</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="381"/>
++        <location filename="../repair_specific_error_widget.cpp" line="384"/>
+         <source>Is it running?</source>
+         <translation>يۈگرەۋاتامدۇ؟</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="426"/>
++        <location filename="../repair_specific_error_widget.cpp" line="429"/>
+         <source>Your disk space is insufficient, please click the button on the right to clean it up.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="428"/>
++        <location filename="../repair_specific_error_widget.cpp" line="431"/>
+         <source>Clear</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="447"/>
++        <location filename="../repair_specific_error_widget.cpp" line="450"/>
+         <source>Return</source>
+         <translation>قايتىش</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="488"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="505"/>
++        <location filename="../repair_specific_error_widget.cpp" line="491"/>
++        <location filename="../repair_specific_error_widget.cpp" line="508"/>
+         <source>Repair successful</source>
+         <translation>رېمونت مۇۋەپپەقىيەتلىك بولدى</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="491"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="508"/>
++        <location filename="../repair_specific_error_widget.cpp" line="494"/>
++        <location filename="../repair_specific_error_widget.cpp" line="511"/>
+         <source>Repair failed</source>
+         <translation>رېمونت مەغلۇپ بولدى</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="521"/>
++        <location filename="../repair_specific_error_widget.cpp" line="524"/>
+         <source>Reporting...</source>
+         <translation>پاش قىلىش...</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="549"/>
++        <location filename="../repair_specific_error_widget.cpp" line="552"/>
+         <source>Successfully reported</source>
+         <translation>مۇۋەپىقيەتلىك دوكلات</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="551"/>
++        <location filename="../repair_specific_error_widget.cpp" line="554"/>
+         <source>Report failed</source>
+         <translation>دوكلات مەغلۇپ بولدى</translation>
+     </message>
+diff --git a/plugins/fault_diagnosis/translations/fault-diagnosis_zh_CN.ts b/plugins/fault_diagnosis/translations/fault-diagnosis_zh_CN.ts
+index 9d6959e..5297b8f 100644
+--- a/plugins/fault_diagnosis/translations/fault-diagnosis_zh_CN.ts
++++ b/plugins/fault_diagnosis/translations/fault-diagnosis_zh_CN.ts
+@@ -149,12 +149,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="96"/>
+-        <source>Health examination</source>
+-        <translation>健康检查</translation>
+-    </message>
+-    <message>
+-        <location filename="../fault_diagnosis.cpp" line="98"/>
++        <location filename="../fault_diagnosis.cpp" line="95"/>
+         <source>FaultDiagnosis</source>
+         <translation>故障诊断</translation>
+     </message>
+@@ -320,22 +315,22 @@
+ <context>
+     <name>fault_diagnosis::FaultDiagnosis</name>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="152"/>
++        <location filename="../fault_diagnosis.cpp" line="148"/>
+         <source>Fault Diagnosis</source>
+         <translation>故障诊断</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="152"/>
++        <location filename="../fault_diagnosis.cpp" line="148"/>
+         <source>Currently running, please try again after finishing.</source>
+         <translation>当前处于运行状态,请结束后再试。</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="208"/>
++        <location filename="../fault_diagnosis.cpp" line="204"/>
+         <source>The module is not supported</source>
+         <translation>修复组件不支持</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="224"/>
++        <location filename="../fault_diagnosis.cpp" line="220"/>
+         <source>The diagnostic type is not supported</source>
+         <translation>检测类型不支持</translation>
+     </message>
+@@ -353,98 +348,98 @@
+         <translation>快速检测修复故障问题,为您的电脑健康保驾护航</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="148"/>
++        <location filename="../home_page_widget.cpp" line="132"/>
+         <source>Network detection</source>
+         <translation>网络检测</translation>
+     </message>
+     <message>
+         <location filename="../home_page_widget.cpp" line="91"/>
+-        <location filename="../home_page_widget.cpp" line="280"/>
++        <location filename="../home_page_widget.cpp" line="245"/>
+         <source>One click detection</source>
+         <translation>一键检测</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="149"/>
++        <location filename="../home_page_widget.cpp" line="133"/>
+         <source>Troubleshooting issues with inablilty to access the internet</source>
+         <translation>排查不能上网的问题</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="154"/>
+-        <source>System performance and component detection</source>
+-        <translation>系统性能与组件检测</translation>
+-    </message>
+-    <message>
+-        <location filename="../home_page_widget.cpp" line="155"/>
+-        <source>Hardware health and system performance issues</source>
+-        <translation>硬件健康与系统性能问题</translation>
+-    </message>
+-    <message>
+-        <location filename="../home_page_widget.cpp" line="160"/>
++        <location filename="../home_page_widget.cpp" line="144"/>
+         <source>Application detection</source>
+         <translation>应用程序检测</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="161"/>
++        <location filename="../home_page_widget.cpp" line="145"/>
+         <source>Application caching and permission settings</source>
+         <translation>应用缓存与权限设置</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="166"/>
+-        <source>System update detection</source>
+-        <translation>系统更新检测</translation>
++        <location filename="../home_page_widget.cpp" line="138"/>
++        <source>System components and performance detection</source>
++        <translation>系统组件与性能检测</translation>
++    </message>
++    <message>
++        <location filename="../home_page_widget.cpp" line="139"/>
++        <source>Resolve hardware health and system performance issues</source>
++        <translation>解决硬件健康与系统性能问题</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="167"/>
++        <location filename="../home_page_widget.cpp" line="150"/>
++        <source>Online system update detection</source>
++        <translation>系统在线更新检测</translation>
++    </message>
++    <message>
++        <location filename="../home_page_widget.cpp" line="151"/>
+         <source>Resolve issues encountered during updates and upgrades</source>
+         <translation>解决更新升级时遇到的问题</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="172"/>
++        <location filename="../home_page_widget.cpp" line="156"/>
+         <source>Software store detection</source>
+         <translation>软件商店检测</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="173"/>
++        <location filename="../home_page_widget.cpp" line="157"/>
+         <source>Resolve issues encountered in software stores</source>
+         <translation>解决软件商店遇到的问题</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="178"/>
++        <location filename="../home_page_widget.cpp" line="162"/>
+         <source>System disk availability detection</source>
+         <translation>系统磁盘可用性检测</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="179"/>
++        <location filename="../home_page_widget.cpp" line="163"/>
+         <source>Check the health status of the disk</source>
+         <translation>检测磁盘健康情况</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="184"/>
++        <location filename="../home_page_widget.cpp" line="168"/>
+         <source>Wired network detection</source>
+         <translation>有线网络检测</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="185"/>
++        <location filename="../home_page_widget.cpp" line="169"/>
+         <source>Troubleshooting the issue of not being able to access the internet</source>
+         <translation>排查不能上网的问题</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="190"/>
++        <location filename="../home_page_widget.cpp" line="174"/>
+         <source>Wireless network detection</source>
+         <translation>无线网络检测</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="191"/>
++        <location filename="../home_page_widget.cpp" line="175"/>
+         <source>Troubleshooting wireless network anomalies</source>
+         <translation>排查无线网络异常情况</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="238"/>
++        <location filename="../home_page_widget.cpp" line="203"/>
+         <source>Internal network detection</source>
+         <translation>内网检测设置</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="284"/>
++        <location filename="../home_page_widget.cpp" line="249"/>
+         <source>Preparing...</source>
+         <translation>准备中...</translation>
+     </message>
+@@ -452,156 +447,167 @@
+ <context>
+     <name>fault_diagnosis::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="97"/>
++        <location filename="../mainwindow.cpp" line="98"/>
++        <location filename="../mainwindow.cpp" line="1826"/>
+         <source>Cancel</source>
+         <translation>取消</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="284"/>
++        <location filename="../mainwindow.cpp" line="285"/>
+         <source>Detecting...</source>
+         <translation>正在检测中...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="327"/>
++        <location filename="../mainwindow.cpp" line="328"/>
+         <source>No issues fount</source>
+         <translation>未发现问题</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="316"/>
+-        <location filename="../mainwindow.cpp" line="328"/>
++        <location filename="../mainwindow.cpp" line="317"/>
++        <location filename="../mainwindow.cpp" line="329"/>
+         <source>Rediagnosis</source>
+         <translation>重新检测</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="237"/>
++        <location filename="../mainwindow.cpp" line="238"/>
+         <source>Update detection</source>
+         <translation>更新检测</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="240"/>
++        <location filename="../mainwindow.cpp" line="241"/>
+         <source>Application detection</source>
+         <translation>应用程序检测</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="296"/>
+-        <location filename="../mainwindow.cpp" line="360"/>
++        <location filename="../mainwindow.cpp" line="297"/>
++        <location filename="../mainwindow.cpp" line="361"/>
+         <source>Canceling in progress...</source>
+         <translation>正在取消中...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="308"/>
++        <location filename="../mainwindow.cpp" line="309"/>
+         <source>Detection interruption, no issues found</source>
+         <translation>检测中断,未发现问题</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="311"/>
++        <location filename="../mainwindow.cpp" line="312"/>
+         <source>Detected interruption and found %1 issues</source>
+         <translation>检测中断,发现 %1 项问题</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="333"/>
++        <location filename="../mainwindow.cpp" line="334"/>
+         <source>Found %1 issues</source>
+         <translation>发现 %1 项问题</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="335"/>
++        <location filename="../mainwindow.cpp" line="336"/>
+         <source>One click repair</source>
+         <translation>一键修复</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="349"/>
++        <location filename="../mainwindow.cpp" line="350"/>
+         <source>Repairing...</source>
+         <translation>正在修复中...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="372"/>
+-        <location filename="../mainwindow.cpp" line="394"/>
+-        <location filename="../mainwindow.cpp" line="799"/>
+-        <location filename="../mainwindow.cpp" line="1488"/>
++        <location filename="../mainwindow.cpp" line="373"/>
++        <location filename="../mainwindow.cpp" line="395"/>
++        <location filename="../mainwindow.cpp" line="805"/>
++        <location filename="../mainwindow.cpp" line="1499"/>
+         <source>Repair failed</source>
+         <translation>修复失败</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="373"/>
++        <location filename="../mainwindow.cpp" line="374"/>
+         <source>Repair</source>
+         <translation>重新修复</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="377"/>
+-        <location filename="../mainwindow.cpp" line="397"/>
+-        <location filename="../mainwindow.cpp" line="795"/>
+-        <location filename="../mainwindow.cpp" line="1483"/>
++        <location filename="../mainwindow.cpp" line="378"/>
++        <location filename="../mainwindow.cpp" line="398"/>
++        <location filename="../mainwindow.cpp" line="801"/>
++        <location filename="../mainwindow.cpp" line="1494"/>
+         <source>Repair successful</source>
+         <translation>修复成功</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="424"/>
++        <location filename="../mainwindow.cpp" line="425"/>
+         <source>%1 items have been tested, no issues found</source>
+         <translation>已检测 %1 项,未发现问题</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="426"/>
++        <location filename="../mainwindow.cpp" line="427"/>
+         <source>%1 items have been tested and %2 issues have been found</source>
+         <translation>已检测 %1 项,发现 %2 项问题</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="433"/>
++        <location filename="../mainwindow.cpp" line="434"/>
+         <source>I suggest you conduct a complete inspection again</source>
+         <translation>建议您重新进行完整检测</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="435"/>
++        <location filename="../mainwindow.cpp" line="436"/>
+         <source>Please repair and retest</source>
+         <translation>请修复后重新检测</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="440"/>
++        <location filename="../mainwindow.cpp" line="441"/>
+         <source>Please continue to maintain and regularly undergo physical examinations</source>
+         <translation>请继续保持并定时体检</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="442"/>
++        <location filename="../mainwindow.cpp" line="443"/>
+         <source>The scan has been completed. if there are any issues, please handle them as soon as possible</source>
+         <translation>扫描已完成,有问题请尽快处理</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="446"/>
++        <location filename="../mainwindow.cpp" line="447"/>
+         <source>Please wait for the repair to complete</source>
+         <translation>请等待修复完成</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="454"/>
++        <location filename="../mainwindow.cpp" line="455"/>
+         <source>There is still %1 issue that has not been successfully fixed. it is recommended to manually fix it</source>
+         <translation>还有 %1 项问题未修复成功,建议手动修复</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="456"/>
++        <location filename="../mainwindow.cpp" line="457"/>
+         <source>Regular physical examinations can effectively improve the user experience</source>
+         <translation>经常体检,能有效提升使用体验</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="962"/>
+-        <location filename="../mainwindow.cpp" line="981"/>
++        <location filename="../mainwindow.cpp" line="968"/>
++        <location filename="../mainwindow.cpp" line="987"/>
+         <source>Backend detection exception</source>
+         <translation>后端检测异常</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1237"/>
++        <location filename="../mainwindow.cpp" line="1243"/>
+         <source>Please select the item that needs to be repaired.</source>
+         <translation>请选择需要修复的项。</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1477"/>
++        <location filename="../mainwindow.cpp" line="1488"/>
+         <source>The issue has been successfully fixed, please try updating again</source>
+         <translation>已成功修复问题,请再次尝试更新</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1480"/>
++        <location filename="../mainwindow.cpp" line="1491"/>
+         <source>The issue has been successfully fixed, please reinstall the software package again</source>
+         <translation>已成功修复问题,请再次安装软件包</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="98"/>
++        <location filename="../mainwindow.cpp" line="1825"/>
++        <source>Fault diagnosis is running, are you sure you want to exit?</source>
++        <translation>故障诊断正在运行,您确定要退出吗?</translation>
++    </message>
++    <message>
++        <location filename="../mainwindow.cpp" line="1827"/>
++        <source>Ok</source>
++        <translation>确定</translation>
++    </message>
++    <message>
++        <location filename="../mainwindow.cpp" line="99"/>
+         <source>Return</source>
+         <translation>返回</translation>
+     </message>
+@@ -609,142 +615,142 @@
+ <context>
+     <name>fault_diagnosis::RepairSpecificErrorWidget</name>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="87"/>
++        <location filename="../repair_specific_error_widget.cpp" line="86"/>
+         <source>Detecting and attempting to fix the issue</source>
+         <translation>正在检测并尝试修复问题</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="96"/>
++        <location filename="../repair_specific_error_widget.cpp" line="95"/>
+         <source>Cancel</source>
+         <translation>取消</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="216"/>
++        <location filename="../repair_specific_error_widget.cpp" line="219"/>
+         <source>Solution suggestions</source>
+         <translation>解决建议</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="237"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="545"/>
++        <location filename="../repair_specific_error_widget.cpp" line="240"/>
++        <location filename="../repair_specific_error_widget.cpp" line="548"/>
+         <source>Report issues</source>
+         <translation>上报问题</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="258"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="389"/>
++        <location filename="../repair_specific_error_widget.cpp" line="261"/>
++        <location filename="../repair_specific_error_widget.cpp" line="392"/>
+         <source>Run</source>
+         <translation>运行</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="260"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="391"/>
++        <location filename="../repair_specific_error_widget.cpp" line="263"/>
++        <location filename="../repair_specific_error_widget.cpp" line="394"/>
+         <source>Running...</source>
+         <translation>运行中...</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="232"/>
++        <location filename="../repair_specific_error_widget.cpp" line="235"/>
+         <source>If the above suggestions still fail to solve the problem, you may need to report the issue to the system maintenance personnel.</source>
+         <translation>若尝试上述建议仍无法解决,您可能需要上报问题至系统运维人员。</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="234"/>
++        <location filename="../repair_specific_error_widget.cpp" line="237"/>
+         <source>To attempt to resolve the issue, you may need to report the issue to the system maintenance personnel.</source>
+         <translation>若要尝试解决该问题,您可能需要上报问题至系统运维人员。</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="256"/>
++        <location filename="../repair_specific_error_widget.cpp" line="259"/>
+         <source>The network is normal but the update cannot be completed, allow the system to run automated scripts to attempt to fix the problem.</source>
+         <translation>网络正常仍无法完成更新,允许系统运行自动化脚本尝试修复问题。</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="288"/>
++        <location filename="../repair_specific_error_widget.cpp" line="291"/>
+         <source>Please check if the the network connection is normal and update again.</source>
+         <translation>请检测网络连接是否正常,然后再次更新。</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="295"/>
++        <location filename="../repair_specific_error_widget.cpp" line="298"/>
+         <source>Network normal</source>
+         <translation>网络正常</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="299"/>
++        <location filename="../repair_specific_error_widget.cpp" line="302"/>
+         <source>Network exception</source>
+         <translation>网络异常</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="322"/>
++        <location filename="../repair_specific_error_widget.cpp" line="325"/>
+         <source>Access</source>
+         <translation>访问</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="324"/>
++        <location filename="../repair_specific_error_widget.cpp" line="327"/>
+         <source>KylinOS official website</source>
+         <translation>KylinOs 官网</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="329"/>
++        <location filename="../repair_specific_error_widget.cpp" line="332"/>
+         <source>view common problems and solutions. For more help, please scan the QR code below: </source>
+         <translation>查看常见问题与解决方案。需要更多帮助请扫码下方二维码: </translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="366"/>
++        <location filename="../repair_specific_error_widget.cpp" line="369"/>
+         <source>The system will run automated scripts to try to solve the problem, which will uninstall some software packages or lower the version of some software packages (</source>
+         <translation>系统将会运行自动化脚本尝试解决该问题,这将会卸载一些软件包或降低一些软件包的版本(</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="369"/>
++        <location filename="../repair_specific_error_widget.cpp" line="372"/>
+         <source>click to view details</source>
+         <translation>点击查看详情</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="371"/>
++        <location filename="../repair_specific_error_widget.cpp" line="374"/>
+         <source>).</source>
+         <translation>)。</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="381"/>
++        <location filename="../repair_specific_error_widget.cpp" line="384"/>
+         <source>Is it running?</source>
+         <translation>是否运行?</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="426"/>
++        <location filename="../repair_specific_error_widget.cpp" line="429"/>
+         <source>Your disk space is insufficient, please click the button on the right to clean it up.</source>
+         <translation>您的磁盘空间不足,请点击右侧的按钮进行清理。</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="428"/>
++        <location filename="../repair_specific_error_widget.cpp" line="431"/>
+         <source>Clear</source>
+         <translation>清理</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="447"/>
++        <location filename="../repair_specific_error_widget.cpp" line="450"/>
+         <source>Return</source>
+         <translation>返回</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="488"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="505"/>
++        <location filename="../repair_specific_error_widget.cpp" line="491"/>
++        <location filename="../repair_specific_error_widget.cpp" line="508"/>
+         <source>Repair successful</source>
+         <translation>修复成功</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="491"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="508"/>
++        <location filename="../repair_specific_error_widget.cpp" line="494"/>
++        <location filename="../repair_specific_error_widget.cpp" line="511"/>
+         <source>Repair failed</source>
+         <translation>修复失败</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="521"/>
++        <location filename="../repair_specific_error_widget.cpp" line="524"/>
+         <source>Reporting...</source>
+         <translation>正在上报...</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="549"/>
++        <location filename="../repair_specific_error_widget.cpp" line="552"/>
+         <source>Successfully reported</source>
+         <translation>上报成功</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="551"/>
++        <location filename="../repair_specific_error_widget.cpp" line="554"/>
+         <source>Report failed</source>
+         <translation>上报失败</translation>
+     </message>
+diff --git a/plugins/fault_diagnosis/translations/fault-diagnosis_zh_HK.ts b/plugins/fault_diagnosis/translations/fault-diagnosis_zh_HK.ts
+index 09b1f23..8a911cf 100644
+--- a/plugins/fault_diagnosis/translations/fault-diagnosis_zh_HK.ts
++++ b/plugins/fault_diagnosis/translations/fault-diagnosis_zh_HK.ts
+@@ -149,12 +149,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="96"/>
+-        <source>Health examination</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../fault_diagnosis.cpp" line="98"/>
++        <location filename="../fault_diagnosis.cpp" line="95"/>
+         <source>FaultDiagnosis</source>
+         <translation>故障診斷</translation>
+     </message>
+@@ -320,22 +315,22 @@
+ <context>
+     <name>fault_diagnosis::FaultDiagnosis</name>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="152"/>
++        <location filename="../fault_diagnosis.cpp" line="148"/>
+         <source>Fault Diagnosis</source>
+         <translation>故障診斷</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="152"/>
++        <location filename="../fault_diagnosis.cpp" line="148"/>
+         <source>Currently running, please try again after finishing.</source>
+         <translation>當前處於運行狀態,請結束後再試。</translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="208"/>
++        <location filename="../fault_diagnosis.cpp" line="204"/>
+         <source>The module is not supported</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../fault_diagnosis.cpp" line="224"/>
++        <location filename="../fault_diagnosis.cpp" line="220"/>
+         <source>The diagnostic type is not supported</source>
+         <translation>檢測類型不支持</translation>
+     </message>
+@@ -353,98 +348,98 @@
+         <translation>快速檢測修複故障問題,爲您的電腦健康保駕護航</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="148"/>
++        <location filename="../home_page_widget.cpp" line="132"/>
+         <source>Network detection</source>
+         <translation>網絡檢測</translation>
+     </message>
+     <message>
+         <location filename="../home_page_widget.cpp" line="91"/>
+-        <location filename="../home_page_widget.cpp" line="280"/>
++        <location filename="../home_page_widget.cpp" line="245"/>
+         <source>One click detection</source>
+         <translation>一鍵檢測</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="149"/>
++        <location filename="../home_page_widget.cpp" line="133"/>
+         <source>Troubleshooting issues with inablilty to access the internet</source>
+         <translation>排查不能上網的問題</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="154"/>
+-        <source>System performance and component detection</source>
+-        <translation>系統性能與元件檢測</translation>
+-    </message>
+-    <message>
+-        <location filename="../home_page_widget.cpp" line="155"/>
+-        <source>Hardware health and system performance issues</source>
+-        <translation>硬體健康與系統性能問題</translation>
+-    </message>
+-    <message>
+-        <location filename="../home_page_widget.cpp" line="160"/>
++        <location filename="../home_page_widget.cpp" line="144"/>
+         <source>Application detection</source>
+         <translation>應用程式檢測</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="161"/>
++        <location filename="../home_page_widget.cpp" line="145"/>
+         <source>Application caching and permission settings</source>
+         <translation>應用快取與許可權設置</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="166"/>
+-        <source>System update detection</source>
++        <location filename="../home_page_widget.cpp" line="138"/>
++        <source>System components and performance detection</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../home_page_widget.cpp" line="139"/>
++        <source>Resolve hardware health and system performance issues</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="167"/>
++        <location filename="../home_page_widget.cpp" line="150"/>
++        <source>Online system update detection</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../home_page_widget.cpp" line="151"/>
+         <source>Resolve issues encountered during updates and upgrades</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="172"/>
++        <location filename="../home_page_widget.cpp" line="156"/>
+         <source>Software store detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="173"/>
++        <location filename="../home_page_widget.cpp" line="157"/>
+         <source>Resolve issues encountered in software stores</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="178"/>
++        <location filename="../home_page_widget.cpp" line="162"/>
+         <source>System disk availability detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="179"/>
++        <location filename="../home_page_widget.cpp" line="163"/>
+         <source>Check the health status of the disk</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="184"/>
++        <location filename="../home_page_widget.cpp" line="168"/>
+         <source>Wired network detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="185"/>
++        <location filename="../home_page_widget.cpp" line="169"/>
+         <source>Troubleshooting the issue of not being able to access the internet</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="190"/>
++        <location filename="../home_page_widget.cpp" line="174"/>
+         <source>Wireless network detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="191"/>
++        <location filename="../home_page_widget.cpp" line="175"/>
+         <source>Troubleshooting wireless network anomalies</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="238"/>
++        <location filename="../home_page_widget.cpp" line="203"/>
+         <source>Internal network detection</source>
+         <translation>內網檢測設置</translation>
+     </message>
+     <message>
+-        <location filename="../home_page_widget.cpp" line="284"/>
++        <location filename="../home_page_widget.cpp" line="249"/>
+         <source>Preparing...</source>
+         <translation>準備中...</translation>
+     </message>
+@@ -452,156 +447,167 @@
+ <context>
+     <name>fault_diagnosis::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="97"/>
++        <location filename="../mainwindow.cpp" line="98"/>
++        <location filename="../mainwindow.cpp" line="1826"/>
+         <source>Cancel</source>
+         <translation>取消</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="284"/>
++        <location filename="../mainwindow.cpp" line="285"/>
+         <source>Detecting...</source>
+         <translation>正在檢測中...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="327"/>
++        <location filename="../mainwindow.cpp" line="328"/>
+         <source>No issues fount</source>
+         <translation>未發現問題</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="316"/>
+-        <location filename="../mainwindow.cpp" line="328"/>
++        <location filename="../mainwindow.cpp" line="317"/>
++        <location filename="../mainwindow.cpp" line="329"/>
+         <source>Rediagnosis</source>
+         <translation>重新檢測</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="237"/>
++        <location filename="../mainwindow.cpp" line="238"/>
+         <source>Update detection</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="240"/>
++        <location filename="../mainwindow.cpp" line="241"/>
+         <source>Application detection</source>
+         <translation type="unfinished">應用程式檢測</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="296"/>
+-        <location filename="../mainwindow.cpp" line="360"/>
++        <location filename="../mainwindow.cpp" line="297"/>
++        <location filename="../mainwindow.cpp" line="361"/>
+         <source>Canceling in progress...</source>
+         <translation>正在取消中...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="308"/>
++        <location filename="../mainwindow.cpp" line="309"/>
+         <source>Detection interruption, no issues found</source>
+         <translation>檢測中斷,未發現問題</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="311"/>
++        <location filename="../mainwindow.cpp" line="312"/>
+         <source>Detected interruption and found %1 issues</source>
+         <translation>檢測中斷,發現 %1 項問題</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="333"/>
++        <location filename="../mainwindow.cpp" line="334"/>
+         <source>Found %1 issues</source>
+         <translation>發現 %1 項問題</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="335"/>
++        <location filename="../mainwindow.cpp" line="336"/>
+         <source>One click repair</source>
+         <translation>一鍵修複</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="349"/>
++        <location filename="../mainwindow.cpp" line="350"/>
+         <source>Repairing...</source>
+         <translation>正在修複中...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="372"/>
+-        <location filename="../mainwindow.cpp" line="394"/>
+-        <location filename="../mainwindow.cpp" line="799"/>
+-        <location filename="../mainwindow.cpp" line="1488"/>
++        <location filename="../mainwindow.cpp" line="373"/>
++        <location filename="../mainwindow.cpp" line="395"/>
++        <location filename="../mainwindow.cpp" line="805"/>
++        <location filename="../mainwindow.cpp" line="1499"/>
+         <source>Repair failed</source>
+         <translation>修複失敗</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="373"/>
++        <location filename="../mainwindow.cpp" line="374"/>
+         <source>Repair</source>
+         <translation>重新修複</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="377"/>
+-        <location filename="../mainwindow.cpp" line="397"/>
+-        <location filename="../mainwindow.cpp" line="795"/>
+-        <location filename="../mainwindow.cpp" line="1483"/>
++        <location filename="../mainwindow.cpp" line="378"/>
++        <location filename="../mainwindow.cpp" line="398"/>
++        <location filename="../mainwindow.cpp" line="801"/>
++        <location filename="../mainwindow.cpp" line="1494"/>
+         <source>Repair successful</source>
+         <translation>修複成功</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="424"/>
++        <location filename="../mainwindow.cpp" line="425"/>
+         <source>%1 items have been tested, no issues found</source>
+         <translation>已檢測 %1 項,未發現問題</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="426"/>
++        <location filename="../mainwindow.cpp" line="427"/>
+         <source>%1 items have been tested and %2 issues have been found</source>
+         <translation>已檢測 %1 項,發現 %2 項問題</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="433"/>
++        <location filename="../mainwindow.cpp" line="434"/>
+         <source>I suggest you conduct a complete inspection again</source>
+         <translation>建議您重新進行完整檢測</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="435"/>
++        <location filename="../mainwindow.cpp" line="436"/>
+         <source>Please repair and retest</source>
+         <translation>請修複後重新檢測</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="440"/>
++        <location filename="../mainwindow.cpp" line="441"/>
+         <source>Please continue to maintain and regularly undergo physical examinations</source>
+         <translation>請繼續保持並定時體檢</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="442"/>
++        <location filename="../mainwindow.cpp" line="443"/>
+         <source>The scan has been completed. if there are any issues, please handle them as soon as possible</source>
+         <translation>掃描已完成,有問題請儘快處理</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="446"/>
++        <location filename="../mainwindow.cpp" line="447"/>
+         <source>Please wait for the repair to complete</source>
+         <translation>請等待修複完成</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="454"/>
++        <location filename="../mainwindow.cpp" line="455"/>
+         <source>There is still %1 issue that has not been successfully fixed. it is recommended to manually fix it</source>
+         <translation>還有 %1 項問題未修複成功,建議手動修複</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="456"/>
++        <location filename="../mainwindow.cpp" line="457"/>
+         <source>Regular physical examinations can effectively improve the user experience</source>
+         <translation>經常體檢,能有效提升使用體驗</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="962"/>
+-        <location filename="../mainwindow.cpp" line="981"/>
++        <location filename="../mainwindow.cpp" line="968"/>
++        <location filename="../mainwindow.cpp" line="987"/>
+         <source>Backend detection exception</source>
+         <translation>後端檢測異常</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1237"/>
++        <location filename="../mainwindow.cpp" line="1243"/>
+         <source>Please select the item that needs to be repaired.</source>
+         <translation>請選擇需要修複的項</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1477"/>
++        <location filename="../mainwindow.cpp" line="1488"/>
+         <source>The issue has been successfully fixed, please try updating again</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="1480"/>
++        <location filename="../mainwindow.cpp" line="1491"/>
+         <source>The issue has been successfully fixed, please reinstall the software package again</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="98"/>
++        <location filename="../mainwindow.cpp" line="1825"/>
++        <source>Fault diagnosis is running, are you sure you want to exit?</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../mainwindow.cpp" line="1827"/>
++        <source>Ok</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../mainwindow.cpp" line="99"/>
+         <source>Return</source>
+         <translation>返回</translation>
+     </message>
+@@ -609,142 +615,142 @@
+ <context>
+     <name>fault_diagnosis::RepairSpecificErrorWidget</name>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="87"/>
++        <location filename="../repair_specific_error_widget.cpp" line="86"/>
+         <source>Detecting and attempting to fix the issue</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="96"/>
++        <location filename="../repair_specific_error_widget.cpp" line="95"/>
+         <source>Cancel</source>
+         <translation type="unfinished">取消</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="216"/>
++        <location filename="../repair_specific_error_widget.cpp" line="219"/>
+         <source>Solution suggestions</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="237"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="545"/>
++        <location filename="../repair_specific_error_widget.cpp" line="240"/>
++        <location filename="../repair_specific_error_widget.cpp" line="548"/>
+         <source>Report issues</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="258"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="389"/>
++        <location filename="../repair_specific_error_widget.cpp" line="261"/>
++        <location filename="../repair_specific_error_widget.cpp" line="392"/>
+         <source>Run</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="260"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="391"/>
++        <location filename="../repair_specific_error_widget.cpp" line="263"/>
++        <location filename="../repair_specific_error_widget.cpp" line="394"/>
+         <source>Running...</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="232"/>
++        <location filename="../repair_specific_error_widget.cpp" line="235"/>
+         <source>If the above suggestions still fail to solve the problem, you may need to report the issue to the system maintenance personnel.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="234"/>
++        <location filename="../repair_specific_error_widget.cpp" line="237"/>
+         <source>To attempt to resolve the issue, you may need to report the issue to the system maintenance personnel.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="256"/>
++        <location filename="../repair_specific_error_widget.cpp" line="259"/>
+         <source>The network is normal but the update cannot be completed, allow the system to run automated scripts to attempt to fix the problem.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="288"/>
++        <location filename="../repair_specific_error_widget.cpp" line="291"/>
+         <source>Please check if the the network connection is normal and update again.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="295"/>
++        <location filename="../repair_specific_error_widget.cpp" line="298"/>
+         <source>Network normal</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="299"/>
++        <location filename="../repair_specific_error_widget.cpp" line="302"/>
+         <source>Network exception</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="322"/>
++        <location filename="../repair_specific_error_widget.cpp" line="325"/>
+         <source>Access</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="324"/>
++        <location filename="../repair_specific_error_widget.cpp" line="327"/>
+         <source>KylinOS official website</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="329"/>
++        <location filename="../repair_specific_error_widget.cpp" line="332"/>
+         <source>view common problems and solutions. For more help, please scan the QR code below: </source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="366"/>
++        <location filename="../repair_specific_error_widget.cpp" line="369"/>
+         <source>The system will run automated scripts to try to solve the problem, which will uninstall some software packages or lower the version of some software packages (</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="369"/>
++        <location filename="../repair_specific_error_widget.cpp" line="372"/>
+         <source>click to view details</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="371"/>
++        <location filename="../repair_specific_error_widget.cpp" line="374"/>
+         <source>).</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="381"/>
++        <location filename="../repair_specific_error_widget.cpp" line="384"/>
+         <source>Is it running?</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="426"/>
++        <location filename="../repair_specific_error_widget.cpp" line="429"/>
+         <source>Your disk space is insufficient, please click the button on the right to clean it up.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="428"/>
++        <location filename="../repair_specific_error_widget.cpp" line="431"/>
+         <source>Clear</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="447"/>
++        <location filename="../repair_specific_error_widget.cpp" line="450"/>
+         <source>Return</source>
+         <translation type="unfinished">返回</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="488"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="505"/>
++        <location filename="../repair_specific_error_widget.cpp" line="491"/>
++        <location filename="../repair_specific_error_widget.cpp" line="508"/>
+         <source>Repair successful</source>
+         <translation type="unfinished">修複成功</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="491"/>
+-        <location filename="../repair_specific_error_widget.cpp" line="508"/>
++        <location filename="../repair_specific_error_widget.cpp" line="494"/>
++        <location filename="../repair_specific_error_widget.cpp" line="511"/>
+         <source>Repair failed</source>
+         <translation type="unfinished">修複失敗</translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="521"/>
++        <location filename="../repair_specific_error_widget.cpp" line="524"/>
+         <source>Reporting...</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="549"/>
++        <location filename="../repair_specific_error_widget.cpp" line="552"/>
+         <source>Successfully reported</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../repair_specific_error_widget.cpp" line="551"/>
++        <location filename="../repair_specific_error_widget.cpp" line="554"/>
+         <source>Report failed</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/junk_clean/CMakeLists.txt b/plugins/junk_clean/CMakeLists.txt
+index 1ed7717..bddd262 100644
+--- a/plugins/junk_clean/CMakeLists.txt
++++ b/plugins/junk_clean/CMakeLists.txt
+@@ -95,5 +95,5 @@ else ()
+     target_link_libraries(${PROJECT_NAME} PRIVATE compatibility)
+ endif ()
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /opt/kylin-os-manager/plugins/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/plugins/)
+ install(FILES ${QM_FILES} DESTINATION /usr/share/kylin-os-manager/junk-clean/translations/)
+diff --git a/plugins/junk_clean/clean_up_entry_widget.cpp b/plugins/junk_clean/clean_up_entry_widget.cpp
+index 93a37a4..3e3b7fa 100644
+--- a/plugins/junk_clean/clean_up_entry_widget.cpp
++++ b/plugins/junk_clean/clean_up_entry_widget.cpp
+@@ -25,10 +25,10 @@ CleanUpEntryWidget::CleanUpEntryWidget(const QString &mark, enum Type type, enum
+ {
+     setFixedSize(824, 36);
+ 
+-    select_checkbox_->setFixedSize(16, 16);
++    select_checkbox_->setFixedSize(18, 18);
+     select_checkbox_->hide();
+     connect(select_checkbox_, &QCheckBox::stateChanged, this, &CleanUpEntryWidget::sig_CheckBoxStateChanged);
+-    select_checkbox_seat_label_->setFixedSize(16, 16);
++    select_checkbox_seat_label_->setFixedSize(18, 18);
+     select_checkbox_seat_vbox_layout_->setContentsMargins(0, 0, 0, 0);
+     select_checkbox_seat_vbox_layout_->setSpacing(0);
+     expand_or_close_btn_->setFixedSize(16, 16);
+@@ -85,7 +85,7 @@ void CleanUpEntryWidget::SetSize(quint64 size) {
+                 state_label_->SetFontColor(Qt::red);
+                 state_label_->SetText(tr("%1 in total, clean carefully").arg(K::Utils::ByteToString(size)));
+             } else {
+-                state_label_->SetFontColor(qApp->palette().color(QPalette::ColorRole::Text));
++                state_label_->SetFontColor(K::TextLabel::FontColor::kText);
+                 state_label_->SetText(K::Utils::ByteToString(size));
+             }
+             break;
+@@ -94,7 +94,7 @@ void CleanUpEntryWidget::SetSize(quint64 size) {
+                 state_label_->SetFontColor(Qt::red);
+                 state_label_->SetText(tr("%1 entries in total, carefully clean up").arg(size));
+             } else {
+-                state_label_->SetFontColor(qApp->palette().color(QPalette::ColorRole::Text));
++                state_label_->SetFontColor(K::TextLabel::FontColor::kText);
+                 state_label_->SetText(tr("%1 entries").arg(size));
+             }
+             break;
+@@ -107,7 +107,7 @@ void CleanUpEntryWidget::SetSize(enum SpecialSize special_size) {
+     size_ = 0;
+     switch (special_size) {
+         case SpecialSize::kScanning:
+-            state_label_->SetFontColor(qApp->palette().color(QPalette::ColorRole::Text));
++            state_label_->SetFontColor(K::TextLabel::FontColor::kText);
+             state_label_->SetText(tr("Scanning..."));
+             break;
+         case SpecialSize::kVeryClean:
+diff --git a/plugins/junk_clean/junk_entry_widget.cpp b/plugins/junk_clean/junk_entry_widget.cpp
+index 23c6898..6f01d65 100644
+--- a/plugins/junk_clean/junk_entry_widget.cpp
++++ b/plugins/junk_clean/junk_entry_widget.cpp
+@@ -21,7 +21,7 @@ JunkEntryWidget::JunkEntryWidget(quint64 mark, enum Type type, const QString &cl
+ {
+     setFixedSize(824, 36);
+ 
+-    select_checkbox_->setFixedSize(16, 16);
++    select_checkbox_->setFixedSize(18, 18);
+     connect(select_checkbox_, &QCheckBox::stateChanged, this, &JunkEntryWidget::sig_CheckBoxStateChanged);
+     path_label_->setMaximumWidth(540);
+     if (type == Type::kUsageTraces) {
+diff --git a/plugins/junk_clean/mainwindow.cpp b/plugins/junk_clean/mainwindow.cpp
+index 104d21a..b006c0f 100644
+--- a/plugins/junk_clean/mainwindow.cpp
++++ b/plugins/junk_clean/mainwindow.cpp
+@@ -1,4 +1,7 @@
+ #include "mainwindow.h"
++#include <QVariant>
++#include <QDBusConnection>
++#include <QDBusMessage>
+ #include <time.h>
+ #include <cmath>
+ #include <QDate>
+@@ -12,6 +15,7 @@
+ #include <QJsonObject>
+ 
+ #include "kom_buriedpoint.h"
++#include "defines.h"
+ #include "utils.h"
+ #include "clean_up_group_widget.h"
+ #include "clean_up_entry_widget.h"
+@@ -807,7 +811,12 @@ void MainWindow::NextClean() {
+         SwitchToCleanFinished();
+ 
+         // 更新 /etc/kylin-os-manager/size_exception_files.conf 文件
+-        UpdateSizeExecptionFilesConf();
++        auto message = QDBusMessage::createMethodCall(JUNK_CLEAN_DBUS_NAME, JUNK_CLEAN_DBUS_PATH, JUNK_CLEAN_DBUS_INTERFACE, "RecordCleanedFiles");
++        message.setArguments({QVariant(cleaned_junk_)});
++        auto reply = QDBusConnection::systemBus().call(message);
++        if (reply.type() == QDBusMessage::MessageType::ErrorMessage) {
++            qWarning() << "Record cleaned files modify size exception files conf file fail";
++        }
+ 
+         // 埋点
+         QMap<QString, QString> custom_property = {
+@@ -977,71 +986,4 @@ void MainWindow::AlwaySelectLog(bool ok) {
+     alway_select_log_ = ok;
+ }
+ 
+-void MainWindow::UpdateSizeExecptionFilesConf() const {
+-    // 读取配置文件
+-    QFile file("/etc/kylin-os-manager/size_exception_files.conf");
+-    if (!file.open(QIODevice::ReadOnly)) {
+-        qCritical() << "Junk clean update size exception files conf open file fail";
+-        return;
+-    }
+-    const auto data = file.readAll();
+-    file.close();
+-
+-    // 反序列化
+-    const auto doc = QJsonDocument::fromJson(data);
+-    if (doc.isNull()) {
+-        qCritical() << "Junk clean unmarshal size exception files conf fail";
+-        return;
+-    }
+-    if (!doc.isObject()) {
+-        qCritical() << "Junk clean size exception files conf format error";
+-        return;
+-    }
+-
+-    auto root = doc.object();
+-    if (!root.contains("date") ||
+-        !root.contains("exception_files"))
+-    {
+-        qCritical() << "Junk clean size exception files conf field miss";
+-        return;
+-    }
+-
+-    // 判断配置文件中记录的是否为当日的数据
+-    const auto date = QDate::fromString(root.value("date").toString(), "yyyy-MM-dd");
+-    const auto current_date = QDate::currentDate();
+-    if (date != current_date) {
+-        return;
+-    }
+-
+-    if (!root.value("exception_files").isObject()) {
+-        qCritical() << "Junk clean size exception files conf execption_files field format error";
+-        return;
+-    }
+-
+-    // 更新数据
+-    auto exception_files_obj = root.value("exception_files").toObject();
+-    for (const auto &junk: cleaned_junk_) {
+-        if (exception_files_obj.contains(junk)) {
+-            exception_files_obj[junk] = true;
+-        }
+-    }
+-
+-    // 写入文件
+-    root["exception_files"] = exception_files_obj;
+-    QJsonDocument modify_doc;
+-    modify_doc.setObject(root);
+-    const auto modify_data = modify_doc.toJson();
+-
+-    QFile modify_file("/etc/kylin-os-manager/size_exception_files.conf");
+-    if (!modify_file.open(QIODevice::WriteOnly)) {
+-        qCritical() << "Junk clean write size exception files conf open fail";
+-        return;
+-    }
+-    const auto size = modify_file.write(modify_data);
+-    if (size != modify_data.size()) {
+-        qCritical() << "Junk clean write size exception files conf incomplete";
+-    }
+-    modify_file.close();
+-}
+-
+ }
+diff --git a/plugins/junk_clean/mainwindow.h b/plugins/junk_clean/mainwindow.h
+index 666a31b..d470179 100644
+--- a/plugins/junk_clean/mainwindow.h
++++ b/plugins/junk_clean/mainwindow.h
+@@ -71,7 +71,6 @@ private:
+     void NextScan();
+     void NextClean();
+     void GetKernelEnv();
+-    void UpdateSizeExecptionFilesConf() const;
+     std::pair<QTreeWidgetItem *, CleanUpEntryWidget *> CleanUpEntryWithMark(const QString &mark) const;
+     std::pair<QTreeWidgetItem *, CleanUpGroupWidget *> CleanUpGroupWithType(enum Type type) const;
+     std::pair<QTreeWidgetItem *, CleanUpGroupWidget *> CleanUpGroupWithMark(const QString &mark) const;
+diff --git a/plugins/junk_clean/translations/junk-clean_bo_CN.ts b/plugins/junk_clean/translations/junk-clean_bo_CN.ts
+index bb33e17..fc181ba 100644
+--- a/plugins/junk_clean/translations/junk-clean_bo_CN.ts
++++ b/plugins/junk_clean/translations/junk-clean_bo_CN.ts
+@@ -245,78 +245,78 @@
+ <context>
+     <name>junk_clean::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="62"/>
++        <location filename="../mainwindow.cpp" line="66"/>
+         <source>Return</source>
+         <translation>ཕྱིར་ལོག་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="64"/>
++        <location filename="../mainwindow.cpp" line="68"/>
+         <source>Clean</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="200"/>
++        <location filename="../mainwindow.cpp" line="204"/>
+         <source>Scanning in progress...</source>
+         <translation>འདྲ་བཤུ་བྱེད་བཞིན་པའི་སྒང་རེད།...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="204"/>
++        <location filename="../mainwindow.cpp" line="208"/>
+         <source>Cancel scan</source>
+         <translation>ཕྱགས་མ་ཕྱིར་འཐེན་བྱ་དགོས།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="210"/>
+-        <location filename="../mainwindow.cpp" line="218"/>
++        <location filename="../mainwindow.cpp" line="214"/>
++        <location filename="../mainwindow.cpp" line="222"/>
+         <source>Canceling in progress</source>
+         <translation>ད་ལྟ་མེད་པར་བཟོ་བཞིན་ཡོད།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="248"/>
++        <location filename="../mainwindow.cpp" line="252"/>
+         <source>No cleanable files found</source>
+         <translation>གཙང་བཤེར་བྱས་ཆོག་པའི་ཡིག་ཆ་མ་རྙེད་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="250"/>
++        <location filename="../mainwindow.cpp" line="254"/>
+         <source>Found %1 of cleanable files in total</source>
+         <translation>ཁྱོན་བསྡོམས་ཡིག་ཆ་གཙང་བཤེར་ཐུབ་པའི་ཡིག་ཆ་%1ཐོབ་ཡོད།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="252"/>
++        <location filename="../mainwindow.cpp" line="256"/>
+         <source>Selected %1 of garbage and %2 usage traces</source>
+         <translation>གད་སྙིགས་ཀྱི་བརྒྱ་ཆ་%1བདམས་ནས་རྗེས་ཤུལ་གྱི་%2བེད་སྤྱོད་བྱས་ཡོད།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="273"/>
++        <location filename="../mainwindow.cpp" line="277"/>
+         <source>%1 garbage cleaning in progress...</source>
+         <translation>%1.གད་སྙིགས་གཙང་བཤེར་བྱེད་པའི་ཁྲོད།...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="275"/>
++        <location filename="../mainwindow.cpp" line="279"/>
+         <source>Cleaning up %1 traces...</source>
+         <translation>%1བེད་སྤྱོད་བྱས་པའི་རྗེས་ཤུལ་གཙང་བཤེར་བྱེད་བཞིན་ཡོད།...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="283"/>
++        <location filename="../mainwindow.cpp" line="287"/>
+         <source>Canecl cleanup</source>
+         <translation>གཙང་བཤེར་མི་བྱེད་པ་བཅས་བྱ་དགོས།</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="332"/>
++        <location filename="../mainwindow.cpp" line="336"/>
+         <source>Scanning for garbage...</source>
+         <translation>གད་སྙིགས་ཕྱགས་བཞིན་ཡོད།...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="371"/>
++        <location filename="../mainwindow.cpp" line="375"/>
+         <source>Scanning: %1</source>
+         <translation>བཤར་ཕབ་བྱེད་བཞིན་པའི་སྒང་རེད། %1</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="784"/>
++        <location filename="../mainwindow.cpp" line="788"/>
+         <source>Cleaning up garbage...</source>
+         <translation>གད་སྙིགས་གཙང་བཤེར་བྱེད་བཞིན་ཡོད།...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="838"/>
++        <location filename="../mainwindow.cpp" line="847"/>
+         <source>Cleaning up: %1</source>
+         <translation>བརྒྱ་ཆ་%1ལ་གཙང་བཤེར་བྱེད་བཞིན་ཡོད།</translation>
+     </message>
+diff --git a/plugins/junk_clean/translations/junk-clean_kk.ts b/plugins/junk_clean/translations/junk-clean_kk.ts
+index 1c52130..841e17b 100644
+--- a/plugins/junk_clean/translations/junk-clean_kk.ts
++++ b/plugins/junk_clean/translations/junk-clean_kk.ts
+@@ -245,78 +245,78 @@
+ <context>
+     <name>junk_clean::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="62"/>
++        <location filename="../mainwindow.cpp" line="66"/>
+         <source>Return</source>
+         <translation>قايتپ كەلدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="64"/>
++        <location filename="../mainwindow.cpp" line="68"/>
+         <source>Clean</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="200"/>
++        <location filename="../mainwindow.cpp" line="204"/>
+         <source>Scanning in progress...</source>
+         <translation>تەسۋىرلەۋاتقان...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="204"/>
++        <location filename="../mainwindow.cpp" line="208"/>
+         <source>Cancel scan</source>
+         <translation>Scan نى بوس ەتۋ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="210"/>
+-        <location filename="../mainwindow.cpp" line="218"/>
++        <location filename="../mainwindow.cpp" line="214"/>
++        <location filename="../mainwindow.cpp" line="222"/>
+         <source>Canceling in progress</source>
+         <translation>قازىر كۇشىنەن قالدىرىلىپ جاتىر</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="248"/>
++        <location filename="../mainwindow.cpp" line="252"/>
+         <source>No cleanable files found</source>
+         <translation>تازالاعالى بولاتٸن حۇجات بايقالمادٸ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="250"/>
++        <location filename="../mainwindow.cpp" line="254"/>
+         <source>Found %1 of cleanable files in total</source>
+         <translation>تازالاعالى بولاتٸن حۇجات %1 بايقالدٸ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="252"/>
++        <location filename="../mainwindow.cpp" line="256"/>
+         <source>Selected %1 of garbage and %2 usage traces</source>
+         <translation>الدەقاشان قوقسىق %1 نى تالدادٸ،ەكٸ تال ٴىز%2نى ئىشلەتتۇق</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="273"/>
++        <location filename="../mainwindow.cpp" line="277"/>
+         <source>%1 garbage cleaning in progress...</source>
+         <translation>%1 قوقسىق تازالاۋ بارىسىندا...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="275"/>
++        <location filename="../mainwindow.cpp" line="279"/>
+         <source>Cleaning up %1 traces...</source>
+         <translation>قازىر تازىلاۋاتقان %1 تال ٸستەتكەن ٸزىن...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="283"/>
++        <location filename="../mainwindow.cpp" line="287"/>
+         <source>Canecl cleanup</source>
+         <translation>تازالاۋدى كۇشىنەن قالدىرۋ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="332"/>
++        <location filename="../mainwindow.cpp" line="336"/>
+         <source>Scanning for garbage...</source>
+         <translation>سىكاننېرلاۋاتقان قوقسىق...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="371"/>
++        <location filename="../mainwindow.cpp" line="375"/>
+         <source>Scanning: %1</source>
+         <translation>كەسكىندەۋ %1</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="784"/>
++        <location filename="../mainwindow.cpp" line="788"/>
+         <source>Cleaning up garbage...</source>
+         <translation>قوقسىق تازالاپ جاتىز...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="838"/>
++        <location filename="../mainwindow.cpp" line="847"/>
+         <source>Cleaning up: %1</source>
+         <translation>قازىر تازالاپ جاتىز: %1</translation>
+     </message>
+diff --git a/plugins/junk_clean/translations/junk-clean_ky.ts b/plugins/junk_clean/translations/junk-clean_ky.ts
+index 1cb5528..3e62c61 100644
+--- a/plugins/junk_clean/translations/junk-clean_ky.ts
++++ b/plugins/junk_clean/translations/junk-clean_ky.ts
+@@ -245,78 +245,78 @@
+ <context>
+     <name>junk_clean::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="62"/>
++        <location filename="../mainwindow.cpp" line="66"/>
+         <source>Return</source>
+         <translation>قايتۇۇ كەلدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="64"/>
++        <location filename="../mainwindow.cpp" line="68"/>
+         <source>Clean</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="200"/>
++        <location filename="../mainwindow.cpp" line="204"/>
+         <source>Scanning in progress...</source>
+         <translation>تەسۋىرلەۋاتقان...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="204"/>
++        <location filename="../mainwindow.cpp" line="208"/>
+         <source>Cancel scan</source>
+         <translation>Scan نى بەكەر  جاسوو ،اتقارۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="210"/>
+-        <location filename="../mainwindow.cpp" line="218"/>
++        <location filename="../mainwindow.cpp" line="214"/>
++        <location filename="../mainwindow.cpp" line="222"/>
+         <source>Canceling in progress</source>
+         <translation>ازىر ارعادان  قالدىرىپ جاتات</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="248"/>
++        <location filename="../mainwindow.cpp" line="252"/>
+         <source>No cleanable files found</source>
+         <translation>تازالاعالى بولوتۇرعان ۅجۅت بايقالبادى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="250"/>
++        <location filename="../mainwindow.cpp" line="254"/>
+         <source>Found %1 of cleanable files in total</source>
+         <translation>تازالاعالى بولوتۇرعان ۅجۅت %1 بايقالدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="252"/>
++        <location filename="../mainwindow.cpp" line="256"/>
+         <source>Selected %1 of garbage and %2 usage traces</source>
+         <translation>تەە مۇردا  شىپىرىندى  %1 نى تاندادى،ەكى  تال ئىز %2نى ئىشلەتتۇق</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="273"/>
++        <location filename="../mainwindow.cpp" line="277"/>
+         <source>%1 garbage cleaning in progress...</source>
+         <translation>%1 شىپىرىندى  تازالوو بارىشندا...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="275"/>
++        <location filename="../mainwindow.cpp" line="279"/>
+         <source>Cleaning up %1 traces...</source>
+         <translation>ازىر تازىلاۋاتقان %1 تال ىشتەتىلگەن ئىزنى...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="283"/>
++        <location filename="../mainwindow.cpp" line="287"/>
+         <source>Canecl cleanup</source>
+         <translation>تازالوونۇ ارعادان  قالتىرىش</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="332"/>
++        <location filename="../mainwindow.cpp" line="336"/>
+         <source>Scanning for garbage...</source>
+         <translation>سىكاننېرلاۋاتقان شىپىرىندى ...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="371"/>
++        <location filename="../mainwindow.cpp" line="375"/>
+         <source>Scanning: %1</source>
+         <translation>ىسكاننىردوو %1</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="784"/>
++        <location filename="../mainwindow.cpp" line="788"/>
+         <source>Cleaning up garbage...</source>
+         <translation>شىپىرىندى  تازالاپ جاتات...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="838"/>
++        <location filename="../mainwindow.cpp" line="847"/>
+         <source>Cleaning up: %1</source>
+         <translation>ازىر تازالاپ جاتات: %1</translation>
+     </message>
+diff --git a/plugins/junk_clean/translations/junk-clean_mn.ts b/plugins/junk_clean/translations/junk-clean_mn.ts
+index ce9e4d7..f668198 100644
+--- a/plugins/junk_clean/translations/junk-clean_mn.ts
++++ b/plugins/junk_clean/translations/junk-clean_mn.ts
+@@ -245,78 +245,78 @@
+ <context>
+     <name>junk_clean::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="62"/>
++        <location filename="../mainwindow.cpp" line="66"/>
+         <source>Return</source>
+         <translation>ᠪᠤᠴᠠᠵᠤ ᠢᠷᠡᠨ᠎ᠡ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="64"/>
++        <location filename="../mainwindow.cpp" line="68"/>
+         <source>Clean</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="200"/>
++        <location filename="../mainwindow.cpp" line="204"/>
+         <source>Scanning in progress...</source>
+         <translation>ᠶᠠᠭ ᠰᠢᠷᠦᠭᠦᠨ ᠁...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="204"/>
++        <location filename="../mainwindow.cpp" line="208"/>
+         <source>Cancel scan</source>
+         <translation>ᠰᠢᠷᠦᠭᠦᠨ ᠰᠢᠷᠦᠭᠦᠨ ᠲᠠᠲᠠᠬᠤ ᠶᠢ ᠬᠦᠴᠦᠨ ᠦᠭᠡᠢ ᠪᠣᠯᠭᠠᠨ᠎ᠠ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="210"/>
+-        <location filename="../mainwindow.cpp" line="218"/>
++        <location filename="../mainwindow.cpp" line="214"/>
++        <location filename="../mainwindow.cpp" line="222"/>
+         <source>Canceling in progress</source>
+         <translation>ᠶᠠᠭ ᠬᠦᠴᠦᠨ ᠦᠭᠡᠢ ᠪᠣᠯᠵᠤ ᠪᠠᠢ᠌ᠨ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="248"/>
++        <location filename="../mainwindow.cpp" line="252"/>
+         <source>No cleanable files found</source>
+         <translation>ᠢᠯᠭᠠᠷᠠᠭᠤᠯᠵᠤ ᠪᠣᠯᠬᠤ ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠢ ᠣᠯᠵᠤ ᠮᠡᠳᠡᠭᠰᠡᠨ ᠦᠭᠡᠶ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="250"/>
++        <location filename="../mainwindow.cpp" line="254"/>
+         <source>Found %1 of cleanable files in total</source>
+         <translation>ᠢᠯᠭᠠᠷᠠᠭᠤᠯᠵᠤ ᠪᠣᠯᠬᠤ ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠢ ᠨᠡᠶᠢᠲᠡ %1 ᠶᠢ ᠣᠯᠵᠤ ᠮᠡᠳᠡᠪᠡ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="252"/>
++        <location filename="../mainwindow.cpp" line="256"/>
+         <source>Selected %1 of garbage and %2 usage traces</source>
+         <translation>ᠬᠣᠭ ᠨᠣᠪᠰᠢ ᠶᠢ ᠨᠢᠭᠡᠨᠲᠡ ᠰᠣᠩᠭᠣᠵᠤ %1᠂ ᠣᠷᠣ ᠮᠥᠷ ᠢ %2 ᠵᠤᠷᠪᠤᠰ ᠬᠡᠷᠡᠭᠯᠡᠵᠡᠶ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="273"/>
++        <location filename="../mainwindow.cpp" line="277"/>
+         <source>%1 garbage cleaning in progress...</source>
+         <translation>%1 ᠬᠤᠭ ᠨᠣᠪᠰᠢ ᠶᠢ ᠴᠡᠪᠡᠷᠯᠡᠬᠦ ᠳᠤᠮᠳᠠ ᠁...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="275"/>
++        <location filename="../mainwindow.cpp" line="279"/>
+         <source>Cleaning up %1 traces...</source>
+         <translation>ᠶᠠᠭ %1 ᠵᠤᠷᠪᠤᠰ ᠬᠡᠷᠡᠭᠯᠡᠬᠦ ᠮᠥᠷ ᠢ ᠴᠡᠪᠡᠷᠯᠡᠵᠦ ᠁...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="283"/>
++        <location filename="../mainwindow.cpp" line="287"/>
+         <source>Canecl cleanup</source>
+         <translation>ᠢᠯᠭᠠᠷᠠᠭᠤᠯᠬᠤ ᠶᠢ ᠦᠭᠡᠶᠢᠰᠬᠡᠨ᠎ᠡ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="332"/>
++        <location filename="../mainwindow.cpp" line="336"/>
+         <source>Scanning for garbage...</source>
+         <translation>ᠶᠠᠭ ᠬᠤᠭ ᠨᠣᠪᠰᠢ ᠰᠢᠷᠦᠭᠦᠷᠳᠡᠵᠦ ᠪᠠᠶᠢᠨ᠎ᠠ ᠁...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="371"/>
++        <location filename="../mainwindow.cpp" line="375"/>
+         <source>Scanning: %1</source>
+         <translation>ᠶᠠᠭ ᠰᠢᠷᠦᠭᠦᠷᠯᠡᠵᠦ ᠪᠠᠶᠢᠨ᠎ᠠ ᠄ %1 ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="784"/>
++        <location filename="../mainwindow.cpp" line="788"/>
+         <source>Cleaning up garbage...</source>
+         <translation>ᠶᠠᠭ ᠬᠤᠭ ᠨᠣᠪᠰᠢ ᠶᠢ ᠴᠡᠪᠡᠷᠯᠡᠵᠦ ᠁...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="838"/>
++        <location filename="../mainwindow.cpp" line="847"/>
+         <source>Cleaning up: %1</source>
+         <translation>ᠶᠠᠭ ᠢᠯᠭᠠᠷᠠᠭᠤᠯᠵᠤ ᠪᠠᠶᠢᠨ᠎ᠠ᠄ %1᠃</translation>
+     </message>
+diff --git a/plugins/junk_clean/translations/junk-clean_ug.ts b/plugins/junk_clean/translations/junk-clean_ug.ts
+index 0164de3..54a2a45 100644
+--- a/plugins/junk_clean/translations/junk-clean_ug.ts
++++ b/plugins/junk_clean/translations/junk-clean_ug.ts
+@@ -245,78 +245,78 @@
+ <context>
+     <name>junk_clean::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="62"/>
++        <location filename="../mainwindow.cpp" line="66"/>
+         <source>Return</source>
+         <translation>قايتىپ كەلدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="64"/>
++        <location filename="../mainwindow.cpp" line="68"/>
+         <source>Clean</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="200"/>
++        <location filename="../mainwindow.cpp" line="204"/>
+         <source>Scanning in progress...</source>
+         <translation>تەسۋىرلەۋاتقان...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="204"/>
++        <location filename="../mainwindow.cpp" line="208"/>
+         <source>Cancel scan</source>
+         <translation>Scan نى بىكار قىلىش</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="210"/>
+-        <location filename="../mainwindow.cpp" line="218"/>
++        <location filename="../mainwindow.cpp" line="214"/>
++        <location filename="../mainwindow.cpp" line="222"/>
+         <source>Canceling in progress</source>
+         <translation>ھازىر ئەمەلدىن قالدۇرۇۋاتىدۇ</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="248"/>
++        <location filename="../mainwindow.cpp" line="252"/>
+         <source>No cleanable files found</source>
+         <translation>تازىلىغىلى بولىدىغان ھۆججەت بايقالمىدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="250"/>
++        <location filename="../mainwindow.cpp" line="254"/>
+         <source>Found %1 of cleanable files in total</source>
+         <translation>تازىلىغىلى بولىدىغان ھۆججەت %1 بايقالدى</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="252"/>
++        <location filename="../mainwindow.cpp" line="256"/>
+         <source>Selected %1 of garbage and %2 usage traces</source>
+         <translation>ئاللىقاچان ئەخلەت %1 نى تاللىدى،ئىككى تال ئىز%2نى ئىشلەتتۇق</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="273"/>
++        <location filename="../mainwindow.cpp" line="277"/>
+         <source>%1 garbage cleaning in progress...</source>
+         <translation>%1 ئەخلەت تازىلاش جەريانىدا...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="275"/>
++        <location filename="../mainwindow.cpp" line="279"/>
+         <source>Cleaning up %1 traces...</source>
+         <translation>ھازىر تازىلاۋاتقان %1 تال ئىشلىتىلگەن ئىزنى...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="283"/>
++        <location filename="../mainwindow.cpp" line="287"/>
+         <source>Canecl cleanup</source>
+         <translation>تازىلاشنى ئەمەلدىن قالدۇرۇش</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="332"/>
++        <location filename="../mainwindow.cpp" line="336"/>
+         <source>Scanning for garbage...</source>
+         <translation>سىكاننېرلاۋاتقان ئەخلەت...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="371"/>
++        <location filename="../mainwindow.cpp" line="375"/>
+         <source>Scanning: %1</source>
+         <translation>سىكاننېرلاش %1</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="784"/>
++        <location filename="../mainwindow.cpp" line="788"/>
+         <source>Cleaning up garbage...</source>
+         <translation>ئەخلەت تازىلاۋاتىدۇ...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="838"/>
++        <location filename="../mainwindow.cpp" line="847"/>
+         <source>Cleaning up: %1</source>
+         <translation>ھازىر تازىلاۋاتىدۇ: %1</translation>
+     </message>
+diff --git a/plugins/junk_clean/translations/junk-clean_zh_CN.ts b/plugins/junk_clean/translations/junk-clean_zh_CN.ts
+index 27f2d34..de159aa 100644
+--- a/plugins/junk_clean/translations/junk-clean_zh_CN.ts
++++ b/plugins/junk_clean/translations/junk-clean_zh_CN.ts
+@@ -245,78 +245,78 @@
+ <context>
+     <name>junk_clean::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="62"/>
++        <location filename="../mainwindow.cpp" line="66"/>
+         <source>Return</source>
+         <translation>返回</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="64"/>
++        <location filename="../mainwindow.cpp" line="68"/>
+         <source>Clean</source>
+         <translation>一键清理</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="200"/>
++        <location filename="../mainwindow.cpp" line="204"/>
+         <source>Scanning in progress...</source>
+         <translation>正在扫描中...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="204"/>
++        <location filename="../mainwindow.cpp" line="208"/>
+         <source>Cancel scan</source>
+         <translation>取消扫描</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="210"/>
+-        <location filename="../mainwindow.cpp" line="218"/>
++        <location filename="../mainwindow.cpp" line="214"/>
++        <location filename="../mainwindow.cpp" line="222"/>
+         <source>Canceling in progress</source>
+         <translation>正在取消</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="248"/>
++        <location filename="../mainwindow.cpp" line="252"/>
+         <source>No cleanable files found</source>
+         <translation>未发现可清理文件</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="250"/>
++        <location filename="../mainwindow.cpp" line="254"/>
+         <source>Found %1 of cleanable files in total</source>
+         <translation>共发现可清理文件 %1</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="252"/>
++        <location filename="../mainwindow.cpp" line="256"/>
+         <source>Selected %1 of garbage and %2 usage traces</source>
+         <translation>已选择垃圾 %1,使用痕迹 %2 条</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="273"/>
++        <location filename="../mainwindow.cpp" line="277"/>
+         <source>%1 garbage cleaning in progress...</source>
+         <translation>%1 垃圾清理中...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="275"/>
++        <location filename="../mainwindow.cpp" line="279"/>
+         <source>Cleaning up %1 traces...</source>
+         <translation>正在清理 %1 条使用痕迹...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="283"/>
++        <location filename="../mainwindow.cpp" line="287"/>
+         <source>Canecl cleanup</source>
+         <translation>取消清理</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="332"/>
++        <location filename="../mainwindow.cpp" line="336"/>
+         <source>Scanning for garbage...</source>
+         <translation>正在扫描垃圾...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="371"/>
++        <location filename="../mainwindow.cpp" line="375"/>
+         <source>Scanning: %1</source>
+         <translation>正在扫描:%1</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="784"/>
++        <location filename="../mainwindow.cpp" line="788"/>
+         <source>Cleaning up garbage...</source>
+         <translation>正在清理垃圾...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="838"/>
++        <location filename="../mainwindow.cpp" line="847"/>
+         <source>Cleaning up: %1</source>
+         <translation>正在清理:%1</translation>
+     </message>
+diff --git a/plugins/junk_clean/translations/junk-clean_zh_HK.ts b/plugins/junk_clean/translations/junk-clean_zh_HK.ts
+index 5bfe437..687484e 100644
+--- a/plugins/junk_clean/translations/junk-clean_zh_HK.ts
++++ b/plugins/junk_clean/translations/junk-clean_zh_HK.ts
+@@ -245,78 +245,78 @@
+ <context>
+     <name>junk_clean::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="62"/>
++        <location filename="../mainwindow.cpp" line="66"/>
+         <source>Return</source>
+         <translation>返回</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="64"/>
++        <location filename="../mainwindow.cpp" line="68"/>
+         <source>Clean</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="200"/>
++        <location filename="../mainwindow.cpp" line="204"/>
+         <source>Scanning in progress...</source>
+         <translation>正在掃描中...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="204"/>
++        <location filename="../mainwindow.cpp" line="208"/>
+         <source>Cancel scan</source>
+         <translation>取消掃描</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="210"/>
+-        <location filename="../mainwindow.cpp" line="218"/>
++        <location filename="../mainwindow.cpp" line="214"/>
++        <location filename="../mainwindow.cpp" line="222"/>
+         <source>Canceling in progress</source>
+         <translation>正在取消</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="248"/>
++        <location filename="../mainwindow.cpp" line="252"/>
+         <source>No cleanable files found</source>
+         <translation>未發現可清理文件</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="250"/>
++        <location filename="../mainwindow.cpp" line="254"/>
+         <source>Found %1 of cleanable files in total</source>
+         <translation>共發現可清理文件 %1</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="252"/>
++        <location filename="../mainwindow.cpp" line="256"/>
+         <source>Selected %1 of garbage and %2 usage traces</source>
+         <translation>已選擇垃圾 %1,使用痕跡 %2 條</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="273"/>
++        <location filename="../mainwindow.cpp" line="277"/>
+         <source>%1 garbage cleaning in progress...</source>
+         <translation>%1 垃圾清理中...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="275"/>
++        <location filename="../mainwindow.cpp" line="279"/>
+         <source>Cleaning up %1 traces...</source>
+         <translation>正在清理 %1 條使用痕跡...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="283"/>
++        <location filename="../mainwindow.cpp" line="287"/>
+         <source>Canecl cleanup</source>
+         <translation>取消清理</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="332"/>
++        <location filename="../mainwindow.cpp" line="336"/>
+         <source>Scanning for garbage...</source>
+         <translation>正在掃描垃圾...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="371"/>
++        <location filename="../mainwindow.cpp" line="375"/>
+         <source>Scanning: %1</source>
+         <translation>正在掃描:%1</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="784"/>
++        <location filename="../mainwindow.cpp" line="788"/>
+         <source>Cleaning up garbage...</source>
+         <translation>正在清理垃圾...</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="838"/>
++        <location filename="../mainwindow.cpp" line="847"/>
+         <source>Cleaning up: %1</source>
+         <translation>正在清理:%1</translation>
+     </message>
+diff --git a/plugins/service-support/CMakeLists.txt b/plugins/service-support/CMakeLists.txt
+index 078dc05..52ad064 100644
+--- a/plugins/service-support/CMakeLists.txt
++++ b/plugins/service-support/CMakeLists.txt
+@@ -67,7 +67,7 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${TOP_DIR}/3rdparty/kyplugin)
+ target_include_directories(${PROJECT_NAME} PRIVATE ${SERVICE_SUPPORT_TOP_DIR})
+ target_sources(${PROJECT_NAME} PRIVATE ${SRCS})
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /opt/kylin-os-manager/plugins/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/plugins/)
+ 
+ set(TRANSLATIONS
+        "${SERVICE_SUPPORT_TOP_DIR}/translations/kom-service-support_zh_CN.ts"
+diff --git a/plugins/tool_box/CMakeLists.txt b/plugins/tool_box/CMakeLists.txt
+index 980a417..9ea9693 100644
+--- a/plugins/tool_box/CMakeLists.txt
++++ b/plugins/tool_box/CMakeLists.txt
+@@ -86,7 +86,7 @@ else ()
+ 	target_link_libraries(${PROJECT_NAME} PRIVATE compatibility)
+ endif ()
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /opt/kylin-os-manager/plugins/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/plugins/)
+ install(FILES ${QM_FILES} DESTINATION  /usr/share/kylin-os-manager/plugins/tool-box/translations/)
+ 
+ add_subdirectory(app_launcher)
+diff --git a/plugins/tool_box/app_item.cpp b/plugins/tool_box/app_item.cpp
+index 8c9b9ec..1c66ada 100644
+--- a/plugins/tool_box/app_item.cpp
++++ b/plugins/tool_box/app_item.cpp
+@@ -736,7 +736,7 @@ void AppItem::AddToDesktopShortcutForDBus() const {
+     }
+ 
+     ofs << "Icon=" << icon_[icon_type_].toStdString() << "\n";
+-    ofs << "Exec=" << "/usr/share/kylin-os-manager/plugins/tool-box/bin/app_launcher " << uuid_.toStdString() << "\n";
++    ofs << "Exec=" << "/usr/lib/kylin-os-manager/bin/app_launcher " << uuid_.toStdString() << "\n";
+     ofs << "StartupNotify=false" << "\n";
+     ofs << "Terminal=false" << "\n";
+     ofs << "Type=Application" << "\n";
+diff --git a/plugins/tool_box/app_launcher/CMakeLists.txt b/plugins/tool_box/app_launcher/CMakeLists.txt
+index 28dd44f..2f6458b 100644
+--- a/plugins/tool_box/app_launcher/CMakeLists.txt
++++ b/plugins/tool_box/app_launcher/CMakeLists.txt
+@@ -60,4 +60,4 @@ else ()
+     target_link_libraries(${PROJECT_NAME} PRIVATE compatibility)
+ endif ()
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/share/kylin-os-manager/plugins/tool-box/bin/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/bin/)
+diff --git a/plugins/tool_box/app_launcher/main.cpp b/plugins/tool_box/app_launcher/main.cpp
+index 82449f0..a1a9338 100644
+--- a/plugins/tool_box/app_launcher/main.cpp
++++ b/plugins/tool_box/app_launcher/main.cpp
+@@ -43,12 +43,21 @@ enum DBusAppStatus GetDBusAppStatus(const QString &uuid) {
+ }
+ 
+ int main(int argc, char *argv[]) {
+-    QApplication app(argc, argv);
+-
+     if (argc < 2) {
+         return EXIT_FAILURE;
+     }
+ 
++    // 适配缩放和高分辨率
++#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
++    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
++    QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
++#endif
++#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
++    QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
++#endif
++
++    QApplication app(argc, argv);
++
+     // 加载翻译文件
+     QTranslator translator;
+     if (translator.load(":/translations/app_launcher_" + QLocale::system().name() + ".qm")) {
+@@ -62,6 +71,13 @@ int main(int argc, char *argv[]) {
+     } else {
+         qCritical() << "Load qt translation file fail";
+     }
++    QTranslator sdk_translator;
++    const auto locale = QLocale::system().name();
++    if (sdk_translator.load(":/translations/gui_" + locale + ".qm")) {
++        app.installTranslator(&sdk_translator);
++    } else {
++        qCritical() << "Load sdk translation file fail";
++    }
+ 
+     QString uuid(argv[1]);
+     auto dbus_app_status = GetDBusAppStatus(uuid);
+diff --git a/plugins/tool_box/mainwindow.cpp b/plugins/tool_box/mainwindow.cpp
+index 5fe4eaf..c24f8d2 100644
+--- a/plugins/tool_box/mainwindow.cpp
++++ b/plugins/tool_box/mainwindow.cpp
+@@ -41,6 +41,8 @@ MainWindow::MainWindow(QWidget *parent)
+ {
+     qRegisterMetaType<tool_box::AppItem::SyncType>();
+ 
++    search_line_edit_->setCompleter(nullptr);
++
+     SetUpListWidget(feature_tools_list_widget_);
+     SetUpListWidget(debug_tools_list_widget_);
+     SetUpListWidget(troubleshooting_tools_list_widget_);
+diff --git a/plugins/tool_box/tool_box.cpp b/plugins/tool_box/tool_box.cpp
+index 476bf0c..64b86af 100644
+--- a/plugins/tool_box/tool_box.cpp
++++ b/plugins/tool_box/tool_box.cpp
+@@ -2,6 +2,7 @@
+ #include <QApplication>
+ #include <QTranslator>
+ #include <QDebug>
++#include <QLocale>
+ #include "frame.h"
+ #include "mainwindow.h"
+ 
+@@ -40,13 +41,24 @@ int ToolBox::sort() {
+ }
+ 
+ QWidget *ToolBox::createWidget() {
++    // 加载翻译
+     QString tranPath("/usr/share/kylin-os-manager/plugins/tool-box/translations");
+     QTranslator *translator = new QTranslator;
+     if (translator->load(QLocale(), "kylin-os-manager-tool-box", "_", tranPath)) {
+         QApplication::installTranslator(translator);
+     } else {
+-        qWarning() << "ProblemFeedback load translation file fail !";
++        qWarning() << "Tool box load translation file fail";
+     }
++
++    // 加载 sdk 翻译
++    auto locale = QLocale::system().name();
++    auto *sdk_translator = new QTranslator;
++    if (!sdk_translator->load(":/translations/gui_" + locale + ".qm")) {
++        qWarning() << "Tool box load sdk translation file fail";
++    } else {
++        QApplication::installTranslator(sdk_translator);
++    }
++
+     auto *mainwindow = new MainWindow;
+     return mainwindow;
+ }
+diff --git a/plugins/tool_box/translations/kylin-os-manager-tool-box_bo_CN.ts b/plugins/tool_box/translations/kylin-os-manager-tool-box_bo_CN.ts
+index 58dafb5..b40e9f5 100644
+--- a/plugins/tool_box/translations/kylin-os-manager-tool-box_bo_CN.ts
++++ b/plugins/tool_box/translations/kylin-os-manager-tool-box_bo_CN.ts
+@@ -4,7 +4,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../tool_box.cpp" line="31"/>
++        <location filename="../tool_box.cpp" line="32"/>
+         <source>ToolBox</source>
+         <translation type="unfinished">ཡོ་བྱད་སྒམ་ཆུང་།</translation>
+     </message>
+@@ -71,26 +71,26 @@
+ <context>
+     <name>tool_box::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="54"/>
+-        <location filename="../mainwindow.cpp" line="155"/>
++        <location filename="../mainwindow.cpp" line="56"/>
++        <location filename="../mainwindow.cpp" line="157"/>
+         <source>Feature tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="63"/>
+-        <location filename="../mainwindow.cpp" line="160"/>
++        <location filename="../mainwindow.cpp" line="65"/>
++        <location filename="../mainwindow.cpp" line="162"/>
+         <source>Debug tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="72"/>
+-        <location filename="../mainwindow.cpp" line="165"/>
++        <location filename="../mainwindow.cpp" line="74"/>
++        <location filename="../mainwindow.cpp" line="167"/>
+         <source>Troubleshooting tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="81"/>
+-        <location filename="../mainwindow.cpp" line="170"/>
++        <location filename="../mainwindow.cpp" line="83"/>
++        <location filename="../mainwindow.cpp" line="172"/>
+         <source>Other tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/tool_box/translations/kylin-os-manager-tool-box_de.ts b/plugins/tool_box/translations/kylin-os-manager-tool-box_de.ts
+index 25d5791..90a4ffc 100644
+--- a/plugins/tool_box/translations/kylin-os-manager-tool-box_de.ts
++++ b/plugins/tool_box/translations/kylin-os-manager-tool-box_de.ts
+@@ -4,7 +4,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../tool_box.cpp" line="31"/>
++        <location filename="../tool_box.cpp" line="32"/>
+         <source>ToolBox</source>
+         <translation>Werkzeugkasten</translation>
+     </message>
+@@ -71,26 +71,26 @@
+ <context>
+     <name>tool_box::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="54"/>
+-        <location filename="../mainwindow.cpp" line="155"/>
++        <location filename="../mainwindow.cpp" line="56"/>
++        <location filename="../mainwindow.cpp" line="157"/>
+         <source>Feature tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="63"/>
+-        <location filename="../mainwindow.cpp" line="160"/>
++        <location filename="../mainwindow.cpp" line="65"/>
++        <location filename="../mainwindow.cpp" line="162"/>
+         <source>Debug tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="72"/>
+-        <location filename="../mainwindow.cpp" line="165"/>
++        <location filename="../mainwindow.cpp" line="74"/>
++        <location filename="../mainwindow.cpp" line="167"/>
+         <source>Troubleshooting tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="81"/>
+-        <location filename="../mainwindow.cpp" line="170"/>
++        <location filename="../mainwindow.cpp" line="83"/>
++        <location filename="../mainwindow.cpp" line="172"/>
+         <source>Other tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/tool_box/translations/kylin-os-manager-tool-box_es.ts b/plugins/tool_box/translations/kylin-os-manager-tool-box_es.ts
+index e31078d..4708ab7 100644
+--- a/plugins/tool_box/translations/kylin-os-manager-tool-box_es.ts
++++ b/plugins/tool_box/translations/kylin-os-manager-tool-box_es.ts
+@@ -4,7 +4,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../tool_box.cpp" line="31"/>
++        <location filename="../tool_box.cpp" line="32"/>
+         <source>ToolBox</source>
+         <translation>Caja de herramientas</translation>
+     </message>
+@@ -71,26 +71,26 @@
+ <context>
+     <name>tool_box::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="54"/>
+-        <location filename="../mainwindow.cpp" line="155"/>
++        <location filename="../mainwindow.cpp" line="56"/>
++        <location filename="../mainwindow.cpp" line="157"/>
+         <source>Feature tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="63"/>
+-        <location filename="../mainwindow.cpp" line="160"/>
++        <location filename="../mainwindow.cpp" line="65"/>
++        <location filename="../mainwindow.cpp" line="162"/>
+         <source>Debug tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="72"/>
+-        <location filename="../mainwindow.cpp" line="165"/>
++        <location filename="../mainwindow.cpp" line="74"/>
++        <location filename="../mainwindow.cpp" line="167"/>
+         <source>Troubleshooting tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="81"/>
+-        <location filename="../mainwindow.cpp" line="170"/>
++        <location filename="../mainwindow.cpp" line="83"/>
++        <location filename="../mainwindow.cpp" line="172"/>
+         <source>Other tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/tool_box/translations/kylin-os-manager-tool-box_fr.ts b/plugins/tool_box/translations/kylin-os-manager-tool-box_fr.ts
+index a36654b..ae46534 100644
+--- a/plugins/tool_box/translations/kylin-os-manager-tool-box_fr.ts
++++ b/plugins/tool_box/translations/kylin-os-manager-tool-box_fr.ts
+@@ -4,7 +4,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../tool_box.cpp" line="31"/>
++        <location filename="../tool_box.cpp" line="32"/>
+         <source>ToolBox</source>
+         <translation>Toolbox</translation>
+     </message>
+@@ -71,26 +71,26 @@
+ <context>
+     <name>tool_box::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="54"/>
+-        <location filename="../mainwindow.cpp" line="155"/>
++        <location filename="../mainwindow.cpp" line="56"/>
++        <location filename="../mainwindow.cpp" line="157"/>
+         <source>Feature tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="63"/>
+-        <location filename="../mainwindow.cpp" line="160"/>
++        <location filename="../mainwindow.cpp" line="65"/>
++        <location filename="../mainwindow.cpp" line="162"/>
+         <source>Debug tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="72"/>
+-        <location filename="../mainwindow.cpp" line="165"/>
++        <location filename="../mainwindow.cpp" line="74"/>
++        <location filename="../mainwindow.cpp" line="167"/>
+         <source>Troubleshooting tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="81"/>
+-        <location filename="../mainwindow.cpp" line="170"/>
++        <location filename="../mainwindow.cpp" line="83"/>
++        <location filename="../mainwindow.cpp" line="172"/>
+         <source>Other tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/tool_box/translations/kylin-os-manager-tool-box_kk.ts b/plugins/tool_box/translations/kylin-os-manager-tool-box_kk.ts
+index 4558be3..1283288 100644
+--- a/plugins/tool_box/translations/kylin-os-manager-tool-box_kk.ts
++++ b/plugins/tool_box/translations/kylin-os-manager-tool-box_kk.ts
+@@ -4,7 +4,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../tool_box.cpp" line="31"/>
++        <location filename="../tool_box.cpp" line="32"/>
+         <source>ToolBox</source>
+         <translation>قۇرال ساندىعى</translation>
+     </message>
+@@ -71,26 +71,26 @@
+ <context>
+     <name>tool_box::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="54"/>
+-        <location filename="../mainwindow.cpp" line="155"/>
++        <location filename="../mainwindow.cpp" line="56"/>
++        <location filename="../mainwindow.cpp" line="157"/>
+         <source>Feature tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="63"/>
+-        <location filename="../mainwindow.cpp" line="160"/>
++        <location filename="../mainwindow.cpp" line="65"/>
++        <location filename="../mainwindow.cpp" line="162"/>
+         <source>Debug tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="72"/>
+-        <location filename="../mainwindow.cpp" line="165"/>
++        <location filename="../mainwindow.cpp" line="74"/>
++        <location filename="../mainwindow.cpp" line="167"/>
+         <source>Troubleshooting tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="81"/>
+-        <location filename="../mainwindow.cpp" line="170"/>
++        <location filename="../mainwindow.cpp" line="83"/>
++        <location filename="../mainwindow.cpp" line="172"/>
+         <source>Other tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/tool_box/translations/kylin-os-manager-tool-box_ky.ts b/plugins/tool_box/translations/kylin-os-manager-tool-box_ky.ts
+index 2b0be31..5f209b7 100644
+--- a/plugins/tool_box/translations/kylin-os-manager-tool-box_ky.ts
++++ b/plugins/tool_box/translations/kylin-os-manager-tool-box_ky.ts
+@@ -4,7 +4,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../tool_box.cpp" line="31"/>
++        <location filename="../tool_box.cpp" line="32"/>
+         <source>ToolBox</source>
+         <translation>قۇرال  ساندىعى</translation>
+     </message>
+@@ -71,26 +71,26 @@
+ <context>
+     <name>tool_box::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="54"/>
+-        <location filename="../mainwindow.cpp" line="155"/>
++        <location filename="../mainwindow.cpp" line="56"/>
++        <location filename="../mainwindow.cpp" line="157"/>
+         <source>Feature tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="63"/>
+-        <location filename="../mainwindow.cpp" line="160"/>
++        <location filename="../mainwindow.cpp" line="65"/>
++        <location filename="../mainwindow.cpp" line="162"/>
+         <source>Debug tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="72"/>
+-        <location filename="../mainwindow.cpp" line="165"/>
++        <location filename="../mainwindow.cpp" line="74"/>
++        <location filename="../mainwindow.cpp" line="167"/>
+         <source>Troubleshooting tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="81"/>
+-        <location filename="../mainwindow.cpp" line="170"/>
++        <location filename="../mainwindow.cpp" line="83"/>
++        <location filename="../mainwindow.cpp" line="172"/>
+         <source>Other tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/tool_box/translations/kylin-os-manager-tool-box_mn.ts b/plugins/tool_box/translations/kylin-os-manager-tool-box_mn.ts
+index e500224..6cc50f7 100644
+--- a/plugins/tool_box/translations/kylin-os-manager-tool-box_mn.ts
++++ b/plugins/tool_box/translations/kylin-os-manager-tool-box_mn.ts
+@@ -4,7 +4,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../tool_box.cpp" line="31"/>
++        <location filename="../tool_box.cpp" line="32"/>
+         <source>ToolBox</source>
+         <translation>ᠪᠠᠭᠠᠵᠢ ᠵᠢᠨ ᠬᠠᠢᠷᠴᠠᠭ</translation>
+     </message>
+@@ -71,26 +71,26 @@
+ <context>
+     <name>tool_box::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="54"/>
+-        <location filename="../mainwindow.cpp" line="155"/>
++        <location filename="../mainwindow.cpp" line="56"/>
++        <location filename="../mainwindow.cpp" line="157"/>
+         <source>Feature tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="63"/>
+-        <location filename="../mainwindow.cpp" line="160"/>
++        <location filename="../mainwindow.cpp" line="65"/>
++        <location filename="../mainwindow.cpp" line="162"/>
+         <source>Debug tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="72"/>
+-        <location filename="../mainwindow.cpp" line="165"/>
++        <location filename="../mainwindow.cpp" line="74"/>
++        <location filename="../mainwindow.cpp" line="167"/>
+         <source>Troubleshooting tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="81"/>
+-        <location filename="../mainwindow.cpp" line="170"/>
++        <location filename="../mainwindow.cpp" line="83"/>
++        <location filename="../mainwindow.cpp" line="172"/>
+         <source>Other tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/tool_box/translations/kylin-os-manager-tool-box_ug.ts b/plugins/tool_box/translations/kylin-os-manager-tool-box_ug.ts
+index a4fae0b..e34e3e5 100644
+--- a/plugins/tool_box/translations/kylin-os-manager-tool-box_ug.ts
++++ b/plugins/tool_box/translations/kylin-os-manager-tool-box_ug.ts
+@@ -4,7 +4,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../tool_box.cpp" line="31"/>
++        <location filename="../tool_box.cpp" line="32"/>
+         <source>ToolBox</source>
+         <translation>قورال ساندۇقى</translation>
+     </message>
+@@ -71,26 +71,26 @@
+ <context>
+     <name>tool_box::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="54"/>
+-        <location filename="../mainwindow.cpp" line="155"/>
++        <location filename="../mainwindow.cpp" line="56"/>
++        <location filename="../mainwindow.cpp" line="157"/>
+         <source>Feature tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="63"/>
+-        <location filename="../mainwindow.cpp" line="160"/>
++        <location filename="../mainwindow.cpp" line="65"/>
++        <location filename="../mainwindow.cpp" line="162"/>
+         <source>Debug tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="72"/>
+-        <location filename="../mainwindow.cpp" line="165"/>
++        <location filename="../mainwindow.cpp" line="74"/>
++        <location filename="../mainwindow.cpp" line="167"/>
+         <source>Troubleshooting tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="81"/>
+-        <location filename="../mainwindow.cpp" line="170"/>
++        <location filename="../mainwindow.cpp" line="83"/>
++        <location filename="../mainwindow.cpp" line="172"/>
+         <source>Other tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/plugins/tool_box/translations/kylin-os-manager-tool-box_zh_CN.ts b/plugins/tool_box/translations/kylin-os-manager-tool-box_zh_CN.ts
+index 79ce0bf..1a9e155 100644
+--- a/plugins/tool_box/translations/kylin-os-manager-tool-box_zh_CN.ts
++++ b/plugins/tool_box/translations/kylin-os-manager-tool-box_zh_CN.ts
+@@ -4,7 +4,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../tool_box.cpp" line="31"/>
++        <location filename="../tool_box.cpp" line="32"/>
+         <source>ToolBox</source>
+         <translation>百宝箱</translation>
+     </message>
+@@ -71,26 +71,26 @@
+ <context>
+     <name>tool_box::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="54"/>
+-        <location filename="../mainwindow.cpp" line="155"/>
++        <location filename="../mainwindow.cpp" line="56"/>
++        <location filename="../mainwindow.cpp" line="157"/>
+         <source>Feature tools</source>
+         <translation>特色工具</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="63"/>
+-        <location filename="../mainwindow.cpp" line="160"/>
++        <location filename="../mainwindow.cpp" line="65"/>
++        <location filename="../mainwindow.cpp" line="162"/>
+         <source>Debug tools</source>
+         <translation>运维调试</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="72"/>
+-        <location filename="../mainwindow.cpp" line="165"/>
++        <location filename="../mainwindow.cpp" line="74"/>
++        <location filename="../mainwindow.cpp" line="167"/>
+         <source>Troubleshooting tools</source>
+         <translation>故障修复</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="81"/>
+-        <location filename="../mainwindow.cpp" line="170"/>
++        <location filename="../mainwindow.cpp" line="83"/>
++        <location filename="../mainwindow.cpp" line="172"/>
+         <source>Other tools</source>
+         <translation>其他</translation>
+     </message>
+diff --git a/plugins/tool_box/translations/kylin-os-manager-tool-box_zh_HK.ts b/plugins/tool_box/translations/kylin-os-manager-tool-box_zh_HK.ts
+index 77c8e20..9914d76 100644
+--- a/plugins/tool_box/translations/kylin-os-manager-tool-box_zh_HK.ts
++++ b/plugins/tool_box/translations/kylin-os-manager-tool-box_zh_HK.ts
+@@ -4,7 +4,7 @@
+ <context>
+     <name>QObject</name>
+     <message>
+-        <location filename="../tool_box.cpp" line="31"/>
++        <location filename="../tool_box.cpp" line="32"/>
+         <source>ToolBox</source>
+         <translation>工具箱</translation>
+     </message>
+@@ -71,26 +71,26 @@
+ <context>
+     <name>tool_box::MainWindow</name>
+     <message>
+-        <location filename="../mainwindow.cpp" line="54"/>
+-        <location filename="../mainwindow.cpp" line="155"/>
++        <location filename="../mainwindow.cpp" line="56"/>
++        <location filename="../mainwindow.cpp" line="157"/>
+         <source>Feature tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="63"/>
+-        <location filename="../mainwindow.cpp" line="160"/>
++        <location filename="../mainwindow.cpp" line="65"/>
++        <location filename="../mainwindow.cpp" line="162"/>
+         <source>Debug tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="72"/>
+-        <location filename="../mainwindow.cpp" line="165"/>
++        <location filename="../mainwindow.cpp" line="74"/>
++        <location filename="../mainwindow.cpp" line="167"/>
+         <source>Troubleshooting tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="81"/>
+-        <location filename="../mainwindow.cpp" line="170"/>
++        <location filename="../mainwindow.cpp" line="83"/>
++        <location filename="../mainwindow.cpp" line="172"/>
+         <source>Other tools</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/src/application/main.cpp b/src/application/main.cpp
+index 801d1e0..17e6d95 100644
+--- a/src/application/main.cpp
++++ b/src/application/main.cpp
+@@ -206,7 +206,7 @@ int main(int argc, char *argv[])
+ #ifndef DEBUG_MODE
+     //loadPath.push_back("/usr/lib/kylin-os-manager/plugins/");
+     //loadPath.push_back("/usr/local/lib/kylin-os-manager/plugins/");
+-    loadPath.push_back("/opt/kylin-os-manager/plugins/");
++    loadPath.push_back("/usr/lib/kylin-os-manager/plugins/");
+     //std::string loadHomePath {getenv("HOME")};
+     //loadHomePath.append("/");
+     //loadHomePath.append(".kylin-os-manager/plugins/");
+diff --git a/src/application/mainwindow.cpp b/src/application/mainwindow.cpp
+index c21a1f2..1ee9c69 100644
+--- a/src/application/mainwindow.cpp
++++ b/src/application/mainwindow.cpp
+@@ -207,6 +207,7 @@ MainWindow::MainWindow(std::vector<KomApplicationProvider *> tabProviders, QWidg
+     auto *tripletMenu = tripletButton->menu();
+     tripletMenu->removeAction(tripletButton->settingAction());
+     tripletMenu->removeAction(tripletButton->themeAction());
++    tripletMenu->removeAction(tripletButton->feedbackAction());
+     connect(tripletButton->assistAction(), &QAction::triggered, this, &MainWindow::showUserManual);
+     connect(tripletButton->quitAction(), &QAction::triggered, this, &MainWindow::close);
+     connect(tripletButton->aboutAction(), &QAction::triggered, this, &MainWindow::showAbout);
+@@ -214,13 +215,8 @@ MainWindow::MainWindow(std::vector<KomApplicationProvider *> tabProviders, QWidg
+     setFixedSize(1024, 640);
+     setIcon("kylin-os-manager");
+     setWindowIcon(QIcon::fromTheme("kylin-os-manager"));
+-#ifdef ICBC_ENVIRONMENT
+-    setWidgetName(tr("Desktop Manager"));
+-    setWindowTitle(tr("Desktop Manager"));
+-#else
+     setWidgetName(tr("Kylin Os Manager"));
+     setWindowTitle(tr("Kylin Os Manager"));
+-#endif
+     setLayoutType(kdk::LayoutType::HorizontalType);
+ 
+     QVBoxLayout *vLayout = new QVBoxLayout;
+@@ -291,10 +287,7 @@ MainWindow::~MainWindow()
+ {
+     // 规避存在QWebEnginePag,且QProcess::startDetached启动的进程未关闭时,主程序无法退出的问题
+     qint64 pid = QCoreApplication::applicationPid();
+-    QProcess process;
+-    process.setProgram("kill");
+-    process.setArguments({"-SIGINT", QString::number(pid)});
+-    process.startDetached();
++    QProcess::startDetached("/usr/bin/kill " + QString::number(pid));
+ }
+ 
+ void MainWindow::initUi(void)
+@@ -403,11 +396,7 @@ void MainWindow::showAbout()
+ {
+     kdk::KAboutDialog aboutDialog(this);
+     aboutDialog.setAppIcon(QIcon::fromTheme("kylin-os-manager"));
+-#ifdef ICBC_ENVIRONMENT
+-    aboutDialog.setAppName(tr("Desktop Manager"));
+-#else
+     aboutDialog.setAppName(tr("Kylin Os Manager"));
+-#endif
+     aboutDialog.setAppVersion(tr("version: %1").arg(KYLIN_OS_MANAGER_VERSION));
+ 
+     // 主窗口居中
+diff --git a/src/application/translations/kylin-os-manager_bo_CN.ts b/src/application/translations/kylin-os-manager_bo_CN.ts
+index 8de0230..e9b0afa 100644
+--- a/src/application/translations/kylin-os-manager_bo_CN.ts
++++ b/src/application/translations/kylin-os-manager_bo_CN.ts
+@@ -11,19 +11,12 @@
+     <message>
+         <location filename="../mainwindow.cpp" line="218"/>
+         <location filename="../mainwindow.cpp" line="219"/>
+-        <location filename="../mainwindow.cpp" line="404"/>
+-        <source>Desktop Manager</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../mainwindow.cpp" line="221"/>
+-        <location filename="../mainwindow.cpp" line="222"/>
+-        <location filename="../mainwindow.cpp" line="406"/>
++        <location filename="../mainwindow.cpp" line="399"/>
+         <source>Kylin Os Manager</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="408"/>
++        <location filename="../mainwindow.cpp" line="400"/>
+         <source>version: %1</source>
+         <translation type="unfinished">པར་གཞི་: %1</translation>
+     </message>
+diff --git a/src/application/translations/kylin-os-manager_de.ts b/src/application/translations/kylin-os-manager_de.ts
+index f91bd1c..42afd1e 100644
+--- a/src/application/translations/kylin-os-manager_de.ts
++++ b/src/application/translations/kylin-os-manager_de.ts
+@@ -11,19 +11,12 @@
+     <message>
+         <location filename="../mainwindow.cpp" line="218"/>
+         <location filename="../mainwindow.cpp" line="219"/>
+-        <location filename="../mainwindow.cpp" line="404"/>
+-        <source>Desktop Manager</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../mainwindow.cpp" line="221"/>
+-        <location filename="../mainwindow.cpp" line="222"/>
+-        <location filename="../mainwindow.cpp" line="406"/>
++        <location filename="../mainwindow.cpp" line="399"/>
+         <source>Kylin Os Manager</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="408"/>
++        <location filename="../mainwindow.cpp" line="400"/>
+         <source>version: %1</source>
+         <translation>Version: %1</translation>
+     </message>
+diff --git a/src/application/translations/kylin-os-manager_es.ts b/src/application/translations/kylin-os-manager_es.ts
+index 98e058e..e2c8814 100644
+--- a/src/application/translations/kylin-os-manager_es.ts
++++ b/src/application/translations/kylin-os-manager_es.ts
+@@ -11,19 +11,12 @@
+     <message>
+         <location filename="../mainwindow.cpp" line="218"/>
+         <location filename="../mainwindow.cpp" line="219"/>
+-        <location filename="../mainwindow.cpp" line="404"/>
+-        <source>Desktop Manager</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../mainwindow.cpp" line="221"/>
+-        <location filename="../mainwindow.cpp" line="222"/>
+-        <location filename="../mainwindow.cpp" line="406"/>
++        <location filename="../mainwindow.cpp" line="399"/>
+         <source>Kylin Os Manager</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="408"/>
++        <location filename="../mainwindow.cpp" line="400"/>
+         <source>version: %1</source>
+         <translation>Versión: %1</translation>
+     </message>
+diff --git a/src/application/translations/kylin-os-manager_fr.ts b/src/application/translations/kylin-os-manager_fr.ts
+index 156ec46..4569a32 100644
+--- a/src/application/translations/kylin-os-manager_fr.ts
++++ b/src/application/translations/kylin-os-manager_fr.ts
+@@ -11,19 +11,12 @@
+     <message>
+         <location filename="../mainwindow.cpp" line="218"/>
+         <location filename="../mainwindow.cpp" line="219"/>
+-        <location filename="../mainwindow.cpp" line="404"/>
+-        <source>Desktop Manager</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../mainwindow.cpp" line="221"/>
+-        <location filename="../mainwindow.cpp" line="222"/>
+-        <location filename="../mainwindow.cpp" line="406"/>
++        <location filename="../mainwindow.cpp" line="399"/>
+         <source>Kylin Os Manager</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="408"/>
++        <location filename="../mainwindow.cpp" line="400"/>
+         <source>version: %1</source>
+         <translation>Version&#xa0;: %1</translation>
+     </message>
+diff --git a/src/application/translations/kylin-os-manager_kk.ts b/src/application/translations/kylin-os-manager_kk.ts
+index 2c883bf..bf5e38f 100644
+--- a/src/application/translations/kylin-os-manager_kk.ts
++++ b/src/application/translations/kylin-os-manager_kk.ts
+@@ -11,19 +11,12 @@
+     <message>
+         <location filename="../mainwindow.cpp" line="218"/>
+         <location filename="../mainwindow.cpp" line="219"/>
+-        <location filename="../mainwindow.cpp" line="404"/>
+-        <source>Desktop Manager</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../mainwindow.cpp" line="221"/>
+-        <location filename="../mainwindow.cpp" line="222"/>
+-        <location filename="../mainwindow.cpp" line="406"/>
++        <location filename="../mainwindow.cpp" line="399"/>
+         <source>Kylin Os Manager</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="408"/>
++        <location filename="../mainwindow.cpp" line="400"/>
+         <source>version: %1</source>
+         <translation>باسىلىمى: %1</translation>
+     </message>
+diff --git a/src/application/translations/kylin-os-manager_ky.ts b/src/application/translations/kylin-os-manager_ky.ts
+index d76a01c..b7fc27c 100644
+--- a/src/application/translations/kylin-os-manager_ky.ts
++++ b/src/application/translations/kylin-os-manager_ky.ts
+@@ -11,19 +11,12 @@
+     <message>
+         <location filename="../mainwindow.cpp" line="218"/>
+         <location filename="../mainwindow.cpp" line="219"/>
+-        <location filename="../mainwindow.cpp" line="404"/>
+-        <source>Desktop Manager</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../mainwindow.cpp" line="221"/>
+-        <location filename="../mainwindow.cpp" line="222"/>
+-        <location filename="../mainwindow.cpp" line="406"/>
++        <location filename="../mainwindow.cpp" line="399"/>
+         <source>Kylin Os Manager</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="408"/>
++        <location filename="../mainwindow.cpp" line="400"/>
+         <source>version: %1</source>
+         <translation>باسماسى : %1</translation>
+     </message>
+diff --git a/src/application/translations/kylin-os-manager_mn.ts b/src/application/translations/kylin-os-manager_mn.ts
+index e3555c0..edc768c 100644
+--- a/src/application/translations/kylin-os-manager_mn.ts
++++ b/src/application/translations/kylin-os-manager_mn.ts
+@@ -11,19 +11,12 @@
+     <message>
+         <location filename="../mainwindow.cpp" line="218"/>
+         <location filename="../mainwindow.cpp" line="219"/>
+-        <location filename="../mainwindow.cpp" line="404"/>
+-        <source>Desktop Manager</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../mainwindow.cpp" line="221"/>
+-        <location filename="../mainwindow.cpp" line="222"/>
+-        <location filename="../mainwindow.cpp" line="406"/>
++        <location filename="../mainwindow.cpp" line="399"/>
+         <source>Kylin Os Manager</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="408"/>
++        <location filename="../mainwindow.cpp" line="400"/>
+         <source>version: %1</source>
+         <translation>ᠬᠡᠪᠯᠡᠯ  %1</translation>
+     </message>
+diff --git a/src/application/translations/kylin-os-manager_ug.ts b/src/application/translations/kylin-os-manager_ug.ts
+index 0e52dea..546b0fd 100644
+--- a/src/application/translations/kylin-os-manager_ug.ts
++++ b/src/application/translations/kylin-os-manager_ug.ts
+@@ -11,19 +11,12 @@
+     <message>
+         <location filename="../mainwindow.cpp" line="218"/>
+         <location filename="../mainwindow.cpp" line="219"/>
+-        <location filename="../mainwindow.cpp" line="404"/>
+-        <source>Desktop Manager</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../mainwindow.cpp" line="221"/>
+-        <location filename="../mainwindow.cpp" line="222"/>
+-        <location filename="../mainwindow.cpp" line="406"/>
++        <location filename="../mainwindow.cpp" line="399"/>
+         <source>Kylin Os Manager</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="408"/>
++        <location filename="../mainwindow.cpp" line="400"/>
+         <source>version: %1</source>
+         <translation>نەشرى: %1</translation>
+     </message>
+diff --git a/src/application/translations/kylin-os-manager_zh_CN.ts b/src/application/translations/kylin-os-manager_zh_CN.ts
+index eb2df7c..2145d43 100644
+--- a/src/application/translations/kylin-os-manager_zh_CN.ts
++++ b/src/application/translations/kylin-os-manager_zh_CN.ts
+@@ -11,19 +11,12 @@
+     <message>
+         <location filename="../mainwindow.cpp" line="218"/>
+         <location filename="../mainwindow.cpp" line="219"/>
+-        <location filename="../mainwindow.cpp" line="404"/>
+-        <source>Desktop Manager</source>
+-        <translation>桌面管家</translation>
+-    </message>
+-    <message>
+-        <location filename="../mainwindow.cpp" line="221"/>
+-        <location filename="../mainwindow.cpp" line="222"/>
+-        <location filename="../mainwindow.cpp" line="406"/>
++        <location filename="../mainwindow.cpp" line="399"/>
+         <source>Kylin Os Manager</source>
+         <translation>麒麟管家</translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="408"/>
++        <location filename="../mainwindow.cpp" line="400"/>
+         <source>version: %1</source>
+         <translation>版本:%1</translation>
+     </message>
+diff --git a/src/application/translations/kylin-os-manager_zh_HK.ts b/src/application/translations/kylin-os-manager_zh_HK.ts
+index cca1c3f..b37fd30 100644
+--- a/src/application/translations/kylin-os-manager_zh_HK.ts
++++ b/src/application/translations/kylin-os-manager_zh_HK.ts
+@@ -11,19 +11,12 @@
+     <message>
+         <location filename="../mainwindow.cpp" line="218"/>
+         <location filename="../mainwindow.cpp" line="219"/>
+-        <location filename="../mainwindow.cpp" line="404"/>
+-        <source>Desktop Manager</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../mainwindow.cpp" line="221"/>
+-        <location filename="../mainwindow.cpp" line="222"/>
+-        <location filename="../mainwindow.cpp" line="406"/>
++        <location filename="../mainwindow.cpp" line="399"/>
+         <source>Kylin Os Manager</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../mainwindow.cpp" line="408"/>
++        <location filename="../mainwindow.cpp" line="400"/>
+         <source>version: %1</source>
+         <translation>版本:%1</translation>
+     </message>
+diff --git a/src/process_manager/CMakeLists.txt b/src/process_manager/CMakeLists.txt
+deleted file mode 100644
+index 49a60f2..0000000
+--- a/src/process_manager/CMakeLists.txt
++++ /dev/null
+@@ -1,30 +0,0 @@
+-project(kylin-os-manager-process-manager)
+-
+-set(PROCESS_MANAGER_DIR ${CMAKE_CURRENT_LIST_DIR})
+-set(CMAKE_AUTOUIC ON)
+-set(CMAKE_AUTORCC ON)
+-set(CMAKE_AUTOMOC ON)
+-
+-find_package(PkgConfig REQUIRED)
+-find_package(Qt5 COMPONENTS REQUIRED Core DBus)
+-
+-pkg_check_modules(GLIB-2.0 glib-2.0)
+-include_directories(${GLIB-2.0_INCLUDE_DIRS})
+-link_directories(${GLIB-2.0_LIBRARY_DIRS})
+-
+-set(SRC ${PROCESS_MANAGER_DIR}/main.cpp
+-        ${PROCESS_MANAGER_DIR}/daemon.cpp
+-        ${PROCESS_MANAGER_DIR}/conf_parser.cpp
+-        ${PROCESS_MANAGER_DIR}/process.cpp
+-        ${PROCESS_MANAGER_DIR}/conf.cpp
+-        ${PROCESS_MANAGER_DIR}/service_dbus.cpp
+-        ${PROCESS_MANAGER_DIR}/client_dbus.cpp)
+-
+-include_directories(${PROCESS_MANAGER_DIR})
+-add_executable(${PROJECT_NAME} ${SRC})
+-target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::DBus)
+-target_link_libraries(${PROJECT_NAME} PRIVATE ${GLIB-2.0_LIBRARIES})
+-
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/bin/)
+-install(FILES ${PROCESS_MANAGER_DIR}/data/process-manager.ini DESTINATION /etc/kylin-os-manager/)
+-install(FILES ${PROCESS_MANAGER_DIR}/data/kylin-os-manager-process-manager.desktop DESTINATION /etc/xdg/autostart/)
+diff --git a/src/process_manager/client_dbus.cpp b/src/process_manager/client_dbus.cpp
+deleted file mode 100644
+index ac6f3fb..0000000
+--- a/src/process_manager/client_dbus.cpp
++++ /dev/null
+@@ -1,110 +0,0 @@
+-#include <time.h>
+-#include <iostream>
+-#include <iomanip>
+-#include <ios>
+-#include <QDBusMessage>
+-#include <QDBusConnection>
+-#include <QDebug>
+-#include <QMap>
+-#include <QVariant>
+-#include <QDBusArgument>
+-#include <client_dbus.h>
+-
+-#define SERVICE_NAME "com.kylin.kom.process.manager"
+-#define OBJECT_PATH "/com/kylin/kom/process/manager"
+-#define INTERFACE_NAME "com.kylin.kom.process.manager"
+-
+-namespace process_manager {
+-
+-DBusClient::DBusClient() {
+-
+-}
+-
+-DBusClient::~DBusClient() {
+-
+-}
+-
+-void DBusClient::managerProcess(Operate operate, const QString &name) {
+-    QString methodName;
+-    switch (operate) {
+-    case Operate::START:
+-        methodName = "start";
+-        break;
+-    case Operate::RESTART:
+-        methodName = "restart";
+-        break;
+-    case Operate::STOP:
+-        methodName = "stop";
+-        break;
+-    }
+-
+-    auto message = QDBusMessage::createMethodCall(SERVICE_NAME, OBJECT_PATH, INTERFACE_NAME, methodName);
+-    message << name;
+-
+-    auto response = QDBusConnection::sessionBus().call(message);
+-    if (response.type() == QDBusMessage::ErrorMessage) {
+-        qCritical() << name << " fail to start.";
+-        return;
+-    }
+-    auto reply = response.arguments();
+-    if (reply.size() < 2) {
+-        qCritical() << name << " fail to start.";
+-        return;
+-    }
+-    if (!reply.first().toBool())
+-        qCritical() << name << " fail to start." << " ErrorMessage: " << reply.at(1).toString();
+-}
+-
+-void DBusClient::status(const QString &name) {
+-    auto message = QDBusMessage::createMethodCall(SERVICE_NAME, OBJECT_PATH, INTERFACE_NAME, "status");
+-    message << name;
+-
+-    auto response= QDBusConnection::sessionBus().call(message);
+-    if (response.type() == QDBusMessage::ErrorMessage) {
+-        qCritical() << "Failed to obtain message.";
+-        return;
+-    }
+-    auto reply = response.arguments();
+-    if (reply.isEmpty()) {
+-        qCritical() << "Failed to obtain message";
+-        return;
+-    }
+-
+-    QMap<QString, QMap<QString, QVariant>> processStatusMap;
+-    reply.first().value<QDBusArgument>() >> processStatusMap;
+-
+-    for (auto iter = processStatusMap.constBegin(); iter != processStatusMap.end(); iter++) {
+-        auto processName = iter.key();
+-        auto processStatus = iter.value();
+-        auto pid = processStatus.value("Pid").toUInt();
+-        auto active = processStatus.value("Active").toBool();
+-        auto startTime = processStatus.value("StartTime").toULongLong();
+-
+-        if (active) {
+-            std::cout << std::right;
+-            std::cout << "[" << processName.toStdString() << "]\n"
+-                      << std::setw(16) << "Active: " << "\033[32mRUNNING\033[0m\n"
+-                      << std::setw(16) << "StartTime: " << formatTime(startTime) << "\n"
+-                      << std::setw(16) << "Pid: " << pid << "\n"
+-                      << std::endl;
+-        } else {
+-            std::cout << std::right;
+-            std::cout << "[" << processName.toStdString() << "]\n"
+-                      << std::setw(16) << "Active: " << "\033[31mSTOPPINNG\033[0m\n"
+-                      << std::endl;
+-        }
+-    }
+-}
+-
+-std::string DBusClient::formatTime(time_t time) {
+-    struct tm t;
+-    localtime_r(&time, &t);
+-
+-    char tmp[32];
+-    memset(tmp, '\0', sizeof(tmp));
+-    strftime(tmp, sizeof(tmp), "%a %Y-%m-%d %H:%M:%S", &t);
+-
+-    return std::string {tmp};
+-}
+-
+-}
+diff --git a/src/process_manager/client_dbus.h b/src/process_manager/client_dbus.h
+deleted file mode 100644
+index 1aed153..0000000
+--- a/src/process_manager/client_dbus.h
++++ /dev/null
+@@ -1,28 +0,0 @@
+-#ifndef KYLIN_OS_MANAGER_SRC_PROCESS_MANAGER_CLIENT_DBUS_H
+-#define KYLIN_OS_MANAGER_SRC_PROCESS_MANAGER_CLIENT_DBUS_H
+-
+-#include <QString>
+-
+-namespace process_manager {
+-
+-class DBusClient {
+-public:
+-    DBusClient();
+-    ~DBusClient();
+-
+-    enum Operate {
+-        START,
+-        STOP,
+-        RESTART
+-    };
+-
+-    void managerProcess(Operate operate, const QString &name);
+-    void status(const QString &name);
+-
+-private:
+-    std::string formatTime(time_t time);
+-};
+-
+-}
+-
+-#endif
+diff --git a/src/process_manager/conf.cpp b/src/process_manager/conf.cpp
+deleted file mode 100644
+index 3cbdeda..0000000
+--- a/src/process_manager/conf.cpp
++++ /dev/null
+@@ -1,34 +0,0 @@
+-#include "conf.h"
+-
+-namespace process_manager {
+-
+-ProcessConf::ProcessConf(std::string name, std::vector<std::string> commands, bool autostart, bool autorestart)
+-    : m_name(name)
+-    , m_commands(commands)
+-    , m_autostart(autostart)
+-    , m_autorestart(autorestart)
+-{
+-
+-}
+-
+-ProcessConf::~ProcessConf() {
+-
+-}
+-
+-std::string ProcessConf::name() {
+-    return m_name;
+-}
+-
+-std::vector<std::string> ProcessConf::commands() {
+-    return m_commands;
+-}
+-
+-bool ProcessConf::autostart() {
+-    return m_autostart;
+-}
+-
+-bool ProcessConf::autorestart() {
+-    return m_autorestart;
+-}
+-
+-}
+diff --git a/src/process_manager/conf.h b/src/process_manager/conf.h
+deleted file mode 100644
+index 329c6f6..0000000
+--- a/src/process_manager/conf.h
++++ /dev/null
+@@ -1,28 +0,0 @@
+-#ifndef KYLIN_OS_MANAGER_SRC_PROCESS_MANAGER_CONF_H
+-#define KYLIN_OS_MANAGER_SRC_PROCESS_MANAGER_CONF_H
+-
+-#include <string>
+-#include <vector>
+-
+-namespace process_manager {
+-
+-class ProcessConf {
+-public:
+-    ProcessConf(std::string name, std::vector<std::string> commands, bool autostart, bool autorestart);
+-    ~ProcessConf();
+-
+-    std::string name();
+-    std::vector<std::string> commands();
+-    bool autostart();
+-    bool autorestart();
+-
+-private:
+-    std::string m_name;
+-    std::vector<std::string> m_commands;
+-    bool m_autostart;
+-    bool m_autorestart;
+-};
+-
+-}
+-
+-#endif
+diff --git a/src/process_manager/conf_parser.cpp b/src/process_manager/conf_parser.cpp
+deleted file mode 100644
+index 6fa99ff..0000000
+--- a/src/process_manager/conf_parser.cpp
++++ /dev/null
+@@ -1,90 +0,0 @@
+-#include <algorithm>
+-#include <iostream>
+-#include "conf_parser.h"
+-
+-#define PROGRAM_PREFIX "program:"
+-#define COMMAND_KEY "command"
+-#define AUTO_RESTART_KEY "autorestart"
+-#define AUTO_START_KEY "autostart"
+-
+-namespace process_manager {
+-
+-ConfParser::ConfParser(std::string path)
+-    : m_keyFile(g_key_file_new())
+-    , m_error(NULL)
+-{
+-    if (g_key_file_load_from_file(m_keyFile, path.c_str(), G_KEY_FILE_NONE, &m_error) == FALSE) {
+-        std::cout << "parser configure file fail. " << m_error->message << std::endl;
+-    }
+-}
+-
+-ConfParser::~ConfParser() {
+-    if (m_keyFile)
+-        g_key_file_free(m_keyFile);
+-    if (m_error)
+-        g_error_free(m_error);
+-}
+-
+-bool ConfParser::parseError() {
+-    return m_error != NULL;
+-}
+-
+-std::set<std::string> ConfParser::processNames() {
+-    gsize length;
+-    gchar **groups;
+-    std::set<std::string> res;
+-    std::string prefix {PROGRAM_PREFIX};
+-
+-    groups = g_key_file_get_groups(m_keyFile, &length);
+-    for (unsigned long int i = 0; i < length; i++) {
+-        std::string item {groups[i]};
+-        if (std::equal(std::begin(prefix), std::end(prefix), std::begin(item))
+-            && (item.size() > prefix.size()))
+-        {
+-            item.erase(0, prefix.size());
+-            res.emplace(item);
+-        }
+-    }
+-    g_strfreev(groups);
+-
+-    return res;
+-}
+-
+-std::vector<ProcessConf> ConfParser::processConfs() {
+-    std::vector<ProcessConf> res;
+-
+-    std::set<std::string> names = processNames();
+-    for (const auto &name: names) {
+-        std::string group = PROGRAM_PREFIX + name;
+-        gchar *command = g_key_file_get_value(m_keyFile, group.c_str(), COMMAND_KEY, NULL);
+-        if (command == NULL) {
+-            command = g_strdup("");
+-        }
+-        gchar *autostart = g_key_file_get_value(m_keyFile, group.c_str(), AUTO_START_KEY, NULL);
+-        if (autostart == NULL) {
+-            autostart = g_strdup("true");
+-        }
+-        gchar *autorestart = g_key_file_get_value(m_keyFile, group.c_str(), AUTO_RESTART_KEY, NULL);
+-        if (autorestart == NULL) {
+-            autorestart = g_strdup("true");
+-        }
+-
+-        std::vector<std::string> commands;
+-        gchar **commandVector = g_strsplit(command, " ", -1);
+-        for (int i = 0; commandVector[i] != NULL; i++) {
+-            std::string item {commandVector[i]};
+-            if (!item.empty()) {
+-                commands.emplace_back(item);
+-            }
+-        }
+-        res.emplace_back(name, commands, !g_strcmp0(autostart, "true"), !g_strcmp0(autorestart, "true"));
+-        g_strfreev(commandVector);
+-        g_free(command);
+-        g_free(autostart);
+-        g_free(autorestart);
+-    }
+-
+-    return res;
+-}
+-
+-}
+diff --git a/src/process_manager/conf_parser.h b/src/process_manager/conf_parser.h
+deleted file mode 100644
+index fbd6d48..0000000
+--- a/src/process_manager/conf_parser.h
++++ /dev/null
+@@ -1,29 +0,0 @@
+-#ifndef KYLIN_OS_MANAGER_SRC_PROCESS_MANAGE_CONF_PARSER_H
+-#define KYLIN_OS_MANAGER_SRC_PROCESS_MANAGE_CONF_PARSER_H
+-
+-#include <string>
+-#include <vector>
+-#include <set>
+-#include <glib.h>
+-
+-#include "conf.h"
+-
+-namespace process_manager {
+-
+-class ConfParser {
+-public:
+-    ConfParser(std::string path);
+-    ~ConfParser();
+-
+-    std::vector<ProcessConf> processConfs();
+-    std::set<std::string> processNames();
+-    bool parseError();
+-
+-private:
+-    GKeyFile *m_keyFile;
+-    GError *m_error;
+-};
+-
+-}
+-
+-#endif
+diff --git a/src/process_manager/daemon.cpp b/src/process_manager/daemon.cpp
+deleted file mode 100644
+index 1462fb7..0000000
+--- a/src/process_manager/daemon.cpp
++++ /dev/null
+@@ -1,71 +0,0 @@
+-#include <iostream>
+-#include "daemon.h"
+-
+-namespace process_manager {
+-
+-Daemon::Daemon(std::vector<ProcessConf> processConfs) {
+-    for (auto &item: processConfs)
+-        m_processes.emplace(item.name(), std::make_shared<Process>(item));
+-}
+-
+-Daemon::~Daemon() {
+-    // nothing to do
+-}
+-
+-std::pair<bool, std::string> Daemon::startProcess(const std::string &name) {
+-    std::string errorMessage;
+-    auto iter = m_processes.find(name);
+-    if (iter == m_processes.end()) {
+-        errorMessage.clear();
+-        errorMessage.append(name);
+-        errorMessage.append(" ");
+-        errorMessage.append("does not exist");
+-        std::cout << errorMessage << std::endl;
+-        return std::make_pair(false,errorMessage);
+-    }
+-
+-    return iter->second->start();
+-}
+-
+-std::pair<bool, std::string> Daemon::stopProcess(const std::string &name) {
+-    std::string errorMessage;
+-    auto iter = m_processes.find(name);
+-    if (iter == m_processes.end()) {
+-        errorMessage.clear();
+-        errorMessage.append(name);
+-        errorMessage.append(" ");
+-        errorMessage.append("does not exist");
+-        std::cout << errorMessage << std::endl;
+-        return std::make_pair(false,errorMessage);
+-    }
+-
+-    return iter->second->stop();
+-}
+-
+-std::pair<bool, std::string> Daemon::restart(const std::string &name) {
+-    std::string errorMessage;
+-    auto iter = m_processes.find(name);
+-    if (iter == m_processes.end()) {
+-        errorMessage.clear();
+-        errorMessage.append(name);
+-        errorMessage.append(" ");
+-        errorMessage.append("does not exist");
+-        std::cout << errorMessage << std::endl;
+-        return std::make_pair(false, errorMessage);
+-    }
+-
+-    iter->second->stop();
+-    return iter->second->start();
+-}
+-
+-const std::map<std::string, std::shared_ptr<Process>> &Daemon::processes() {
+-    return m_processes;
+-}
+-
+-void Daemon::run() {
+-    for (auto &[name, process]: m_processes)
+-        if (process->isAutostart())
+-            process->start();
+-}
+-
+-}
+diff --git a/src/process_manager/daemon.h b/src/process_manager/daemon.h
+deleted file mode 100644
+index a22cc11..0000000
+--- a/src/process_manager/daemon.h
++++ /dev/null
+@@ -1,30 +0,0 @@
+-#ifndef KYLIN_OS_MANAGER_SRC_PROCESS_MANAGER_DAEMON_H
+-#define KYLIN_OS_MANAGER_SRC_PROCESS_MANAGER_DAEMON_H
+-
+-#include <vector>
+-#include <map>
+-#include <memory>
+-#include <utility>
+-#include "process.h"
+-#include "conf.h"
+-
+-namespace process_manager {
+-
+-class Daemon {
+-public:
+-    Daemon(std::vector<ProcessConf> processConfs);
+-    ~Daemon();
+-
+-    void run();
+-    std::pair<bool, std::string> startProcess(const std::string &name);
+-    std::pair<bool, std::string> stopProcess(const std::string &name);
+-    std::pair<bool, std::string> restart(const std::string &name);
+-    const std::map<std::string, std::shared_ptr<Process>> &processes();
+-
+-private:
+-    std::map<std::string, std::shared_ptr<Process>> m_processes;
+-};
+-
+-}
+-
+-#endif
+diff --git a/src/process_manager/data/kylin-os-manager-process-manager.desktop b/src/process_manager/data/kylin-os-manager-process-manager.desktop
+deleted file mode 100644
+index c43eb56..0000000
+--- a/src/process_manager/data/kylin-os-manager-process-manager.desktop
++++ /dev/null
+@@ -1,18 +0,0 @@
+-[Desktop Entry]
+-Encoding=UTF-8
+-Name=kylin os manager process manager service
+-Name[zh_CN]=麒麟管家进程管理服务
+-Name[bo_CN]=ཆི་ལིན་དོ་དམ་པའི་འཕེལ་རིམ་དོ་དམ་ཞབས་ཞུ་
+-Comment=kylin os manager process management service is used to provide management services for its child processes
+-Comment[zh_CN]=麒麟管家进程管理服务用于对其子进程提供管理服务
+-Comment[bo_CN]=ཆི་ལིན་གྱི་དོ་དམ་པའི་འཕེལ་རིམ་གྱི་དོ་དམ་ཞབས་ཞུ་དེ་ཁོང་གི་བུ་འཕེལ་རིམ་ལ་དོ་དམ་ཞབས་ཞུ་མཁོ་འདོན་བྱེད་པར་སྤྱོད་རྒྱུ་ཡིན་པ།
+-Exec=/usr/bin/kylin-os-manager-process-manager
+-Icon=kylin-os-manager
+-StartupNotify=false
+-Terminal=false
+-Type=Application
+-Categories=System;
+-NoDisplay=true
+-X-UKUI-AutoRestart=true;
+-X-UKUI_Autostart-Phase=Application
+-X-GNOME-Autostart-Delay=10
+diff --git a/src/process_manager/data/process-manager.ini b/src/process_manager/data/process-manager.ini
+deleted file mode 100644
+index 1a6696a..0000000
+--- a/src/process_manager/data/process-manager.ini
++++ /dev/null
+@@ -1,4 +0,0 @@
+-[program:kylin-os-manager-tray]
+-command=/usr/bin/kylin-os-manager-tray
+-autostart=false
+-autorestart=true
+diff --git a/src/process_manager/main.cpp b/src/process_manager/main.cpp
+deleted file mode 100644
+index fcfd98b..0000000
+--- a/src/process_manager/main.cpp
++++ /dev/null
+@@ -1,146 +0,0 @@
+-#include <iostream>
+-#include <QCoreApplication>
+-#include <QDBusConnection>
+-#include <QCommandLineParser>
+-#include <QCommandLineOption>
+-#include "conf_parser.h"
+-#include "daemon.h"
+-#include "service_dbus.h"
+-#include "client_dbus.h"
+-#include "../config.h"
+-
+-enum class CommandType {
+-    HELP,
+-    VERSION,
+-    START,
+-    STOP,
+-    RESTART,
+-    STATUS,
+-    DAEMON
+-};
+-
+-struct CommandLineArgs{
+-    CommandType type;
+-    QString processName;
+-};
+-
+-bool parseCommandLineArgs(QCommandLineParser &parser, CommandLineArgs &args, QString errorMessage) {
+-    parser.setApplicationDescription("kylin os manager process management"
+-                                     " service is used to provide management services for its child processes.");
+-    QCommandLineOption helpOption = parser.addHelpOption();
+-    QCommandLineOption versionOption = parser.addVersionOption();
+-    parser.addPositionalArgument("Operate", "Operate Performed.");
+-    parser.addPositionalArgument("Name", "Process Name.");
+-    if (!parser.parse(QCoreApplication::arguments())) {
+-        errorMessage = "Parse CommandLine arg fail.";
+-        return false;
+-    }
+-
+-    if (parser.isSet(helpOption)) {
+-        args.type = CommandType::HELP;
+-        return true;
+-    }
+-    if (parser.isSet(versionOption)) {
+-        args.type = CommandType::VERSION;
+-        return true;
+-    }
+-
+-    QStringList positionalArgs = parser.positionalArguments();
+-    if (!positionalArgs.isEmpty()) {
+-        if (positionalArgs.size() >= 2) {
+-            QString operate = positionalArgs.at(0);
+-            if (operate == "start")
+-                args.type = CommandType::START;
+-            else if (operate == "stop")
+-                args.type = CommandType::STOP;
+-            else if (operate == "restart")
+-                args.type = CommandType::RESTART;
+-            else if (operate == "status")
+-                args.type = CommandType::STATUS;
+-            args.processName = positionalArgs.at(1);
+-            return true;
+-        } else {
+-            if (positionalArgs.first() == "status") {
+-                args.type = CommandType::STATUS;
+-                args.processName = "";
+-                return true;
+-            }
+-            errorMessage = "CommandLine format error.";
+-            return false;
+-        }
+-    }
+-
+-    args.type = CommandType::DAEMON;
+-    return true;
+-}
+-
+-void runClient(CommandType type, const QString &name) {
+-    process_manager::DBusClient client;
+-    switch (type) {
+-    case CommandType::START:
+-        client.managerProcess(process_manager::DBusClient::Operate::START, name);
+-        break;
+-    case CommandType::STOP:
+-        client.managerProcess(process_manager::DBusClient::Operate::STOP, name);
+-        break;
+-    case CommandType::RESTART:
+-        client.managerProcess(process_manager::DBusClient::Operate::RESTART, name);
+-        break;
+-    case CommandType::STATUS:
+-        client.status(name);
+-    default:
+-        break;
+-    }
+-}
+-
+-int main(int argc, char *argv[]) {
+-    QCoreApplication app(argc, argv);
+-    QCoreApplication::setApplicationName("kylin-os-manager-process-manager");
+-    QCoreApplication::setApplicationVersion(KYLIN_OS_MANAGER_VERSION);
+-
+-    QCommandLineParser commandParser;
+-    CommandLineArgs commandLineArgs;
+-    QString errorMessage;
+-    if (!parseCommandLineArgs(commandParser, commandLineArgs, errorMessage)) {
+-        std::cout << "Parsing command line failed. ErrorMessage: " << errorMessage.toStdString() << std::endl;
+-        return -1;
+-    }
+-    if (commandLineArgs.type == CommandType::HELP) {
+-        // 该方法会显示帮助信息并退出进程
+-        commandParser.showHelp(0);
+-        Q_UNREACHABLE();
+-    }
+-    if (commandLineArgs.type == CommandType::VERSION) {
+-        // 该方法会显示帮助信息并退出进程
+-        commandParser.showVersion();
+-        Q_UNREACHABLE();
+-    }
+-    if (commandLineArgs.type != CommandType::DAEMON) {
+-        runClient(commandLineArgs.type, commandLineArgs.processName);
+-        return 0;
+-    }
+-
+-    process_manager::ConfParser confParser("/etc/kylin-os-manager/process-manager.ini");
+-    if (confParser.parseError()) {
+-        std::cout << "Failed to parse configuration file." << std::endl;
+-        return -1;
+-    }
+-
+-    process_manager::Daemon daemon(confParser.processConfs());
+-    daemon.run();
+-
+-    QDBusConnection conn = QDBusConnection::sessionBus();
+-    if (!conn.registerService("com.kylin.kom.process.manager")) {
+-        std::cout << "Register D-Bus service fail." << std::endl;
+-        return -1;
+-    }
+-
+-    QObject object;
+-    process_manager::DBusService dbusService(&object, daemon);
+-    if (!conn.registerObject("/com/kylin/kom/process/manager", &dbusService, QDBusConnection::ExportAllSlots)) {
+-        std::cout << "Register D-Bus object fail." << std::endl;
+-        return -1;
+-    }
+-
+-    app.exec();
+-}
+diff --git a/src/process_manager/process.cpp b/src/process_manager/process.cpp
+deleted file mode 100644
+index 2242913..0000000
+--- a/src/process_manager/process.cpp
++++ /dev/null
+@@ -1,117 +0,0 @@
+-#include <unistd.h>
+-#include <iostream>
+-#include <QProcess>
+-#include <QString>
+-#include <QStringList>
+-
+-#include "process.h"
+-
+-namespace process_manager {
+-
+-Process::Process(process_manager::ProcessConf conf)
+-    : m_qtProcess(new QProcess(this))
+-    , m_conf(conf)
+-    , m_isManualStop(false)
+-{
+-    connect(m_qtProcess, static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), this, &Process::onProcessFinished);
+-}
+-
+-Process::~Process() {
+-    // nothing to do
+-}
+-
+-std::pair<bool, std::string> Process::start() {
+-    std::string errorMessage;
+-    if (m_qtProcess->state() != QProcess::ProcessState::NotRunning) {
+-        errorMessage.clear();
+-        errorMessage.append(m_conf.name());
+-        errorMessage.append(" ");
+-        errorMessage.append("already running.");
+-        std::cout << errorMessage << std::endl;
+-        return std::make_pair(false, errorMessage);
+-    }
+-
+-    auto commands = m_conf.commands();
+-    if (commands.empty()) {
+-        errorMessage.clear();
+-        errorMessage.append(m_conf.name());
+-        errorMessage.append(" ");
+-        errorMessage.append("not command specified to run, please specify it in the configuration file.");
+-        std::cout << errorMessage << std::endl;
+-        return std::make_pair(false, errorMessage);
+-    }
+-    QString program = QString::fromStdString(commands.front());
+-    QStringList args;
+-    auto iter = commands.begin();
+-    for (iter++; iter != commands.end(); iter++) {
+-        args << QString::fromStdString(*iter);
+-    }
+-
+-    std::cout << m_conf.name() << " starting..." << std::endl;
+-    m_qtProcess->setProgram(program);
+-    m_qtProcess->setArguments(args);
+-    m_qtProcess->start();
+-    if (!m_qtProcess->waitForStarted(10000)) {
+-        errorMessage.clear();
+-        errorMessage.append(m_conf.name());
+-        errorMessage.append(" ");
+-        errorMessage.append("start timeout or error occurred.");
+-        std::cout << errorMessage << "QProcess: " << m_qtProcess->error() << std::endl;
+-        m_qtProcess->kill();
+-        return std::make_pair(false,errorMessage);
+-    }
+-
+-    m_isManualStop = false;
+-    time(&m_startTime);
+-    std::cout << m_conf.name() << " successfully started." << std::endl;
+-    return std::make_pair(true, "");
+-}
+-
+-std::pair<bool, std::string> Process::stop() {
+-    std::string errorMessage;
+-    if (m_qtProcess->state() == QProcess::ProcessState::NotRunning) {
+-        errorMessage.clear();
+-        errorMessage.append(m_conf.name());
+-        errorMessage.append(" ");
+-        errorMessage.append("not running.");
+-        std::cout << errorMessage << std::endl;
+-        return std::make_pair(false, errorMessage);
+-    }
+-
+-    m_isManualStop = true;
+-    m_qtProcess->terminate();
+-    if (!m_qtProcess->waitForFinished(10000))
+-        m_qtProcess->kill();
+-    return std::make_pair(true, "");
+-}
+-
+-bool Process::isAutostart() {
+-    return m_conf.autostart();
+-}
+-
+-bool Process::isRunning() {
+-    return m_qtProcess->state() != QProcess::ProcessState::NotRunning;
+-}
+-
+-time_t Process::startTime() {
+-    if (m_qtProcess->state() != QProcess::ProcessState::Running)
+-        return 0;
+-    return m_startTime;
+-}
+-
+-pid_t Process::pid() {
+-    return m_qtProcess->processId();
+-}
+-
+-void Process::onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus) {
+-    std::cout << m_conf.name() << " exit.\n"
+-              << "\tExitCode: " << exitCode << "\n"
+-              << "\tExitStatus: " << (exitStatus == QProcess::ExitStatus::NormalExit? "normal exit.": "crash exit.")
+-              << std::endl;
+-
+-    if (!m_isManualStop)
+-        if (m_conf.autorestart())
+-            start();
+-}
+-
+-}
+diff --git a/src/process_manager/process.h b/src/process_manager/process.h
+deleted file mode 100644
+index 74f923b..0000000
+--- a/src/process_manager/process.h
++++ /dev/null
+@@ -1,39 +0,0 @@
+-#ifndef KYLIN_OS_MANAGER_SRC_PROCESS_MANAGER_PROCESS_H
+-#define KYLIN_OS_MANAGER_SRC_PROCESS_MANAGER_PROCESS_H
+-
+-#include <utility>
+-#include <memory>
+-#include <QObject>
+-#include <QProcess>
+-#include "conf.h"
+-
+-namespace process_manager {
+-
+-class Process : public QObject {
+-    Q_OBJECT
+-
+-public:
+-    Process(ProcessConf conf);
+-    ~Process();
+-
+-    std::pair<bool, std::string> start();
+-    std::pair<bool, std::string> stop();
+-
+-    pid_t pid();
+-    time_t startTime();
+-    bool isAutostart();
+-    bool isRunning();
+-
+-private:
+-    QProcess *m_qtProcess;
+-    ProcessConf m_conf;
+-    bool m_isManualStop;    // 手动停止时不应该再根据配置文件自动拉起
+-    time_t m_startTime;
+-
+-private Q_SLOTS:
+-    void onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
+-};
+-
+-}
+-
+-#endif
+diff --git a/src/process_manager/service_dbus.cpp b/src/process_manager/service_dbus.cpp
+deleted file mode 100644
+index 8c1eff7..0000000
+--- a/src/process_manager/service_dbus.cpp
++++ /dev/null
+@@ -1,64 +0,0 @@
+-#include <QDBusMetaType>
+-#include <QDebug>
+-#include "service_dbus.h"
+-
+-#define PROCESS_STATUS_PID_KEY "Pid"
+-#define PROCESS_STATUS_ACTIVE_KEY "Active"
+-#define PROCESS_STATUS_START_TIME_KEY "StartTime"
+-
+-namespace process_manager {
+-
+-DBusService::DBusService(QObject *obj, process_manager::Daemon &daemon)
+-    : QDBusAbstractAdaptor(obj)
+-    , m_daemon(daemon)
+-{
+-    qDBusRegisterMetaType<ProcessStatus>();
+-    qDBusRegisterMetaType<ProcessStatusMap>();
+-}
+-
+-DBusService::~DBusService() {
+-    // nothing to do
+-}
+-
+-void DBusService::start(QString name, [[maybe_unused]] QDBusMessage message, bool &result, QString &errorMessage) {
+-    std::pair<bool, std::string> res = m_daemon.startProcess(name.toStdString());
+-    result = res.first;
+-    errorMessage = QString::fromStdString(res.second);
+-}
+-
+-void DBusService::stop(QString name, [[maybe_unused]] QDBusMessage message, bool &result, QString &errorMessage) {
+-    std::pair<bool, std::string> res = m_daemon.stopProcess(name.toStdString());
+-    result = res.first;
+-    errorMessage = QString::fromStdString(res.second);
+-}
+-
+-void DBusService::restart(QString name, [[maybe_unused]] QDBusMessage message, bool &result, QString &errorMessage) {
+-    std::pair<bool, std::string> res = m_daemon.restart(name.toStdString());
+-    result = res.first;
+-    errorMessage = QString::fromStdString(res.second);
+-}
+-
+-void DBusService::status(QString name, [[maybe_unused]] QDBusMessage message, ProcessStatusMap &status) {
+-    auto processes = m_daemon.processes();
+-    if (name.isEmpty()) {
+-        // 返回全部进程的状态
+-        for (const auto &[processName, processObj]: processes) {
+-            ProcessStatus itemStatus;
+-            itemStatus.insert(PROCESS_STATUS_ACTIVE_KEY, processObj->isRunning());
+-            itemStatus.insert(PROCESS_STATUS_PID_KEY, processObj->pid());
+-            itemStatus.insert(PROCESS_STATUS_START_TIME_KEY, (unsigned long long )processObj->startTime());
+-            status.insert(QString::fromStdString(processName), itemStatus);
+-        }
+-    } else {
+-        auto iter = processes.find(name.toStdString());
+-        if (iter != processes.end()) {
+-            ProcessStatus itemStatus;
+-            itemStatus.insert(PROCESS_STATUS_ACTIVE_KEY, iter->second->isRunning());
+-            itemStatus.insert(PROCESS_STATUS_PID_KEY, iter->second->pid());
+-            itemStatus.insert(PROCESS_STATUS_START_TIME_KEY, (unsigned long long )iter->second->startTime());
+-            status.insert(QString::fromStdString(iter->first), itemStatus);
+-        }
+-    }
+-}
+-
+-}
+diff --git a/src/process_manager/service_dbus.h b/src/process_manager/service_dbus.h
+deleted file mode 100644
+index 3a73496..0000000
+--- a/src/process_manager/service_dbus.h
++++ /dev/null
+@@ -1,38 +0,0 @@
+-#ifndef KYLIN_OS_MANAGER_SRC_PROCESS_MANAGER_SERVICE_DBUS_H
+-#define KYLIN_OS_MANAGER_SRC_PROCESS_MANAGER_SERVICE_DBUS_H
+-
+-#include <QDBusAbstractAdaptor>
+-#include <QDBusMessage>
+-#include <QMap>
+-#include <QVariant>
+-#include <QString>
+-#include "daemon.h"
+-
+-typedef QMap<QString, QVariant> ProcessStatus;
+-typedef QMap<QString, ProcessStatus> ProcessStatusMap;
+-Q_DECLARE_METATYPE(ProcessStatus)
+-Q_DECLARE_METATYPE(ProcessStatusMap)
+-
+-namespace process_manager {
+-
+-class DBusService: public QDBusAbstractAdaptor {
+-    Q_OBJECT
+-    Q_CLASSINFO("D-Bus Interface", "com.kylin.kom.process.manager")
+-
+-public:
+-    DBusService(QObject *obj, Daemon &daemon);
+-    ~DBusService();
+-
+-private:
+-    Daemon &m_daemon;
+-
+-public Q_SLOTS:
+-    void start(QString name, QDBusMessage message, bool &result, QString &errorMessage);
+-    void stop(QString name, QDBusMessage message, bool &result, QString &errorMessage);
+-    void restart(QString name, QDBusMessage message, bool &result, QString &errorMessage);
+-    void status(QString name, QDBusMessage message, ProcessStatusMap &status);
+-};
+-
+-}
+-
+-#endif
+diff --git a/src/tray_service/CMakeLists.txt b/src/tray_service/CMakeLists.txt
+deleted file mode 100644
+index eb1ccfe..0000000
+--- a/src/tray_service/CMakeLists.txt
++++ /dev/null
+@@ -1,29 +0,0 @@
+-project(kylin-os-manager-tray)
+-
+-set(ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../../)
+-set(TRAY_SERVICE_DIR ${CMAKE_CURRENT_LIST_DIR})
+-set(CMAKE_AUTOMOC ON)
+-set(CMAKE_AUTORCC ON)
+-set(CMAKE_AUTOUIC ON)
+-
+-find_package(Qt5 COMPONENTS Widgets DBus REQUIRED)
+-
+-set(SRCS
+-        ${ROOT_DIR}/interface/kom_tray_interface.cpp
+-        ${TRAY_SERVICE_DIR}/main.cpp
+-        ${TRAY_SERVICE_DIR}/daemon.cpp
+-        ${TRAY_SERVICE_DIR}/tray.cpp
+-        ${TRAY_SERVICE_DIR}/action.cpp
+-        ${TRAY_SERVICE_DIR}/service_dbus.cpp
+-        ${TRAY_SERVICE_DIR}/client_dbus.cpp)
+-
+-include_directories(${TRAY_SERVICE_DIR})
+-include_directories(${ROOT_DIR}/3rdparty/kyplugin/)
+-include_directories(${ROOT_DIR}/interface/)
+-
+-add_executable(${PROJECT_NAME} ${SRCS})
+-target_link_libraries(${PROJECT_NAME} PRIVATE kyplugin)
+-target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets)
+-target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::DBus)
+-
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/bin/)
+diff --git a/src/tray_service/action.cpp b/src/tray_service/action.cpp
+deleted file mode 100644
+index f11d0b5..0000000
+--- a/src/tray_service/action.cpp
++++ /dev/null
+@@ -1,76 +0,0 @@
+-#include <iostream>
+-#include <QAction>
+-#include <QMenu>
+-#include "action.h"
+-
+-namespace tray {
+-
+-Action::Action(const std::string &name)
+-    : m_type(KomActionType::NONE)
+-    , m_name(name)
+-    , m_qtAction(std::make_shared<QAction>())
+-{
+-    /* nothing to do */
+-}
+-
+-Action::~Action() {
+-    std::cout << "Action destruction exec." << std::endl;
+-}
+-
+-void Action::enroll(QMenu *menu) {
+-    menu->addAction(m_qtAction.get());
+-}
+-
+-void Action::setType(KomActionType type) {
+-    m_type = type;
+-}
+-
+-void Action::setIcon(QIcon icon) {
+-    if (m_type == KomActionType::NORMAL) {
+-        m_qtAction->setIcon(icon);
+-    }
+-}
+-
+-void Action::setLabel(const std::string &label) {
+-    if (m_type == KomActionType::CHECK || m_type == KomActionType::NORMAL)
+-        m_qtAction->setText(QString::fromStdString(label));
+-}
+-
+-void Action::setTooltip(const std::string &tooltip) {
+-    if (m_type != KomActionType::CHECK || m_type == KomActionType::NORMAL)
+-        m_qtAction->setToolTip(QString::fromStdString(tooltip));
+-}
+-
+-void Action::setActive(bool isActive) {
+-    if (m_type == KomActionType::CHECK) {
+-        if (isActive) {
+-            m_qtAction->setIcon(QIcon::fromTheme("object-select-symbolic"));
+-        } else {
+-            std::cout << "++++++++++++" << QIcon().isNull() << std::endl;
+-            m_qtAction->setIcon(QIcon());
+-        }
+-    }
+-}
+-
+-void Action::setCallback(std::function<bool()> callback) {
+-    if (!callback)
+-        return;
+-
+-    if (m_type == KomActionType::CHECK) {
+-        connect(m_qtAction.get(), &QAction::triggered, this, [=]() {
+-            bool ret = callback();
+-            if (ret) {
+-                setActive(true);
+-            } else {
+-                setActive(false);
+-            }
+-        });
+-    }
+-    if (m_type == KomActionType::NORMAL) {
+-        connect(m_qtAction.get(), &QAction::triggered, this, [=]() {
+-            callback();
+-        });
+-    }
+-}
+-
+-}
+diff --git a/src/tray_service/action.h b/src/tray_service/action.h
+deleted file mode 100644
+index 8387b02..0000000
+--- a/src/tray_service/action.h
++++ /dev/null
+@@ -1,40 +0,0 @@
+-#ifndef KYLIN_OS_MANAGER_SRC_TRAY_SERVICE_ACTION_H
+-#define KYLIN_OS_MANAGER_SRC_TRAY_SERVICE_ACTION_H
+-
+-#include <memory>
+-#include <string>
+-#include <functional>
+-#include <QObject>
+-#include <QIcon>
+-
+-#include "kom_tray_interface.h"
+-
+-class QAction;
+-class QMenu;
+-
+-namespace tray {
+-
+-class Action : public QObject {
+-    Q_OBJECT
+-
+-public:
+-    Action(const std::string &name);
+-    ~Action();
+-
+-    void enroll(QMenu *menu);
+-    void setType(KomActionType type);
+-    void setIcon(QIcon icon);
+-    void setLabel(const std::string &label);
+-    void setTooltip(const std::string &tooltip);
+-    void setActive(bool isActive);
+-    void setCallback(std::function<bool()> callback);
+-
+-private:
+-    KomActionType m_type;   // 普通类型和 check 类型
+-    std::string m_name;
+-    std::shared_ptr<QAction> m_qtAction;
+-};
+-
+-}
+-
+-#endif
+diff --git a/src/tray_service/client_dbus.cpp b/src/tray_service/client_dbus.cpp
+deleted file mode 100644
+index b8381cb..0000000
+--- a/src/tray_service/client_dbus.cpp
++++ /dev/null
+@@ -1,128 +0,0 @@
+-#include <time.h>
+-#include <iostream>
+-#include <sstream>
+-#include <iomanip>
+-
+-#include <QDBusConnection>
+-#include <QDBusMessage>
+-#include <QDBusArgument>
+-#include <QMap>
+-#include <QString>
+-#include <QDebug>
+-
+-#include "client_dbus.h"
+-
+-#define SERVICE_NAME "com.kylin.kom.tray"
+-#define OBJECT_PATH "/com/kylin/kom/tray"
+-#define INTERFACE_NAME "com.kylin.kom.tray"
+-
+-namespace tray {
+-
+-DBusClient::DBusClient() {
+-    // nothing to do
+-}
+-
+-DBusClient::~DBusClient() {
+-    // nothing to do
+-}
+-
+-bool DBusClient::startTray(QString name) {
+-    auto message = QDBusMessage::createMethodCall(SERVICE_NAME, OBJECT_PATH, INTERFACE_NAME, "start");
+-    message << name;
+-
+-    auto response = QDBusConnection::sessionBus().call(message);
+-    if (response.type() == QDBusMessage::ErrorMessage) {
+-        std::cout << "ERR: start tray " << name.toStdString() << " fail." << std::endl;
+-        return false;
+-    }
+-
+-    auto reply = response.arguments();
+-    if (reply.size() < 2) {
+-        std::cout << "ERR: start tray " << name.toStdString() << " fail." << std::endl;
+-        return false;
+-    }
+-
+-    if (!reply.at(0).toBool()) {
+-        std::cout << "ERR: start tray" << name.toStdString() << " fail. " << reply.at(1).toString().toStdString() << std::endl;
+-        return false;
+-    }
+-
+-    return true;
+-}
+-
+-bool DBusClient::stopTray(QString name) {
+-    auto message = QDBusMessage::createMethodCall(SERVICE_NAME, OBJECT_PATH, INTERFACE_NAME, "stop");
+-    message << name;
+-
+-    auto response = QDBusConnection::sessionBus().call(message);
+-    if (response.type() == QDBusMessage::ErrorMessage) {
+-        std::cout << "ERR: stop tray " << name.toStdString() << " fail." << std::endl;
+-        return false;
+-    }
+-
+-    auto reply = response.arguments();
+-    if (reply.size() < 2) {
+-        std::cout << "ERR: stop tray " << name.toStdString() << " fail." << std::endl;
+-        return false;
+-    }
+-
+-    if (!reply.at(0).toBool()) {
+-        std::cout << "ERR: stop tray" << name.toStdString() << " fail. " << reply.at(1).toString().toStdString() << std::endl;
+-        return false;
+-    }
+-
+-    return true;
+-}
+-
+-bool DBusClient::trayStatus(QString name) {
+-    auto message = QDBusMessage::createMethodCall(SERVICE_NAME, OBJECT_PATH, INTERFACE_NAME, "status");
+-    message << name;
+-
+-    auto response = QDBusConnection::sessionBus().call(message);
+-    if (response.type() == QDBusMessage::ErrorMessage) {
+-        std::cout << "ERR: obtain tray status " << name.toStdString() << " fail." << std::endl;
+-        return false;
+-    }
+-
+-    auto reply = response.arguments();
+-    if (reply.isEmpty()) {
+-        std::cout << "ERR: obtain tray status " << name.toStdString() << " fail." << std::endl;
+-        return false;
+-    }
+-
+-    QMap<QString, QMap<QString, QVariant>> trayStatus;
+-    auto dbusArgument = reply.first().value<QDBusArgument>();
+-    dbusArgument >> trayStatus;
+-
+-    QMap<QString, QMap<QString, QVariant>>::iterator iter = trayStatus.begin();
+-    for (; iter != trayStatus.end(); iter++) {
+-        unsigned long long int uptime = iter.value().value("uptime").toULongLong();
+-        bool isActive = iter.value().value("active").toBool();
+-        if (isActive) {
+-            std::cout << "[" << iter.key().toStdString() << "] \033[32mRUNNING\033[0m \tuptime: " << uptimeString(uptime) << std::endl;
+-        } else {
+-            std::cout << "[" << iter.key().toStdString() << "] \033[31mSTOPPINNG\033[0m" << std::endl;
+-        }
+-    }
+-
+-    return true;
+-}
+-
+-std::string DBusClient::uptimeString(time_t sec)
+-{
+-    tm *p = gmtime(&sec);
+-
+-    std::ostringstream oss;
+-    if (p->tm_yday == 1) {
+-        oss << p->tm_yday << "day ";
+-    } else if (p->tm_yday > 1) {
+-        oss << p->tm_yday << "days ";
+-    }
+-    oss << std::setw(2) << std::setfill('0') << p->tm_hour << ":";
+-    oss << std::setw(2) << std::setfill('0') << p->tm_min << ":";
+-    oss << std::setw(2) << std::setfill('0') << p->tm_sec;
+-
+-    return oss.str();
+-}
+-
+-}
+diff --git a/src/tray_service/client_dbus.h b/src/tray_service/client_dbus.h
+deleted file mode 100644
+index 5ad2360..0000000
+--- a/src/tray_service/client_dbus.h
++++ /dev/null
+@@ -1,25 +0,0 @@
+-#ifndef KYLIN_OS_MANAGER_SRC_TRAY_SERVICE_CLIENT_DBUS_H
+-#define KYLIN_OS_MANAGER_SRC_TRAY_SERVICE_CLIENT_DBUS_H
+-
+-#include <time.h>
+-#include <string>
+-
+-namespace tray {
+-
+-class DBusClient {
+-public:
+-    DBusClient();
+-    ~DBusClient();
+-
+-    bool startTray(QString name);
+-    bool stopTray(QString name);
+-    bool trayStatus(QString name);
+-
+-private:
+-    std::string uptimeString(time_t sec);
+-
+-};
+-
+-}
+-
+-#endif
+diff --git a/src/tray_service/daemon.cpp b/src/tray_service/daemon.cpp
+deleted file mode 100644
+index cb48056..0000000
+--- a/src/tray_service/daemon.cpp
++++ /dev/null
+@@ -1,80 +0,0 @@
+-#include <iostream>
+-
+-#include "kom_tray_interface.h"
+-#include "daemon.h"
+-
+-namespace tray {
+-
+-Daemon::Daemon()
+-    : m_pluginManager(new kyplugin::KyPlugin)
+-{
+-    m_loadPath.emplace_back("/opt/kylin-os-manager/tray-plugins/");
+-    m_loadPath.emplace_back("/home/snowsi/snowsi/clion-code/kylin-os-manager/cmake-build-v101-2304/src/tray_service/example/");
+-
+-    loadPlugin();
+-}
+-
+-Daemon::~Daemon() {
+-    /* nothing to do */
+-}
+-
+-std::map<std::string, KomTrayProvider *> Daemon::trayProviders() {
+-    return m_trayProviders;
+-}
+-
+-std::map<std::string, std::shared_ptr<Tray>> Daemon::trays() {
+-    return m_trays;
+-}
+-
+-std::pair<bool, std::string> Daemon::startTray(std::string name) {
+-    auto iter = m_trayProviders.find(name);
+-    if (iter == m_trayProviders.end()) {
+-        std::cout << "ERR: " << name << " not found." << std::endl;
+-        return std::make_pair(false, name + " not found.");
+-    }
+-
+-    if (m_trays.find(name) != m_trays.end())
+-        return std::make_pair(true, "");
+-
+-    auto tray = std::make_shared<Tray>(iter->second->create());
+-    tray->enroll();
+-    m_trays.emplace(std::make_pair(tray->name(), tray));
+-
+-    return std::make_pair(true, "");
+-}
+-
+-std::pair<bool, std::string> Daemon::stopTray(std::string name) {
+-    auto providerIter = m_trayProviders.find(name);
+-    if (providerIter == m_trayProviders.end()) {
+-        std::cout << "ERR:" << name << " not found." << std::endl;
+-        return std::make_pair(false, name + " not found.");
+-    }
+-
+-    auto trayIter = m_trays.find(name);
+-    if (trayIter != m_trays.end())
+-        m_trays.erase(trayIter);
+-
+-    return std::make_pair(true, "");
+-}
+-
+-void Daemon::loadPlugin() {
+-    m_pluginManager->acceptProviderType<KomTrayProvider>();
+-    for (const auto &item: m_loadPath) {
+-        m_pluginManager->loadFromFolder(item);
+-    }
+-
+-    std::vector<KomTrayProvider *> providers;
+-    m_pluginManager->getProviders(providers);
+-    for (const auto &item: providers) {
+-        std::shared_ptr<Tray> tray = std::make_shared<Tray>(item->create());
+-        m_trayProviders.emplace(std::make_pair(tray->name(), item));
+-        m_trays.emplace(std::make_pair(tray->name(), tray));
+-    }
+-}
+-
+-void Daemon::enrollTrays() {
+-    for (const auto &[name, tray]: m_trays)
+-        tray->enroll();
+-}
+-
+-}
+diff --git a/src/tray_service/daemon.h b/src/tray_service/daemon.h
+deleted file mode 100644
+index 259fdb0..0000000
+--- a/src/tray_service/daemon.h
++++ /dev/null
+@@ -1,43 +0,0 @@
+-#ifndef KYLIN_OS_MANAGER_SRC_TRAY_SERVICE_H
+-#define KYLIN_OS_MANAGER_SRC_TRAY_SERVICE_H
+-
+-#include <vector>
+-#include <string>
+-#include <memory>
+-#include <map>
+-#include <utility>
+-#include <QObject>
+-
+-#include "tray.h"
+-
+-namespace kyplugin {
+-class KyPlugin;
+-}
+-
+-namespace tray {
+-
+-class Daemon : public QObject {
+-    Q_OBJECT
+-
+-public:
+-    Daemon();
+-    ~Daemon();
+-
+-    void enrollTrays();
+-    std::pair<bool, std::string> startTray(std::string name);
+-    std::pair<bool, std::string> stopTray(std::string name);
+-    std::map<std::string, std::shared_ptr<Tray>> trays();
+-    std::map<std::string, KomTrayProvider *> trayProviders();
+-
+-private:
+-    void loadPlugin();
+-
+-    std::vector<std::string> m_loadPath;
+-    kyplugin::KyPlugin *m_pluginManager;
+-    std::map<std::string, KomTrayProvider *> m_trayProviders;
+-    std::map<std::string, std::shared_ptr<Tray>> m_trays;    // 在容器中,则证明托盘已启动
+-};
+-
+-}
+-
+-#endif
+diff --git a/src/tray_service/example/CMakeLists.txt b/src/tray_service/example/CMakeLists.txt
+deleted file mode 100644
+index b8d97f2..0000000
+--- a/src/tray_service/example/CMakeLists.txt
++++ /dev/null
+@@ -1,25 +0,0 @@
+-cmake_minimum_required(VERSION 3.5)
+-
+-project(kylin-os-manager-tray-example)
+-
+-set(EXAMPLE_DIR ${CMAKE_CURRENT_LIST_DIR})
+-
+-#set(CMAKE_AUTOMOC ON)
+-#set(CMAKE_AUTORCC ON)
+-#set(CMAKE_AUTOUIC ON)
+-
+-set(CMAKE_CXX_STANDARD 17)
+-set(CMAKE_CXX_FLAGS "-Wall -g -O0")
+-
+-include_directories(${EXAMPLE_DIR})
+-include_directories(${EXAMPLE_DIR}/interface/)
+-include_directories(/usr/include/kylin-os-manager-plugin/)
+-
+-set(SRCS
+-        ${EXAMPLE_DIR}/interface/kom_tray_interface.cpp
+-        ${EXAMPLE_DIR}/connector.cpp
+-        ${EXAMPLE_DIR}/protocol.cpp)
+-
+-add_library(${PROJECT_NAME} SHARED ${SRCS})
+-
+-install(TARGETS ${PROJECT_NAME} DESTINATION /opt/kylin-os-manager/tray-plugins)
+diff --git a/src/tray_service/example/connector.cpp b/src/tray_service/example/connector.cpp
+deleted file mode 100644
+index 2c016b2..0000000
+--- a/src/tray_service/example/connector.cpp
++++ /dev/null
+@@ -1,8 +0,0 @@
+-#include "protocol.h"
+-
+-extern "C"
+-bool kyconnect(kyplugin::Host &host) {
+-    host.add(new example::ProtocolProvider());
+-
+-    return true;
+-}
+\ No newline at end of file
+diff --git a/src/tray_service/example/interface/kom_tray_interface.cpp b/src/tray_service/example/interface/kom_tray_interface.cpp
+deleted file mode 100644
+index 1c4880e..0000000
+--- a/src/tray_service/example/interface/kom_tray_interface.cpp
++++ /dev/null
+@@ -1,5 +0,0 @@
+-#include "kom_tray_interface.h"
+-
+-const unsigned int KomTrayProvider::providerVersion = 1;
+-const unsigned int KomTrayProvider::providerLowestVersion = 1;
+-const std::string KomTrayProvider::providerType = "KomTrayProvider";
+diff --git a/src/tray_service/example/interface/kom_tray_interface.h b/src/tray_service/example/interface/kom_tray_interface.h
+deleted file mode 100644
+index 371cc21..0000000
+--- a/src/tray_service/example/interface/kom_tray_interface.h
++++ /dev/null
+@@ -1,78 +0,0 @@
+-#ifndef KYMANAGER_TRAY_INTERFACE_H
+-#define KYMANAGER_TRAY_INTERFACE_H
+-
+-#include <string>
+-#include <functional>
+-#include <vector>
+-
+-#include "kyplugin.h"
+-
+-enum class KomActionType {
+-    NONE,
+-
+-    // 可以包含一个左侧的图标和文本
+-    NORMAL,
+-
+-    // 显示为一个分隔线
+-    // 分隔线类型下,ActionOption 中所有选项失效
+-    SEPARATORS,
+-
+-    // 复选类型,选中左侧图标显示对号,不选中左侧不显示图标
+-    // 该类型下 ActionOption 中 iconPath 字段失效
+-    // ActionOption 中的 callBack 返回 ture 表示选中,false 表示不选中
+-    CHECK
+-};
+-
+-typedef struct _KomActionEntry KomActionEntry;
+-struct _KomActionEntry {
+-    _KomActionEntry(std::string name,
+-                    std::string label,
+-                    std::function<bool()> callback,
+-                    std::string icon = "",
+-                    std::string tooltip = "",
+-                    KomActionType type = KomActionType::NORMAL,
+-                    bool isActive = true)
+-        : name(name)
+-        , label(label)
+-        , callback(callback)
+-        , icon(icon)
+-        , tooltip(tooltip)
+-        , type(type)
+-        , isActive(isActive) {}
+-
+-    std::string name;
+-    std::string label;
+-    std::function<bool()> callback;
+-    std::string icon;
+-    std::string tooltip;
+-    KomActionType type;
+-    bool isActive;
+-};
+-
+-class KomTrayInterface {
+-public:
+-    virtual ~KomTrayInterface() {}
+-    virtual std::string name() = 0;
+-    virtual std::string icon() = 0;
+-    virtual std::string tooltip() = 0;
+-    virtual void start() {}
+-    virtual void stop() {}
+-    virtual void trigger() {}
+-    virtual std::vector<KomActionEntry> actions() {return std::vector<KomActionEntry>();}
+-};
+-
+-class KomTrayProvider : public kyplugin::Provider {
+-public:
+-    virtual KomTrayInterface *create() const = 0;
+-    unsigned int getVersion() const {return providerVersion;}
+-
+-private:
+-    friend class kyplugin::KyPlugin;
+-    std::string kypluginGetType() const {return providerType;}
+-
+-    static const unsigned int providerVersion;
+-    static const unsigned int providerLowestVersion;
+-    static const std::string providerType;
+-};
+-
+-#endif
+diff --git a/src/tray_service/example/protocol.cpp b/src/tray_service/example/protocol.cpp
+deleted file mode 100644
+index 84c4ee2..0000000
+--- a/src/tray_service/example/protocol.cpp
++++ /dev/null
+@@ -1,57 +0,0 @@
+-#include <iostream>
+-
+-#include "protocol.h"
+-
+-namespace example {
+-
+-Protocol::~Protocol() {
+-    std::cout << "Tray3 destruction exec." << std::endl;
+-}
+-
+-std::string Protocol::name() {
+-    return "Tray3";
+-}
+-
+-std::string Protocol::icon() {
+-    return "kylin-os-manager";
+-    //return "ukui-eco-symbolic";
+-    //return "computer-symbolic";
+-    //return "kylin-ipmsg";
+-}
+-
+-std::string Protocol::tooltip() {
+-    return "第三个托盘";
+-}
+-
+-void Protocol::trigger() {
+-    std::cout << "kylin os manager Tray3 trigger exec." << std::endl;
+-}
+-
+-std::vector<KomActionEntry> Protocol::actions() {
+-    std::vector<KomActionEntry> entry {
+-        {"action1", "第一个 action", std::function<bool()>(std::bind(&Protocol::action1, this))},
+-        {"action2", "第二个 action", std::function<bool()>(), "ukui-eco-symbolic"},
+-        {"action3", "",  std::function<bool()>(), "", "", KomActionType::SEPARATORS},
+-        {"action4", "第四个 action", std::function<bool()>(std::bind(&Protocol::action4, this)), "computer-symbolic", "第个 action", KomActionType::CHECK}
+-    };
+-
+-    return entry;
+-}
+-
+-bool Protocol::action1() {
+-    std::cout << "kylin os manager Tray3 action1 cliecked." << std::endl;
+-    return true;
+-}
+-
+-bool Protocol::action4() {
+-    static bool result = false;
+-    result = !result;
+-    std::cout << "kylin os manager Tray3 action4 cliecked. result: " << result << std::endl;
+-    return result;
+-}
+-
+-KomTrayInterface *ProtocolProvider::create() const {
+-    return new Protocol();
+-}
+-
+-}
+diff --git a/src/tray_service/example/protocol.h b/src/tray_service/example/protocol.h
+deleted file mode 100644
+index e56efe9..0000000
+--- a/src/tray_service/example/protocol.h
++++ /dev/null
+@@ -1,27 +0,0 @@
+-#ifndef KYLIN_OS_MANAGER_SRC_TRAY_SERVICE_EXAMPLE_H
+-#define KYLIN_OS_MANAGER_SRC_TRAY_SERVICE_EXAMPLE_H
+-
+-#include "kom_tray_interface.h"
+-
+-namespace example {
+-
+-class Protocol : public KomTrayInterface {
+-    ~Protocol();
+-    std::string name() override;
+-    std::string icon() override;
+-    std::string tooltip() override;
+-    void trigger() override;
+-    std::vector<KomActionEntry> actions() override;
+-
+-    bool action1();
+-    bool action4();
+-};
+-
+-class ProtocolProvider : public KomTrayProvider {
+-public:
+-    KomTrayInterface *create() const override;
+-};
+-
+-}
+-
+-#endif
+diff --git a/src/tray_service/main.cpp b/src/tray_service/main.cpp
+deleted file mode 100644
+index 9f90ed5..0000000
+--- a/src/tray_service/main.cpp
++++ /dev/null
+@@ -1,134 +0,0 @@
+-#include <QApplication>
+-#include <QDBusConnection>
+-#include <QCommandLineParser>
+-#include <QCommandLineOption>
+-#include <QDebug>
+-#include "daemon.h"
+-#include "client_dbus.h"
+-#include "service_dbus.h"
+-#include "../config.h"
+-
+-enum class CommandType {
+-    DAEMON,
+-    START,
+-    STOP,
+-    STATUS,
+-    HELP,
+-    VERSION
+-};
+-
+-struct CommandLineArgument {
+-    CommandType type;
+-    QString trayName;
+-};
+-
+-bool parseCommandLine(QCommandLineParser &parser, CommandLineArgument &argument, QString &errorMessage) {
+-    parser.setApplicationDescription("Kylin os manager tray service provides tray management functions.");
+-    const QCommandLineOption help = parser.addHelpOption();
+-    const QCommandLineOption version = parser.addVersionOption();
+-    parser.addPositionalArgument("Operate", "Operate Performed.");
+-    parser.addPositionalArgument("Name", "Tray Name.");
+-    if (!parser.parse(QApplication::arguments())) {
+-        errorMessage = "ERROR: argument parser fail.";
+-        return false;
+-    }
+-
+-    if (parser.isSet(help)) {
+-        argument.type = CommandType::HELP;
+-        return true;
+-    }
+-    if (parser.isSet(version)) {
+-        argument.type = CommandType::VERSION;
+-        return true;
+-    }
+-
+-    QStringList positionalArguments = parser.positionalArguments();
+-    if (!positionalArguments.isEmpty()) {
+-        QString type = positionalArguments.first();
+-        if (type == "start" && positionalArguments.size() >= 2) {
+-            argument.type = CommandType::START;
+-            argument.trayName = positionalArguments.at(1);
+-            return true;
+-        }
+-        if (type == "stop" && positionalArguments.size() >= 2) {
+-            argument.type = CommandType::STOP;
+-            argument.trayName = positionalArguments.at(1);
+-            return true;
+-        }
+-        if (type == "status") {
+-            argument.type = CommandType::STATUS;
+-            if (positionalArguments.size() >= 2)
+-                argument.trayName = positionalArguments.at(1);
+-            return true;
+-        }
+-        errorMessage = "command line format error.";
+-        return false;
+-    }
+-
+-    argument.type = CommandType::DAEMON;
+-    return true;
+-}
+-
+-int runClient(CommandType type, QString name) {
+-    tray::DBusClient client;
+-    int status = 0;
+-
+-    switch (type) {
+-    case CommandType::START:
+-        status = client.startTray(name);
+-        break;
+-    case CommandType::STOP:
+-        status =client.stopTray(name);
+-        break;
+-    case CommandType::STATUS:
+-        status = client.trayStatus(name);
+-        break;
+-    default:
+-        break;
+-    }
+-
+-    return status;
+-}
+-
+-int main(int argc, char *argv[]) {
+-    QApplication app(argc, argv);
+-    app.setApplicationName("kylin-os-manager-tray");
+-    app.setApplicationVersion(KYLIN_OS_MANAGER_VERSION);
+-
+-    QCommandLineParser parser;
+-    CommandLineArgument commandLineArgument;
+-    QString errorMessage;
+-    if (!parseCommandLine(parser, commandLineArgument, errorMessage)) {
+-        qCritical() << errorMessage;
+-        return -1;
+-    }
+-    if (commandLineArgument.type == CommandType::HELP) {
+-        parser.showHelp();
+-        Q_UNREACHABLE();
+-    }
+-    if (commandLineArgument.type == CommandType::VERSION) {
+-        parser.showVersion();
+-        Q_UNREACHABLE();
+-    }
+-    if (commandLineArgument.type != CommandType::DAEMON) {
+-        return runClient(commandLineArgument.type, commandLineArgument.trayName);
+-    }
+-
+-    tray::Daemon daemon;
+-    daemon.enrollTrays();
+-
+-    QDBusConnection conn = QDBusConnection::sessionBus();
+-    if (!conn.registerService("com.kylin.kom.tray")) {
+-        qCritical() << "register dbus service fail: " << conn.lastError().message();
+-        return -1;
+-    }
+-
+-    QObject object;
+-    tray::DBusService dbusService(&object, daemon);
+-    if (!conn.registerObject("/com/kylin/kom/tray", &dbusService, QDBusConnection::ExportAllSlots)) {
+-        qCritical() << "register dbus object fail: " << conn.lastError().message();
+-        return -1;
+-    }
+-
+-    app.exec();
+-}
+\ No newline at end of file
+diff --git a/src/tray_service/service_dbus.cpp b/src/tray_service/service_dbus.cpp
+deleted file mode 100644
+index bf41fa5..0000000
+--- a/src/tray_service/service_dbus.cpp
++++ /dev/null
+@@ -1,79 +0,0 @@
+-#include <QDBusMetaType>
+-
+-#include "service_dbus.h"
+-
+-#define TRAY_STATUS_KEY_UPTIME "uptime"
+-#define TRAY_STATUS_KEY_ACTIVE "active"
+-
+-namespace tray {
+-
+-DBusService::DBusService(QObject *obj, Daemon &daemon)
+-    : QDBusAbstractAdaptor(obj)
+-    , m_daemon(daemon)
+-{
+-    qDBusRegisterMetaType<TrayStatus>();
+-    qDBusRegisterMetaType<TrayStatusMap>();
+-}
+-
+-DBusService::~DBusService() {
+-
+-}
+-
+-void DBusService::start(QString trayName, [[maybe_unused]]QDBusMessage message, bool &result, [[maybe_unused]]QString &errorMessage) {
+-    if (trayName.isEmpty()) {
+-        result = false;
+-        errorMessage = "tray name is empty";
+-        return;
+-    }
+-
+-    auto reply = m_daemon.startTray(trayName.toStdString());
+-    result = reply.first;
+-    errorMessage = QString::fromStdString(reply.second);
+-}
+-
+-void DBusService::stop(QString trayName, [[maybe_unused]]QDBusMessage message, bool &result, [[maybe_unused]]QString &errorMessage) {
+-    if (trayName.isEmpty()) {
+-        result = false;
+-        errorMessage = "tray name is empty";
+-        return;
+-    }
+-
+-    auto reply = m_daemon.stopTray(trayName.toStdString());
+-    result = reply.first;
+-    errorMessage = QString::fromStdString(reply.second);
+-}
+-
+-void DBusService::status(QString trayName, [[maybe_unused]]QDBusMessage message, TrayStatusMap &trayStatusMap) {
+-    if (trayName.isEmpty()) {
+-        auto trays = m_daemon.trays();
+-        for (const auto &[name, provider]: m_daemon.trayProviders()) {
+-            TrayStatus item;
+-            auto iter = trays.find(name);
+-            if (iter == trays.end()) {
+-                item.insert(TRAY_STATUS_KEY_ACTIVE, false);
+-                item.insert(TRAY_STATUS_KEY_UPTIME, 0);
+-            } else {
+-                item.insert(TRAY_STATUS_KEY_ACTIVE, true);
+-                item.insert(TRAY_STATUS_KEY_UPTIME, (unsigned long long int)iter->second->uptime());
+-            }
+-            trayStatusMap.insert(QString::fromStdString(name), item);
+-        }
+-    } else {
+-        auto providers = m_daemon.trayProviders();
+-        auto trays = m_daemon.trays();
+-        if (providers.find(trayName.toStdString()) != providers.end()) {
+-            TrayStatus item;
+-            auto iter = trays.find(trayName.toStdString());
+-            if (iter != trays.end()) {
+-                item.insert(TRAY_STATUS_KEY_ACTIVE, true);
+-                item.insert(TRAY_STATUS_KEY_UPTIME, (unsigned long long int)iter->second->uptime());
+-            } else {
+-                item.insert(TRAY_STATUS_KEY_ACTIVE, false);
+-                item.insert(TRAY_STATUS_KEY_UPTIME, 0);
+-            }
+-            trayStatusMap.insert(trayName, item);
+-        }
+-    }
+-}
+-
+-}
+diff --git a/src/tray_service/service_dbus.h b/src/tray_service/service_dbus.h
+deleted file mode 100644
+index 3130597..0000000
+--- a/src/tray_service/service_dbus.h
++++ /dev/null
+@@ -1,38 +0,0 @@
+-#ifndef KYLIN_OS_MANAGER_SRC_TRAY_CESERVICE_SERVI_DBUS_H
+-#define KYLIN_OS_MANAGER_SRC_TRAY_SERVICE_SERVICE_DBUS_H
+-
+-#include <QDBusAbstractAdaptor>
+-#include <QDBusMessage>
+-#include <QString>
+-#include <QMap>
+-#include <QVariant>
+-
+-#include "daemon.h"
+-
+-typedef QMap<QString, QVariant> TrayStatus;
+-typedef QMap<QString, TrayStatus> TrayStatusMap;
+-Q_DECLARE_METATYPE(TrayStatus)
+-Q_DECLARE_METATYPE(TrayStatusMap);
+-
+-namespace tray {
+-
+-class DBusService : public QDBusAbstractAdaptor {
+-    Q_OBJECT
+-    Q_CLASSINFO("D-Bus Interface", "com.kylin.kom.tray")
+-
+-public:
+-    DBusService(QObject *obj, Daemon &daemon);
+-    ~DBusService();
+-
+-private:
+-    Daemon &m_daemon;
+-
+-public Q_SLOTS:
+-    void start(QString trayName, QDBusMessage message, bool &result, QString &errorMessage);
+-    void stop(QString trayName, QDBusMessage message, bool &result, QString &errorMessage);
+-    void status(QString trayName, QDBusMessage message, TrayStatusMap &trayStatusMap);
+-};
+-
+-}
+-
+-#endif
+diff --git a/src/tray_service/tray.cpp b/src/tray_service/tray.cpp
+deleted file mode 100644
+index f173eba..0000000
+--- a/src/tray_service/tray.cpp
++++ /dev/null
+@@ -1,93 +0,0 @@
+-#include <QMenu>
+-
+-#include "kom_tray_interface.h"
+-#include "action.h"
+-#include "tray.h"
+-
+-namespace tray {
+-
+-Tray::Tray(KomTrayInterface *interface) {
+-    m_interface.reset(interface);
+-}
+-
+-Tray::~Tray() {
+-
+-}
+-
+-std::string Tray::name() {
+-    return m_interface->name();
+-}
+-
+-time_t Tray::uptime() {
+-    time_t now;
+-    time(&now);
+-    return now - m_startTime;
+-}
+-
+-void Tray::enroll() {
+-    // ToDo: 根据配置文件注册
+-
+-    simpleEnroll();
+-
+-    time(&m_startTime);
+-}
+-
+-void Tray::simpleEnroll() {
+-    m_qtTray = std::make_shared<QSystemTrayIcon>();
+-    connect(m_qtTray.get(), &QSystemTrayIcon::activated, this, &Tray::onQtTrayActivated);
+-
+-    // 设置托盘图标
+-    std::string iconName = m_interface->icon();
+-    m_qtTray->setIcon(getIcon(iconName));
+-
+-    // 设置 tooltip
+-    std::string tooltip = m_interface->tooltip();
+-    m_qtTray->setToolTip(QString::fromStdString(tooltip));
+-
+-    // 设置右键菜单
+-    m_menu = std::make_shared<QMenu>();
+-    std::vector<KomActionEntry> actionEntry = m_interface->actions();
+-    for (const auto &item: actionEntry) {
+-        if (item.type == KomActionType::SEPARATORS) {
+-            m_menu->addSeparator();
+-            continue;
+-        }
+-        std::shared_ptr<Action> action = std::make_shared<Action>(item.name);
+-        action->enroll(m_menu.get());
+-        action->setType(item.type);
+-        action->setIcon(getIcon(item.icon));
+-        action->setLabel(item.label);
+-        action->setTooltip(item.tooltip);
+-        action->setActive(item.isActive);
+-        action->setCallback(item.callback);
+-        m_actions.emplace(std::make_pair(item.name, action));
+-    }
+-    m_qtTray->setContextMenu(m_menu.get());
+-
+-    m_qtTray->show();
+-}
+-
+-QIcon Tray::getIcon(const std::string &name) {
+-    if (name.empty())
+-        return QIcon();
+-
+-    if (name.find("/") == std::string::npos)
+-        return QIcon::fromTheme(QString::fromStdString(name));
+-    else
+-        return QIcon(QString::fromStdString(name));
+-}
+-
+-void Tray::onQtTrayActivated(QSystemTrayIcon::ActivationReason reason) {
+-    switch (reason) {
+-        case QSystemTrayIcon::Trigger:
+-        case QSystemTrayIcon::DoubleClick:
+-            m_interface->trigger();
+-            break;
+-        case QSystemTrayIcon::MiddleClick:
+-            break;
+-        default:
+-            ;
+-    }
+-}
+-
+-}
+diff --git a/src/tray_service/tray.h b/src/tray_service/tray.h
+deleted file mode 100644
+index 42a7c5f..0000000
+--- a/src/tray_service/tray.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-#ifndef KYLIN_OS_MANAGER_SRC_TRAY_SERVICE_TRAY_H
+-#define KYLIN_OS_MANAGER_SRC_TRAY_SERVICE_TRAY_H
+-
+-#include <time.h>
+-#include <memory>
+-#include <string>
+-#include <QSystemTrayIcon>
+-#include <QObject>
+-#include <QIcon>
+-
+-#include "action.h"
+-
+-class KomTrayInterface;
+-class QMenu;
+-
+-namespace tray {
+-
+-class Tray : public QObject {
+-    Q_OBJECT
+-
+-public:
+-    Tray(KomTrayInterface *interface);
+-    ~Tray();
+-
+-    void enroll();
+-    std::string name();
+-    time_t uptime();
+-
+-private:
+-    QIcon getIcon(const std::string &name);
+-    void simpleEnroll();
+-
+-    time_t m_startTime;
+-    std::shared_ptr<KomTrayInterface> m_interface;
+-    std::shared_ptr<QSystemTrayIcon> m_qtTray;
+-    std::shared_ptr<QMenu> m_menu;
+-    std::map<std::string, std::shared_ptr<Action>> m_actions;
+-
+-private Q_SLOTS:
+-    void onQtTrayActivated(QSystemTrayIcon::ActivationReason reason);
+-};
+-
+-}
+-
+-#endif
+diff --git a/treasure-chest/CMakeLists.txt b/treasure-chest/CMakeLists.txt
+index 3c6e312..654de87 100644
+--- a/treasure-chest/CMakeLists.txt
++++ b/treasure-chest/CMakeLists.txt
+@@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.16)
+ 
+ project(treasure-chest)
+ 
++add_subdirectory(replacement)
+ add_subdirectory(win-data-migration)
+ add_subdirectory(file-smash)
+ add_subdirectory(network-bandwidth-test)
+@@ -11,9 +12,7 @@ add_subdirectory(network-telnet)
+ add_subdirectory(system-cleanup)
+ add_subdirectory(tcpdump)
+ add_subdirectory(source-update)
+-add_subdirectory(replacement)
+ 
+ # 安装独立的插件配置文件
+ install(FILES 3rdparty/kylin-baobab.conf DESTINATION /usr/share/kylin-os-manager/plugins/tool-box/plugins/)
+ install(FILES 3rdparty/kylin-d-feet.conf DESTINATION /usr/share/kylin-os-manager/plugins/tool-box/plugins/)
+-#install(FILES 3rdparty/kylin-gpu-controller.conf DESTINATION /usr/share/kylin-os-manager/plugins/tool-box/plugins/)
+diff --git a/treasure-chest/file-smash/CMakeLists.txt b/treasure-chest/file-smash/CMakeLists.txt
+index eda9473..be7b5a4 100644
+--- a/treasure-chest/file-smash/CMakeLists.txt
++++ b/treasure-chest/file-smash/CMakeLists.txt
+@@ -99,7 +99,7 @@ file(GLOB TRANS
+     "${CURRENT_DIR}/translations/kylin-file-crush_ky.qm"
+     )
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-file-crush/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/bin/)
+ install(FILES ${TRANS} DESTINATION  /usr/share/kylin-os-manager/treasure-chest/kylin-file-crush/translations)
+ install(FILES ${CURRENT_DIR}/kylin-file-crush.conf DESTINATION /usr/share/kylin-os-manager/plugins/tool-box/plugins/)
+ install(DIRECTORY ${CURRENT_DIR}/data/user_manual/ DESTINATION /usr/share/kylin-user-guide/data/guide/kylin-file-crush/)
+diff --git a/treasure-chest/file-smash/komt-file-smash.desktop b/treasure-chest/file-smash/komt-file-smash.desktop
+index 5080c4f..d136180 100644
+--- a/treasure-chest/file-smash/komt-file-smash.desktop
++++ b/treasure-chest/file-smash/komt-file-smash.desktop
+@@ -22,7 +22,7 @@ Comment[zh_HK]=徹底清除磁碟上的檔並使其不可恢復
+ Comment[de_DE]=Bereitstellung von Kirin-Service und technischen Support-Tools
+ Comment[es_ES]=Cancella completamente i file sul disco e rendili irrecuperabili
+ Comment[fr_FR]=Effacez complètement les fichiers sur le disque et rendez-le irrécupérable
+-Exec=/usr/share/kylin-os-manager/komt-file-smash/komt-file-smash
++Exec=/usr/lib/kylin-os-manager/bin/kylin-file-crush
+ Icon=kylin-file-crush
+ StartupNotify=false
+ NoDisplay=true
+diff --git a/treasure-chest/file-smash/kylin-file-crush.conf b/treasure-chest/file-smash/kylin-file-crush.conf
+index 98dd01a..2984c6b 100644
+--- a/treasure-chest/file-smash/kylin-file-crush.conf
++++ b/treasure-chest/file-smash/kylin-file-crush.conf
+@@ -10,6 +10,6 @@ Comment[zh_HK]=徹底粉碎機密和隱私檔
+ Comment[bo_CN]=གསང་བ་དང་གསང་བའི་ཡིག་ཆ་རྦད་དེ་རྡུལ་དུ་རློག་དགོས།
+ Comment[mn]=ᠨᠢᠭᠤᠴᠠ ᠪᠠ ᠨᠢᠭᠤᠴᠠ ᠶᠢ ᠲᠤᠶᠢᠯᠪᠤᠷᠢᠲᠠᠶ ᠬᠠᠭᠠᠬᠤ ᠬᠡᠷᠡᠭᠲᠡᠶ᠃
+ Icon=kylin-file-crush
+-Exec=/usr/share/kylin-os-manager/treasure-chest/kylin-file-crush/kylin-file-crush
++Exec=/usr/lib/kylin-os-manager/bin/kylin-file-crush
+ Categories=Feature
+ UserManual=kylin-file-crush
+diff --git a/treasure-chest/file-smash/shreddialog.cpp b/treasure-chest/file-smash/shreddialog.cpp
+index 2879fd7..1ef0b82 100644
+--- a/treasure-chest/file-smash/shreddialog.cpp
++++ b/treasure-chest/file-smash/shreddialog.cpp
+@@ -35,8 +35,8 @@ ShredDialog::ShredDialog(QWidget *parent) : KWidget(parent), mousePressed(false)
+     this->setFixedSize(904, 568);
+     //设置icon和标题
+     this->setIcon("kylin-file-crush");
+-    this->setWidgetName(tr("FileShredder"));
+-    this->setWindowTitle(tr("FileShredder"));
++    this->setWidgetName(tr("File Crush"));
++    this->setWindowTitle(tr("File Crush"));
+     this->setWindowIcon(QIcon::fromTheme("kylin-file-crush"));
+ 
+     //设置最大化和最小化不可见
+diff --git a/treasure-chest/file-smash/translations/generate_translations_qm.sh b/treasure-chest/file-smash/translations/generate_translations_qm.sh
+old mode 100644
+new mode 100755
+diff --git a/treasure-chest/file-smash/translations/generate_translations_ts.sh b/treasure-chest/file-smash/translations/generate_translations_ts.sh
+old mode 100644
+new mode 100755
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_bo_CN.qm b/treasure-chest/file-smash/translations/kylin-file-crush_bo_CN.qm
+index 73b9dcc..7ba84f2 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_bo_CN.qm
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_bo_CN.qm
+@@ -1,5 +1,5 @@
+-<�d��!�`���B�����֍���������?�����	������A��'�T��UM�r����J%���
++<�d��!�`���B���x�֍���������?�����	������A���'�T���M�r��U�J%���
+ `�1���0
+ d�U��O
+-�����G[�R���aQ���ud������/���#���)i������b�XT
�������Form���AlertDialog����A�|Q@�rfVQXfT`rarBFSrQ@bFBarSSXaDSF|BXFSXP|VSBdBfXrbtD
�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog���"BOS`AzcV�QB|f
�������sure���KAlertDialog���dA�|Q@�rfDzfTbQtPcV`rb�tcQtVb�BfTarSSX
�������Are you sure to start crushing?���KSureDialog���fPcV`rb�tcQtVb�BfT`rarBFf�bBf|V�zQXrPtV
�������"Crushed files cannot be recovered!���KSureDialog���f��|SXz
�������cancle���KSureDialog���"BOS`AzcV�QB|f
�������sure���KSureDialog���"arBFAf�|SV�f�������Add File���ShredDialog���0fFQzSfU�rb`VtQV�f
�������Deselect���ShredDialog���8ErScrSg�rg�rf��rBIzbV�������FileShredder���ShredDialog���nVQXf_rST`rarBFBD^rBarSbtDZDXXzQTbV_|QB|f
�������No file selected to be shredded���ShredDialog����Q|f�DV�QB|f
arBFb�tcQtVb�BfT`rVb��tQbrXXzQTbBO|DPVfXz�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���JA�|Q@�rfarBFQzVQXfSfBdBfb|Bf
������� Please select the file to shred!���ShredDialog���arBFg�|VX
�������
++������aQ���d������/���#���)i��9���b�XT
�������Form���AlertDialog����A�|Q@�rfVQXfT`rarBFSrQ@bFBarSSXaDSF|BXFSXP|VSBdBfXrbtD
�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog���"BOS`AzcV�QB|f
�������sure���KAlertDialog���dA�|Q@�rfDzfTbQtPcV`rb�tcQtVb�BfTarSSX
�������Are you sure to start crushing?���KSureDialog���fPcV`rb�tcQtVb�BfT`rarBFf�bBf|V�zQXrPtV
�������"Crushed files cannot be recovered!���KSureDialog���f��|SXz
�������cancle���KSureDialog���"BOS`AzcV�QB|f
�������sure���KSureDialog���"arBFAf�|SV�f�������Add File���ShredDialog���0fFQzSfU�rb`VtQV�f
�������Deselect���ShredDialog���nVQXf_rST`rarBFBD^rBarSbtDZDXXzQTbV_|QB|f
�������No file selected to be shredded���ShredDialog����Q|f�DV�QB|f
arBFb�tcQtVb�BfT`rVb��tQbrXXzQTbBO|DPVfXz�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���JA�|Q@�rfarBFQzVQXfSfBdBfb|Bf
������� Please select the file to shred!���ShredDialog���arBFg�|VX
�������
+ Shred File���ShredDialog���FarBFVftVSff�bBf|V�zQPVfV�c
�������'Delete files makes it unable to recover���ShredManager���(g�rg�rf��rBIzbV
�������
Shred Manager���ShredManager
+\ No newline at end of file
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_bo_CN.ts b/treasure-chest/file-smash/translations/kylin-file-crush_bo_CN.ts
+index cce1f44..6c97372 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_bo_CN.ts
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_bo_CN.ts
+@@ -63,10 +63,8 @@
+ <context>
+     <name>ShredDialog</name>
+     <message>
+-        <location filename="../shreddialog.cpp" line="38"/>
+-        <location filename="../shreddialog.cpp" line="39"/>
+         <source>FileShredder</source>
+-        <translation>ཅིན་ལིན་ཧྲི་ཧྲི་སྤྱི་གཉེར་བ་</translation>
++        <translation type="vanished">ཅིན་ལིན་ཧྲི་ཧྲི་སྤྱི་གཉེར་བ་</translation>
+     </message>
+     <message>
+         <source>File Shredder</source>
+@@ -81,6 +79,12 @@
+         <source>The file is completely shredded and cannot be recovered</source>
+         <translation type="vanished">ཡིག་ཆ་རྦད་དེ་གཤགས་ནས་སླར་གསོ་བྱེད་ཐབས་བྲལ།</translation>
+     </message>
++    <message>
++        <location filename="../shreddialog.cpp" line="38"/>
++        <location filename="../shreddialog.cpp" line="39"/>
++        <source>File Crush</source>
++        <translation type="unfinished"></translation>
++    </message>
+     <message>
+         <location filename="../shreddialog.cpp" line="65"/>
+         <location filename="../shreddialog.cpp" line="815"/>
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_de.qm b/treasure-chest/file-smash/translations/kylin-file-crush_de.qm
+index d24d9e4..a13b560 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_de.qm
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_de.qm
+@@ -1,6 +1,5 @@
+-<�d��!�`���B�����֍���������������a������A���'�T��GM�r����J%��/
++<�d��!�`���B���x�֍���������������a������A���'�T��M�r����J%��/
+ `�1���,
+ d�U���
+-������[�R��aQ���d������/���#���wi�������F�o�r�m�������Form���AlertDialog�����D�i�e� �D�a�t�e�i�,� �d�i�e� �S�i�e� �a�u�s�g�e�w���h�l�t� �h�a�b�e�n�,� �i�s�t� �e�i�n� �V�e�r�z�e�i�c�h�n�i�s� �o�d�e�r� �h�a�t� �k�e�i�n�e� �B�e�r�e�c�h�t�i�g�u�n�g�e�n�,� �k�a�n�n� �n�i�c�h�t� �g�e�s�c�h�r�e�d�d�e�r�t� �w�e�r�d�e�n�!�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog����s�i�c�h�e�r�������sure���KAlertDialog���v�B�i�s�t� �d�u� �s�i�c�h�e�r�,� �d�a�s�s� �d�u� �m�i�t� �d�e�m� �Z�e�r�k�l�e�i�n�e�r�n� �b�e�g�i�n�n�e�n� �w�i�r�s�t�?�������Are you sure to start crushing?���KSureDialog���v�Z�e�r�k�l�e�i�n�e�r�t�e� �D�a�t�e�i�e�n� �k���n�n�e�n� �n�i�c�h�t� �w�i�e�d�e�r�h�e�r�g�e�s�t�e�l�l�t� �w�e�r�d�e�n�!�������"Crushed files cannot be recovered!���KSureDialog����C�a�n�c�l�e�������cancle���KSureDialog����s�i�c�h�e�r�������sure���KSureDialog��� �D�a�t�e�i� �h�i�n�z�u�f���g�e�n�������Add File���ShredDialog����A�b�w���h�l�e�n�������Deselect���ShredDialog���
+-e�N�|�x�g:�������FileShredder���ShredDialog���J�K�e�i�n�e� �D�a�t�e�i� �z�u�m� �S�c�h�r�e�d�d�e�r�n� �a�u�s�g�e�w���h�l�t�������No file selected to be shredded���ShredDialog�����H�i�n�w�e�i�s�:� �D�i�e� �A�k�t�e�n�v�e�r�n�i�c�h�t�u�n�g� �k�a�n�n� �n�i�c�h�t� �a�b�g�e�b�r�o�c�h�e�n� �w�e�r�d�e�n�,� �b�i�t�t�e� �s�e�i�e�n� �S�i�e� �v�o�r�s�i�c�h�t�i�g�!�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���^�B�i�t�t�e� �w���h�l�e�n� �S�i�e� �d�i�e� �z�u� �v�e�r�n�i�c�h�t�e�n�d�e� �D�a�t�e�i� �a�u�s�!������� Please select the file to shred!���ShredDialog��� �D�a�t�e�i� �v�e�r�n�i�c�h�t�e�n�������
++�����maQ���Id������/���#���wi�������F�o�r�m�������Form���AlertDialog�����D�i�e� �D�a�t�e�i�,� �d�i�e� �S�i�e� �a�u�s�g�e�w���h�l�t� �h�a�b�e�n�,� �i�s�t� �e�i�n� �V�e�r�z�e�i�c�h�n�i�s� �o�d�e�r� �h�a�t� �k�e�i�n�e� �B�e�r�e�c�h�t�i�g�u�n�g�e�n�,� �k�a�n�n� �n�i�c�h�t� �g�e�s�c�h�r�e�d�d�e�r�t� �w�e�r�d�e�n�!�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog����s�i�c�h�e�r�������sure���KAlertDialog���v�B�i�s�t� �d�u� �s�i�c�h�e�r�,� �d�a�s�s� �d�u� �m�i�t� �d�e�m� �Z�e�r�k�l�e�i�n�e�r�n� �b�e�g�i�n�n�e�n� �w�i�r�s�t�?�������Are you sure to start crushing?���KSureDialog���v�Z�e�r�k�l�e�i�n�e�r�t�e� �D�a�t�e�i�e�n� �k���n�n�e�n� �n�i�c�h�t� �w�i�e�d�e�r�h�e�r�g�e�s�t�e�l�l�t� �w�e�r�d�e�n�!�������"Crushed files cannot be recovered!���KSureDialog����C�a�n�c�l�e�������cancle���KSureDialog����s�i�c�h�e�r�������sure���KSureDialog��� �D�a�t�e�i� �h�i�n�z�u�f���g�e�n�������Add File���ShredDialog����A�b�w���h�l�e�n�������Deselect���ShredDialog���J�K�e�i�n�e� �D�a�t�e�i� �z�u�m� �S�c�h�r�e�d�d�e�r�n� �a�u�s�g�e�w���h�l�t�������No file selected to be shredded���ShredDialog�����H�i�n�w�e�i�s�:� �D�i�e� �A�k�t�e�n�v�e�r�n�i�c�h�t�u�n�g� �k�a�n�n� �n�i�c�h�t� �a�b�g�e�b�r�o�c�h�e�n� �w�e�r�d�e�n�,� �b�i�t�t�e� �s�e�i�e�n� �S�i�e� �v�o�r�s�i�c�h�t�i�g�!�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���^�B�i�t�t�e� �w���h�l�e�n� �S�i�e� �d�i�e� �z�u� �v�e�r�n�i�c�h�t�e�n�d�e� �D�a�t�e�i� �a�u�s�!������� Please select the file to shred!���ShredDialog��� �D�a�t�e�i� �v�e�r�n�i�c�h�t�e�n�������
+ Shred File���ShredDialog�����D�a�s� �L���s�c�h�e�n� �v�o�n� �D�a�t�e�i�e�n� �v�e�r�h�i�n�d�e�r�t�,� �d�a�s�s� �e�s� �w�i�e�d�e�r�h�e�r�g�e�s�t�e�l�l�t� �w�e�r�d�e�n� �k�a�n�n�������'Delete files makes it unable to recover���ShredManager���"�S�c�h�r�e�d�d�e�r�-�M�a�n�a�g�e�r�������
Shred Manager���ShredManager����
+\ No newline at end of file
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_de.ts b/treasure-chest/file-smash/translations/kylin-file-crush_de.ts
+index b369e9c..6fef820 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_de.ts
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_de.ts
+@@ -63,10 +63,8 @@
+ <context>
+     <name>ShredDialog</name>
+     <message>
+-        <location filename="../shreddialog.cpp" line="38"/>
+-        <location filename="../shreddialog.cpp" line="39"/>
+         <source>FileShredder</source>
+-        <translation>文件粉碎机</translation>
++        <translation type="vanished">文件粉碎机</translation>
+     </message>
+     <message>
+         <source>File Shredder</source>
+@@ -81,6 +79,12 @@
+         <source>The file is completely shredded and cannot be recovered</source>
+         <translation type="vanished">Die Datei ist vollständig geschreddert und kann nicht wiederhergestellt werden</translation>
+     </message>
++    <message>
++        <location filename="../shreddialog.cpp" line="38"/>
++        <location filename="../shreddialog.cpp" line="39"/>
++        <source>File Crush</source>
++        <translation type="unfinished"></translation>
++    </message>
+     <message>
+         <location filename="../shreddialog.cpp" line="65"/>
+         <location filename="../shreddialog.cpp" line="815"/>
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_es.qm b/treasure-chest/file-smash/translations/kylin-file-crush_es.qm
+index 523f63e..0f7278a 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_es.qm
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_es.qm
+@@ -1,7 +1,6 @@
+-<�d��!�`���B�����֍���������Q����������e�A��x'�T���M�r��O�J%���
++<�d��!�`���B���x�֍���������Q����������/�A��B'�T���M�r���J%���
+ `�1���.
+ d�U��
+-������[�R���aQ����d������/��S#���	i��Q���
+-�F�o�r�m�a�������Form���AlertDialog�����E�l� �a�r�c�h�i�v�o� �q�u�e� �s�e�l�e�c�c�i�o�n��� �e�s� �u�n� �d�i�r�e�c�t�o�r�i�o� �o� �n�o� �t�i�e�n�e� �p�e�r�m�i�s�o�s�,� ���n�o� �s�e� �p�u�e�d�e� �d�e�s�t�r�u�i�r�!�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog����s�e�g�u�r�o�������sure���KAlertDialog���H���E�s�t���s� �s�e�g�u�r�o� �d�e� �e�m�p�e�z�a�r� �a� �t�r�i�t�u�r�a�r�?�������Are you sure to start crushing?���KSureDialog���`���L�o�s� �a�r�c�h�i�v�o�s� �a�p�l�a�s�t�a�d�o�s� �n�o� �s�e� �p�u�e�d�e�n� �r�e�c�u�p�e�r�a�r�!�������"Crushed files cannot be recovered!���KSureDialog����c�a�n�c�l�e�������cancle���KSureDialog����s�e�g�u�r�o�������sure���KSureDialog����A�g�r�e�g�a�r� �a�r�c�h�i�v�o�������Add File���ShredDialog����D�e�s�e�l�e�c�c�i�o�n�a�r�������Deselect���ShredDialog���
+-e�N�|�x�g:�������FileShredder���ShredDialog���n�N�o� �s�e� �h�a� �s�e�l�e�c�c�i�o�n�a�d�o� �n�i�n�g���n� �a�r�c�h�i�v�o� �p�a�r�a� �s�e�r� �d�e�s�t�r�u�i�d�o�������No file selected to be shredded���ShredDialog�����N�o�t�a�:� �L�a� �d�e�s�t�r�u�c�c�i���n� �d�e� �a�r�c�h�i�v�o�s� �n�o� �s�e� �p�u�e�d�e� �c�a�n�c�e�l�a�r�,� ���t�e�n�g�a� �c�u�i�d�a�d�o�!�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���T���S�e�l�e�c�c�i�o�n�e� �e�l� �a�r�c�h�i�v�o� �q�u�e� �d�e�s�e�a� �d�e�s�t�r�u�i�r�!������� Please select the file to shred!���ShredDialog���,�A�r�c�h�i�v�o� �d�e� �d�e�s�t�r�u�c�c�i���n�������
++������aQ����d������/��S#���	i�����
++�F�o�r�m�a�������Form���AlertDialog�����E�l� �a�r�c�h�i�v�o� �q�u�e� �s�e�l�e�c�c�i�o�n��� �e�s� �u�n� �d�i�r�e�c�t�o�r�i�o� �o� �n�o� �t�i�e�n�e� �p�e�r�m�i�s�o�s�,� ���n�o� �s�e� �p�u�e�d�e� �d�e�s�t�r�u�i�r�!�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog����s�e�g�u�r�o�������sure���KAlertDialog���H���E�s�t���s� �s�e�g�u�r�o� �d�e� �e�m�p�e�z�a�r� �a� �t�r�i�t�u�r�a�r�?�������Are you sure to start crushing?���KSureDialog���`���L�o�s� �a�r�c�h�i�v�o�s� �a�p�l�a�s�t�a�d�o�s� �n�o� �s�e� �p�u�e�d�e�n� �r�e�c�u�p�e�r�a�r�!�������"Crushed files cannot be recovered!���KSureDialog����c�a�n�c�l�e�������cancle���KSureDialog����s�e�g�u�r�o�������sure���KSureDialog����A�g�r�e�g�a�r� �a�r�c�h�i�v�o�������Add File���ShredDialog����D�e�s�e�l�e�c�c�i�o�n�a�r�������Deselect���ShredDialog���n�N�o� �s�e� �h�a� �s�e�l�e�c�c�i�o�n�a�d�o� �n�i�n�g���n� �a�r�c�h�i�v�o� �p�a�r�a� �s�e�r� �d�e�s�t�r�u�i�d�o�������No file selected to be shredded���ShredDialog�����N�o�t�a�:� �L�a� �d�e�s�t�r�u�c�c�i���n� �d�e� �a�r�c�h�i�v�o�s� �n�o� �s�e� �p�u�e�d�e� �c�a�n�c�e�l�a�r�,� ���t�e�n�g�a� �c�u�i�d�a�d�o�!�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���T���S�e�l�e�c�c�i�o�n�e� �e�l� �a�r�c�h�i�v�o� �q�u�e� �d�e�s�e�a� �d�e�s�t�r�u�i�r�!������� Please select the file to shred!���ShredDialog���,�A�r�c�h�i�v�o� �d�e� �d�e�s�t�r�u�c�c�i���n�������
+ Shred File���ShredDialog���`�E�l�i�m�i�n�a�r� �a�r�c�h�i�v�o�s� �h�a�c�e� �q�u�e� �n�o� �s�e� �p�u�e�d�a� �r�e�c�u�p�e�r�a�r�������'Delete files makes it unable to recover���ShredManager���,�G�e�r�e�n�t�e� �d�e� �t�r�i�t�u�r�a�c�i���n�������
Shred Manager���ShredManager����
+\ No newline at end of file
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_es.ts b/treasure-chest/file-smash/translations/kylin-file-crush_es.ts
+index c2d81ff..6f9903f 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_es.ts
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_es.ts
+@@ -63,10 +63,8 @@
+ <context>
+     <name>ShredDialog</name>
+     <message>
+-        <location filename="../shreddialog.cpp" line="38"/>
+-        <location filename="../shreddialog.cpp" line="39"/>
+         <source>FileShredder</source>
+-        <translation>文件粉碎机</translation>
++        <translation type="vanished">文件粉碎机</translation>
+     </message>
+     <message>
+         <source>File Shredder</source>
+@@ -81,6 +79,12 @@
+         <source>The file is completely shredded and cannot be recovered</source>
+         <translation type="vanished">El archivo está completamente destruido y no se puede recuperar</translation>
+     </message>
++    <message>
++        <location filename="../shreddialog.cpp" line="38"/>
++        <location filename="../shreddialog.cpp" line="39"/>
++        <source>File Crush</source>
++        <translation type="unfinished"></translation>
++    </message>
+     <message>
+         <location filename="../shreddialog.cpp" line="65"/>
+         <location filename="../shreddialog.cpp" line="815"/>
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_fr.qm b/treasure-chest/file-smash/translations/kylin-file-crush_fr.qm
+index 7005189..8bfa77b 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_fr.qm
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_fr.qm
+@@ -1,7 +1,6 @@
+-<�d��!�`���B�����֍���������������������A���'�T��M�r����J%���
++<�d��!�`���B���x�֍���������������������A��l'�T���M�r����J%���
+ `�1���.
+ d�U��A
+-�����[�R���aQ���id������/���#���;i������
+-�F�o�r�m�e�������Form���AlertDialog�����L�e� �f�i�c�h�i�e�r� �q�u�e� �v�o�u�s� �a�v�e�z� �s���l�e�c�t�i�o�n�n��� �e�s�t� �u�n� �r���p�e�r�t�o�i�r�e� �o�u� �n �a� �p�a�s� �d �a�u�t�o�r�i�s�a�t�i�o�n�s�,� �n�e� �p�e�u�t� �p�a�s� ���t�r�e� �d���c�h�i�q�u�e�t��� �!�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog����s���r�������sure���KAlertDialog���L���t�e�s�-�v�o�u�s� �s���r� �d�e� �c�o�m�m�e�n�c�e�r� ��� ���c�r�a�s�e�r� �?�������Are you sure to start crushing?���KSureDialog���h�L�e�s� �f�i�c�h�i�e�r�s� ���c�r�a�s���s� �n�e� �p�e�u�v�e�n�t� �p�a�s� ���t�r�e� �r���c�u�p���r���s� �!�������"Crushed files cannot be recovered!���KSureDialog����C�a�n�c�l�e�������cancle���KSureDialog����s���r�������sure���KSureDialog���$�A�j�o�u�t�e�r� �u�n� �f�i�c�h�i�e�r�������Add File���ShredDialog����D���s���l�e�c�t�i�o�n�n�e�r�������Deselect���ShredDialog���
+-e�N�|�x�g:�������FileShredder���ShredDialog���\�A�u�c�u�n� �f�i�c�h�i�e�r� �s���l�e�c�t�i�o�n�n��� �p�o�u�r� ���t�r�e� �d���c�h�i�q�u�e�t���������No file selected to be shredded���ShredDialog�����R�e�m�a�r�q�u�e���:� �L�e� �d���c�h�i�q�u�e�t�a�g�e� �d�e� �f�i�c�h�i�e�r�s� �n�e� �p�e�u�t� �p�a�s� ���t�r�e� �a�n�n�u�l���,� �v�e�u�i�l�l�e�z� �f�a�i�r�e� �p�r�e�u�v�e� �d�e� �p�r�u�d�e�n�c�e���!�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���`�V�e�u�i�l�l�e�z� �s���l�e�c�t�i�o�n�n�e�r� �l�e� �f�i�c�h�i�e�r� ��� �d���c�h�i�q�u�e�t�e�r� �!������� Please select the file to shred!���ShredDialog���.�F�i�c�h�i�e�r� �d�e� �d���c�h�i�q�u�e�t�a�g�e�������
++�����IaQ���3d������/���#���;i������
++�F�o�r�m�e�������Form���AlertDialog�����L�e� �f�i�c�h�i�e�r� �q�u�e� �v�o�u�s� �a�v�e�z� �s���l�e�c�t�i�o�n�n��� �e�s�t� �u�n� �r���p�e�r�t�o�i�r�e� �o�u� �n �a� �p�a�s� �d �a�u�t�o�r�i�s�a�t�i�o�n�s�,� �n�e� �p�e�u�t� �p�a�s� ���t�r�e� �d���c�h�i�q�u�e�t��� �!�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog����s���r�������sure���KAlertDialog���L���t�e�s�-�v�o�u�s� �s���r� �d�e� �c�o�m�m�e�n�c�e�r� ��� ���c�r�a�s�e�r� �?�������Are you sure to start crushing?���KSureDialog���h�L�e�s� �f�i�c�h�i�e�r�s� ���c�r�a�s���s� �n�e� �p�e�u�v�e�n�t� �p�a�s� ���t�r�e� �r���c�u�p���r���s� �!�������"Crushed files cannot be recovered!���KSureDialog����C�a�n�c�l�e�������cancle���KSureDialog����s���r�������sure���KSureDialog���$�A�j�o�u�t�e�r� �u�n� �f�i�c�h�i�e�r�������Add File���ShredDialog����D���s���l�e�c�t�i�o�n�n�e�r�������Deselect���ShredDialog���\�A�u�c�u�n� �f�i�c�h�i�e�r� �s���l�e�c�t�i�o�n�n��� �p�o�u�r� ���t�r�e� �d���c�h�i�q�u�e�t���������No file selected to be shredded���ShredDialog�����R�e�m�a�r�q�u�e���:� �L�e� �d���c�h�i�q�u�e�t�a�g�e� �d�e� �f�i�c�h�i�e�r�s� �n�e� �p�e�u�t� �p�a�s� ���t�r�e� �a�n�n�u�l���,� �v�e�u�i�l�l�e�z� �f�a�i�r�e� �p�r�e�u�v�e� �d�e� �p�r�u�d�e�n�c�e���!�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���`�V�e�u�i�l�l�e�z� �s���l�e�c�t�i�o�n�n�e�r� �l�e� �f�i�c�h�i�e�r� ��� �d���c�h�i�q�u�e�t�e�r� �!������� Please select the file to shred!���ShredDialog���.�F�i�c�h�i�e�r� �d�e� �d���c�h�i�q�u�e�t�a�g�e�������
+ Shred File���ShredDialog���v�L�a� �s�u�p�p�r�e�s�s�i�o�n� �d�e�s� �f�i�c�h�i�e�r�s� �r�e�n�d� �l�a� �r���c�u�p���r�a�t�i�o�n� �i�m�p�o�s�s�i�b�l�e�������'Delete files makes it unable to recover���ShredManager���8�G�e�s�t�i�o�n�n�a�i�r�e� �d�e� �d���c�h�i�q�u�e�t�a�g�e�������
Shred Manager���ShredManager����
+\ No newline at end of file
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_fr.ts b/treasure-chest/file-smash/translations/kylin-file-crush_fr.ts
+index 2c6ff71..f4a4cc8 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_fr.ts
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_fr.ts
+@@ -63,10 +63,8 @@
+ <context>
+     <name>ShredDialog</name>
+     <message>
+-        <location filename="../shreddialog.cpp" line="38"/>
+-        <location filename="../shreddialog.cpp" line="39"/>
+         <source>FileShredder</source>
+-        <translation>文件粉碎机</translation>
++        <translation type="vanished">文件粉碎机</translation>
+     </message>
+     <message>
+         <source>File Shredder</source>
+@@ -81,6 +79,12 @@
+         <source>The file is completely shredded and cannot be recovered</source>
+         <translation type="vanished">Le fichier est complètement déchiqueté et ne peut pas être récupéré</translation>
+     </message>
++    <message>
++        <location filename="../shreddialog.cpp" line="38"/>
++        <location filename="../shreddialog.cpp" line="39"/>
++        <source>File Crush</source>
++        <translation type="unfinished"></translation>
++    </message>
+     <message>
+         <location filename="../shreddialog.cpp" line="65"/>
+         <location filename="../shreddialog.cpp" line="815"/>
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_kk.qm b/treasure-chest/file-smash/translations/kylin-file-crush_kk.qm
+index 2c043bb..769e198 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_kk.qm
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_kk.qm
+@@ -1,5 +1,5 @@
+-<�d��!�`���B�����֍���������9����������a�A��Z'�T���M�r����J%���
++<�d��!�`���B���x�֍���������9�����������A��'�T���M�r��/�J%���
+ `�1���,
+ d�U��5
+-�����-[�R���aQ����d������/��e#���i�������F�o�r�m�������Form���AlertDialog����t3I2� *'D/'9'F� -�,'*� ('3� E'2E�F� J'CJ� J,'1'**'E'3I� ,HB� ~'14'D'F9'F� (HDE'J/I�!�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog���"*'D/'9'FxF� tH4I1��������sure���KAlertDialog���Tt3I2� t3H23x2� ~'14'D'�/I� ,�2IED�4*�1�Et3I2�������Are you sure to start crushing?���KSureDialog���f~'14'D'F9'F� -�,'**'1/I� B'D~IF'� C�D*I1��DI� (HDE'J/I�!�������"Crushed files cannot be recovered!���KSureDialog���(H3� �*��������cancle���KSureDialog���"*'D/'9'FxF� tH4I1��������sure���KSureDialog���BH3��������Add File���ShredDialog���4x9'1x��������Deselect���ShredDialog���&�A0�B0;�0=� <5=5465@�������FileShredder���ShredDialog���.-�,'*� ~'14'D'�4I� E'4JF'�������No file selected to be shredded���ShredDialog�����3C�1*~���:� -�,'*� ~'14'D'�� ('1x3x� (H3� I3*����� (HDE'J/I� 3'B*'F�� E�F�F� ,H('D'�� I3*���!�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���4~'14'D'F9'F� -�,'**I� *'D/'�!������� Please select the file to shred!���ShredDialog����-�,'*� (�*xF/�~� ~'14'D'F/I� HFI�� �3*IF�� B'D~IF'� C�D*I1��DI� (HDE'J/I�������
++������aQ����d������/��e#���i��7����F�o�r�m�������Form���AlertDialog����t3I2� *'D/'9'F� -�,'*� ('3� E'2E�F� J'CJ� J,'1'**'E'3I� ,HB� ~'14'D'F9'F� (HDE'J/I�!�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog���"*'D/'9'FxF� tH4I1��������sure���KAlertDialog���Tt3I2� t3H23x2� ~'14'D'�/I� ,�2IED�4*�1�Et3I2�������Are you sure to start crushing?���KSureDialog���f~'14'D'F9'F� -�,'**'1/I� B'D~IF'� C�D*I1��DI� (HDE'J/I�!�������"Crushed files cannot be recovered!���KSureDialog���(H3� �*��������cancle���KSureDialog���"*'D/'9'FxF� tH4I1��������sure���KSureDialog���BH3��������Add File���ShredDialog���4x9'1x��������Deselect���ShredDialog���.-�,'*� ~'14'D'�4I� E'4JF'�������No file selected to be shredded���ShredDialog�����3C�1*~���:� -�,'*� ~'14'D'�� ('1x3x� (H3� I3*����� (HDE'J/I� 3'B*'F�� E�F�F� ,H('D'�� I3*���!�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���4~'14'D'F9'F� -�,'**I� *'D/'�!������� Please select the file to shred!���ShredDialog����-�,'*� (�*xF/�~� ~'14'D'F/I� HFI�� �3*IF�� B'D~IF'� C�D*I1��DI� (HDE'J/I�������
+ Shred File���ShredDialog���d~'14'D'F9'F� -�,'**'1/I� B'D~IF'� C�D*I1���� (HDE'J/I�!�������'Delete files makes it unable to recover���ShredManager���.-�,'*� ~'14'D'�� E'4JF'3I�������
Shred Manager���ShredManager����
+\ No newline at end of file
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_kk.ts b/treasure-chest/file-smash/translations/kylin-file-crush_kk.ts
+index 7ac36dc..1c21e13 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_kk.ts
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_kk.ts
+@@ -63,10 +63,8 @@
+ <context>
+     <name>ShredDialog</name>
+     <message>
+-        <location filename="../shreddialog.cpp" line="38"/>
+-        <location filename="../shreddialog.cpp" line="39"/>
+         <source>FileShredder</source>
+-        <translation>Ұсақталған менеджер</translation>
++        <translation type="vanished">Ұсақталған менеджер</translation>
+     </message>
+     <message>
+         <source>File Shredder</source>
+@@ -81,6 +79,12 @@
+         <source>The file is completely shredded and cannot be recovered</source>
+         <translation type="vanished">پارشالانعان حۇجات تالدانباعان</translation>
+     </message>
++    <message>
++        <location filename="../shreddialog.cpp" line="38"/>
++        <location filename="../shreddialog.cpp" line="39"/>
++        <source>File Crush</source>
++        <translation type="unfinished"></translation>
++    </message>
+     <message>
+         <location filename="../shreddialog.cpp" line="65"/>
+         <location filename="../shreddialog.cpp" line="815"/>
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_ky.qm b/treasure-chest/file-smash/translations/kylin-file-crush_ky.qm
+index 71116c1..11dcc3b 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_ky.qm
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_ky.qm
+@@ -1,6 +1,6 @@
+-<�d��!�`���B�����֍���������C�����������A��v'�T��	M�r����J%���
++<�d��!�`���B���x�֍���������C���������C�A��.'�T���M�r��W�J%���
+ `�1���,
+ d�U��I
+-�����Q[�R���aQ���d������/��{#���i�������F�o�r�m�������Form���AlertDialog����3I2� *'F/'D9'F� � �,�*� *I2IE/IC� C�1�F�4*�1�� �1�B3'*F'E'3I� ,HB� ~'1�'DHH9H� (HD(HJ*� �!�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog��� *'F/'9'FI� ���1���������sure���KAlertDialog���D3I2� 3�23�2� ~'1�ID'4FI� (�CI*�3I2(I�������Are you sure to start crushing?���KSureDialog���h~'1�ID'F:'F� � �,�**�1�F� 'D9'�IF'� C�D*I1��DI� (HD(HJ*� �!�������"Crushed files cannot be recovered!���KSureDialog���*(�C�1� � ,'3HH� '*B'1���������cancle���KSureDialog��� *'F/'9'FI� ���1���������sure���KSureDialog���
+-BH4���������Add File���ShredDialog����I9'1I~� ,I(�1���������Deselect���ShredDialog����S�h�r�e�d� ('4B�1:��������FileShredder���ShredDialog���.�,�*� ~'1�IDI:��I� E'4IF'�������No file selected to be shredded���ShredDialog�����3C�1*���:� �,�*� E'J/'D'4� � ('1I4IF� (�C�1� � ,'3HH9H� (HD(HJ*� � �*IJ'*� E�F�F� E'4B�D/'F��� � BIDI��!�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���6~'1�ID'F:'F� � �,�*�F� *'F/'��!������� Please select the file to shred!���ShredDialog���t�,�*� ~�*C�D/�J� ~'1�'D'F/I� /'9I� 'D9'�IF'� C�D*I1��DI� (HD(HJ*�������
++�����	aQ����d������/��{#���i��e����F�o�r�m�������Form���AlertDialog����3I2� *'F/'D9'F� � �,�*� *I2IE/IC� C�1�F�4*�1�� �1�B3'*F'E'3I� ,HB� ~'1�'DHH9H� (HD(HJ*� �!�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog��� *'F/'9'FI� ���1���������sure���KAlertDialog���D3I2� 3�23�2� ~'1�ID'4FI� (�CI*�3I2(I�������Are you sure to start crushing?���KSureDialog���h~'1�ID'F:'F� � �,�**�1�F� 'D9'�IF'� C�D*I1��DI� (HD(HJ*� �!�������"Crushed files cannot be recovered!���KSureDialog���*(�C�1� � ,'3HH� '*B'1���������cancle���KSureDialog��� *'F/'9'FI� ���1���������sure���KSureDialog���
++BH4���������Add File���ShredDialog����I9'1I~� ,I(�1���������Deselect���ShredDialog���.�,�*� ~'1�IDI:��I� E'4IF'�������No file selected to be shredded���ShredDialog�����3C�1*���:� �,�*� E'J/'D'4� � ('1I4IF� (�C�1� � ,'3HH9H� (HD(HJ*� � �*IJ'*� E�F�F� E'4B�D/'F��� � BIDI��!�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���6~'1�ID'F:'F� � �,�*�F� *'F/'��!������� Please select the file to shred!���ShredDialog���t�,�*� ~�*C�D/�J� ~'1�'D'F/I� /'9I� 'D9'�IF'� C�D*I1��DI� (HD(HJ*�������
+ Shred File���ShredDialog���j~'1�ID'F:'F� � �,�**�1�F� 'D9'�IF'� ��D*I1I4C�� � (HD(HJ*� �!�������'Delete files makes it unable to recover���ShredManager���.�,�*� E'J/'D'4� � E'4IF'3I�������
Shred Manager���ShredManager����
+\ No newline at end of file
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_ky.ts b/treasure-chest/file-smash/translations/kylin-file-crush_ky.ts
+index cf2f3ac..33b0274 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_ky.ts
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_ky.ts
+@@ -63,10 +63,8 @@
+ <context>
+     <name>ShredDialog</name>
+     <message>
+-        <location filename="../shreddialog.cpp" line="38"/>
+-        <location filename="../shreddialog.cpp" line="39"/>
+         <source>FileShredder</source>
+-        <translation>Shred باشقۇرغۇ</translation>
++        <translation type="vanished">Shred باشقۇرغۇ</translation>
+     </message>
+     <message>
+         <source>File Shredder</source>
+@@ -81,6 +79,12 @@
+         <source>The file is completely shredded and cannot be recovered</source>
+         <translation type="vanished">پارچىلانغان ۅجۅت تاندالباعان</translation>
+     </message>
++    <message>
++        <location filename="../shreddialog.cpp" line="38"/>
++        <location filename="../shreddialog.cpp" line="39"/>
++        <source>File Crush</source>
++        <translation type="unfinished"></translation>
++    </message>
+     <message>
+         <location filename="../shreddialog.cpp" line="65"/>
+         <location filename="../shreddialog.cpp" line="815"/>
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_mn.qm b/treasure-chest/file-smash/translations/kylin-file-crush_mn.qm
+index 60aab0d..7b3e29d 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_mn.qm
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_mn.qm
+@@ -1,5 +1,5 @@
+-<�d��!�`���B�����֍���������=����������c�A��R'�T���M�r��5�J%���
++<�d��!�`���B���x�֍���������=�����������A��'�T��mM�r����J%���
+ `�1���,
+ d�U���
+-������[�R��maQ����d����r�/��##����i��-���9$$.�������Form���AlertDialog����2 (� $� 0$)-$-0 (� 9 "/� ("-!(� - 74 -� *$6$� !7,!� &,!"� ($(3 -/ ,$� 5"(�  7- � &,!"�!�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog���* 3$/ ,$�������sure���KAlertDialog���,!,"/!5$� ($(3 -/ ,$� $$�?�������Are you sure to start crushing?���KSureDialog���d($(3 -/ -0 (� 9 "/� "� 3 ,"5$� 0!7,&,!5$� 3!"/,&� &,!"�!�������"Crushed files cannot be recovered!���KSureDialog���&,!"0,!,&�������cancle���KSureDialog���* 3$/ ,$�������sure���KSureDialog���(!.!,&�������Add File���ShredDialog���"0"/5",&/5$� , 0$,$�������Deselect���ShredDialog��� 9 "/� ($(3 -/ -$7�������FileShredder���ShredDialog���Z($(3 -/ ,$� ,!5$� * "- � 9 "/� "� 0$)-$-0 (� &,!"�������No file selected to be shredded���ShredDialog���� ), 7$- 7 "�:� 9 "/� ($(3 -/ ,$�  5"// ,$"� 5"� &,!"0,!5$� *$/,$� &,!"� *$/-$.5"3 "�  5"// - 7 "�!�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���T($(3 -/ ,$� ,!5$� * "- � 9 "/� "� 0$)-$- 7 "�!������� Please select the file to shred!���ShredDialog���($(3 -/ ,$�������
++������aQ����d����r�/��##����i������9$$.�������Form���AlertDialog����2 (� $� 0$)-$-0 (� 9 "/� ("-!(� - 74 -� *$6$� !7,!� &,!"� ($(3 -/ ,$� 5"(�  7- � &,!"�!�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog���* 3$/ ,$�������sure���KAlertDialog���,!,"/!5$� ($(3 -/ ,$� $$�?�������Are you sure to start crushing?���KSureDialog���d($(3 -/ -0 (� 9 "/� "� 3 ,"5$� 0!7,&,!5$� 3!"/,&� &,!"�!�������"Crushed files cannot be recovered!���KSureDialog���&,!"0,!,&�������cancle���KSureDialog���* 3$/ ,$�������sure���KSureDialog���(!.!,&�������Add File���ShredDialog���"0"/5",&/5$� , 0$,$�������Deselect���ShredDialog���Z($(3 -/ ,$� ,!5$� * "- � 9 "/� "� 0$)-$-0 (� &,!"�������No file selected to be shredded���ShredDialog���� ), 7$- 7 "�:� 9 "/� ($(3 -/ ,$�  5"// ,$"� 5"� &,!"0,!5$� *$/,$� &,!"� *$/-$.5"3 "�  5"// - 7 "�!�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���T($(3 -/ ,$� ,!5$� * "- � 9 "/� "� 0$)-$- 7 "�!������� Please select the file to shred!���ShredDialog���($(3 -/ ,$�������
+ Shred File���ShredDialog���Z($(3 -/ -0 (� 9 "/� "� 0!7,&,!,&� 5"(�  7- � &,!"�������'Delete files makes it unable to recover���ShredManager���(9 "/� $(� ($(3 -/ -$7�������
Shred Manager���ShredManager����
+\ No newline at end of file
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_mn.ts b/treasure-chest/file-smash/translations/kylin-file-crush_mn.ts
+index 514f951..2a95a20 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_mn.ts
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_mn.ts
+@@ -63,10 +63,8 @@
+ <context>
+     <name>ShredDialog</name>
+     <message>
+-        <location filename="../shreddialog.cpp" line="38"/>
+-        <location filename="../shreddialog.cpp" line="39"/>
+         <source>FileShredder</source>
+-        <translation>ᠹᠠᠢᠯ ᠨᠤᠨᠳᠠᠭᠯᠠᠭᠤᠷ</translation>
++        <translation type="vanished">ᠹᠠᠢᠯ ᠨᠤᠨᠳᠠᠭᠯᠠᠭᠤᠷ</translation>
+     </message>
+     <message>
+         <source>File Shredder</source>
+@@ -81,6 +79,12 @@
+         <source>The file is completely shredded and cannot be recovered</source>
+         <translation type="vanished">ᠹᠠᠢᠯ ᠪᠦᠷᠢᠮᠦᠰᠦᠨ ᠨᠤᠨᠳᠠᠭᠯᠠᠭᠳᠠᠵᠤ᠂ ᠳᠠᠬᠢᠨ ᠰᠡᠷᠬᠦᠬᠦ ᠦᠬᠡᠢ</translation>
+     </message>
++    <message>
++        <location filename="../shreddialog.cpp" line="38"/>
++        <location filename="../shreddialog.cpp" line="39"/>
++        <source>File Crush</source>
++        <translation type="unfinished"></translation>
++    </message>
+     <message>
+         <location filename="../shreddialog.cpp" line="65"/>
+         <location filename="../shreddialog.cpp" line="815"/>
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_ug.qm b/treasure-chest/file-smash/translations/kylin-file-crush_ug.qm
+index 204cdf9..876f5d9 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_ug.qm
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_ug.qm
+@@ -1,6 +1,6 @@
+-<�d��!�`���B�����֍���������7����������y�A��b'�T���M�r����J%���
++<�d��!�`���B���x�֍���������7����������/�A��'�T���M�r��I�J%���
+ `�1���,
+ d�U��9
+-�����C[�R���aQ����d������/��k#���i�������F�o�r�m�������Form���AlertDialog����3I2� *'DDI:'F� ��,,�*� E�F/�1I,�� J'CI� &I,'2�*F'EI3I� JHB� ~'1�ID'4B'� (HDE'J/��!�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog���$*'DDI:'FFI� &���1�4�������sure���KAlertDialog���L3I2� �HB�E� ~'1�ID'4FI� ,�2IED�4*�1�E3I2�������Are you sure to start crushing?���KSureDialog���h~'1�ID'F:'F� ��,,�*D�1FI� &�3DI��� C�D*�1�IDI� (HDE'J/��!�������"Crushed files cannot be recovered!���KSureDialog���(IC'1� BIDI4�������cancle���KSureDialog���$*'DDI:'FFI� &���1�4�������sure���KSureDialog���
+-BH4�4�������Add File���ShredDialog����IBI1��*I4�������Deselect���ShredDialog�����,,�*FI� &I2I4� �������FileShredder���ShredDialog���2��,,�*� ~'1�IDI:��I� E'4IF'�������No file selected to be shredded���ShredDialog����&�3C�1*I4�:� ��,,�*� ~'1�ID'4� ,�1J'FIFI� (IC'1� BIDI4B'� (HDE'J/�� &��*IJ'*� (ID�F� E�4:�D'*� BIDI��!�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���8~'1�ID'F:'F� ��,,�*FI� *'DD'��!������� Please select the file to shred!���ShredDialog���x��,,�*� ~�*�FD�J� ~'1�ID'F/I� ��E/�� &�3DI��� C�D*�1�IDI� (HDE'J/��������
++������aQ����d������/��k#���i��W����F�o�r�m�������Form���AlertDialog����3I2� *'DDI:'F� ��,,�*� E�F/�1I,�� J'CI� &I,'2�*F'EI3I� JHB� ~'1�ID'4B'� (HDE'J/��!�������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog���$*'DDI:'FFI� &���1�4�������sure���KAlertDialog���L3I2� �HB�E� ~'1�ID'4FI� ,�2IED�4*�1�E3I2�������Are you sure to start crushing?���KSureDialog���h~'1�ID'F:'F� ��,,�*D�1FI� &�3DI��� C�D*�1�IDI� (HDE'J/��!�������"Crushed files cannot be recovered!���KSureDialog���(IC'1� BIDI4�������cancle���KSureDialog���$*'DDI:'FFI� &���1�4�������sure���KSureDialog���
++BH4�4�������Add File���ShredDialog����IBI1��*I4�������Deselect���ShredDialog���2��,,�*� ~'1�IDI:��I� E'4IF'�������No file selected to be shredded���ShredDialog����&�3C�1*I4�:� ��,,�*� ~'1�ID'4� ,�1J'FIFI� (IC'1� BIDI4B'� (HDE'J/�� &��*IJ'*� (ID�F� E�4:�D'*� BIDI��!�������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog���8~'1�ID'F:'F� ��,,�*FI� *'DD'��!������� Please select the file to shred!���ShredDialog���x��,,�*� ~�*�FD�J� ~'1�ID'F/I� ��E/�� &�3DI��� C�D*�1�IDI� (HDE'J/��������
+ Shred File���ShredDialog���h~'1�ID'F:'F� ��,,�*D�1FI� &�3DI��� C�D*�1�4C�� (HDE'J/��!�������'Delete files makes it unable to recover���ShredManager���0��,,�*� ~'1�ID'4� E'4IFI3I�������
Shred Manager���ShredManager����
+\ No newline at end of file
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_ug.ts b/treasure-chest/file-smash/translations/kylin-file-crush_ug.ts
+index 5620ba4..7866c27 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_ug.ts
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_ug.ts
+@@ -63,10 +63,8 @@
+ <context>
+     <name>ShredDialog</name>
+     <message>
+-        <location filename="../shreddialog.cpp" line="38"/>
+-        <location filename="../shreddialog.cpp" line="39"/>
+         <source>FileShredder</source>
+-        <translation>ھۆججەتنى ئىزىش </translation>
++        <translation type="vanished">ھۆججەتنى ئىزىش </translation>
+     </message>
+     <message>
+         <source>File Shredder</source>
+@@ -81,6 +79,12 @@
+         <source>The file is completely shredded and cannot be recovered</source>
+         <translation type="vanished">پارچىلانغان ھۆججەت تاللانمىغان</translation>
+     </message>
++    <message>
++        <location filename="../shreddialog.cpp" line="38"/>
++        <location filename="../shreddialog.cpp" line="39"/>
++        <source>File Crush</source>
++        <translation type="unfinished"></translation>
++    </message>
+     <message>
+         <location filename="../shreddialog.cpp" line="65"/>
+         <location filename="../shreddialog.cpp" line="815"/>
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_zh_CN.qm b/treasure-chest/file-smash/translations/kylin-file-crush_zh_CN.qm
+index 3c705e5..2e3039a 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_zh_CN.qm
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_zh_CN.qm
+@@ -1,8 +1,9 @@
+-<�d��!�`���B����� ��h�֍���������D�����@�l�b����Q���u5���u5���u%����u%��������Q�A��tɐ���(-�����'�T��#1P���M�r��)�I�����I�����J%��?$���
++<�d��!�`���B����� ��h�֍���������D�����@�l�b����Q���u5���u5���u%���u%��������O�A��rɐ���(-�����'�T��!1P���M�r��'�I�����I�����J%��?$��3NL����
+ `�1����
+ d�U���
+-������[�R���aQ���������E����&d����m��?��T�/��qԤ���#����i������h<_�������Form���AlertDialog��� p�Q� �+ c	��bv�c�b�b�e�N�R0kd�������=Click the “+” button or directly drag and drop files here���Divider���,`��	b�v�e�N�f/N�N*v�_Ub�e�gC�P�e�l�|�x���������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog���xn[��������sure���KAlertDialog���f/T&xn[�_�Y�|�x���������Are you sure to start crushing?���KSureDialog���|�x�v�e�N�\N
S�`bY
��������"Crushed files cannot be recovered!���KSureDialog���S�m��������cancle���KSureDialog���xn[��������sure���KSureDialog���� ������� ���ShredDialog���e�N�|�x�Y1�%�������� File shredding failed���ShredDialog���m�R��������Add File���ShredDialog���_{^�|�x�e�l�R �dv�e�N�be�N�Y9�������8Completely crush files or folders that cannot be deleted���ShredDialog���y��d�������Deselect���ShredDialog���e�N�T
y��������	File Name���ShredDialog���e�N���_��������	File Path���ShredDialog���e�N�|�x�]�[�b�������File shredding completed���ShredDialog���e�N�|�x�N-���z
{I�������$File shredding, please wait a moment���ShredDialog���
+-e�N�|�x�g:�������FileShredder���ShredDialog���e�N�O�`oR��}N-�.�.�.� �������Loading file information... ���ShredDialog���g*�	b鉁|�x�v�e�N��������No file selected to be shredded���ShredDialog���(l�a�e�N�|�x�d�O\N
S�S�m�����(aNd�O\��������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog������	b鉁y��dv�e�N��������� Please select the file to cacel!���ShredDialog������	b鉁|�x�v�e�N��������� Please select the file to shred!���ShredDialog���|�x��������
++������aQ���������y����$d����m��?��R�/��qԤ���#����i������h<_�������Form���AlertDialog��� p�Q� �+ c	��bv�c�b�b�e�N�R0kd�������=Click the “+” button or directly drag and drop files here���Divider���,`��	b�v�e�N�f/N�N*v�_Ub�e�gC�P�e�l�|�x���������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog���xn[��������sure���KAlertDialog���f/T&xn[�_�Y�|�x���������Are you sure to start crushing?���KSureDialog���|�x�v�e�N�\N
S�`bY
��������"Crushed files cannot be recovered!���KSureDialog���S�m��������cancle���KSureDialog���xn[��������sure���KSureDialog���� ������� ���ShredDialog���e�N�|�x�Y1�%�������� File shredding failed���ShredDialog���m�R��������Add File���ShredDialog���_{^�|�x�e�l�R �dv�e�N�be�N�Y9�������8Completely crush files or folders that cannot be deleted���ShredDialog���y��d�������Deselect���ShredDialog���
++e�N�|�x�g:�������
++File Crush���ShredDialog���e�N�T
y��������	File Name���ShredDialog���e�N���_��������	File Path���ShredDialog���e�N�|�x�]�[�b�������File shredding completed���ShredDialog���e�N�|�x�N-���z
{I�������$File shredding, please wait a moment���ShredDialog���e�N�O�`oR��}N-�.�.�.� �������Loading file information... ���ShredDialog���g*�	b鉁|�x�v�e�N��������No file selected to be shredded���ShredDialog���(l�a�e�N�|�x�d�O\N
S�S�m�����(aNd�O\��������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog������	b鉁y��dv�e�N��������� Please select the file to cacel!���ShredDialog������	b鉁|�x�v�e�N��������� Please select the file to shred!���ShredDialog���|�x��������
+ Shred File���ShredDialog���S�m��������cancel���ShredDialog�������������error���ShredDialog���Qh�	�������
+ select all���ShredDialog�����~�O�`o�������	view info���ShredDialog���e�N�T
y��������	File Name���ShredFailInfoDialog���e�N���_��������	File Path���ShredFailInfoDialog���S�m��������cancel���ShredFailInfoDialog���|�x�e�N�\e�l�`bY
��������'Delete files makes it unable to recover���ShredManager���
+ e�N�|�x�g:�������
Shred Manager���ShredManager
+\ No newline at end of file
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_zh_CN.ts b/treasure-chest/file-smash/translations/kylin-file-crush_zh_CN.ts
+index 7cdc297..f15e0e8 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_zh_CN.ts
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_zh_CN.ts
+@@ -63,10 +63,8 @@
+ <context>
+     <name>ShredDialog</name>
+     <message>
+-        <location filename="../shreddialog.cpp" line="38"/>
+-        <location filename="../shreddialog.cpp" line="39"/>
+         <source>FileShredder</source>
+-        <translation>文件粉碎机</translation>
++        <translation type="vanished">文件粉碎机</translation>
+     </message>
+     <message>
+         <source>File Shredder</source>
+@@ -81,6 +79,12 @@
+         <source>The file is completely shredded and cannot be recovered</source>
+         <translation type="vanished">文件将被完全粉碎且不能恢复</translation>
+     </message>
++    <message>
++        <location filename="../shreddialog.cpp" line="38"/>
++        <location filename="../shreddialog.cpp" line="39"/>
++        <source>File Crush</source>
++        <translation>文件粉碎机</translation>
++    </message>
+     <message>
+         <location filename="../shreddialog.cpp" line="65"/>
+         <location filename="../shreddialog.cpp" line="815"/>
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_zh_HK.qm b/treasure-chest/file-smash/translations/kylin-file-crush_zh_HK.qm
+index ccbda1d..4c85713 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_zh_HK.qm
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_zh_HK.qm
+@@ -1,7 +1,6 @@
+-<�d��!�`���B�����֍���������������������U�A���'�T��}M�r����J%���
++<�d��!�`���B���x�֍����������������������A���'�T��GM�r����J%���
+ `�1���(
+ d�U���
+-�����/[�R��GaQ����d�������/��#���Gi��e���h<_�������Form���AlertDialog���.`��xd�v�j�hHf/N�Pv�b�q!�1S�k
+-�q!l�|�x���������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog���x�[��������sure���KAlertDialog���f/T&x�[���Y�|�x���������Are you sure to start crushing?���KSureDialog���|�x�v�j�\N
S�`b_���������"Crushed files cannot be recovered!���KSureDialog���S�m��������cancle���KSureDialog���x�[��������sure���KSureDialog���m�R��������Add File���ShredDialog���b�c��������Deselect���ShredDialog���
+-e�N�|�x�g:�������FileShredder���ShredDialog���g*�xdlj�|�x�v�j��������No file selected to be shredded���ShredDialog���(l�a�e�N�|�x�d�O\N
S�S�m���ˋ9aNd�O\��������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog����ːxdlj�|�x�v�j��������� Please select the file to shred!���ShredDialog���|�x��������
++������aQ���qd�������/��#���Gi��/���h<_�������Form���AlertDialog���.`��xd�v�j�hHf/N�Pv�b�q!�1S�k
++�q!l�|�x���������VThe file you selected is a directory or does not have permissions, cannot be shredded!���KAlertDialog���x�[��������sure���KAlertDialog���f/T&x�[���Y�|�x���������Are you sure to start crushing?���KSureDialog���|�x�v�j�\N
S�`b_���������"Crushed files cannot be recovered!���KSureDialog���S�m��������cancle���KSureDialog���x�[��������sure���KSureDialog���m�R��������Add File���ShredDialog���b�c��������Deselect���ShredDialog���g*�xdlj�|�x�v�j��������No file selected to be shredded���ShredDialog���(l�a�e�N�|�x�d�O\N
S�S�m���ˋ9aNd�O\��������ANote:File shredding cannot be cancelled, please exercise caution!���ShredDialog����ːxdlj�|�x�v�j��������� Please select the file to shred!���ShredDialog���|�x��������
+ Shred File���ShredDialog���|�x�j�\q!l�`b_���������'Delete files makes it unable to recover���ShredManager���j�|�x�j_�������
Shred Manager���ShredManager
+\ No newline at end of file
+diff --git a/treasure-chest/file-smash/translations/kylin-file-crush_zh_HK.ts b/treasure-chest/file-smash/translations/kylin-file-crush_zh_HK.ts
+index 983ee28..39767fb 100644
+--- a/treasure-chest/file-smash/translations/kylin-file-crush_zh_HK.ts
++++ b/treasure-chest/file-smash/translations/kylin-file-crush_zh_HK.ts
+@@ -63,10 +63,8 @@
+ <context>
+     <name>ShredDialog</name>
+     <message>
+-        <location filename="../shreddialog.cpp" line="38"/>
+-        <location filename="../shreddialog.cpp" line="39"/>
+         <source>FileShredder</source>
+-        <translation>文件粉碎机</translation>
++        <translation type="vanished">文件粉碎机</translation>
+     </message>
+     <message>
+         <source>File Shredder</source>
+@@ -81,6 +79,12 @@
+         <source>The file is completely shredded and cannot be recovered</source>
+         <translation type="vanished">檔將被完全粉碎且不能恢復</translation>
+     </message>
++    <message>
++        <location filename="../shreddialog.cpp" line="38"/>
++        <location filename="../shreddialog.cpp" line="39"/>
++        <source>File Crush</source>
++        <translation type="unfinished"></translation>
++    </message>
+     <message>
+         <location filename="../shreddialog.cpp" line="65"/>
+         <location filename="../shreddialog.cpp" line="815"/>
+diff --git a/treasure-chest/network-bandwidth-test/CMakeLists.txt b/treasure-chest/network-bandwidth-test/CMakeLists.txt
+index b4f18a6..8e9e021 100644
+--- a/treasure-chest/network-bandwidth-test/CMakeLists.txt
++++ b/treasure-chest/network-bandwidth-test/CMakeLists.txt
+@@ -49,6 +49,6 @@ qt5_add_translation(QM_FILES ${TRANSLATIONS})
+ target_include_directories(${PROJECT_NAME} PRIVATE ${NETWORK_BANDWIDTH_TEST_DIR})
+ target_sources(${PROJECT_NAME} PRIVATE ${SRCS} ${QM_FILES})
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-iperf/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/bin/)
+ install(FILES ${QM_FILES} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-iperf/translations/)
+ install(FILES kylin-iperf.conf DESTINATION /usr/share/kylin-os-manager/plugins/tool-box/plugins/)
+diff --git a/treasure-chest/network-bandwidth-test/kylin-iperf.conf b/treasure-chest/network-bandwidth-test/kylin-iperf.conf
+index 6a97b46..638a32d 100644
+--- a/treasure-chest/network-bandwidth-test/kylin-iperf.conf
++++ b/treasure-chest/network-bandwidth-test/kylin-iperf.conf
+@@ -10,6 +10,6 @@ Comment[zh_HK]=評估網路性能和頻寬
+ Comment[bo_CN]=དྲ་རྒྱའི་ནུས་པ་དང་ཞེང་ཚད་ལ་དཔྱད་དཔོག་བྱ་དགོས།
+ Comment[mn]=ᠲᠣᠤᠷ ᠰᠦᠯᠵᠢᠶᠡᠨ ᠦ ᠴᠢᠳᠠᠪᠬᠢ ᠪᠣᠯᠤᠨ ᠥᠷᠭᠡᠳᠬᠡᠯᠲᠡ ᠶᠢ ᠦᠨᠡᠯᠡᠨ ᠵᠢᠱᠢᠬᠦ ᠬᠡᠷᠡᠭᠲᠡᠶ᠃
+ Icon=kylin-iperf
+-Exec=/usr/share/kylin-os-manager/treasure-chest/kylin-iperf/kylin-iperf
++Exec=/usr/lib/kylin-os-manager/bin/kylin-iperf
+ Categories=Debug
+ Depends=iperf
+diff --git a/treasure-chest/network-iputils-arping/CMakeLists.txt b/treasure-chest/network-iputils-arping/CMakeLists.txt
+index 9271cf4..ccb1020 100644
+--- a/treasure-chest/network-iputils-arping/CMakeLists.txt
++++ b/treasure-chest/network-iputils-arping/CMakeLists.txt
+@@ -50,6 +50,6 @@ qt5_add_translation(QM_FILES ${TRANSLATIONS})
+ target_include_directories(${PROJECT_NAME} PRIVATE ${NETWORK_IPUTILS_ARPING_DIR})
+ target_sources(${PROJECT_NAME} PRIVATE ${SRCS} ${QM_FILES})
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-iputils-arping/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/bin/)
+ install(FILES ${QM_FILES} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-iputils-arping/translations/)
+ install(FILES kylin-iputils-arping.conf DESTINATION /usr/share/kylin-os-manager/plugins/tool-box/plugins/)
+diff --git a/treasure-chest/network-iputils-arping/kylin-iputils-arping.conf b/treasure-chest/network-iputils-arping/kylin-iputils-arping.conf
+index b258e6c..eb308fe 100644
+--- a/treasure-chest/network-iputils-arping/kylin-iputils-arping.conf
++++ b/treasure-chest/network-iputils-arping/kylin-iputils-arping.conf
+@@ -1,5 +1,5 @@
+ [ToolBox Entry]
+-Name=IP Conflict detection tools
++Name=IP Conflict Detection Tool
+ Name[zh_CN]=IP 冲突检测工具
+ Name[zh_HK]=IP 衝突檢測工具
+ Name[bo_CN]=IP གདོང་གཏུག་ཞིབ་དཔྱད་ཚད་ལེན་ཡོ་བྱད།
+@@ -10,6 +10,6 @@ Comment[zh_HK]=快速識別與解決IP位址衝突
+ Comment[bo_CN]=མགྱོགས་མྱུར་གྱིས་IPཡི་ས་གནས་བར་གྱི་འགལ་བ་དབྱེ་འབྱེད་དང་ཐག་གཅོད་བྱེད་དགོས།
+ Comment[mn]=IP ᠬᠠᠶᠢᠭ ᠤᠨ ᠮᠥᠷᠭᠥᠯᠳᠥᠭᠡᠨ ᠢ ᠲᠦᠷᠭᠡᠨ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠪᠠ ᠰᠢᠶᠳᠪᠦᠷᠢᠯᠡᠬᠦ ᠬᠡᠷᠡᠭᠲᠡᠶ ᠃
+ Icon=kylin-iputils-arping
+-Exec=/usr/share/kylin-os-manager/treasure-chest/kylin-iputils-arping/kylin-iputils-arping
++Exec=/usr/lib/kylin-os-manager/bin/kylin-iputils-arping
+ Categories=Debug
+ Depends=iputils-arping
+diff --git a/treasure-chest/network-route-track/CMakeLists.txt b/treasure-chest/network-route-track/CMakeLists.txt
+index 34d58ca..70bea1f 100644
+--- a/treasure-chest/network-route-track/CMakeLists.txt
++++ b/treasure-chest/network-route-track/CMakeLists.txt
+@@ -47,6 +47,6 @@ qt5_add_translation(QM_FILES ${TRANSLATIONS})
+ target_include_directories(${PROJECT_NAME} PRIVATE ${NETWORK_ROUTE_TRACK_DIR})
+ target_sources(${PROJECT_NAME} PRIVATE ${SRCS} ${QM_FILES})
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-traceroute/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/bin/)
+ install(FILES ${QM_FILES} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-traceroute/translations/)
+ install(FILES kylin-traceroute.conf DESTINATION /usr/share/kylin-os-manager/plugins/tool-box/plugins/)
+diff --git a/treasure-chest/network-route-track/kylin-traceroute.conf b/treasure-chest/network-route-track/kylin-traceroute.conf
+index 464f635..3aa30f3 100644
+--- a/treasure-chest/network-route-track/kylin-traceroute.conf
++++ b/treasure-chest/network-route-track/kylin-traceroute.conf
+@@ -10,6 +10,6 @@ Comment[zh_HK]=顯示網路數據傳輸路徑
+ Comment[bo_CN]=དྲ་རྒྱའི་གཞི་གྲངས་བརྒྱུད་སྐྱེལ་བྱེད་པའི་ཐབས་ལམ་མངོན་པར་བྱས་ཡོད།
+ Comment[mn]=ᠰᠦᠯᠵᠢᠶᠡᠨ ᠦ ᠲᠣᠭ᠎ᠠ ᠪᠠᠷᠢᠮᠲᠠ ᠳᠠᠮᠵᠢᠭᠤᠯᠬᠤ ᠠᠷᠭ᠎ᠠ ᠵᠠᠮ ᠢ ᠢᠯᠡᠷᠡᠭᠦᠯᠵᠡᠶ ᠃
+ Icon=kylin-traceroute
+-Exec=/usr/share/kylin-os-manager/treasure-chest/kylin-traceroute/kylin-traceroute
++Exec=/usr/lib/kylin-os-manager/bin/kylin-traceroute
+ Categories=Debug
+ Depends=traceroute
+diff --git a/treasure-chest/network-telnet/CMakeLists.txt b/treasure-chest/network-telnet/CMakeLists.txt
+index 9994045..590b7d9 100644
+--- a/treasure-chest/network-telnet/CMakeLists.txt
++++ b/treasure-chest/network-telnet/CMakeLists.txt
+@@ -47,7 +47,7 @@ qt5_add_translation(QM_FILES ${TRANSLATIONS})
+ target_include_directories(${PROJECT_NAME} PRIVATE ${NETWORK_TELNET_DIR})
+ target_sources(${PROJECT_NAME} PRIVATE ${SRCS} ${QM_FILES})
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-telnet/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/bin/)
+ install(FILES ${QM_FILES} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-telnet/translations/)
+ install(FILES kylin-telnet.conf DESTINATION /usr/share/kylin-os-manager/plugins/tool-box/plugins/)
+ install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/data/user_manual/ DESTINATION /usr/share/kylin-user-guide/data/guide/kylin-telnet/)
+diff --git a/treasure-chest/network-telnet/kylin-telnet.conf b/treasure-chest/network-telnet/kylin-telnet.conf
+index 975c45d..2defa25 100644
+--- a/treasure-chest/network-telnet/kylin-telnet.conf
++++ b/treasure-chest/network-telnet/kylin-telnet.conf
+@@ -1,5 +1,5 @@
+ [ToolBox Entry]
+-Name=Network Connectivity Detection Tools
++Name=Network Connectivity Detection Tool
+ Name[zh_CN]=网络连通性检测工具
+ Name[zh_HK]=網路連通性檢測工具
+ Name[bo_CN]=དྲ་རྒྱའི་འབྲེལ་མཐུད་རང་བཞིན་གྱི་ཞིབ་དཔྱད་ཚད་ལེན་ཡོ་བྱད།
+@@ -10,7 +10,7 @@ Comment[zh_HK]=遠端連接,診斷網路是否通暢
+ Comment[bo_CN]=ཐག་རིང་སྦྲེལ་མཐུད་དང་། དྲ་རྒྱ་ཤར་གཏོང་ཐུབ་མིན་ལ་བརྟག་དཔྱད་བྱ་དགོས།
+ Comment[mn]=ᠠᠯᠤᠰ ᠠᠴᠠ ᠬᠣᠯᠪᠣᠵᠤ ᠂ ᠰᠦᠯᠵᠢᠶ᠎ᠡ ᠰᠠᠭᠠᠳ ᠦᠭᠡᠶ ᠪᠠᠶᠢᠬᠤ ᠡᠰᠡᠬᠦ ᠶᠢ ᠣᠨᠣᠰᠢᠯᠠᠨ᠎ᠠ ᠃
+ Icon=kylin-telnet
+-Exec=/usr/share/kylin-os-manager/treasure-chest/kylin-telnet/kylin-telnet
++Exec=/usr/lib/kylin-os-manager/bin/kylin-telnet
+ Categories=Debug
+ Depends=telnet
+ UserManual=kylin-telnet
+diff --git a/treasure-chest/network-telnet/mainwindow.cpp b/treasure-chest/network-telnet/mainwindow.cpp
+index e907eb5..3854a8f 100644
+--- a/treasure-chest/network-telnet/mainwindow.cpp
++++ b/treasure-chest/network-telnet/mainwindow.cpp
+@@ -20,7 +20,7 @@ MainWindow::MainWindow(KWidget *parent)
+       m_labelPort(new QLabel(this)), m_spinBox(new QSpinBox(this)), m_process(new QProcess(this)),
+       m_timer(new QTimer(this))
+ {
+-    this->setWidgetName(tr("network-telnet"));
++    this->setWidgetName(tr("Network Connectivity Detection Tool"));
+     this->setIcon(QIcon::fromTheme("kylin-telnet")); // 设置图标
+     setFixedSize(420, 244);
+     this->setBackgroundRole(QPalette::Base);
+diff --git a/treasure-chest/network-telnet/translations/komt-network-telnet_zh_CN.ts b/treasure-chest/network-telnet/translations/komt-network-telnet_zh_CN.ts
+index 969f191..63464f8 100644
+--- a/treasure-chest/network-telnet/translations/komt-network-telnet_zh_CN.ts
++++ b/treasure-chest/network-telnet/translations/komt-network-telnet_zh_CN.ts
+@@ -15,7 +15,7 @@
+     </message>
+     <message>
+         <location filename="../mainwindow.cpp" line="23"/>
+-        <source>network-telnet</source>
++        <source>Network Connectivity Detection Tool</source>
+         <translation>网络连通性检测工具</translation>
+     </message>
+     <message>
+diff --git a/treasure-chest/replacement/CMakeLists.txt b/treasure-chest/replacement/CMakeLists.txt
+index 2807a55..7535c25 100644
+--- a/treasure-chest/replacement/CMakeLists.txt
++++ b/treasure-chest/replacement/CMakeLists.txt
+@@ -142,7 +142,7 @@ qt5_add_translation(QM_FILES ${TRANSLATIONS})
+ target_include_directories(${PROJECT_NAME} PRIVATE ${DATA_EXCHANGE_ASSISTANT_DIR})
+ target_sources(${PROJECT_NAME} PRIVATE ${SRCS} ${QM_FILES})
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/share/kylin-os-manager/replacement/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/bin/)
+ install(FILES ${QM_FILES} DESTINATION  /usr/share/kylin-os-manager/replacement/translations/)
+ install(FILES res/icon.svg DESTINATION /usr/share/kylin-os-manager/replacement/icon/)
+ install(FILES data/appblacklist.json DESTINATION /usr/share/kylin-os-manager/replacement/data/)
+diff --git a/treasure-chest/replacement/kylin-replacement.conf b/treasure-chest/replacement/kylin-replacement.conf
+index 75d42ef..794f28d 100644
+--- a/treasure-chest/replacement/kylin-replacement.conf
++++ b/treasure-chest/replacement/kylin-replacement.conf
+@@ -10,5 +10,5 @@ Comment[zh_HK]=快速把數據遷移至新電腦
+ Comment[bo_CN]=མྱུར་དུ་གཞི་གྲངས་གློག་ཀླད་གསར་བར་སྤོར་བ་རེད།
+ Comment[mn]=ᠲᠣᠭ᠎ᠠ ᠪᠠᠷᠢᠮᠲᠠ ᠶᠢ ᠲᠦᠷᠭᠡᠨ ᠢᠶᠡᠷ ᠰᠢᠨ᠎ᠡ ᠺᠣᠮᠫᠢᠦ᠋ᠲ᠋ᠧᠷ ᠲᠦ ᠰᠢᠯᠵᠢᠭᠦᠯᠵᠡᠢ ᠃
+ Icon=/usr/share/kylin-os-manager/replacement/icon/icon.svg
+-Exec=/usr/share/kylin-os-manager/replacement/replacement
++Exec=/usr/lib/kylin-os-manager/bin/replacement
+ Categories=Feature
+diff --git a/treasure-chest/source-update/CMakeLists.txt b/treasure-chest/source-update/CMakeLists.txt
+index ce46fa9..0b66f28 100644
+--- a/treasure-chest/source-update/CMakeLists.txt
++++ b/treasure-chest/source-update/CMakeLists.txt
+@@ -54,6 +54,6 @@ else ()
+     target_link_libraries(${PROJECT_NAME} PRIVATE compatibility)
+ endif ()
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-source-update-tool/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/bin/)
+ install(FILES ${QM_FILES} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-source-update-tool/translations/)
+ install(FILES ${CMAKE_CURRENT_LIST_DIR}/kylin-source-update-tool.conf DESTINATION /usr/share/kylin-os-manager/plugins/tool-box/plugins/)
+diff --git a/treasure-chest/source-update/kylin-source-update-tool.conf b/treasure-chest/source-update/kylin-source-update-tool.conf
+index 6c9e687..8be30d5 100644
+--- a/treasure-chest/source-update/kylin-source-update-tool.conf
++++ b/treasure-chest/source-update/kylin-source-update-tool.conf
+@@ -1,5 +1,5 @@
+ [ToolBox Entry]
+-Name=Source Update Tool
++Name=Kylin Source Update Tool
+ Name[zh_CN]=源更新工具
+ Name[zh_HK]=源更新工具
+ Name[bo_CN]=ཡོ་བྱད་གསར་སྒྱུར་བྱེད་པ།
+@@ -10,5 +10,5 @@ Comment[zh_HK]=使用apt update 更新源
+ Comment[bo_CN]=apt updateཡི་འབྱུང་ཁུངས་གསར་བ་བཀོལ་སྤྱོད་བྱེད་པ།
+ Comment[mn]=apt update ᠶᠢ ᠬᠡᠷᠡᠭᠯᠡᠨ ᠢᠷᠡᠯᠲᠡ ᠶᠢ ᠰᠢᠨᠡᠳᠬᠡᠨ᠎ᠡ ᠃
+ Icon=kylin-source-update-tool
+-Exec=/usr/share/kylin-os-manager/treasure-chest/kylin-source-update-tool/kylin-source-update-tool
++Exec=/usr/lib/kylin-os-manager/bin/kylin-source-update-tool
+ Categories=Debug
+diff --git a/treasure-chest/system-cleanup/CMakeLists.txt b/treasure-chest/system-cleanup/CMakeLists.txt
+index 8de0e01..8f54d52 100644
+--- a/treasure-chest/system-cleanup/CMakeLists.txt
++++ b/treasure-chest/system-cleanup/CMakeLists.txt
+@@ -83,6 +83,6 @@ qt5_add_translation(QM_FILES ${TRANSLATIONS})
+ target_include_directories(${PROJECT_NAME} PRIVATE ${SYSTEM_CLEANUP_DIR})
+ target_sources(${PROJECT_NAME} PRIVATE ${SRCS} ${QM_FILES})
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-system-cleanup/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/bin/)
+ install(FILES ${QM_FILES} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-system-cleanup/translations/)
+ install(FILES kylin-system-cleanup.conf DESTINATION /usr/share/kylin-os-manager/plugins/tool-box/plugins/)
+diff --git a/treasure-chest/system-cleanup/filemd5.cpp b/treasure-chest/system-cleanup/filemd5.cpp
+index c24c536..188a5bc 100644
+--- a/treasure-chest/system-cleanup/filemd5.cpp
++++ b/treasure-chest/system-cleanup/filemd5.cpp
+@@ -12,59 +12,78 @@ FileMd5::FileMd5(QObject *parent) : QObject(parent)
+ 
+ void FileMd5::slotGetFileInfo(const QString &path)
+ {
+-    isCanceled = false;
++    *m_cancel = false;
++    *m_sameFileNum = 0;
+     // 获取目录的文件列表 获取文件md5值 返回结果
+     QHash<QByteArray,QStringList> ret;
+-    m_fileinfo.clear();
++    QHash<QByteArray,QStringList> tmpmd5;
++    m_fileinfo.clear(); // m_fileinfo存放文件大小和文件路径
++    ret.clear();
+ 
+-    QStringList files = getFiles(path);
++    QStringList files = getFiles(path); // 获取全部的文件列表
+ 
+     int value = 0;
++    if (files.count() == 0) {
++        emit signalProgressValue(100, 100);
++        return;
++    } else {
++        emit signalProgressValue(value, files.count() + 5);
++    }
++    int num = 0;
+     for (QHash<long, QStringList>::iterator it = m_fileinfo.begin(); it != m_fileinfo.end(); ++it) {
+         value += it.value().count();
+-        if (isCanceled) {
++        if (*m_cancel) {
+             return;
+         }
+-        if (it.value().count() > 1) {
+-            for(int i = 0; i < it.value().count(); i++) {
+-                QString fileName = it.value().at(i);
+-                QByteArray md5 = getFileMd5(fileName);
+-                ret[md5].append(fileName);
+-                if (isCanceled) {
++        if (it.key() > 0 && it.value().count() > 1) {
++            tmpmd5 = filtr(it.key(),it.value());
++            if (*m_cancel) {
++                return;
++            }
++
++            // 遍历MD5哈希表,含有相同MD5的文件
++            for (QHash<QByteArray, QStringList>::iterator it = tmpmd5.begin(); it != tmpmd5.end(); ++it) {
++                if (*m_cancel) {
+                     return;
+                 }
+-            }
++                if (it.value().count() > 1 && it.key() != "") {
++                    ret[it.key()].append(it.value());
++                    num += it.value().count();
++                    *m_sameFileNum = num;
++                    // qDebug() << " really file num : " << num ;
++                }
++            } 
+         } else {
+-            emit signalProgressValue(value, files.count());
++            // emit signalProgressValue(value, files.count());
++            emit signalProgressValue(value, files.count() + 5);
+             continue;
+         }
+-        if (isCanceled) {
++        if (*m_cancel) {
+             return;
+         }
+-        emit signalProgressValue(value, files.count());
+-        emit signalFileInfo(ret);
+-        ret.clear();
++        // emit signalProgressValue(value, files.count());
++        emit signalProgressValue(value, files.count() + 5);
+     }
+-    // emit signalFileInfo(ret);
+-    // for(int i = 0; i < files.count(); i++){
+-    //     if (isCanceled) {
+-    //         break;
+-    //     }
+-    //     QString fileName = files.at(i);
+-    //     QByteArray md5 = getFileMd5(fileName);
+-
+-    //     ret[md5].append(fileName);
+-    //     emit signalProgressValue(i+1, files.count());
+-    // }
+-    // if (isCanceled) {
+-    //     return;
+-    // }
+-    // emit signalFileInfo(ret);
++    emit signalFileInfo(ret);
++    qDebug() << " really file num : " << num ;
+ }
+ 
+-void FileMd5::slotCannelGetMd5()
++bool *FileMd5::slotGetCancelHandle()
+ {
+-    isCanceled = true;
++    if (m_cancel == nullptr) {
++        m_cancel = new bool;
++        *m_cancel = false;
++    }
++    return m_cancel;
++}
++
++int *FileMd5::slotGetSameFileNum()
++{
++    if (m_sameFileNum == nullptr) {
++        m_sameFileNum = new int;
++        *m_sameFileNum = 0;
++    }
++    return m_sameFileNum;
+ }
+ 
+ QStringList FileMd5::getFiles(const QString &path)
+@@ -74,9 +93,9 @@ QStringList FileMd5::getFiles(const QString &path)
+     QDir dir(path);
+     // .表示当前目录,..表示上一级目录
+     // entryInfoList:返回目录中所有文件和目录的QFileInfo对象列表
+-    QFileInfoList infoList = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
++    QFileInfoList infoList = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks);
+     for(int i=0; i < infoList.count(); i++){
+-        if (isCanceled) {
++        if (*m_cancel) {
+             break;
+         }
+         QFileInfo info = infoList.at(i);
+@@ -103,7 +122,7 @@ QByteArray FileMd5::getFileMd5(const QString &fileName)
+     QCryptographicHash hash(QCryptographicHash::Md5);
+     while(!file.atEnd()){
+ 
+-        if (isCanceled) {
++        if (*m_cancel) {
+             break;
+         }
+         QByteArray content = file.read(100 * 1024 * 1024); //一次读取100MB的内容
+@@ -115,3 +134,60 @@ QByteArray FileMd5::getFileMd5(const QString &fileName)
+     return md5;
+ }
+ 
++
++QHash<QByteArray, QStringList> FileMd5::filtr(long size ,const QStringList &list)
++{
++    QHash<QByteArray, QStringList> ret;
++    ret.clear();
++    // 当文件大小小于128字节的文件时,直接计算md5值
++    if (size < 128) {
++        for(int i = 0; i < list.count(); i++) {
++            QString fileName = list.at(i);
++            QByteArray md5 = getFileMd5(fileName);
++            ret[md5].append(fileName);
++            if (*m_cancel) {
++                return ret;
++            }
++        }
++        return ret;
++    }
++
++    QHash<QByteArray, QStringList> tmp;
++    // 读取文件部分数据,存放到哈希表中,key为文件16字节数据,value为文件路径的集合列表
++    for(int i = 0; i < list.count(); i++) {
++        QString fileName = list.at(i);
++        QFile file(fileName);
++        if(!file.open(QIODevice::ReadOnly)){
++            continue;
++        }
++        int seek = size/3;
++        file.seek(seek);
++        QByteArray type = file.read(8);
++        seek = seek *2;
++        file.seek(seek);
++        type += file.read(8);
++        tmp[type].append(fileName);
++        file.close();
++        if (*m_cancel) {
++            return ret;
++        }
++    }
++
++    // 遍历读取文件数据的哈希表,计算md5值
++    for (const QStringList &tmplist : tmp.values()) {
++        if (tmplist.length() < 2) {
++            continue;
++        }
++        if (*m_cancel) {
++            return ret;
++        }
++        for (const QString &fileName : tmplist) {
++            QByteArray md5 = getFileMd5(fileName);
++            ret[md5].append(fileName);
++            if (*m_cancel) {
++                return ret;
++            }
++        }
++    }
++    return ret;
++}
+diff --git a/treasure-chest/system-cleanup/filemd5.h b/treasure-chest/system-cleanup/filemd5.h
+index 78ba9c9..5a40e69 100644
+--- a/treasure-chest/system-cleanup/filemd5.h
++++ b/treasure-chest/system-cleanup/filemd5.h
+@@ -12,7 +12,6 @@ public:
+     explicit FileMd5(QObject *parent = nullptr);
+     QHash<QByteArray,QStringList> filemd5;
+     QHash <long, QStringList> m_fileinfo;
+-    bool isCanceled = false;
+ 
+ signals:
+     void signalFileInfo(const QHash<QByteArray,QStringList>&p);
+@@ -20,12 +19,17 @@ signals:
+ 
+ public slots:
+     void slotGetFileInfo(const QString &path);
+-    void slotCannelGetMd5();
++    bool *slotGetCancelHandle();
++    int *slotGetSameFileNum();
+ 
+-protected:
++private:
+     QStringList getFiles(const QString &path);
++    // void getFiles(const QString &path);
+     QByteArray getFileMd5(const QString &path);
++    QHash<QByteArray, QStringList> filtr(long size ,const QStringList &list);
+ 
++    bool *m_cancel = nullptr;
++    int *m_sameFileNum = nullptr;
+ };
+ 
+ #endif // FILEMD5_H
+\ No newline at end of file
+diff --git a/treasure-chest/system-cleanup/kylin-system-cleanup.conf b/treasure-chest/system-cleanup/kylin-system-cleanup.conf
+index c6333af..b612d12 100644
+--- a/treasure-chest/system-cleanup/kylin-system-cleanup.conf
++++ b/treasure-chest/system-cleanup/kylin-system-cleanup.conf
+@@ -1,5 +1,5 @@
+ [ToolBox Entry]
+-Name=System Slimming
++Name=System Cleanup
+ Name[zh_CN]=系统瘦身
+ Name[zh_HK]=系統瘦身
+ Name[bo_CN]=མ་ལག་ཕྲ་ཞིང་རིད་པ།
+@@ -10,5 +10,5 @@ Comment[zh_HK]=找出佔用磁碟空間的大檔
+ Comment[bo_CN]=ཁབ་ལེན་གྱི་བར་སྟོང་བཟུང་སྤྱོད་བྱེད་པའི་ཡིག་ཆ་ཆེན་པོ་འཚོལ་དགོས།
+ Comment[mn]=ᠰᠣᠷᠢᠨᠵᠢᠨ ᠫᠠᠨᠰᠠ ᠶᠢᠨ ᠣᠷᠣᠨ ᠵᠠᠶ ᠶᠢ ᠡᠵᠡᠯᠡᠨ ᠬᠡᠷᠡᠭᠯᠡᠭᠰᠡᠨ ᠲᠣᠮᠣ ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠢ ᠡᠷᠢᠵᠦ ᠭᠠᠷᠭᠠᠨ᠎ᠠ ᠃
+ Icon=kylin-system-cleanup
+-Exec=/usr/share/kylin-os-manager/treasure-chest/kylin-system-cleanup/kylin-system-cleanup
++Exec=/usr/lib/kylin-os-manager/bin/kylin-system-cleanup
+ Categories=Feature
+diff --git a/treasure-chest/system-cleanup/main.cpp b/treasure-chest/system-cleanup/main.cpp
+index 69ae230..c2fe0b2 100644
+--- a/treasure-chest/system-cleanup/main.cpp
++++ b/treasure-chest/system-cleanup/main.cpp
+@@ -13,7 +13,18 @@
+ int main(int argc, char *argv[])
+ {
+ #ifndef DEBUG_MODE
+-    // qInstallMessageHandler(kdk::kabase::Log::logOutput);
++    qInstallMessageHandler(kdk::kabase::Log::logOutput);
++#endif
++// 修改分辨率的显示
++#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
++    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
++    QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
++    qDebug() << "setAttribute success";
++#endif
++
++#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
++    QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
++    qDebug() << "setHighDpiScaleFactorRoundingPolicy success";
+ #endif
+     kdk::QtSingleApplication app(argc, argv);
+     if (app.isRunning()) {
+diff --git a/treasure-chest/system-cleanup/mainwindow.cpp b/treasure-chest/system-cleanup/mainwindow.cpp
+index c0eda02..cb99567 100644
+--- a/treasure-chest/system-cleanup/mainwindow.cpp
++++ b/treasure-chest/system-cleanup/mainwindow.cpp
+@@ -23,7 +23,7 @@ MainWindow::MainWindow(KWidget *parent)
+     , m_scanFilePage(new ScanFilePage(this))
+     , m_scanFileListPage(new ScanFilesListPage(this))
+     , m_scanSameFileListPage(new ScanFilesListPage(this, true))
+-    , m_fileMd5(new FileMd5(this))
++    , m_fileMd5(new FileMd5())
+     , m_process(new QProcess(this))
+     , m_thread(new QThread(this))
+     , m_timer(new QTimer(this))
+@@ -54,14 +54,16 @@ MainWindow::MainWindow(KWidget *parent)
+     m_thread->start();
+     m_fileMd5->moveToThread(m_thread);
+ 
++    m_cancelHandle = m_fileMd5->slotGetCancelHandle();
++    m_sameFileNum = m_fileMd5->slotGetSameFileNum();
++
+     m_timer->setInterval(100);// 使用计时器,每隔100毫秒将队列中的数据插入到表格中
+     connect(m_timer, &QTimer::timeout, this, &MainWindow::slotTimeOutGetBigFileList);
+-
++    
+     qRegisterMetaType<QHash<QByteArray,QStringList>>("QHash<QByteArray,QStringList>");//注册<QHash<QByteArray,QStringList>
+-    connect(m_fileMd5, &FileMd5::signalFileInfo, this, &MainWindow::slotGetSameMd5FileInfo);
++    connect(m_fileMd5, &FileMd5::signalFileInfo, this, &MainWindow::slotGetSameMd5FileInfo, Qt::QueuedConnection);
+     connect(m_fileMd5, &FileMd5::signalProgressValue, m_scanFilePage, &ScanFilePage::slotProcessValueChanged);
+     connect(this, &MainWindow::signalFindSameFile, m_fileMd5, &FileMd5::slotGetFileInfo);
+-    connect(this, &MainWindow::signalCannelScanFile, m_fileMd5, &FileMd5::slotCannelGetMd5);
+ 
+     connect(m_homePage, &HomePage::signalStartScanBigFile, this, &MainWindow::slotScanBigFile);
+     connect(m_homePage, &HomePage::signalStartScanSameFile, this, &MainWindow::slotScanSameFile);
+@@ -127,6 +129,7 @@ void MainWindow::slotProcessFinish(int exitCode, QProcess::ExitStatus exitStatus
+         //程序正常结束
+         qDebug() << " Find file程序正常结束 ";
+         m_findProcessFinish=true;
++        m_scanFilePage->setProgressValue(98);
+         Q_EMIT signalProcessFinishSuccess();
+     } else {
+         //程序异常结束
+@@ -148,17 +151,39 @@ void systemcleanup::MainWindow::slotCleanRetry()
+ 
+ void MainWindow::slotCleanFailBackPage()
+ {
+-    m_stackedWid->setCurrentIndex(2);
++    if (m_isSameFileType) {
++        m_stackedWid->setCurrentIndex(3);
++    }else {
++        m_stackedWid->setCurrentIndex(2);
++    }
+ }
+ 
+ void MainWindow::slotGetSameMd5FileInfo(const QHash<QByteArray, QStringList> &hashFileInfo)
+ {
++    if (hashFileInfo.empty()) {
++        m_scanFilePage->slotProcessValueChangedMax();
++        return;
++    }
++    qDebug() << " MD5 Hash Count: " << hashFileInfo.count();
+     for (QHash<QByteArray,QStringList>::const_iterator itr = hashFileInfo.begin(); itr != hashFileInfo.end(); ++itr) {
+-        if(itr.value().count()>1) {
++        if (*m_cancelHandle) {
++            m_getSameFileNum = 0;
++            break;
++        }
++        if(itr.value().count() > 1) {
+             for (const QString &str : itr.value()) {
+-                m_scanSameFileListPage->addTableWidgetItem(str,itr.key());
++                if (*m_cancelHandle) {
++                    m_getSameFileNum = 0;
++                    break;
++                }
++                m_scanSameFileListPage->addTableWidgetItem(str, itr.key());
+                 qApp->processEvents();
+             }
++            m_getSameFileNum += itr.value().count();
++        }
++        if (*m_sameFileNum == m_getSameFileNum) {
++            qDebug() << " 获取到相同文件数量: " << m_getSameFileNum << " == " << *m_sameFileNum;
++            m_scanFilePage->slotProcessValueChangedMax();
+         }
+     }
+ }
+@@ -206,7 +231,7 @@ void MainWindow::slotCannelScanFile()
+         m_queueBigFiles.clear();
+     }
+     if (m_isSameFileType) {
+-        Q_EMIT signalCannelScanFile();
++        *m_cancelHandle = true;
+     }
+ }
+ 
+@@ -215,6 +240,8 @@ void MainWindow::slotScanFileSucc()
+     m_isScaningFile = false;
+     if (m_isSameFileType) {
+         m_stackedWid->setCurrentIndex(3);
++        // 数据清空
++        m_getSameFileNum = 0;
+     } else {
+         m_process->close();
+         m_stackedWid->setCurrentIndex(2);
+@@ -272,8 +299,12 @@ void MainWindow::slotCleanUpFiles(QStringList list)
+     }
+     QString tmpSize = QString::number(size, 'f', 1);
+ 
+-
+-    m_scanFileListPage->slotCleanFileSuccess(successlist);
++    if (m_isSameFileType) {
++        m_scanSameFileListPage->slotCleanFileSuccess(successlist);
++    } else {
++        m_scanFileListPage->slotCleanFileSuccess(successlist);
++    }
++    
+     if (failList.size() > 0) {
+         changeCleanFailPage(failList);
+     } else {
+diff --git a/treasure-chest/system-cleanup/mainwindow.h b/treasure-chest/system-cleanup/mainwindow.h
+index c409851..b2f2842 100644
+--- a/treasure-chest/system-cleanup/mainwindow.h
++++ b/treasure-chest/system-cleanup/mainwindow.h
+@@ -46,18 +46,22 @@ private:
+     QTimer *m_timer = nullptr;
+ 
+     QQueue<QString> m_queueBigFiles;
++    QQueue<QStringList> m_queueSameFiles;
+ 
+     QStringList m_cleanFileList;
+ 
+     QString m_filePath = "/tmp/komt-sys-cleanup.txt";
+     QByteArray m_byteArray;
+     int ii = 0;
++    int *m_sameFileNum = 0;
++    int m_getSameFileNum = 0;
+     void changeCleanSuccesPage(QString succFilesSize);
+     void changeCleanFailPage(QStringList failList);
+     bool m_isScaningFile = false;
+     bool m_isSameFileType = false;
+     bool m_findProcessFinish = false;
+     bool m_getBigFileListFinish = false;
++    bool *m_cancelHandle = nullptr;
+ 
+ protected:
+     void closeEvent(QCloseEvent *event);
+@@ -85,9 +89,9 @@ Q_SIGNALS:
+     void signalProcessFinishSuccess();
+     void signalProcessFinishFail();
+     void signalFindSameFile(QString path);
+-    void signalCannelScanFile();
+     void signalGetBigFileListFinish(); // 获取文件列表结束
+     void signalAddBigFileInfoFinish(); // 获取文件列表
++    void signalCleanSuccessFileList(QStringList list);
+ };
+ 
+ }
+diff --git a/treasure-chest/system-cleanup/scanfilepage.cpp b/treasure-chest/system-cleanup/scanfilepage.cpp
+index b7c1c42..2a28eb7 100644
+--- a/treasure-chest/system-cleanup/scanfilepage.cpp
++++ b/treasure-chest/system-cleanup/scanfilepage.cpp
+@@ -28,7 +28,7 @@ ScanFilePage::ScanFilePage(QWidget *parent)
+     m_btnCannelScan->setProperty("isWindowButton", 0x1);
+     m_btnCannelScan->setProperty("useIconHighlightEffect", 0x2);
+ 
+-    m_timer->setInterval(50);
++    m_timer->setInterval(100);
+ 
+     QVBoxLayout *vLayoutProgress = new QVBoxLayout;
+     vLayoutProgress->setSpacing(0);
+@@ -64,11 +64,11 @@ ScanFilePage::ScanFilePage(QWidget *parent)
+             } else if (timeNum < 40) {
+                 m_progress->setValue(m_progress->value() + 1);
+             } else if (timeNum < 60) {
+-                if ( timeNum % 2 == 0) {
++                if ( timeNum % 3 == 0) {
+                     m_progress->setValue(m_progress->value() + 1);
+                 }
+             } else if (timeNum < 100) {
+-                if ( timeNum % 3 == 0) {
++                if ( timeNum % 5 == 0) {
+                     m_progress->setValue(m_progress->value() + 1);
+                 }
+             } else {
+@@ -92,6 +92,7 @@ ScanFilePage::~ScanFilePage()
+ 
+ void ScanFilePage::setProgressValue(int value, bool isScanSameFile)
+ {
++    m_isScanSameFile = isScanSameFile;
+     m_progress->setValue(0);
+     m_progress->setRange(0,100);
+     if (isScanSameFile) {
+@@ -103,6 +104,8 @@ void ScanFilePage::setProgressValue(int value, bool isScanSameFile)
+     if (value == 0) {
+         timeNum = 0;
+         isProcessFinish = false;
++    } else {
++        m_progress->setValue(value);
+     }
+ }
+ 
+@@ -148,4 +151,14 @@ void ScanFilePage::slotProcessValueChanged(int current, int total)
+     m_progress->setValue(current);
+     m_progress->setMaximum(total);
+ }
++void ScanFilePage::slotProcessValueChangedMax()
++{
++    if (m_isScanSameFile) {
++        int n = m_progress->maximum() - m_progress->value();
++        if (n != 5) {
++            return;
++        }
++    }
++    m_progress->setValue(m_progress->maximum());
++}
+ }
+\ No newline at end of file
+diff --git a/treasure-chest/system-cleanup/scanfilepage.h b/treasure-chest/system-cleanup/scanfilepage.h
+index afdd7fd..84fdbad 100644
+--- a/treasure-chest/system-cleanup/scanfilepage.h
++++ b/treasure-chest/system-cleanup/scanfilepage.h
+@@ -44,6 +44,7 @@ public Q_SLOTS:
+     void slotProcessFinish();
+     // 扫描相同文件时的进度条
+     void slotProcessValueChanged(int current,int total);
++    void slotProcessValueChangedMax();
+ Q_SIGNALS:
+     void signalCannelScan();
+     void signalScanSuccess();
+diff --git a/treasure-chest/system-cleanup/scanfileslistpage.cpp b/treasure-chest/system-cleanup/scanfileslistpage.cpp
+index d308ce4..64fc18b 100644
+--- a/treasure-chest/system-cleanup/scanfileslistpage.cpp
++++ b/treasure-chest/system-cleanup/scanfileslistpage.cpp
+@@ -14,6 +14,7 @@
+ #include <peony-qt/file-utils.h>
+ #include "peony-qt/file-info.h"
+ #include "peony-qt/file-info-job.h"
++#include "QProcess"
+ 
+ namespace systemcleanup
+ {
+@@ -25,7 +26,6 @@ ScanFilesListPage::ScanFilesListPage(QWidget *parent, bool showMd5)
+     , m_labelTotalSize(new K::TextLabel(this))
+     , m_labelInfo(new K::TextLabel(this))
+     , m_tableWidget(new QTreeWidget(this))
+-    , m_tableHeaderView(new TableHeaderView(Qt::Horizontal, m_tableWidget))
+     , m_btnBack(new QPushButton(this))
+     , m_btnCleanUp(new QPushButton(this))
+     , m_menuTimeInterval(new QMenu(this))
+@@ -153,6 +153,15 @@ ScanFilesListPage::ScanFilesListPage(QWidget *parent, bool showMd5)
+     connect(m_tableHeaderView, &QHeaderView::sectionClicked, this, &ScanFilesListPage::slotTableSort);
+     connect(m_menuTimeInterval,&QMenu::triggered, this, &ScanFilesListPage::slotMenuTimeIntervalChange);
+     connect(m_tableWidget, &QTreeWidget::itemPressed, this, &ScanFilesListPage::slotItemRightClicked);
++
++    // 获取当前时间
++    QDateTime currentDateTime = QDateTime::currentDateTime();
++    QDateTime futureDateTime = currentDateTime.addDays(-7); // 7天前,日期数据
++    m_menuTimeIntervalOneWeek = futureDateTime.toTime_t();
++    futureDateTime = currentDateTime.addMonths(-1); // 1个月前
++    m_menuTimeIntervalOneMonth = futureDateTime.toTime_t();
++    futureDateTime = currentDateTime.addMonths(-3); // 3个月前
++    m_menuTimeIntervalThreeMonth = futureDateTime.toTime_t();
+ }
+ 
+ ScanFilesListPage::~ScanFilesListPage()
+@@ -173,19 +182,19 @@ void ScanFilesListPage::initTableWidgetUi()
+     m_tableWidget->setAlternatingRowColors(true);//设置交替背景色
+ 
+     QList<QString> header;
++    QList<QString> tmpHeaders;
+     if (m_showMd5) {
+         header = {m_strTableFileName, m_strTableFileType, m_strTableFileTime, m_strTableFileSize, m_strTableFileMd5};
++        tmpHeaders = {"", "", "", "", ""};
+     } else {
+         header = {m_strTableFileName, m_strTableFileType, m_strTableFileTime, m_strTableFileSize};
++        tmpHeaders = {"", "", "", "", "", ""};
+     }
+-    m_tableWidget->setHeaderLabels(header);
++    m_tableHeaderView = new TableHeaderView(header,Qt::Horizontal, m_tableWidget);
++    m_tableWidget->setHeaderLabels(tmpHeaders);
+     m_tableWidget->setHeader(m_tableHeaderView);
+-    if (m_showMd5) {
+-        // m_tableHeaderView->setSortIndicator(4, Qt::AscendingOrder);
+-    } else {
+-        m_tableHeaderView->setSortIndicator(2, Qt::AscendingOrder);
+-    }
+-    m_tableHeaderView->setSortIndicatorShown(true);
++
++    // m_tableHeaderView->setSortIndicatorShown(true);
+     m_tableHeaderView->setSectionsClickable(true);
+     m_tableHeaderView->setDragEnabled(false);
+     m_tableHeaderView->setAcceptDrops(false);
+@@ -197,6 +206,7 @@ void ScanFilesListPage::initTableWidgetUi()
+     // m_tableHeaderView->setDefaultAlignment(Qt::AlignLeft);
+     m_tableHeaderView->setMinimumSectionSize(100); //设置每列最小宽度
+ 
++    // m_tableWidget->setColumnCount(header.size());
+     // 设置表头每个item宽度
+     if (m_showMd5) {
+         m_tableWidget->setColumnWidth(0, 320);
+@@ -259,6 +269,20 @@ QString ScanFilesListPage::calculatedSize(_Float64 size)
+     return tmpSize;    
+ }
+ 
++QString ScanFilesListPage::getTimeDiffDescription(qint64 pastTime)
++{
++    if (pastTime <= m_menuTimeIntervalOneWeek) {
++        return m_strMenuTimeIntervalLastOneWeek; // 最近一周
++    } else if (pastTime <= m_menuTimeIntervalOneMonth) {
++        return m_strMenuTimeIntervalOneWeekAgo; // 一周以前
++    } else if (pastTime <= m_menuTimeIntervalThreeMonth) {
++        return m_strMenuTimeIntervalOneMonthAgo; // 一个月之前
++    } else {
++        return m_strMenuTimeIntervalThreeMonthAgo; // 三个月之前
++    } 
++    return "";
++}
++
+ QString ScanFilesListPage::getTimeDiffDescription(QString pastTime)
+ {
+     QString currentTime = QDateTime::currentDateTime().toString("yyyy-MM-dd");
+@@ -308,17 +332,19 @@ void ScanFilesListPage::addTableWidgetItem(QString path, QByteArray md5)
+     m_totalSize = m_totalSize + size;
+     QString totalSize = calculatedSize(m_totalSize);
+     m_labelTotalSize->SetText(" / " + totalSize);
+-    QTreeWidgetItem *item;
++    CustomTreeWidgetItem *item;
+     if (m_showMd5) {
+-        item = new QTreeWidgetItem(QStringList() << fileInfo.fileName()
++        item = new CustomTreeWidgetItem(QStringList() << fileInfo.fileName()
+                                                 << getFileType(path)
+-                                                << getTimeDiffDescription(fileInfo.lastModified().toString("yyyy-MM-dd"))
++                                                // << getTimeDiffDescription(fileInfo.lastModified().toString("yyyy-MM-dd"))
++                                                << getTimeDiffDescription(fileInfo.lastModified().toTime_t())
+                                                 << fileSize
+                                                 << QString::fromUtf8(md5));
+     } else {
+-        item = new QTreeWidgetItem(QStringList() << fileInfo.fileName()
++        item = new CustomTreeWidgetItem(QStringList() << fileInfo.fileName()
+                                                 << getFileType(path)
+-                                                << getTimeDiffDescription(fileInfo.lastModified().toString("yyyy-MM-dd"))
++                                                // << getTimeDiffDescription(fileInfo.lastModified().toString("yyyy-MM-dd"))
++                                                << getTimeDiffDescription(fileInfo.lastModified().toTime_t())
+                                                 << fileSize);
+     }
+     item->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
+@@ -342,6 +368,9 @@ void ScanFilesListPage::addTableWidgetItem(QString path, QByteArray md5)
+     m_hashItemPath.insert(item, path);
+     m_hashItemSize.insert(item, size);
+     
++    // testNum++;
++    // qDebug() << " +++++++++++++++++++++++++++++++++++++ " << testNum;
++    
+     return;
+ }
+ 
+@@ -392,6 +421,7 @@ void ScanFilesListPage::setTextToolTips(QTreeWidgetItem *item, int indexCol)
+ 
+ void ScanFilesListPage::slotTableSort(int col)
+ {
++    m_tableHeaderView->setSortIndicatorShown(true);
+     if (col == 2) {
+         QPoint globalP(m_tableWidget->mapToGlobal(QPoint(0, 0)));
+         QPoint movePos(globalP.x() + m_tableHeaderView->sectionPosition(col), globalP.y() + 36);
+@@ -400,14 +430,15 @@ void ScanFilesListPage::slotTableSort(int col)
+         m_menuTimeInterval->exec();
+         m_tableWidget->sortItems(col, Qt::AscendingOrder);
+         return;
+-    }
+-    if(sortUpDown)		//sortUpDown为自定义的一个bool变量,表示升序还是降序
+-    {
+-        m_tableWidget->sortItems(col, Qt::AscendingOrder);
+-        sortUpDown=false;
+-    } else {
+-        m_tableWidget->sortItems(col, Qt::DescendingOrder);
+-        sortUpDown=true;
++    } else if (col != 0) {
++        if(sortUpDown)		//sortUpDown为自定义的一个bool变量,表示升序还是降序
++        {
++            m_tableWidget->sortItems(col, Qt::AscendingOrder);
++            sortUpDown=false;
++        } else {
++            m_tableWidget->sortItems(col, Qt::DescendingOrder);
++            sortUpDown=true;
++        }
+     }
+     m_tableWidget->update();
+     this->update();
+@@ -544,9 +575,12 @@ void ScanFilesListPage::slotItemRightClicked(QTreeWidgetItem *item, int column)
+         // 为右键菜单上的QAction创建信号槽,添加对应的功能
+         connect(action, &QAction::triggered, this, [=](){
+             QString path = m_hashItemPath.value(item);
+-            QString folderPath = QFileInfo(path).absolutePath();
+-            QUrl url = QUrl::fromLocalFile(folderPath);
+-            QDesktopServices::openUrl(url);
++            // QString folderPath = QFileInfo(path).absolutePath();
++            // QUrl url = QUrl::fromLocalFile(folderPath);
++            // QDesktopServices::openUrl(url);
++            QString cmd = QString("/usr/bin/peony --show-items " + path);
++            QProcess::startDetached(cmd);
++
+         });
+  
+         // 右键菜单在鼠标点击的位置显示
+diff --git a/treasure-chest/system-cleanup/scanfileslistpage.h b/treasure-chest/system-cleanup/scanfileslistpage.h
+index 9dc550f..b4aaae1 100644
+--- a/treasure-chest/system-cleanup/scanfileslistpage.h
++++ b/treasure-chest/system-cleanup/scanfileslistpage.h
+@@ -14,6 +14,47 @@
+ 
+ namespace systemcleanup
+ {
++class CustomTreeWidgetItem : public QTreeWidgetItem {
++public:
++explicit CustomTreeWidgetItem(QTreeWidget *parent = nullptr) : QTreeWidgetItem(parent) {}
++explicit CustomTreeWidgetItem(const QStringList &strings, int type = Type) : QTreeWidgetItem(strings,type) {}
++bool operator<(const QTreeWidgetItem &other) const override {
++    int column = treeWidget()->sortColumn();
++    QString selfText = text(column);
++    QString otherText = other.text(column);
++    if (selfText.contains(QRegExp("MB|KB|GB|B$", Qt::CaseInsensitive)) && otherText.contains(QRegExp("MB|KB|GB|B$", Qt::CaseInsensitive))) {
++        return compareFileSizes(selfText, otherText) < 0;
++    }
++    return selfText < otherText;
++}
++private:
++int compareFileSizes(const QString& size1, const QString& size2) const {
++    qulonglong bytes1 = parseFileSize(size1);
++    qulonglong bytes2 = parseFileSize(size2);
++    return (bytes1 < bytes2) ? -1 : (bytes1 > bytes2) ? 1 : 0;
++}
++qulonglong parseFileSize(const QString& sizeStr) const {
++    QLocale locale;
++    bool ok;
++    double value;
++    if (sizeStr.endsWith("GB", Qt::CaseInsensitive)) {
++        value = locale.toDouble(sizeStr.left(sizeStr.length() - 2), &ok);
++        return ok ? value * 1024 * 1024 * 1024 : 0;
++    } else if (sizeStr.endsWith("MB", Qt::CaseInsensitive)) {
++        value = locale.toDouble(sizeStr.left(sizeStr.length() - 2), &ok);
++        return ok ? value * 1024 * 1024 : 0;
++    } else if (sizeStr.endsWith("KB", Qt::CaseInsensitive)){
++        value = locale.toDouble(sizeStr.left(sizeStr.length() - 2), &ok);
++        return ok ? value * 1024 : 0;
++    } else if (sizeStr.endsWith("B", Qt::CaseInsensitive)){
++        value = locale.toDouble(sizeStr.left(sizeStr.length() - 1), &ok);
++        return ok ? value : 0;
++    } else {
++        value = locale.toDouble(sizeStr, &ok);
++        return ok ? value : 0;
++    }
++}
++};
+ 
+ class ScanFilesListPage : public QWidget
+ {
+@@ -64,6 +105,7 @@ private:
+     void recursiveFilter(QTreeWidgetItem *item, const QString &filterText);
+     QString calculatedSize(_Float64 size);
+     QString getTimeDiffDescription(QString pastTime);
++    QString getTimeDiffDescription(qint64 pastTime);
+     QString getFileType(QString filePath);
+ 
+     bool sortUpDown = false; 
+@@ -79,6 +121,12 @@ private:
+     _Float64 m_chooseSize;
+     _Float64 m_searchSize;
+ 
++    qint64 m_menuTimeIntervalOneWeek = 0;
++    qint64 m_menuTimeIntervalOneMonth = 0;
++    qint64 m_menuTimeIntervalThreeMonth = 0;
++
++    int testNum = 0;
++
+ public Q_SLOTS:
+     void slotBackup();
+     void slotCleanUp();
+diff --git a/treasure-chest/system-cleanup/tableheaderview.cpp b/treasure-chest/system-cleanup/tableheaderview.cpp
+index 57d8e53..6bd7872 100644
+--- a/treasure-chest/system-cleanup/tableheaderview.cpp
++++ b/treasure-chest/system-cleanup/tableheaderview.cpp
+@@ -1,16 +1,16 @@
+ #include "tableheaderview.h"
+ #include <QMouseEvent>
+ 
+-TableHeaderView::TableHeaderView(Qt::Orientation orientation, QWidget*  parent)
++TableHeaderView::TableHeaderView(QStringList list, Qt::Orientation orientation, QWidget *parent)
+     : QHeaderView(orientation, parent),
+       m_checkable(false),
+       m_bTristate(false),
+       m_bNoChange(false),
+       m_bMoving(false),
+       m_bChecked(false),
+-      m_bPressed(false)
++      m_bPressed(false),
++      m_HeaderList(list)
+ {
+-
+     setHighlightSections(false);
+     setMouseTracking(true);
+ 
+@@ -24,7 +24,7 @@ void TableHeaderView::paintSection(QPainter *painter, const QRect &rect, int log
+     QHeaderView::paintSection(painter, rect, logicalIndex);
+     painter->restore();
+ 
+-        if(logicalIndex == 0)
++    if(logicalIndex == 0)
+     {
+         QStyleOptionButton option;
+         option.initFrom(this);
+@@ -54,20 +54,21 @@ void TableHeaderView::paintSection(QPainter *painter, const QRect &rect, int log
+         style()->drawPrimitive(QStyle::PE_IndicatorCheckBox, &option, painter, &checkBox);
+     }
+ 
++    // if(logicalIndex > -1 || logicalIndex < m_HeaderList.size()){
++    if(logicalIndex < m_HeaderList.size()){
++        if(logicalIndex == 0){
++            painter->drawText(rect.x() + 26 +4, rect.y(), rect.width() - 35, rect.height(),Qt::AlignVCenter,m_HeaderList.at(logicalIndex));
++        }else if(logicalIndex == m_iSelectedCol){
++            painter->drawText(rect.x() + 10 -4, rect.y(),rect.width() - 35, rect.height(),Qt::AlignVCenter,m_HeaderList.at(logicalIndex));
++        }else{
++            painter->drawText(rect.x() + 10 -4, rect.y(),rect.width() - 6, rect.height(),Qt::AlignVCenter,m_HeaderList.at(logicalIndex));
++        }
++    }
+ }
+ 
+ 
+ void TableHeaderView::mousePressEvent(QMouseEvent *event)
+ {
+-    // if (isOn) {
+-    //     isOn = false;
+-    // } else {
+-    //     isOn = true;
+-    // }
+-    // this->viewport()->update();
+-    // QHeaderView::mousePressEvent(event);
+-
+-
+     int nColumn = logicalIndexAt(event->pos());
+     if ((event->buttons() & Qt::LeftButton) && (nColumn == 0))
+     {
+diff --git a/treasure-chest/system-cleanup/tableheaderview.h b/treasure-chest/system-cleanup/tableheaderview.h
+index 3938b0d..379307e 100644
+--- a/treasure-chest/system-cleanup/tableheaderview.h
++++ b/treasure-chest/system-cleanup/tableheaderview.h
+@@ -14,7 +14,7 @@ class TableHeaderView : public QHeaderView
+     Q_OBJECT
+ public:
+     //构造函数, 第一个参数设定表头方向
+-    TableHeaderView(Qt::Orientation orientation, QWidget* parent = 0);
++    explicit TableHeaderView(QStringList list, Qt::Orientation orientation, QWidget *parent = nullptr);
+     void setHeaderCheckBoxCheckEnable(bool checkEnable);
+ 
+ protected:
+@@ -32,6 +32,8 @@ private:
+     bool m_bChecked;// 是否表头被点亮
+     bool m_bPressed;// 
+ 
++    QStringList m_HeaderList;
++    int m_iSelectedCol;  //点击选中的标题列
+     
+ public Q_SLOTS:
+     void slot_checkStateChange(int iState);
+diff --git a/treasure-chest/tcpdump/CMakeLists.txt b/treasure-chest/tcpdump/CMakeLists.txt
+index c873d49..2aca188 100644
+--- a/treasure-chest/tcpdump/CMakeLists.txt
++++ b/treasure-chest/tcpdump/CMakeLists.txt
+@@ -44,6 +44,6 @@ else ()
+     target_link_libraries(${PROJECT_NAME} PRIVATE compatibility)
+ endif ()
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-tcpdump/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/bin/)
+ install(FILES ${QM_FILES} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-tcpdump/translations/)
+ install(FILES ${CMAKE_CURRENT_LIST_DIR}/kylin-tcpdump.conf DESTINATION /usr/share/kylin-os-manager/plugins/tool-box/plugins/)
+diff --git a/treasure-chest/tcpdump/kylin-tcpdump.conf b/treasure-chest/tcpdump/kylin-tcpdump.conf
+index 0de2ae4..4700a3c 100644
+--- a/treasure-chest/tcpdump/kylin-tcpdump.conf
++++ b/treasure-chest/tcpdump/kylin-tcpdump.conf
+@@ -10,6 +10,6 @@ Comment[zh_HK]=抓取和分析網路數據包
+ Comment[bo_CN]=དྲ་རྒྱའི་གཞི་གྲངས་ཁུག་མ་ལེན་པ་དང་དབྱེ་ཞིབ་བྱེད།
+ Comment[mn]=ᠰᠦᠯᠵᠢᠶᠡᠨ ᠦ ᠲᠣᠭ᠎ᠠ ᠪᠠᠷᠢᠮᠲᠠ ᠶᠢᠨ ᠪᠣᠭᠴᠣ ᠶᠢ ᠠᠳᠬᠤᠬᠤ ᠪᠠ ᠵᠠᠳᠠᠯᠤᠨ᠎ᠠ ᠃
+ Icon=kylin-tcpdump
+-Exec=/usr/share/kylin-os-manager/treasure-chest/kylin-tcpdump/kylin-tcpdump
++Exec=/usr/lib/kylin-os-manager/bin/kylin-tcpdump
+ Categories=Debug
+ Depends=tcpdump
+diff --git a/treasure-chest/win-data-migration/CMakeLists.txt b/treasure-chest/win-data-migration/CMakeLists.txt
+index 41e0fa1..9e1447a 100644
+--- a/treasure-chest/win-data-migration/CMakeLists.txt
++++ b/treasure-chest/win-data-migration/CMakeLists.txt
+@@ -104,10 +104,10 @@ qt5_add_translation(QM_FILES ${TRANSLATIONS})
+ target_include_directories(${PROJECT_NAME} PRIVATE ${WIN_DATA_MIGRATION_DIR})
+ target_sources(${PROJECT_NAME} PRIVATE ${SRCS} ${QM_FILES})
+ 
+-install(TARGETS ${PROJECT_NAME} DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-win-data-migration/)
++install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib/kylin-os-manager/bin/)
+ install(FILES ${QM_FILES} DESTINATION  /usr/share/kylin-os-manager/treasure-chest/kylin-win-data-migration/translations/)
+ install(FILES res/icon.svg DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-win-data-migration/icon/)
+ install(FILES res/howtouse.png DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-win-data-migration/icon/)
+ install(FILES res/howtouseblack.png DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-win-data-migration/icon/)
+ install(FILES howtouse.html DESTINATION /usr/share/kylin-os-manager/treasure-chest/kylin-win-data-migration/)
+-#install(FILES kylin-win-data-migration.conf DESTINATION /usr/share/kylin-os-manager/plugins/tool-box/plugins/)
++install(FILES kylin-win-data-migration.conf DESTINATION /usr/share/kylin-os-manager/plugins/tool-box/plugins/)
+diff --git a/treasure-chest/win-data-migration/kylin-win-data-migration.conf b/treasure-chest/win-data-migration/kylin-win-data-migration.conf
+index 9a8d286..e57693d 100644
+--- a/treasure-chest/win-data-migration/kylin-win-data-migration.conf
++++ b/treasure-chest/win-data-migration/kylin-win-data-migration.conf
+@@ -1,5 +1,5 @@
+ [ToolBox Entry]
+-Name=Win Migration Tools
++Name=Win Data Migration
+ Name[zh_CN]=Win 迁移工具
+ Name[zh_HK]=Win 遷移工具
+ Name[bo_CN]=Win ཡོ་བྱད་སྤོ་བ།
+@@ -10,5 +10,5 @@ Comment[zh_HK]=將數據從 windows 電腦遷移至本機
+ Comment[bo_CN]=གཞི་གྲངས་དེ་windowsཡི་གློག་ཀླད་ནས་འཕྲུལ་ཆས་འདི་ལ་སྤོར་བ་རེད།
+ Comment[mn]=ᠲᠣᠭ᠎ᠠ ᠪᠠᠷᠢᠮᠲᠠ ᠶᠢ windows ᠡᠴᠡ ᠲᠤᠰ ᠮᠠᠰᠢᠨ ᠳᠤ ᠰᠢᠯᠵᠢᠭᠦᠯᠦᠨ᠎ᠡ ᠃
+ Icon=kylin-win-data-migration
+-Exec=/usr/share/kylin-os-manager/treasure-chest/kylin-win-data-migration/kylin-win-data-migration
++Exec=/usr/lib/kylin-os-manager/bin/kylin-win-data-migration
+ Categories=Feature
diff -Nru kylin-os-manager-2.0.0/debian/patches/0117-release-2.0.0-56.patch kylin-os-manager-2.0.0/debian/patches/0117-release-2.0.0-56.patch
--- kylin-os-manager-2.0.0/debian/patches/0117-release-2.0.0-56.patch	1970-01-01 08:00:00.000000000 +0800
+++ kylin-os-manager-2.0.0/debian/patches/0117-release-2.0.0-56.patch	2025-01-23 11:01:58.000000000 +0800
@@ -0,0 +1,30 @@
+From: jishengjie <jishengjie@kylinos.cn>
+Date: Thu, 23 Jan 2025 11:09:25 +0800
+Subject: release 2.0.0-56
+
+---
+ plugins/tool_box/installer.cpp | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/plugins/tool_box/installer.cpp b/plugins/tool_box/installer.cpp
+index f58c341..405b468 100644
+--- a/plugins/tool_box/installer.cpp
++++ b/plugins/tool_box/installer.cpp
+@@ -41,11 +41,12 @@ void Installer::on_InstallStatusChanged(qint32 progress, QString info, QString d
+ }
+ 
+ void Installer::on_InstallFinish(bool ok, QStringList package_list, QString error_result, QString error_reason) {
+-    if (package_list != current_install_task_.package_list) {
+-        qWarning() << "Tool box install package interface finish package list is inconsisitent with the current package list."
+-                   << "[ " << package_list << " ] ---> [ " << current_install_task_.package_list << " ]";
+-        return;
+-    }
++    // openkylin 上安装接口的安装完成信号中 package_list 为空,所以在 openkylin 上注释掉包列表的判断逻辑
++    //if (package_list != current_install_task_.package_list) {
++    //    qWarning() << "Tool box install package interface finish package list is inconsisitent with the current package list."
++    //               << "[ " << package_list << " ] ---> [ " << current_install_task_.package_list << " ]";
++    //    return;
++    //}
+ 
+     qInfo () << "Tool box install package interface install finish: " << package_list;
+ 
diff -Nru kylin-os-manager-2.0.0/debian/patches/series kylin-os-manager-2.0.0/debian/patches/series
--- kylin-os-manager-2.0.0/debian/patches/series	2024-11-12 14:39:16.000000000 +0800
+++ kylin-os-manager-2.0.0/debian/patches/series	2025-01-23 11:01:58.000000000 +0800
@@ -113,3 +113,5 @@
 0113-96-cibot.patch
 0114-97-fix.patch
 0115-98-fix.patch
+0116-99.patch
+0117-release-2.0.0-56.patch