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(¤tDest, dFlags, 30000, NULL, NULL, 0, NULL, NULL); +- if (http == NULL) +- return false; +- +- dinfo = cupsCopyDestInfo(http, ¤tDest); +- 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, ¤tDest, dinfo, &job_id, title, num_options, options) > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED) { +- /* code */ +- cupsFileClose(fp); +- return false; +- } +- if (cupsStartDestDocument(http, ¤tDest, 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*>(¤tDest), 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 "+" 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>ཁ་བྱང་།</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 "%1"?</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="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 "%1" ?</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="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 "%1"</source> +- <translation>"བརྒྱ་ཆ་1"དང་འགལ་བ་བྱུང་བ་རེད།</translation> +- </message> +- <message> +- <location filename="../ui/main_win_ui/property_window.cpp" line="395"/> +- <source>Printer Name Cannot Contains '%1', And More Than 0 Letter, Less Than 128 Letters !</source> +- <translation>པར་འདེབས་འཕྲུལ་འཁོར་གྱི་མིང་ནང་དུ་"/\"#"དང་འཕྲིན་ཡིག་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 "%1"</source> +- <translation>"1"པར་འདེབས་འཕྲུལ་ཆས་བརྒྱ་ཆ་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 '%1', And More Than 0 Letter, Less Than 128 Letters !</source> +- <translation>པར་འདེབས་འཕྲུལ་འཁོར་གྱི་མིང་ནང་དུ་"/\"#"དང་འཕྲིན་ཡིག་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 "+" 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 "%1"?</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 "%1" ?</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 "%1"</source> +- <translation type="unfinished"></translation> +- </message> +- <message> +- <location filename="../ui/main_win_ui/property_window.cpp" line="395"/> +- <source>Printer Name Cannot Contains '%1', 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 "%1"</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 '%1', 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 "+" 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 "%1"?</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>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 "%1" ?</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 "%1"</source> +- <translation type="unfinished"></translation> +- </message> +- <message> +- <location filename="../ui/main_win_ui/property_window.cpp" line="395"/> +- <source>Printer Name Cannot Contains '%1', And More Than 0 Letter, Less Than 128 Letters !</source> +- <translation>Принтер атауында '/\''?#', ал 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 "%1"</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 '%1', And More Than 0 Letter, Less Than 128 Letters !</source> +- <translation>Принтер атауында '/\''?#', ал 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 "+" 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 "%1"?</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 "%1" ?</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 "%1"</source> +- <translation type="unfinished"></translation> +- </message> +- <message> +- <location filename="../ui/main_win_ui/property_window.cpp" line="395"/> +- <source>Printer Name Cannot Contains '%1', And More Than 0 Letter, Less Than 128 Letters !</source> +- <translation>Принтер аты '/',#', жана 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 "%1"</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 '%1', And More Than 0 Letter, Less Than 128 Letters !</source> +- <translation>Принтер аты '/',#', жана 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>ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠤᠨ ᠠᠷᠤ ᠳᠠᠪᠴᠠᠩ ᠳᠤ ᠬᠢ ᠠᠬᠢᠴᠠ</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> +- <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>ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠢ ᠨᠡᠮᠡᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ: ᠬᠦᠳᠡᠯᠬᠡᠬᠦᠷ ᠢ ᠰᠤᠩᠭᠤᠭᠰᠠᠨ ᠦᠬᠡᠢ!</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="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>ᠬᠦᠳᠡᠯᠭᠡᠬᠦᠷ ᠢ ᠰᠤᠩᠭᠤᠬᠤ</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>ᠴᠤᠩᠬᠤ</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>ᠹᠣᠣᠮ</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 "+" 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 "%1"?</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 "%1" ?</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>ᠹᠣᠣᠮ</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 "%1"</source> +- <translation>《1》 ᠯᠦᠭᠡ ᠮᠥᠷᠭᠥᠯᠳᠦᠭᠡᠨ ᠪᠠᠶᠢᠷᠢᠯᠠᠭᠤᠯᠤᠨᠠ᠃</translation> +- </message> +- <message> +- <location filename="../ui/main_win_ui/property_window.cpp" line="395"/> +- <source>Printer Name Cannot Contains '%1', And More Than 0 Letter, Less Than 128 Letters !</source> +- <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠤ᠋ᠨ ᠨᠡᠷᠡᠢᠳᠦᠯ ᠳ᠋ᠤ᠌ '/\'"?#' ᠠᠭᠤᠯᠠᠭᠳᠠᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ ᠮᠦᠷᠳᠡᠭᠡᠨ ᠬᠤᠭᠤᠰᠤᠨ ᠪᠠᠢᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ᠂ 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 "%1"</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 '%1', And More Than 0 Letter, Less Than 128 Letters !</source> +- <translation>ᠫᠷᠢᠨᠲ᠋ᠧᠷ ᠤ᠋ᠨ ᠨᠡᠷᠡᠢᠳᠦᠯ ᠳ᠋ᠤ᠌ '/\'"?#' ᠠᠭᠤᠯᠠᠭᠳᠠᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ ᠮᠦᠷᠳᠡᠭᠡᠨ ᠬᠤᠭᠤᠰᠤᠨ ᠪᠠᠢᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ᠂ 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 "+" 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 "%1"?</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>ПринтТест</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 "%1" ?</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 "%1"</source> +- <translation type="unfinished"></translation> +- </message> +- <message> +- <location filename="../ui/main_win_ui/property_window.cpp" line="395"/> +- <source>Printer Name Cannot Contains '%1', And More Than 0 Letter, Less Than 128 Letters !</source> +- <translation>Имя принтера не может содержать '/\'"?#', и более 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 "%1"</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 '%1', And More Than 0 Letter, Less Than 128 Letters !</source> +- <translation>Имя принтера не может содержать '/\'"?#', и более 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 "+" 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 "%1"?</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 "%1" ?</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 "%1"</source> +- <translation type="unfinished"></translation> +- </message> +- <message> +- <location filename="../ui/main_win_ui/property_window.cpp" line="395"/> +- <source>Printer Name Cannot Contains '%1', And More Than 0 Letter, Less Than 128 Letters !</source> +- <translation>پرىنتېر نامى '/\'?#', 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 "%1"</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 '%1', And More Than 0 Letter, Less Than 128 Letters !</source> +- <translation>پرىنتېر نامى '/\'?#', 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 "+" 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 "%1"?</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 "%1" ?</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 "%1"</source> +- <translation>与 “%1” 设置冲突</translation> +- </message> +- <message> +- <location filename="../ui/main_win_ui/property_window.cpp" line="395"/> +- <source>Printer Name Cannot Contains '%1', 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 "%1"</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 '%1', 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 "+" 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 "%1"?</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 "%1" ?</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 "%1"</source> +- <translation>與%1 設定衝突</translation> +- </message> +- <message> +- <location filename="../ui/main_win_ui/property_window.cpp" line="395"/> +- <source>Printer Name Cannot Contains '%1', 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 "%1"</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 '%1', 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 : %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���ud������/���#���)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���Id������/���#���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���id������/���#���;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���3d������/���#���;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���qd�������/��#���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