sync upstream/1.3.2.1
This commit is contained in:
parent
7469957309
commit
7e2193158c
.gitignorecheckUpdate.pycheckUpdate.pyc
data
Resources.qrckylin-background-upgrade-manul.servicekylin-background-upgrade-manul.timerkylin-background-upgrade-template.confkylin-background-upgrade.desktopkylin-update.timer.conforg.ukui.log4qt.kylin-background-upgrade.gschema.xmlupdate.png
kylin-background-upgrade.prokylin-background-upgrade.pro.userkylin-update-notify-immutable
README.md
kylin-update-notify.desktopkylin-update-notify.prokylin-update-notify.pro.userdata
Resources.qrcbackground_upgrade_icon.pngclose.pngkylin-background-upgrade-manul.servicekylin-background-upgrade-manul.timerupdate.png
debian
env.prikylin-update-notify-immutable.prosrc
translations
widgets
kylin-update-notify
checkUpdate.pycheckUpdate.pyc
data
background_upgrade_icon.pngclose.pngkylin-background-upgrade-silent.servicekylin-background-upgrade-silent.timerkylin-background-upgrade-template.confkylin-background-upgrade.desktopkylin-update.timer.conforg.ukui.log4qt.kylin-background-upgrade.gschema.xmlupdate.png
env.prikylin-update-notify.desktopkylin-update-notify.prosrc
translations
UapLBi.jsonkylin-background-upgrade_bo_CN.qmkylin-background-upgrade_bo_CN.tskylin-background-upgrade_zh_CN.qmkylin-background-upgrade_zh_CN.ts
widgets
src
core.cppcore.hmain.cpptraydbus.cpptraydbus.htrayicon.cpptrayicon.hupdatehandle.cppupdatehandle.hupdatewidget.cppupdatewidget.hupdatewidget.ui
translations
|
@ -2,7 +2,5 @@
|
||||||
<qresource prefix="/json"/>
|
<qresource prefix="/json"/>
|
||||||
<qresource prefix="/">
|
<qresource prefix="/">
|
||||||
<file>update.png</file>
|
<file>update.png</file>
|
||||||
<file>background_upgrade_icon.png</file>
|
|
||||||
<file>close.png</file>
|
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
|
@ -5,6 +5,6 @@ Description=系统升级后台检测程序
|
||||||
[Service]
|
[Service]
|
||||||
Type=forking
|
Type=forking
|
||||||
TimeoutStartSec=infinity
|
TimeoutStartSec=infinity
|
||||||
ExecStart=/usr/bin/kylin-background-upgrade --check-upgrade
|
ExecStart=/usr/share/kylin-update-notify/checkUpdate.py
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Name=kylin-background-upgrade
|
Name=kylin-background-upgrade
|
||||||
Name[zh_CN]=更新管理器托盘程序
|
Name[zh_CN]=更新管理器托盘程序
|
||||||
Exec=/usr/bin/kylin-background-upgrade --check-immediately
|
Exec=/usr/bin/kylin-background-upgrade %u
|
||||||
Icon=kylin-update-manager
|
Icon=kylin-update-manager
|
||||||
Type=Application
|
Type=Application
|
||||||
X-UKUI-AutoRestart=true
|
X-UKUI-AutoRestart=true
|
Binary file not shown.
After ![]() (image error) Size: 715 B |
|
@ -0,0 +1,73 @@
|
||||||
|
QT += core gui dbus network KWindowSystem sql
|
||||||
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
|
|
||||||
|
CONFIG += c++11 link_pkgconfig
|
||||||
|
|
||||||
|
# 项目名
|
||||||
|
TARGET = kylin-background-upgrade
|
||||||
|
TEMPLATE = app
|
||||||
|
|
||||||
|
LIBS +=-lukui-log4qt -lpython2.7
|
||||||
|
|
||||||
|
# 执行文件装载
|
||||||
|
target.path = /usr/bin
|
||||||
|
target.source += $$TARGET
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
./src/core.cpp \
|
||||||
|
./src/main.cpp \
|
||||||
|
./src/traydbus.cpp \
|
||||||
|
./src/trayicon.cpp \
|
||||||
|
./src/updatehandle.cpp \
|
||||||
|
./src/updatewidget.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
./src/core.h \
|
||||||
|
./src/traydbus.h \
|
||||||
|
./src/trayicon.h \
|
||||||
|
./src/updatehandle.h \
|
||||||
|
./src/updatewidget.h
|
||||||
|
|
||||||
|
# service文件装载 manul
|
||||||
|
service_manul.files = ./data/kylin-background-upgrade-manul.service
|
||||||
|
service_manul.path = /usr/lib/systemd/user/
|
||||||
|
|
||||||
|
# timer文件装载
|
||||||
|
timer_manul.files = ./data/kylin-background-upgrade-manul.timer
|
||||||
|
timer_manul.path = /usr/lib/systemd/user/
|
||||||
|
|
||||||
|
|
||||||
|
# desktop文件装载
|
||||||
|
desktop.files = ./data/kylin-background-upgrade.desktop
|
||||||
|
desktop.path = /usr/share/applications/
|
||||||
|
|
||||||
|
conf.files = ./data/kylin-background-upgrade-template.conf
|
||||||
|
conf.path = /var/lib/kylin-background-upgrade/
|
||||||
|
|
||||||
|
# 日志配置文件
|
||||||
|
schemes.files += data/org.ukui.log4qt.kylin-background-upgrade.gschema.xml
|
||||||
|
schemes.path = /usr/share/glib-2.0/schemas/
|
||||||
|
|
||||||
|
|
||||||
|
TRANSLATIONS += translations/kylin-background-upgrade_zh_CN.ts
|
||||||
|
translations/kylin-background-upgrade_bo_CN.ts
|
||||||
|
translation.path = /usr/share/kylin-background-upgrade
|
||||||
|
translation.files += translations/kylin-background-upgrade_zh_CN.qm
|
||||||
|
translation.files += translations/kylin-background-upgrade_bo_CN.qm
|
||||||
|
|
||||||
|
|
||||||
|
INSTALLS += target desktop conf translation schemes service_manul timer_manul
|
||||||
|
|
||||||
|
PKGCONFIG += gsettings-qt
|
||||||
|
|
||||||
|
FORMS += \
|
||||||
|
./src/updatewidget.ui
|
||||||
|
|
||||||
|
RESOURCES += \
|
||||||
|
./data/Resources.qrc
|
||||||
|
|
||||||
|
DISTFILES += \
|
||||||
|
./data/update.png
|
||||||
|
|
||||||
|
DISTFILES += \
|
||||||
|
checkUpdate.py
|
|
@ -0,0 +1,315 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE QtCreatorProject>
|
||||||
|
<!-- Written by QtCreator 4.11.0, 2022-07-21T18:04:32. -->
|
||||||
|
<qtcreator>
|
||||||
|
<data>
|
||||||
|
<variable>EnvironmentId</variable>
|
||||||
|
<value type="QByteArray">{3d34bcf0-6a81-46d0-90d9-4cc7667111f8}</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||||
|
<value type="int">0</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||||
|
<value type="QString" key="language">Cpp</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
||||||
|
<value type="QString" key="language">QmlJS</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||||
|
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||||
|
<valuemap type="QVariantMap"/>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">桌面</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">桌面</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{fb955230-392d-4c01-8fb0-8bfc9c0d7279}</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/lxy/kylin-background-upgrade/sp3/build-kylin-background-upgrade-unknown-Debug</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/lxy/kylin-background-upgrade/sp3/build-kylin-background-upgrade-unknown-Release</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/lxy/kylin-background-upgrade/sp3/build-kylin-background-upgrade-unknown-Profile</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||||
|
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
|
||||||
|
<value type="QString">cpu-cycles</value>
|
||||||
|
</valuelist>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
|
||||||
|
<value type="int" key="Analyzer.Perf.Frequency">250</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
|
||||||
|
<value type="QString">-e</value>
|
||||||
|
<value type="QString">cpu-cycles</value>
|
||||||
|
<value type="QString">--call-graph</value>
|
||||||
|
<value type="QString">dwarf,4096</value>
|
||||||
|
<value type="QString">-F</value>
|
||||||
|
<value type="QString">250</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
|
||||||
|
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
|
||||||
|
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
|
||||||
|
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||||
|
<value type="int">0</value>
|
||||||
|
<value type="int">1</value>
|
||||||
|
<value type="int">2</value>
|
||||||
|
<value type="int">3</value>
|
||||||
|
<value type="int">4</value>
|
||||||
|
<value type="int">5</value>
|
||||||
|
<value type="int">6</value>
|
||||||
|
<value type="int">7</value>
|
||||||
|
<value type="int">8</value>
|
||||||
|
<value type="int">9</value>
|
||||||
|
<value type="int">10</value>
|
||||||
|
<value type="int">11</value>
|
||||||
|
<value type="int">12</value>
|
||||||
|
<value type="int">13</value>
|
||||||
|
<value type="int">14</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||||
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">kylin-background-upgrade2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/lxy/kylin-background-upgrade/OpenKylin/make_deb/kylin-background-upgrade/kylin-background-upgrade.pro</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/lxy/kylin-background-upgrade/OpenKylin/make_deb/kylin-background-upgrade/kylin-background-upgrade.pro</value>
|
||||||
|
<value type="QString" key="RunConfiguration.Arguments"></value>
|
||||||
|
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
|
||||||
|
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||||
|
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
|
||||||
|
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/lxy/kylin-background-upgrade/sp3/build-kylin-background-upgrade-unknown-Debug</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||||
|
<value type="int">1</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||||
|
<value type="int">22</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>Version</variable>
|
||||||
|
<value type="int">22</value>
|
||||||
|
</data>
|
||||||
|
</qtcreator>
|
|
@ -1,36 +0,0 @@
|
||||||
# kylin-background-upgrade
|
|
||||||
|
|
||||||
## 主要功能:
|
|
||||||
|
|
||||||
> 由后台定时器定时调起,访问源服务器检测是否有强制更新与可选更新
|
|
||||||
>
|
|
||||||
> 检测到强制更新内容在后台升级,托盘不显示
|
|
||||||
>
|
|
||||||
> 如果控制面板的自动检测更新关闭,则后台托盘程序不提醒用户更新
|
|
||||||
>
|
|
||||||
> 检测到可选更新弹出交互界面
|
|
||||||
>
|
|
||||||
> 点击同意更新按钮,调到控制面板更新页面,托盘程序退出
|
|
||||||
>
|
|
||||||
> 点击暂不更新按钮,退出托盘程序
|
|
||||||
|
|
||||||
## 注意事项:
|
|
||||||
|
|
||||||
> 如果托盘应该出现的情况下没出现,请查看是否收纳。在控制面板>个性化>显示在托盘上的图标中,把更新管理器托盘程序改成显示。
|
|
||||||
>
|
|
||||||
> 如果托盘打印信息为:“源管理器updateSource is failed,连接失败,程序退出”,请查看源管理器是否启动,如已启动,请执行: sudo pkill -f start_dbus sudo
|
|
||||||
>
|
|
||||||
> killall kylin-software-properties-service sudo kylin-software-properties-service 后,再启动托盘程序。
|
|
||||||
>
|
|
||||||
> 静默升级时,会在命令行打印信息
|
|
||||||
>
|
|
||||||
> 右下角提示,在不进行其他操作时,不退出
|
|
||||||
>
|
|
||||||
|
|
||||||
## 启动定时器:
|
|
||||||
|
|
||||||
> 定时器与托盘服务名称: kylin-background-upgrade-timer.timer kylin-background-upgrade.service
|
|
||||||
>
|
|
||||||
> 查看定时器是否工作: systemctl --user status kylin-background-upgrade-timer.timer
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
<RCC>
|
|
||||||
<qresource prefix="/json"/>
|
|
||||||
<qresource prefix="/">
|
|
||||||
<file>update.png</file>
|
|
||||||
<file>background_upgrade_icon.png</file>
|
|
||||||
<file>close.png</file>
|
|
||||||
</qresource>
|
|
||||||
</RCC>
|
|
Binary file not shown.
Before ![]() (image error) Size: 5.1 KiB |
Binary file not shown.
Before ![]() (image error) Size: 957 B |
|
@ -1,10 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=Kylin Background Upgrade
|
|
||||||
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=forking
|
|
||||||
TimeoutStartSec=infinity
|
|
||||||
ExecStart=/usr/bin/kylin-background-upgrade --check-upgrade
|
|
||||||
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=系统升级定时检测
|
|
||||||
|
|
||||||
[Timer]
|
|
||||||
OnStartupSec=10min
|
|
||||||
OnUnitInactiveSec=10min
|
|
||||||
AccuracySec=5s
|
|
||||||
Unit=kylin-background-upgrade-manul.service
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=default.target
|
|
||||||
|
|
Binary file not shown.
Before ![]() (image error) Size: 7.9 KiB |
|
@ -1,300 +0,0 @@
|
||||||
kylin-update-notify (1.3.2.1-ok8) yangtze; urgency=medium
|
|
||||||
|
|
||||||
*BUG号:无
|
|
||||||
*需求号:无
|
|
||||||
*其他改动说明:适配新版本updater
|
|
||||||
*影响域: 无
|
|
||||||
|
|
||||||
-- luoxueyi <luoxueyi@kylinos.cn> Fri, 01 Dec 2023 14:16:50 +0800
|
|
||||||
|
|
||||||
kylin-update-notify (1.3.2.1-ok7) yangtze; urgency=medium
|
|
||||||
|
|
||||||
* remove depend kylin-software-properties .
|
|
||||||
|
|
||||||
-- luoxueyi <luoxueyi@kylinos.cn> Mon, 12 Jun 2023 14:08:00 +0800
|
|
||||||
|
|
||||||
kylin-update-notify (1.3.2.1-ok6) yangtze; urgency=medium
|
|
||||||
|
|
||||||
* Fix the upload error.
|
|
||||||
|
|
||||||
-- handsome_feng <jianfengli@ubuntukylin.com> Fri, 09 Jun 2023 15:55:18 +0800
|
|
||||||
|
|
||||||
kylin-update-notify (1.3.2.1-ok5) yangtze; urgency=medium
|
|
||||||
|
|
||||||
*BUG号:#issues/I784B9 【arm】【树莓派】【系统更新】控制面板“有更新应用时通知”是关闭的,会自动弹出“检测到有系统更新”弹窗
|
|
||||||
#issues/I7847A 【arm】【树莓派】【系统更新】点击“检测到有系统更新”弹窗的“立即更新”按钮,无法跳转到控制面板系统更新页面
|
|
||||||
#issues/I76LO5 【wayland】【控制面板】【更新】更新提示弹窗未显示在屏幕右下角
|
|
||||||
#issues/I768RV 【控制面板】【更新】推迟提醒计时器时间错乱,在未到推迟时间又重新出现弹窗
|
|
||||||
#issues/I74KO7 【控制面板】【更新】开启"有更新应用时通知",在通知弹窗中点击"立即更新"无法跳转到控制面板-更新界面
|
|
||||||
|
|
||||||
*需求号:无
|
|
||||||
*其他改动说明:无
|
|
||||||
*影响域: 无
|
|
||||||
|
|
||||||
-- luoxueyi <luoxueyi@kylinos.cn> Fri, 09 Jun 2023 10:13:18 +0800
|
|
||||||
|
|
||||||
kylin-update-notify (1.3.2.1-ok4) yangtze; urgency=medium
|
|
||||||
|
|
||||||
*BUG号:135671 【wayland】【更新升级】设置推迟时间不生效,到推迟的时间后没有再次出现自动更新弹窗
|
|
||||||
*需求号:无
|
|
||||||
*其他改动说明:无
|
|
||||||
*影响域: 无
|
|
||||||
|
|
||||||
-- luoxueyi <luoxueyi@kylinos.cn> Tue, 18 Apr 2023 09:46:45 +0800
|
|
||||||
|
|
||||||
kylin-update-notify (1.3.2.1-ok3) yangtze; urgency=medium
|
|
||||||
|
|
||||||
* patch from zhangdongwei
|
|
||||||
|
|
||||||
-- Xie Wei <xiewei@kylinos.cn> Thu, 21 Jul 2022 19:41:21 +0800
|
|
||||||
|
|
||||||
kylin-update-notify (1.3.2.1-ok2) yangtze; urgency=medium
|
|
||||||
|
|
||||||
* add BR: python2.7-dev
|
|
||||||
|
|
||||||
-- Xie Wei <xiewei@kylinos.cn> Thu, 21 Jul 2022 18:26:14 +0800
|
|
||||||
|
|
||||||
kylin-update-notify (1.3.2.1-ok1) yangtze; urgency=medium
|
|
||||||
|
|
||||||
* build for openKylin
|
|
||||||
* 修改为quilt格式
|
|
||||||
|
|
||||||
-- Xie Wei <xiewei@kylinos.cn> Thu, 21 Jul 2022 18:08:51 +0800
|
|
||||||
|
|
||||||
kylin-update-notify (1.3.2.1) yangtze; urgency=medium
|
|
||||||
|
|
||||||
*BUG号:无
|
|
||||||
*需求号:无
|
|
||||||
*其他改动说明:无
|
|
||||||
*影响域: 系统更新-静默升级
|
|
||||||
|
|
||||||
-- luoxueyi <luoxueyi@kylinos.cn> Thu, 21 Jul 2022 17:57:12 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.3.2.1) v101; urgency=medium
|
|
||||||
|
|
||||||
*BUG号:121781 【在线更新】中文环境下,静默更新完成后,右上角及侧边栏通知未汉化
|
|
||||||
122046 【更新升级】配置静默推送,但是仓库源不存在推送的包,后台日志有报错,功能未见异常
|
|
||||||
122183 【在线更新】上午8-12点外仍会弹出更新通知
|
|
||||||
122425 【在线更新】设置每隔1min38s弹出通知,在弹出的通知弹窗中点击推迟,1min38s后再次弹出更新通知
|
|
||||||
*需求号:无
|
|
||||||
*其他改动说明:无
|
|
||||||
*影响域: 系统更新-静默升级
|
|
||||||
|
|
||||||
-- luoxueyi <luoxueyi@kylinos.cn> Thu, 07 Jul 2022 18:34:30 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.3.2.0) v101; urgency=medium
|
|
||||||
|
|
||||||
*BUG号:无
|
|
||||||
*需求号:# 12723 【更新升级】静默升级接口重构
|
|
||||||
# 13511 【更新升级】系统可选更新通知机制优化
|
|
||||||
*其他改动说明:更新kylin-system-updater后端接口
|
|
||||||
*影响域: 系统更新-静默升级
|
|
||||||
|
|
||||||
-- luoxueyi <luoxueyi@kylinos.cn> Mon, 06 Jun 2022 16:24:14 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.3.1+0527kord0) v101; urgency=medium
|
|
||||||
|
|
||||||
*BUG号:无
|
|
||||||
*需求号:无
|
|
||||||
*其他改动说明:更新kylin-system-updater后端接口
|
|
||||||
|
|
||||||
-- luoxueyi <luoxueyi@kylinos.cn> Fri, 20 May 2022 15:58:48 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.3.1+0520) v101; urgency=medium
|
|
||||||
|
|
||||||
*BUG号:无
|
|
||||||
*需求号:无
|
|
||||||
*其他改动说明:更新kylin-system-updater后端接口
|
|
||||||
|
|
||||||
-- luoxueyi <luoxueyi@kylinos.cn> Fri, 20 May 2022 15:58:48 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.3.1+0125.2) v101; urgency=medium
|
|
||||||
|
|
||||||
*BUG号:104479
|
|
||||||
*需求号:无
|
|
||||||
*其他改动说明:无
|
|
||||||
|
|
||||||
-- wanghailiang <wanghailiang@kylinos.cn> Tue, 25 Jan 2022 10:11:46 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.3.1+0111.1) v101; urgency=medium
|
|
||||||
|
|
||||||
*BUG 号: 102451
|
|
||||||
*需求号:无
|
|
||||||
*其他改动说明:无
|
|
||||||
|
|
||||||
-- liyanda <liyanda@kylinos.cn> Tue, 11 Jan 2022 18:05:55 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0830.4hw1) v101.hw; urgency=medium
|
|
||||||
|
|
||||||
*BUG 号:无
|
|
||||||
*需求号:无
|
|
||||||
*其他改动说明:测试设置固定值的窗口出现位置
|
|
||||||
|
|
||||||
-- liyanda <liyanda@kylinos.cn> Thu, 29 Apr 2021 19:24:32 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0331.1) v101; urgency=medium
|
|
||||||
|
|
||||||
* 更新界面拉起控制面板异常问题
|
|
||||||
|
|
||||||
-- liyanda <liyanda@kylinos.cn> Wed, 31 Mar 2021 19:26:45 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0324.1) v101; urgency=medium
|
|
||||||
|
|
||||||
* 适配高分屏
|
|
||||||
|
|
||||||
-- liyanda <liyanda@kylinos.cn> Wed, 24 Mar 2021 18:53:48 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0320.5) v101; urgency=medium
|
|
||||||
|
|
||||||
* 优化弹窗布局
|
|
||||||
|
|
||||||
-- liyanda <liyanda@kylinos.cn> Sat, 20 Mar 2021 16:23:38 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0316.3) v101; urgency=medium
|
|
||||||
|
|
||||||
* 更改定时器生成机制
|
|
||||||
|
|
||||||
-- liyanda <liyanda@kylinos.cn> Mon, 15 Mar 2021 12:37:14 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0312.2) v101; urgency=medium
|
|
||||||
|
|
||||||
* 增加推迟提醒功能
|
|
||||||
|
|
||||||
-- liyanda <liyanda@kylinos.cn> Fri, 12 Mar 2021 15:07:45 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0303.1) v101; urgency=medium
|
|
||||||
|
|
||||||
* 更新文件锁内容
|
|
||||||
|
|
||||||
-- liyanda <liyanda@kylinos.cn> Wed, 03 Mar 2021 13:49:46 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0204.2) v101; urgency=medium
|
|
||||||
|
|
||||||
* 更改托盘图标提示方式
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Thu, 04 Feb 2021 11:32:41 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0201.1) v101; urgency=medium
|
|
||||||
|
|
||||||
* Change file lock path
|
|
||||||
* 更改文件锁路径
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Mon, 01 Feb 2021 15:46:09 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0129.1) v101; urgency=medium
|
|
||||||
|
|
||||||
* Modify the problem of abnormal installation
|
|
||||||
* 修改安装异常的问题
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Fri, 29 Jan 2021 13:48:21 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0126.1) v101; urgency=medium
|
|
||||||
|
|
||||||
* 更改后台更新错误处理机制
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Tue, 26 Jan 2021 16:42:59 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0122.1) v101; urgency=medium
|
|
||||||
|
|
||||||
* 更改托盘选择页面的ui
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Fri, 22 Jan 2021 15:13:40 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0120.4) v101; urgency=medium
|
|
||||||
|
|
||||||
* 更改消息通知逻辑
|
|
||||||
* 更改环境变量
|
|
||||||
* 更改托盘图标右键内容
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Wed, 20 Jan 2021 11:40:40 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0119.3) v101; urgency=medium
|
|
||||||
|
|
||||||
* Modify message notification icon
|
|
||||||
* 修改消息通知图标
|
|
||||||
|
|
||||||
* Standardize message notification content
|
|
||||||
* 规范消息通知内容
|
|
||||||
|
|
||||||
* Increase the focus on source management
|
|
||||||
* 增加对源管理器重连机制
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Tue, 19 Jan 2021 11:05:27 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0118.1) v101; urgency=medium
|
|
||||||
|
|
||||||
* 增加对更新管理器的启动的判断
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Mon, 18 Jan 2021 17:41:38 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0115.3) v101; urgency=medium
|
|
||||||
|
|
||||||
* 增加中英文翻译
|
|
||||||
* 更改单例方式
|
|
||||||
* 更改连接dbus的方式
|
|
||||||
* 修改server参数,调整定时器调用方式
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Fri, 15 Jan 2021 11:13:31 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0112.1) v101; urgency=medium
|
|
||||||
|
|
||||||
* 修改读取更新管理器数据库地址
|
|
||||||
* 修改获取源管理器返回值类型
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Tue, 12 Jan 2021 17:27:38 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0111.1) v101; urgency=medium
|
|
||||||
|
|
||||||
* 增加电量与包大小的判断
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Mon, 11 Jan 2021 13:38:20 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0109.4) v101; urgency=medium
|
|
||||||
|
|
||||||
* 修改了电量错误处理
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Sat, 09 Jan 2021 13:26:51 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0108.1) v101; urgency=medium
|
|
||||||
|
|
||||||
* 重新命名托盘
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Fri, 08 Jan 2021 12:15:37 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0106.3) v101; urgency=medium
|
|
||||||
|
|
||||||
* 增加文件锁的错误处理
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Wed, 06 Jan 2021 14:29:43 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.2.1+0104.8) v101; urgency=medium
|
|
||||||
|
|
||||||
* 增加文件锁
|
|
||||||
* 增加消息通知功能
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Mon, 04 Jan 2021 10:18:57 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.1.1+1231.2) v101; urgency=medium
|
|
||||||
|
|
||||||
* 新增托盘静默更新气泡提示
|
|
||||||
* 重构dbus连接代码
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Thu, 31 Dec 2020 14:43:43 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.1.1+1230.5) v101; urgency=medium
|
|
||||||
|
|
||||||
* 更改获取包列表的方式
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Wed, 30 Dec 2020 20:53:18 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.1.1+1229.6) v101; urgency=medium
|
|
||||||
|
|
||||||
* 更改任务栏显示的问题
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Tue, 29 Dec 2020 17:00:00 +0800
|
|
||||||
|
|
||||||
kylin-background-upgrade (1.1.1+1229.1) v101; urgency=medium
|
|
||||||
|
|
||||||
* firstlog
|
|
||||||
|
|
||||||
-- liyanda1234 <liyanda@kylinos.cn> Wed, 23 Dec 2020 15:18:22 +0800
|
|
|
@ -1,31 +0,0 @@
|
||||||
Source: kylin-update-notify
|
|
||||||
Maintainer: kylin <kylin@kylinos.cn>
|
|
||||||
Section: universe/admin
|
|
||||||
Priority: optional
|
|
||||||
Build-Depends: debhelper-compat(=12),
|
|
||||||
qtbase5-dev,
|
|
||||||
libxml2-dev,
|
|
||||||
libxml2,
|
|
||||||
libqt5svg5-dev,
|
|
||||||
libglib2.0-dev,
|
|
||||||
qttools5-dev-tools,
|
|
||||||
qtchooser,
|
|
||||||
libgsettings-qt-dev,
|
|
||||||
libqt5dbus5,
|
|
||||||
nvme-cli,
|
|
||||||
libqapt-dev,
|
|
||||||
libkf5windowsystem-data,
|
|
||||||
libkf5windowsystem-dev,
|
|
||||||
libkf5windowsystem5,
|
|
||||||
libkf5windowsystem-doc,
|
|
||||||
libukui-log4qt-dev,
|
|
||||||
Standards-Version: 4.1.3
|
|
||||||
|
|
||||||
Package: kylin-update-notify
|
|
||||||
Architecture: any
|
|
||||||
Section: universe/admin
|
|
||||||
Priority: optional
|
|
||||||
Depends: ${shlibs:Depends},
|
|
||||||
kylin-system-updater ( >= 2.0.5.1 )
|
|
||||||
Breaks: kylin-update-tray
|
|
||||||
Description: kylin background upgrade
|
|
|
@ -1,2 +0,0 @@
|
||||||
kylin-update-notify.desktop /etc/xdg/autostart/
|
|
||||||
checkUpdate.py /usr/share/kylin-update-notify
|
|
|
@ -1,5 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
systemctl --user daemon-reload
|
|
||||||
systemctl --global enable kylin-background-upgrade-silent.timer
|
|
||||||
systemctl --global enable kylin-background-upgrade-manul.timer
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
#if [ ! -f "/etc/systemd/user/kylin-background-upgrade-timer.timer" ];then
|
|
||||||
#echo "remove_timer"
|
|
||||||
#else
|
|
||||||
#rm /etc/systemd/user/kylin-background-upgrade-timer.timer
|
|
||||||
#fi
|
|
|
@ -1,8 +0,0 @@
|
||||||
#!/usr/bin/make -f
|
|
||||||
|
|
||||||
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
|
|
||||||
export QT_SELECT := qt5
|
|
||||||
|
|
||||||
%:
|
|
||||||
dh $@
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
3.0 (native)
|
|
|
@ -1 +0,0 @@
|
||||||
include-binaries
|
|
|
@ -1,4 +0,0 @@
|
||||||
PROJECT_ROOTDIR = $$PWD
|
|
||||||
|
|
||||||
INCLUDEPATH = ./widgets
|
|
||||||
include(./widgets/widgets.pri)
|
|
|
@ -1,42 +0,0 @@
|
||||||
QT += core gui dbus network KWindowSystem sql
|
|
||||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
|
||||||
|
|
||||||
CONFIG += c++11 link_pkgconfig
|
|
||||||
|
|
||||||
# 项目名
|
|
||||||
TARGET = kylin-background-upgrade
|
|
||||||
TEMPLATE = app
|
|
||||||
|
|
||||||
LIBS +=-lukui-log4qt
|
|
||||||
|
|
||||||
include(env.pri)
|
|
||||||
INCLUDEPATH +=./widgets
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
./src/core.cpp \
|
|
||||||
./src/main.cpp \
|
|
||||||
./src/traydbus.cpp \
|
|
||||||
./src/trayicon.cpp \
|
|
||||||
./src/updatehandle.cpp \
|
|
||||||
./src/updatewidget.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
./src/core.h \
|
|
||||||
./src/traydbus.h \
|
|
||||||
./src/trayicon.h \
|
|
||||||
./src/updatehandle.h \
|
|
||||||
./src/updatewidget.h
|
|
||||||
|
|
||||||
TRANSLATIONS += translations/kylin-background-upgrade_zh_CN.ts \
|
|
||||||
translations/kylin-background-upgrade_bo_CN.ts
|
|
||||||
|
|
||||||
PKGCONFIG += gsettings-qt kysdk-waylandhelper
|
|
||||||
|
|
||||||
FORMS += \
|
|
||||||
./src/updatewidget.ui
|
|
||||||
|
|
||||||
RESOURCES += \
|
|
||||||
./data/Resources.qrc
|
|
||||||
|
|
||||||
DISTFILES += \
|
|
||||||
./data/update.png
|
|
|
@ -1,22 +0,0 @@
|
||||||
#include "core.h"
|
|
||||||
|
|
||||||
core::core(QString getnum, QWidget *parent)
|
|
||||||
: QMainWindow(parent)
|
|
||||||
{
|
|
||||||
updateHandle = new updatehandle(getnum,this);
|
|
||||||
connect(updateHandle,&updatehandle::execSignal,this,&core::execSlots);
|
|
||||||
this->setWindowFlags(Qt::SubWindow);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
core::~core()
|
|
||||||
{
|
|
||||||
qDebug() << Q_FUNC_INFO << __LINE__;
|
|
||||||
}
|
|
||||||
|
|
||||||
void core::execSlots()
|
|
||||||
{
|
|
||||||
emit execSignal();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1,206 +0,0 @@
|
||||||
#include "core.h"
|
|
||||||
#include <QApplication>
|
|
||||||
#include <QDebug>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <iostream>
|
|
||||||
#include <ukui-log4qt.h>
|
|
||||||
#include<qdebug.h>
|
|
||||||
#include <QLockFile>
|
|
||||||
|
|
||||||
#define PROGRAM_NAME "kylin-background-upgrade"
|
|
||||||
#define LOG_NAME "/.config/kylin-background-upgrade/kylin-background-upgrade.log"
|
|
||||||
#define LOG_SILENT_NAME "/.config/kylin-background-upgrade/kylin-background-upgrade-silent.log"
|
|
||||||
#define LOG_MANUL_NAME "/.config/kylin-background-upgrade/kylin-background-upgrade-manul.log"
|
|
||||||
|
|
||||||
static FILE *fp = NULL;
|
|
||||||
QString toDir;
|
|
||||||
static bool _silentOrManul = true;
|
|
||||||
|
|
||||||
void msgHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg)
|
|
||||||
{
|
|
||||||
static char logPath[255] = {0};
|
|
||||||
int uid = -1;
|
|
||||||
static int pid = 0;
|
|
||||||
|
|
||||||
Q_UNUSED(context);
|
|
||||||
|
|
||||||
QDateTime currentTime = QDateTime::currentDateTime();
|
|
||||||
QString timeStr = currentTime.toString("yy.MM.dd hh:mm:ss +zzz");
|
|
||||||
pid = (int)getpid();
|
|
||||||
uid = (int)getuid();
|
|
||||||
// 获取用于控制命令行输出的环境变量
|
|
||||||
char *ctrlEnv = getenv("BACKGROUND_UPGRADE_DEBUG");
|
|
||||||
QString env;
|
|
||||||
|
|
||||||
// 格式化输出字符串,添加消息发生时间、消息等级
|
|
||||||
QString outMsg;
|
|
||||||
switch (type) {
|
|
||||||
case QtDebugMsg:
|
|
||||||
outMsg = QString("[%1 D .%2 :%4]: %3").arg(timeStr).arg(pid).arg(msg).arg(uid);
|
|
||||||
break;
|
|
||||||
case QtInfoMsg:
|
|
||||||
outMsg = QString("[%1 D .%2 :%4]: %3").arg(timeStr).arg(pid).arg(msg).arg(uid);
|
|
||||||
break;
|
|
||||||
case QtWarningMsg:
|
|
||||||
outMsg = QString("[%1 D .%2 :%4]: %3").arg(timeStr).arg(pid).arg(msg).arg(uid);
|
|
||||||
break;
|
|
||||||
case QtCriticalMsg:
|
|
||||||
outMsg = QString("[%1 D .%2 :%4]: %3").arg(timeStr).arg(pid).arg(msg).arg(uid);
|
|
||||||
break;
|
|
||||||
case QtFatalMsg:
|
|
||||||
outMsg = QString("[%1 D .%2 :%4]: %3").arg(timeStr).arg(pid).arg(msg).arg(uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fp != NULL) {
|
|
||||||
// 日志文件存在,则输出到日志文件中
|
|
||||||
fprintf(fp, "%s\n", outMsg.toUtf8().data());
|
|
||||||
fflush(fp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctrlEnv != NULL) {
|
|
||||||
// 环境变量为true或者1,则将信息输出到命令行
|
|
||||||
env = QString(ctrlEnv).toLower();
|
|
||||||
if ((env == "true") || (env == "1")) {
|
|
||||||
fprintf(stdout, "%s\n", outMsg.toStdString().c_str());
|
|
||||||
fflush(stdout);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 遇到致命错误,需要终止程序(这里终止程序是可选的)
|
|
||||||
if (type == QtFatalMsg)
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
void log_env_init(QString arg){
|
|
||||||
static int uid = -1;
|
|
||||||
static char logPath[98] = {0};
|
|
||||||
bool _is_root = false;
|
|
||||||
toDir = QDir::homePath();
|
|
||||||
toDir += "/.config/kylin-background-upgrade/";
|
|
||||||
QDir dir(toDir);
|
|
||||||
if(!dir.exists()) {
|
|
||||||
dir.mkdir(toDir);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 初始执行时,设置log文件路径
|
|
||||||
if (uid == -1) {
|
|
||||||
uid = getuid();
|
|
||||||
}
|
|
||||||
if (uid == 0) {
|
|
||||||
// root user
|
|
||||||
sprintf(logPath, "/var/log/kylin-background-upgrade/kylin-background-upgrade.log");
|
|
||||||
_is_root = true;
|
|
||||||
} else {
|
|
||||||
// normal user
|
|
||||||
// sprintf(logPath, "/run/user/%d/%s.log", uid, PROGRAM_NAME);
|
|
||||||
//QString 转 const char*
|
|
||||||
std::string str = QDir::homePath().toStdString();
|
|
||||||
const char* ch = str.c_str();
|
|
||||||
if (arg == "--check-upgrade" || arg == "--check-immediately") {
|
|
||||||
sprintf(logPath, "%s%s", ch, LOG_MANUL_NAME);
|
|
||||||
} else {
|
|
||||||
sprintf(logPath, "%s%s", ch, LOG_SILENT_NAME);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (access(logPath, F_OK|W_OK) == 0) { // log文件存在且可写
|
|
||||||
if (fp == NULL)
|
|
||||||
fp = fopen(logPath, "a+");
|
|
||||||
QFileInfo info(logPath);
|
|
||||||
if (info.size() > 1024*1024*20) { //20MB
|
|
||||||
fclose(fp); fp = NULL;
|
|
||||||
QFile fileclean(logPath);
|
|
||||||
fileclean.open(QIODevice::WriteOnly | QIODevice::Text | QFile::Truncate);
|
|
||||||
fileclean.close();
|
|
||||||
if (fp == NULL)
|
|
||||||
fp = fopen(logPath, "a+");
|
|
||||||
}
|
|
||||||
} else if (access(logPath, F_OK) != 0){ //文件不存在
|
|
||||||
if (fp == NULL) {
|
|
||||||
if (_is_root) { //root用户日志文件
|
|
||||||
QDir* dir = new QDir();
|
|
||||||
if(!dir->exists("/var/log/kylin-background-upgrade/")){
|
|
||||||
dir->mkpath("/var/log/kylin-background-upgrade/");
|
|
||||||
}
|
|
||||||
fp = fopen(logPath, "a+");
|
|
||||||
if (fp == NULL)
|
|
||||||
printf("Can't open logfile!\n");
|
|
||||||
} else {
|
|
||||||
fp = fopen(logPath, "a+");
|
|
||||||
if (fp == NULL)
|
|
||||||
printf("Can't open logfile!\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// log文件不可写,则需要判断是否被打开过,被打开过就需要关闭
|
|
||||||
if (fp != NULL)
|
|
||||||
fclose(fp);
|
|
||||||
fp = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool _is_openkylin()
|
|
||||||
{
|
|
||||||
QString OPENKYLIN_DISTTRIBUTOR = "Openkylin";
|
|
||||||
QString command = "lsb_release -i -s";
|
|
||||||
QProcess process;
|
|
||||||
process.start(command);
|
|
||||||
process.waitForFinished();
|
|
||||||
|
|
||||||
QString result = process.readAllStandardOutput();
|
|
||||||
int ret = result.left(OPENKYLIN_DISTTRIBUTOR.length()).compare(OPENKYLIN_DISTTRIBUTOR.left(OPENKYLIN_DISTTRIBUTOR.length()));
|
|
||||||
return (0 == ret)?true:false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
QString arg=QString::fromLatin1(argv[1]);
|
|
||||||
log_env_init(arg);
|
|
||||||
qInstallMessageHandler(msgHandler);
|
|
||||||
char *dis_env=getenv("DISPLAY");
|
|
||||||
QString display_env(dis_env);
|
|
||||||
if(display_env != NULL){
|
|
||||||
qDebug()<<"The desktop graphics environment is normal, DISPLAY="<<dis_env;
|
|
||||||
} else {
|
|
||||||
qDebug()<<"The desktop graphics environment is abnormal, DISPLAY="<<dis_env<<", exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
QLockFile manul_lock(toDir+"manul.lock");
|
|
||||||
QLockFile silent_lock(toDir+"silent.lock");
|
|
||||||
qDebug()<<"";
|
|
||||||
qDebug()<<"---------------------------------------------------------------------------------------------------";
|
|
||||||
if (arg == "--check-upgrade" || arg == "--check-immediately") {
|
|
||||||
qDebug()<<"Start check upgradable ...";
|
|
||||||
if (arg == "--check-immediately") {
|
|
||||||
qDebug()<<"Perform a boot update check ...";
|
|
||||||
}
|
|
||||||
if (!manul_lock.tryLock(0)) {
|
|
||||||
qDebug()<<"Another process is checking for updates, exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qDebug()<<"Start silent upgrade ...";
|
|
||||||
if (!silent_lock.tryLock(0)) {
|
|
||||||
qDebug()<<"Another process is silently upgrading, exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
if (_is_openkylin()) {
|
|
||||||
qDebug()<<"openkylin, exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
|
|
||||||
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
|
||||||
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
setenv("QT_QPA_PLATFORMTHEME","ukui",true);
|
|
||||||
qunsetenv("SESSION_MANAGER");
|
|
||||||
QApplication a(argc, argv);
|
|
||||||
core m_core(arg);
|
|
||||||
// QObject::connect(m_core,SIGNAL(execSignal()),&a,SLOT(quit()));
|
|
||||||
return a.exec();
|
|
||||||
}
|
|
|
@ -1,450 +0,0 @@
|
||||||
#include "traydbus.h"
|
|
||||||
#include <iostream>
|
|
||||||
#include <ostream>
|
|
||||||
#include <QDateTime>
|
|
||||||
|
|
||||||
//托盘d-bus 服务
|
|
||||||
traydbusservice::traydbusservice()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList traydbusservice::getCrucial()
|
|
||||||
{
|
|
||||||
QFile file("/var/lib/kylin-software-properties/template/crucial.list");
|
|
||||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
|
|
||||||
return crucial;
|
|
||||||
while (!file.atEnd()) {
|
|
||||||
QByteArray line = file.readLine();
|
|
||||||
QString str = QString(line);
|
|
||||||
qDebug()<<str;
|
|
||||||
crucial = str.split(QRegExp("[ ]"));
|
|
||||||
qDebug()<<"d-bus crucial: "<<crucial;
|
|
||||||
}
|
|
||||||
return crucial;
|
|
||||||
}
|
|
||||||
QStringList traydbusservice::getImportant()
|
|
||||||
{
|
|
||||||
QFile file("/var/lib/kylin-software-properties/template/important.list");
|
|
||||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
|
|
||||||
return important;
|
|
||||||
while (!file.atEnd()) {
|
|
||||||
QByteArray line = file.readLine();
|
|
||||||
QString str = QString(line);
|
|
||||||
qDebug()<<str;
|
|
||||||
important = str.split(QRegExp("[ ]"));
|
|
||||||
qDebug()<<"d-bus important: "<<important;
|
|
||||||
}
|
|
||||||
return important;
|
|
||||||
}
|
|
||||||
void traydbusservice::connectSuccessslots()
|
|
||||||
{
|
|
||||||
emit connectSuccessSignal();
|
|
||||||
}
|
|
||||||
void traydbusservice::quitslots()
|
|
||||||
{
|
|
||||||
emit quitsignal();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//连接源管理器的d-bus································
|
|
||||||
|
|
||||||
source_dbus* source_dbus::sourceMutual = nullptr;
|
|
||||||
using namespace std;
|
|
||||||
/**
|
|
||||||
* @brief source_dbus::getInstance
|
|
||||||
* 单例
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
source_dbus* source_dbus::getInstance()
|
|
||||||
{
|
|
||||||
static QMutex mutex;
|
|
||||||
if (nullptr == sourceMutual) {
|
|
||||||
QMutexLocker locker(&mutex);
|
|
||||||
sourceMutual = new source_dbus;
|
|
||||||
}
|
|
||||||
return sourceMutual;
|
|
||||||
}
|
|
||||||
|
|
||||||
source_dbus::source_dbus(QObject *parent)
|
|
||||||
:QObject(parent)
|
|
||||||
{
|
|
||||||
connectTimer = new QTimer(this);
|
|
||||||
connect(connectTimer, SIGNAL(timeout()), this, SLOT(connectDbus()));
|
|
||||||
}
|
|
||||||
|
|
||||||
source_dbus::~source_dbus()
|
|
||||||
{
|
|
||||||
qDebug() << Q_FUNC_INFO << __LINE__;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief source_dbus::initSource_Dbus
|
|
||||||
* 连接源管理器dbus
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
bool source_dbus::initSource_Dbus()
|
|
||||||
{
|
|
||||||
//创建QDBusInterface接口
|
|
||||||
interface1 = new QDBusInterface("com.kylin.software.properties", "/com/kylin/software/properties",
|
|
||||||
"com.kylin.software.properties.interface",
|
|
||||||
QDBusConnection::systemBus());
|
|
||||||
if (!interface1->isValid()) {
|
|
||||||
qDebug() << qPrintable(QDBusConnection::systemBus().lastError().message());
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
interface1->setTimeout(123456789);
|
|
||||||
//调用远程的value方法,源管理器update
|
|
||||||
qDebug()<<"Start updateSourceTemplate ...";
|
|
||||||
QDBusReply<bool> reply1 = interface1->call(QDBus::Block, "updateSourceTemplate");
|
|
||||||
if (reply1.isValid()) {
|
|
||||||
if (reply1.value()) {
|
|
||||||
// QDBusReply<int> reply2 = interface1->call(QDBus::Block, "updateSourcePackages","kylin-background-upgrade");
|
|
||||||
// if (reply2.isValid()) {
|
|
||||||
// qDebug()<<"updateSourcePackages return value:"<<reply2.value();
|
|
||||||
// if (reply2.value() == 100) {
|
|
||||||
// qDebug()<<"源管理器 updateSource 连接成功";
|
|
||||||
// emit ready();
|
|
||||||
// } else {
|
|
||||||
// qDebug()<<"源管理器updateSourcePackages failed,连接失败 ";
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// qDebug() << "源管理器updateSourcePackages failed ";
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
emit ready();
|
|
||||||
} else {
|
|
||||||
qDebug()<<"updateSourceTemplate failed ";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qDebug() << "updateSourceTemplate method called failed ";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief source_dbus::connectDbus
|
|
||||||
* 重连机制
|
|
||||||
*/
|
|
||||||
void source_dbus::connectDbus()
|
|
||||||
{
|
|
||||||
connectTimer->start(3000);
|
|
||||||
if (initSource_Dbus()) {
|
|
||||||
connectTimer->stop();
|
|
||||||
} else {
|
|
||||||
num ++;
|
|
||||||
if (num >2) {
|
|
||||||
qDebug()<<"updateSourceTemplate failed, exit.";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
qDebug()<<"updateSourceTemplate failed,Retries are in progress for the "<<num<<"th time.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//连接更新管理器的d-bus································
|
|
||||||
|
|
||||||
update_dbus* update_dbus::updateMutual = nullptr;
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
update_dbus* update_dbus::getInstance()
|
|
||||||
{
|
|
||||||
static QMutex mutex;
|
|
||||||
if (nullptr == updateMutual) {
|
|
||||||
QMutexLocker locker(&mutex);
|
|
||||||
updateMutual = new update_dbus;
|
|
||||||
}
|
|
||||||
return updateMutual;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
update_dbus::update_dbus(QObject *parent)
|
|
||||||
:QObject(parent)
|
|
||||||
{
|
|
||||||
initUpdate_Dbus();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
update_dbus::~update_dbus()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief update_dbus::initUpdate_Dbus
|
|
||||||
* 连接更新管理器dbus
|
|
||||||
*/
|
|
||||||
void update_dbus::initUpdate_Dbus()
|
|
||||||
{
|
|
||||||
//创建QDBusInterface接口
|
|
||||||
interface = new QDBusInterface("com.kylin.systemupgrade", "/com/kylin/systemupgrade",
|
|
||||||
"com.kylin.systemupgrade.interface",
|
|
||||||
QDBusConnection::systemBus());
|
|
||||||
if (!interface->isValid()) {
|
|
||||||
qDebug() << qPrintable(QDBusConnection::systemBus().lastError().message());
|
|
||||||
qDebug() << "Failed to connect /com/kylin/systemupgrade ";
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
interface_utils = new QDBusInterface("com.kylin.systemupgrade", "/com/kylin/systemupgrade/utils",
|
|
||||||
"com.kylin.systemupgrade.interface",
|
|
||||||
QDBusConnection::systemBus());
|
|
||||||
if (!interface_utils->isValid()) {
|
|
||||||
qDebug() << qPrintable(QDBusConnection::systemBus().lastError().message());
|
|
||||||
qDebug() << "Failed to connect /com/kylin/systemupgrade ";
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
//监听D-bus信号,获取安装信息与进度
|
|
||||||
// connect(interface,SIGNAL(UpdateDloadAndInstStaChanged(QStringList, int, QString, QString)),this,SLOT(getsignal(QStringList, int, QString, QString)));
|
|
||||||
// QDBusConnection::systemBus().connect(QString("com.kylin.systemupgrade"), QString("/com/kylin/systemupgrade"),
|
|
||||||
// QString("com.kylin.systemupgrade.interface"),
|
|
||||||
// QString("UpdateDloadAndInstStaChanged"), this, SLOT(getsignal(QStringList, int32_t, QString, QString)));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief update_dbus::getsignal
|
|
||||||
* 获取下载进度
|
|
||||||
*/
|
|
||||||
void update_dbus::getsignal(QStringList pkgs, int progess, QString status, QString current_details)
|
|
||||||
{
|
|
||||||
QString aptStatus = "";
|
|
||||||
// QString aptAppName;
|
|
||||||
int aptPercent = 0;
|
|
||||||
|
|
||||||
// QVariant dateQVariant;
|
|
||||||
// aptStatus = arg;
|
|
||||||
|
|
||||||
// QVariantMap::Iterator it;
|
|
||||||
// for (it = key.begin(); it != key.end(); ++it) {
|
|
||||||
// if (it.key() == "apt_appname") {
|
|
||||||
// dateQVariant = it.value();
|
|
||||||
// aptAppName = dateQVariant.toString();
|
|
||||||
// }
|
|
||||||
// if (it.key() == "apt_percent") {
|
|
||||||
// dateQVariant = it.value();
|
|
||||||
// aptPercent = dateQVariant.toFloat();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (arg == "apt_start" && aptD_busStatus == true) {
|
|
||||||
// aptD_busStatus =false;
|
|
||||||
// }
|
|
||||||
// if ((arg == "apt_start" || arg == "apt_finish") && (aptPercent == 0 || aptPercent == 100)) {
|
|
||||||
// emit aptAppNames_Percentsignal(aptAppName,aptPercent,true);
|
|
||||||
// } else if (arg == "apt_error" ) {
|
|
||||||
// emit aptAppNames_Percentsignal(aptAppName,aptPercent,false);
|
|
||||||
// }
|
|
||||||
if (aptPercent != progess) {
|
|
||||||
aptPercent = progess;
|
|
||||||
emit aptAppNames_Percentsignal(pkgs.at(0),aptPercent,status);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief update_dbus::checkForUpdates
|
|
||||||
* 检测强制推送列表
|
|
||||||
*/
|
|
||||||
QStringList update_dbus::checkForUpdates(QStringList arg)
|
|
||||||
{
|
|
||||||
QDBusReply<QStringList> reply = interface_utils->call("CheckInstalledOrUpgrade",arg);
|
|
||||||
if (reply.isValid())
|
|
||||||
{
|
|
||||||
qDebug()<<"The upgradeable list:"<<reply.value();
|
|
||||||
return reply.value();
|
|
||||||
|
|
||||||
} else {
|
|
||||||
qDebug() << "Get upgradeable list failed, exit";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief update_dbus::checkForUpdateDect
|
|
||||||
* 检测系统更新
|
|
||||||
*/
|
|
||||||
bool update_dbus::checkForUpdateDect()
|
|
||||||
{
|
|
||||||
qDebug()<<"Start to check system upgrade ...";
|
|
||||||
connect(interface,SIGNAL(UpdateDetectFinished(bool, QStringList, QString, QString)),this,SLOT(UpdateDectSlot(bool, QStringList, QString, QString)));
|
|
||||||
QDBusReply<QVariantList> res = interface->asyncCall("UpdateDetect");
|
|
||||||
qDebug() << "UpdateDetect (mode: MODE_UPDATE_DETECT) ...";
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief update_dbus::installAndUpgrade
|
|
||||||
* 静默升级入口
|
|
||||||
*/
|
|
||||||
bool update_dbus::installAndUpgrade(QStringList pkgNames)
|
|
||||||
{
|
|
||||||
installpkgs = pkgNames;
|
|
||||||
|
|
||||||
//调用D-bus接口,安装软件
|
|
||||||
connect(interface,SIGNAL(UpdateDetectFinished(bool,QStringList,QString,QString)),this,SLOT(slotUpdateCache(bool,QStringList,QString,QString)));
|
|
||||||
// QDBusPendingCall call = interface_utils->asyncCall("InstallPackages","kylin-background-upgrade", installpkgs);
|
|
||||||
QDBusPendingCall call = interface->asyncCall("UpdateCache");
|
|
||||||
qDebug() << "UpdateCache (mode: MODE_UPDATE_CACHE) ..."; //MODE_UPDATE_CACHE
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void update_dbus::slotInstallFinish(bool status, QStringList pkgs,QString error,QString details)
|
|
||||||
{
|
|
||||||
emit UpdateInstallFinished(status,pkgs,error,details);
|
|
||||||
}
|
|
||||||
|
|
||||||
void update_dbus::UpdateDectSlot(bool status, QStringList pkgs,QString error,QString details)
|
|
||||||
{
|
|
||||||
emit UpdateDectFinished(status,pkgs,error,details);
|
|
||||||
}
|
|
||||||
|
|
||||||
void update_dbus::slotUpdateCache(bool status,QStringList pkgslist,QString errorstring,QString errorcode)
|
|
||||||
{
|
|
||||||
if (status) {
|
|
||||||
qDebug() << "MODE_UPDATE_CACHE finish .";
|
|
||||||
connect(interface,SIGNAL(UpdateInstallFinished(bool,QStringList,QString,QString)),this,SLOT(slotInstallFinish(bool,QStringList,QString,QString)));
|
|
||||||
interface->asyncCall("InstallPackages", installpkgs);
|
|
||||||
} else {
|
|
||||||
qDebug() << "Call UpdateCache (mode: MODE_UPDATE_CACHE) failed, exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief update_dbus::listenState
|
|
||||||
* 监听状态
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
bool update_dbus::listenState()
|
|
||||||
{
|
|
||||||
QDBusReply<bool> r4eply = interface->call("get_important_status");
|
|
||||||
return r4eply;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//连接电源的d-bus································
|
|
||||||
|
|
||||||
power_dbus::power_dbus(QObject *parent)
|
|
||||||
:QObject(parent)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
power_dbus::~power_dbus()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief power_dbus::initDbusaddrest
|
|
||||||
* 连接电源管理器的dbus,获取dbus路径
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
bool power_dbus::initDbusaddrest()
|
|
||||||
{
|
|
||||||
|
|
||||||
QStringList users;
|
|
||||||
QDBusInterface m_interface1( "org.freedesktop.UPower",
|
|
||||||
"/org/freedesktop/UPower",
|
|
||||||
"org.freedesktop.UPower",
|
|
||||||
QDBusConnection::systemBus() );
|
|
||||||
if (!m_interface1.isValid()) {
|
|
||||||
qDebug() << "< org.freedesktop.UPower > initialization failed!";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
QDBusReply<QList<QDBusObjectPath>> obj_reply = m_interface1.call("EnumerateDevices");
|
|
||||||
|
|
||||||
|
|
||||||
if (obj_reply.isValid()) {
|
|
||||||
for (QDBusObjectPath op : obj_reply.value())
|
|
||||||
users << op.path();
|
|
||||||
if (users.size()==1 || users.isEmpty()) {
|
|
||||||
qDebug()<<"Failed to obtain the remaining battery capacity, The built-in power supply cannot be detected ...";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
powerpath=users.at(1);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief power_dbus::getPower_Dbus
|
|
||||||
* 连接电源管理器的dbus
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
QString power_dbus::getPower_Dbus()
|
|
||||||
{
|
|
||||||
QDBusInterface m_interface( "org.freedesktop.UPower",
|
|
||||||
powerpath,
|
|
||||||
"org.freedesktop.DBus.Properties",
|
|
||||||
QDBusConnection::systemBus());
|
|
||||||
|
|
||||||
if (!m_interface.isValid()) {
|
|
||||||
qDebug() << "电源管理器dbus接口初始化失败";
|
|
||||||
return "false";
|
|
||||||
}
|
|
||||||
|
|
||||||
QDBusReply<QVariant> obj_reply = m_interface.call("Get","org.freedesktop.UPower.Device","Percentage");
|
|
||||||
QString Ele_surplus=obj_reply.value().toString();
|
|
||||||
return Ele_surplus;
|
|
||||||
}
|
|
||||||
|
|
||||||
//判断是否为活跃用户的dbus·······························
|
|
||||||
|
|
||||||
UserIdStatus::UserIdStatus(QObject *parent)
|
|
||||||
:QObject(parent)
|
|
||||||
{
|
|
||||||
initUserIdStatus();
|
|
||||||
}
|
|
||||||
|
|
||||||
UserIdStatus::~UserIdStatus()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void UserIdStatus::initConnectionInfo()
|
|
||||||
{
|
|
||||||
// qRegisterMetaType<MyClass>("MyClass");
|
|
||||||
// QDBusInterface m_interface1("org.freedesktop.login1",
|
|
||||||
// "/org/freedesktop/login1",
|
|
||||||
// "org.freedesktop.login1.Manager",
|
|
||||||
// QDBusConnection::systemBus() );
|
|
||||||
// if (!m_interface1.isValid()) {
|
|
||||||
// qDebug() << "dbus接口初始化失败";
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// QDBusMessage res = m_interface1.call("ListUsers");
|
|
||||||
|
|
||||||
// qDebug() << res.arguments().at(0).value<MyClass>().IDName;
|
|
||||||
// qDebug()<<res;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UserIdStatus::initUserIdStatus()
|
|
||||||
{
|
|
||||||
static int uid = -1;
|
|
||||||
uid = getuid();
|
|
||||||
QString uIDaddress = QString("/org/freedesktop/login1/user/_%1").arg(uid);
|
|
||||||
QDBusInterface m_interface1("org.freedesktop.login1",
|
|
||||||
uIDaddress,
|
|
||||||
"org.freedesktop.DBus.Properties",
|
|
||||||
QDBusConnection::systemBus());
|
|
||||||
if (!m_interface1.isValid()) {
|
|
||||||
qDebug() << "dbus接口初始化失败";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QDBusReply<QVariant> res = m_interface1.call("Get","org.freedesktop.login1.User","State");
|
|
||||||
UIDStatus = res.value().toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,160 +0,0 @@
|
||||||
#ifndef TRAYDBUSSERVICE_H
|
|
||||||
#define TRAYDBUSSERVICE_H
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
#include <QDBusInterface>
|
|
||||||
#include <QDBusReply>
|
|
||||||
#include <QDBusMessage>
|
|
||||||
#include <QDBusReply>
|
|
||||||
#include <QDBusConnection>
|
|
||||||
#include <QTimer>
|
|
||||||
#include <QDebug>
|
|
||||||
#include <QFile>
|
|
||||||
#include <QMutexLocker>
|
|
||||||
|
|
||||||
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
class traydbusservice : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
//定义Interface名称为com.scorpio.test.value
|
|
||||||
Q_CLASSINFO("D-Bus Interface", "com.scorpio.test.value")
|
|
||||||
public:
|
|
||||||
traydbusservice();
|
|
||||||
|
|
||||||
QStringList crucial;
|
|
||||||
QStringList important;
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
QStringList getCrucial();
|
|
||||||
QStringList getImportant();
|
|
||||||
|
|
||||||
void connectSuccessslots();
|
|
||||||
void quitslots();
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
Q_SIGNALS: // SIGNALS
|
|
||||||
QString ready(QString ret);
|
|
||||||
QString connectSuccessSignal();
|
|
||||||
QString quitsignal();
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
//连接源管理器的d-bus································
|
|
||||||
|
|
||||||
class source_dbus: public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit source_dbus(QObject *parent = nullptr);
|
|
||||||
~source_dbus();
|
|
||||||
QString serialNumber;
|
|
||||||
QTimer *connectTimer;
|
|
||||||
int num=0;
|
|
||||||
static source_dbus *getInstance();
|
|
||||||
QDBusInterface *interface1; //连接源更新管理器的D-bus
|
|
||||||
|
|
||||||
bool initSource_Dbus();
|
|
||||||
static source_dbus *sourceMutual; //UpdateDbus类静态对象
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void connectDbus();
|
|
||||||
|
|
||||||
Q_SIGNALS:
|
|
||||||
void ready();
|
|
||||||
};
|
|
||||||
|
|
||||||
//连接更新管理器的d-bus································
|
|
||||||
|
|
||||||
class update_dbus: public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit update_dbus(QObject *parent = nullptr);
|
|
||||||
~update_dbus();
|
|
||||||
static update_dbus *getInstance();
|
|
||||||
QDBusInterface *interface; //连接更新管理器的D-bus
|
|
||||||
QDBusInterface *interface_utils; //kylin-system-updater utils
|
|
||||||
void initUpdate_Dbus();
|
|
||||||
static update_dbus *updateMutual; //UpdateDbus类静态对象
|
|
||||||
QStringList checkForUpdates(QStringList arg); //检测是否有更新
|
|
||||||
bool checkForUpdateDect(); //检测系统更新
|
|
||||||
bool installAndUpgrade(QStringList pkgNames); //静默升级入口
|
|
||||||
QTimer *timer;
|
|
||||||
|
|
||||||
bool aptD_busStatus=true; //发送状态的标志位
|
|
||||||
|
|
||||||
bool listenState();
|
|
||||||
QStringList installpkgs;
|
|
||||||
Q_SIGNALS:
|
|
||||||
void ready();
|
|
||||||
void aptAppNames_Percentsignal(QString arg,int32_t args,QString state); //发送正在下载安装的包名以及进度
|
|
||||||
void dowloadStart();
|
|
||||||
void UpdateInstallFinished(bool,QStringList,QString,QString);
|
|
||||||
void UpdateDectFinished(bool,QStringList,QString,QString);
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void getsignal(QStringList, int, QString, QString);
|
|
||||||
void slotUpdateCache(bool,QStringList,QString,QString);
|
|
||||||
void slotInstallFinish(bool,QStringList,QString,QString);
|
|
||||||
void UpdateDectSlot(bool,QStringList,QString,QString);
|
|
||||||
};
|
|
||||||
|
|
||||||
//连接电源的d-bus································
|
|
||||||
|
|
||||||
class power_dbus: public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
power_dbus(QObject *parent = nullptr);
|
|
||||||
~power_dbus();
|
|
||||||
QDBusInterface *interface; //连接更新管理器的D-bus
|
|
||||||
bool initDbusaddrest();
|
|
||||||
QString getPower_Dbus();
|
|
||||||
QString powerpath;
|
|
||||||
|
|
||||||
|
|
||||||
Q_SIGNALS:
|
|
||||||
void ready();
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
//判断是否为活跃用户的dbus·······························
|
|
||||||
|
|
||||||
|
|
||||||
class MyClass
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint32_t uidnum;
|
|
||||||
QString IDName;
|
|
||||||
QDBusObjectPath address;
|
|
||||||
};
|
|
||||||
Q_DECLARE_METATYPE(MyClass)
|
|
||||||
|
|
||||||
class UserIdStatus: public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
UserIdStatus(QObject *parent = nullptr);
|
|
||||||
~UserIdStatus();
|
|
||||||
QString UIDStatus;
|
|
||||||
void initConnectionInfo();
|
|
||||||
void initUserIdStatus();
|
|
||||||
|
|
||||||
Q_SIGNALS:
|
|
||||||
void ready();
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif // TRAYDBUSSERVICE_H
|
|
|
@ -1,750 +0,0 @@
|
||||||
#include "updatehandle.h"
|
|
||||||
#include <iostream>
|
|
||||||
#include <QProcess>
|
|
||||||
|
|
||||||
updatehandle::updatehandle(QString getnum1,QWidget *parent) : QWidget(parent)
|
|
||||||
{
|
|
||||||
argnum = getnum1;
|
|
||||||
|
|
||||||
initTranslator(); //加载翻译文件
|
|
||||||
getpower(); //获取电量值
|
|
||||||
readconf(); //读取配置文件设定值
|
|
||||||
initDbus(); //初始化dbus
|
|
||||||
initUI(argnum); //初始化托盘程序
|
|
||||||
}
|
|
||||||
|
|
||||||
updatehandle::~updatehandle()
|
|
||||||
{
|
|
||||||
qDebug() << Q_FUNC_INFO << __LINE__;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::initTranslator
|
|
||||||
* 加载翻译文件
|
|
||||||
*/
|
|
||||||
void updatehandle::initTranslator()
|
|
||||||
{
|
|
||||||
QTranslator *translator = new QTranslator;
|
|
||||||
if (translator->load(QLocale(), QLatin1String("kylin-background-upgrade"), QLatin1String("_"), QLatin1String("/usr/share/kylin-background-upgrade"))) {
|
|
||||||
QApplication::installTranslator(translator);
|
|
||||||
} else {
|
|
||||||
qDebug() << "cannot load translator kylin-background-upgrade_" << QLocale::system().name() << ".qm!";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::getpower
|
|
||||||
* 获取电量值
|
|
||||||
*/
|
|
||||||
void updatehandle::getpower()
|
|
||||||
{
|
|
||||||
//获取电量信息
|
|
||||||
Power_dbus = new power_dbus(this);
|
|
||||||
powerState = Power_dbus->initDbusaddrest();
|
|
||||||
if (powerState) {
|
|
||||||
powerNum = Power_dbus->getPower_Dbus();
|
|
||||||
qDebug()<<"电脑电量值为:"<<powerNum;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::initDbus
|
|
||||||
* 初始化dbus
|
|
||||||
*/
|
|
||||||
void updatehandle::initDbus()
|
|
||||||
{
|
|
||||||
UserIdStatus *arg = new UserIdStatus(); //查看当前是否为用户操作的用户
|
|
||||||
if(arg->UIDStatus == "online") {
|
|
||||||
qDebug()<<"非活跃窗口,禁止启动";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
m_updateMutual = update_dbus::getInstance(); //初始化更新管理器d-bus
|
|
||||||
m_sourceMutual = source_dbus::getInstance(); //初始化源管理器d-bus
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::initUI
|
|
||||||
* 初始化界面类
|
|
||||||
*/
|
|
||||||
void updatehandle::initUI(QString argnum)
|
|
||||||
{
|
|
||||||
timerDownload = new QTimer(this);
|
|
||||||
connect(timerDownload, SIGNAL(timeout()), this, SLOT(downloadTimeout()));
|
|
||||||
|
|
||||||
if(argnum.contains("--check-immediately")){
|
|
||||||
qDebug()<<"exec --check-immediately";
|
|
||||||
} else if(argnum.contains("--check-upgrade")) {
|
|
||||||
qDebug()<<"exec --check-upgrade";
|
|
||||||
} else {
|
|
||||||
qDebug()<<"exec slient.";
|
|
||||||
}
|
|
||||||
|
|
||||||
trayIcon = new trayicon(this);
|
|
||||||
bool ignore_or_delay = ignoreOrDelay(argnum.contains("--check-immediately",Qt::CaseInsensitive));
|
|
||||||
choice_window = new updatewidget(ignore_or_delay);//更新选择页面
|
|
||||||
tip_window = new updateTip(); //静默升级提示
|
|
||||||
|
|
||||||
if (argnum == "") {
|
|
||||||
//监听连接源管理器d-bus
|
|
||||||
//监听托盘点击事件,3:单击,2:双击,1:右键
|
|
||||||
connect(trayIcon,&trayicon::activated, this,&updatehandle::onActivated);
|
|
||||||
connect(m_sourceMutual,&source_dbus::ready,this,&updatehandle::getTemplateList);
|
|
||||||
m_sourceMutual->connectDbus();
|
|
||||||
} else if (argnum.contains("--check-upgrade",Qt::CaseInsensitive)||ignore_or_delay) {
|
|
||||||
//连接关闭功能槽函数
|
|
||||||
connect(choice_window,&updatewidget::disAgreeBtnSignals,this,&updatehandle::execslots);
|
|
||||||
UpdateDectCheck(ignore_or_delay);
|
|
||||||
} else {
|
|
||||||
qDebug()<<"No update,exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::tray_Show
|
|
||||||
* 启动托盘选择页面
|
|
||||||
*/
|
|
||||||
void updatehandle::tray_Show()
|
|
||||||
{
|
|
||||||
if(checktime()){
|
|
||||||
if (!m_updateMutual->listenState()) {
|
|
||||||
if (m_getsql()) {
|
|
||||||
qDebug()<<"m_getsql 的值为true";
|
|
||||||
choice_window->update_lab->setText(tr("System update"));
|
|
||||||
if (argnum != "update") {
|
|
||||||
choice_window->updateWidgetShow();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qDebug()<<"更新管理器关闭检测更新,托盘程序结束";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qDebug()<<"更新管理器已运行,程序退出";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qDebug()<<"配置文件设定时间未到,程序退出";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::checktime
|
|
||||||
* 进行当前时间与配置文件时间比对
|
|
||||||
* @return
|
|
||||||
* true: 当前时间大于配置文件时间
|
|
||||||
* false: 当前时间小于配置文件时间
|
|
||||||
*/
|
|
||||||
bool updatehandle::checktime()
|
|
||||||
{
|
|
||||||
timersetting->beginGroup(QString::fromLocal8Bit("Timer"));
|
|
||||||
CheckUpgradeTime = timersetting->value("CheckUpgradeTime").toString();
|
|
||||||
QDateTime datetime = QDateTime::fromString(CheckUpgradeTime, "yyyy-MM-dd hh:mm:ss");
|
|
||||||
//结束组
|
|
||||||
timersetting->endGroup();
|
|
||||||
QDateTime Nowtime = QDateTime::currentDateTime(); //获取系统现在的时间
|
|
||||||
qint64 nSecs = Nowtime.secsTo(datetime); //对比
|
|
||||||
qDebug()<<"Get timing time: "<<CheckUpgradeTime;
|
|
||||||
qDebug()<<"Current system time: "<<Nowtime;
|
|
||||||
qDebug()<<"nSecs"<<nSecs;
|
|
||||||
if(nSecs == 0){
|
|
||||||
qDebug()<<"The timing configuration file is abnormal,ckeck upgrade ...";
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if(nSecs < 0){
|
|
||||||
qDebug()<<"Check upgrade starts when the scheduled time is reached.";
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::m_getsql
|
|
||||||
* 获取更新管理器是否自动检测的数据
|
|
||||||
* @return
|
|
||||||
* true:自动检测
|
|
||||||
* false:关闭自动检测
|
|
||||||
*/
|
|
||||||
bool updatehandle::m_getsql()
|
|
||||||
{
|
|
||||||
db = QSqlDatabase::addDatabase("QSQLITE");
|
|
||||||
db.setDatabaseName("/var/cache/kylin-system-updater/kylin-system-updater.db");
|
|
||||||
if (!db.open()) {
|
|
||||||
qDebug()<<"open sql error";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
QSqlQuery query;
|
|
||||||
query.exec("SELECT * FROM display");
|
|
||||||
while(query.next()){
|
|
||||||
QString tmp=query.value(3).toString();
|
|
||||||
if (tmp == "true") {
|
|
||||||
return true;
|
|
||||||
} else if (tmp == "false") {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
qDebug()<<"从数据库未读到正确的标志信息";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::onActivated
|
|
||||||
* 接收点击时间的槽函数
|
|
||||||
* @param reason
|
|
||||||
* reason:传入点击事件信息
|
|
||||||
*/
|
|
||||||
void updatehandle::onActivated(trayicon::ActivationReason reason)
|
|
||||||
{
|
|
||||||
if(tip_window->isHidden()){
|
|
||||||
QPoint pt=cursor().pos();
|
|
||||||
tip_window->move(pt.x(),pt.y()-45);
|
|
||||||
tip_window->show();
|
|
||||||
} else {
|
|
||||||
tip_window->hide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::getTemplateList
|
|
||||||
* 获取源管理器文件中的可选更新与强制更新列表
|
|
||||||
*/
|
|
||||||
void updatehandle::getTemplateList()
|
|
||||||
{
|
|
||||||
qDebug()<<"Parses the optional update list and the mandatory update list ...";
|
|
||||||
QMap<QString,QStringList> updatedata;
|
|
||||||
QString str1;
|
|
||||||
QString str2;
|
|
||||||
QStringList m_crucial;
|
|
||||||
QFile file1("/var/lib/kylin-software-properties/template/crucial.list");
|
|
||||||
if (!file1.open(QIODevice::ReadOnly | QIODevice::Text)){
|
|
||||||
qDebug()<<"cat not open file crucial.list";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
while (!file1.atEnd()) {
|
|
||||||
QByteArray line = file1.readLine();
|
|
||||||
str1 += QString(line);
|
|
||||||
}
|
|
||||||
str1.replace(QString("\n"), QString(""));
|
|
||||||
m_crucial = str1.split(QRegExp("[ ]"));
|
|
||||||
m_crucial.removeAll(QString(""));
|
|
||||||
qDebug()<<"The crucial lists: "<<m_crucial;
|
|
||||||
|
|
||||||
QStringList m_important;
|
|
||||||
QFile file2("/var/lib/kylin-software-properties/template/important.list");
|
|
||||||
if (!file2.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
|
||||||
qDebug()<<"cat not open file important.list";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
while (!file2.atEnd()) {
|
|
||||||
QByteArray line = file2.readLine();
|
|
||||||
str2 += QString(line);
|
|
||||||
}
|
|
||||||
str2.replace(QString("\n"), QString(""));
|
|
||||||
m_important = str2.split(QRegExp("[ ]"));
|
|
||||||
m_important.removeAll(QString(""));
|
|
||||||
qDebug()<<"The important lists: "<<m_important;
|
|
||||||
|
|
||||||
updatedata.insert("crucial",m_crucial);
|
|
||||||
updatedata.insert("important",m_important);
|
|
||||||
|
|
||||||
processData(updatedata);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::processData
|
|
||||||
* 处理获取的更新数据
|
|
||||||
* @param data
|
|
||||||
* 传入可选更新与强制更新列表
|
|
||||||
*/
|
|
||||||
void updatehandle::processData(QMap<QString,QStringList> data)
|
|
||||||
{
|
|
||||||
qDebug()<<"Monitor the installation progress and status signal ...";
|
|
||||||
//ksu获取进度,状态
|
|
||||||
connect(m_updateMutual,&update_dbus::UpdateInstallFinished,this,&updatehandle::InstallFinsih);
|
|
||||||
QStringList crucial;
|
|
||||||
QMap<QString,QStringList>::iterator it;
|
|
||||||
for (it = data.begin();it != data.end();it++) {
|
|
||||||
if (it.key() == "crucial") {
|
|
||||||
crucial = it.value();
|
|
||||||
} else if (it.key() == "important") {
|
|
||||||
important = it.value();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
qDebug()<<"Checking silent upgrade list: "<<crucial;
|
|
||||||
QStringList checkCrucialAll;
|
|
||||||
|
|
||||||
checkCrucialAll = m_updateMutual->checkForUpdates(crucial);
|
|
||||||
if (!checkCrucialAll.isEmpty()) {
|
|
||||||
handleCrucial(checkCrucialAll);
|
|
||||||
} else {
|
|
||||||
qDebug() << "Silent upgrade list is empty, exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::handleCrucial
|
|
||||||
* 处理静默升级包
|
|
||||||
* @param checkCrucialAll
|
|
||||||
* 传入包列表
|
|
||||||
*/
|
|
||||||
void updatehandle::handleCrucial(QStringList checkCrucialAll)
|
|
||||||
{
|
|
||||||
QStringList crucialPackageSize;
|
|
||||||
QStringList crucialPackage;
|
|
||||||
|
|
||||||
if (checkCrucialAll.count()%2 != 0) {
|
|
||||||
qDebug()<<"The format of the silent upgrade list is incorrect, exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
if (argnum != "update") {
|
|
||||||
//提取包名与大小信息
|
|
||||||
for (int i=0;i<checkCrucialAll.count();i+=2) {
|
|
||||||
crucialPackage.append(checkCrucialAll.at(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i=1;i<checkCrucialAll.count();i+=2) {
|
|
||||||
crucialPackageSize.append(checkCrucialAll.at(i));
|
|
||||||
}
|
|
||||||
checkCrucial = crucialPackage;
|
|
||||||
qDebug()<<"Checking for inactivity in silent upgrading ...";
|
|
||||||
timerDownload->start(20*60*1000);
|
|
||||||
if (powerState) { //判断是否获取到电量
|
|
||||||
if (powerNum.toInt()<powerSize) { //判断电量是否达到警戒值
|
|
||||||
qDebug()<<"超出设定电源警戒值,判断包大小是否符合继续下载条件";
|
|
||||||
if (packageDownOrNot(crucialPackageSize)) {
|
|
||||||
notify_send(tr("The system is updating silently"));
|
|
||||||
trayIcon->setVisible(true);
|
|
||||||
qDebug()<<"The system is updating silently ...";
|
|
||||||
m_updateMutual->installAndUpgrade(crucialPackage);
|
|
||||||
} else {
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
notify_send(tr("The system is updating silently"));
|
|
||||||
trayIcon->setVisible(true);
|
|
||||||
qDebug()<<"The system is updating silently ...";
|
|
||||||
m_updateMutual->installAndUpgrade(crucialPackage);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
notify_send(tr("The system is updating silently"));
|
|
||||||
trayIcon->setVisible(true);
|
|
||||||
qDebug()<<"The system is updating silently ...";
|
|
||||||
m_updateMutual->installAndUpgrade(crucialPackage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::UpdateDectSlot
|
|
||||||
* 处理可选升级包
|
|
||||||
*/
|
|
||||||
void updatehandle::UpdateDectSlot(bool status,QStringList list,QString errorstring,QString errorcode)
|
|
||||||
{
|
|
||||||
if (!status) {
|
|
||||||
qDebug() << "Update Detect failed: " << QString("%1 %2").arg(errorstring).arg(errorcode);
|
|
||||||
exit(0);
|
|
||||||
} else {
|
|
||||||
if (list.length() == 0) {
|
|
||||||
qDebug() << "The software on this computer is up to date, exit!";
|
|
||||||
exit(0);
|
|
||||||
} else {
|
|
||||||
choice_window->update_lab->setText(tr("System update"));
|
|
||||||
if (argnum != "update") {
|
|
||||||
choice_window->updateWidgetShow();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//完成检测,刷新下次更新标志位
|
|
||||||
timersetting->beginGroup(QString::fromLocal8Bit("Timer"));
|
|
||||||
timersetting->setValue("GeneratRandomTime",true);
|
|
||||||
timersetting->setValue("CheckCompleted",true);
|
|
||||||
timersetting->sync();
|
|
||||||
timersetting->endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::UpdateDectCheck
|
|
||||||
* 处理可选升级包
|
|
||||||
*/
|
|
||||||
void updatehandle::UpdateDectCheck(bool _check_immediately)
|
|
||||||
{
|
|
||||||
//判断是否有系统更新
|
|
||||||
if(checktime() || !RandomizedExecute || _check_immediately){
|
|
||||||
if (m_getsql() || _check_immediately) {
|
|
||||||
qDebug()<<"Detection update has been opened ...";
|
|
||||||
connect(m_updateMutual,&update_dbus::UpdateDectFinished,this,&updatehandle::UpdateDectSlot);
|
|
||||||
bool ret= m_updateMutual->checkForUpdateDect();
|
|
||||||
} else {
|
|
||||||
qDebug()<<"Detection updates have been disabled, exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qDebug()<<"The scheduled time is not reached, exit.";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::ignoreOrDelays
|
|
||||||
* 处理可选升级包
|
|
||||||
*/
|
|
||||||
bool updatehandle::ignoreOrDelay(bool mode)
|
|
||||||
{
|
|
||||||
static char flagPath[64] = {0};
|
|
||||||
sprintf(flagPath, "/var/cache/kylin-update-manager/ignoreOrDelay");
|
|
||||||
bool ignore_or_delay = false;
|
|
||||||
QFile file(flagPath);
|
|
||||||
|
|
||||||
//判断是否完成第一步更新
|
|
||||||
if (access(flagPath, F_OK) == 0) { // flag文件存在且可写
|
|
||||||
qDebug()<<flagPath<<"is found!";
|
|
||||||
|
|
||||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
|
|
||||||
ignore_or_delay = false;
|
|
||||||
QByteArray line = file.readLine();
|
|
||||||
if(QString(line).contains("2107",Qt::CaseInsensitive)) {
|
|
||||||
ignore_or_delay = true;
|
|
||||||
qDebug()<<"The first step of the upgrade has been completed, Detection of the second step of the upgrade! [2107]";
|
|
||||||
// //需要清空文件
|
|
||||||
// file.close();
|
|
||||||
// file.open(QIODevice::Truncate);
|
|
||||||
// file.close();
|
|
||||||
// file.open(QIODevice::WriteOnly);
|
|
||||||
} else if (QString(line).contains("2203",Qt::CaseInsensitive)) {
|
|
||||||
ignore_or_delay = true;
|
|
||||||
qDebug()<<"The first step of the upgrade has been completed, Detection of the second step of the upgrade! [2203]";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qDebug()<<flagPath<<"isn't found!";
|
|
||||||
ignore_or_delay = false;
|
|
||||||
}
|
|
||||||
file.close();
|
|
||||||
return ignore_or_delay&&mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::packageDownOrNot
|
|
||||||
* 判断是否超出设定大小
|
|
||||||
* @param arg
|
|
||||||
* 传入包列表
|
|
||||||
* @return
|
|
||||||
* true:符合预定大小
|
|
||||||
* false:超出设定大小
|
|
||||||
*/
|
|
||||||
bool updatehandle::packageDownOrNot(QStringList arg)
|
|
||||||
{
|
|
||||||
qDebug()<<"开始检测包大小是否超出设定大小";
|
|
||||||
for (int i = 0 ;i<arg.count();i++) {
|
|
||||||
QString pagesize = arg.at(i);
|
|
||||||
if (pagesize.toFloat() > setPackageSize) {
|
|
||||||
qDebug()<<"包大小超出设定大小,程序退出";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
qDebug()<<"包大小符合预定大小";
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::register_dbus
|
|
||||||
*/
|
|
||||||
void updatehandle::register_dbus()
|
|
||||||
{
|
|
||||||
//建立到session bus的连接
|
|
||||||
QDBusConnection connection = QDBusConnection::sessionBus();
|
|
||||||
|
|
||||||
//在session bus上注册名为com.scorpio.test的服务
|
|
||||||
if (!connection.registerService("com.scorpio.test")) {
|
|
||||||
qDebug() << "error:" << connection.lastError().message();
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
object = new traydbusservice();
|
|
||||||
|
|
||||||
//注册名为/test/objects的对象,把类Object所有槽函数导出为object的method
|
|
||||||
connection.registerObject("/test/objectsd", object,QDBusConnection::ExportAllSlots| QDBusConnection :: ExportAllSignals);
|
|
||||||
|
|
||||||
connect(object,&traydbusservice::quitsignal,[=](){
|
|
||||||
emit execSignal();
|
|
||||||
});
|
|
||||||
|
|
||||||
connect(object,&traydbusservice::connectSuccessSignal,[=](){
|
|
||||||
dbusConnectStatus = true;
|
|
||||||
emit object->ready("success");
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::d_busStatus
|
|
||||||
* 判断下载状态的槽函数
|
|
||||||
* @param arg : Appname
|
|
||||||
* @param args : aptpercent
|
|
||||||
* @param state : state
|
|
||||||
*/
|
|
||||||
void updatehandle::d_busStatus(QString arg,int32_t args,QString state)
|
|
||||||
{
|
|
||||||
if (!checkCrucial.isEmpty() && messstate2) {
|
|
||||||
messstate2=false;
|
|
||||||
trayIcon->setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// qDebug()<<"下载进度:";
|
|
||||||
// qDebug()<<"Appname:"<<arg;
|
|
||||||
// qDebug()<<"aptpercent:"<<args;
|
|
||||||
}
|
|
||||||
|
|
||||||
void updatehandle::InstallFinsih(bool state,QStringList pkgname,QString error,QString reason)
|
|
||||||
{
|
|
||||||
bool _check_status;
|
|
||||||
timerDownload->stop();
|
|
||||||
//apt返回失败时判断是否安装成功
|
|
||||||
if (!state)
|
|
||||||
_check_status = package_installation_status(checkCrucial);
|
|
||||||
|
|
||||||
if(state || _check_status){
|
|
||||||
qDebug() << "Silent upgrade is complete, exit.";
|
|
||||||
notify_send(tr("The system has completed an important update, It is recommended that you restart immediately."));
|
|
||||||
}else{
|
|
||||||
QString errorstate = tr("update error");
|
|
||||||
QString errorName;
|
|
||||||
errorName = QString("%1 %2").arg(error).arg(errorstate);
|
|
||||||
qDebug() << "Silent update failed: "<<errorName;
|
|
||||||
notify_send(errorName);
|
|
||||||
}
|
|
||||||
trayIcon->setVisible(false);
|
|
||||||
tip_window->hide();
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool updatehandle::package_installation_status(QStringList pkgs)
|
|
||||||
{
|
|
||||||
QString pkgname;
|
|
||||||
QString cmd;
|
|
||||||
QProcess process;
|
|
||||||
bool status,status_single;
|
|
||||||
for (QStringList::iterator it = pkgs.begin(); it != pkgs.end(); ++it) {
|
|
||||||
pkgname = *it;
|
|
||||||
status_single = false;
|
|
||||||
cmd = QString("dpkg -l %1").arg(pkgname);
|
|
||||||
process.start(cmd);
|
|
||||||
process.waitForFinished();
|
|
||||||
QByteArray result_ = process.readAllStandardOutput();
|
|
||||||
if (QString::fromLocal8Bit(result_) != "") {
|
|
||||||
QStringList rets = QString::fromLocal8Bit(result_).split(QRegExp("[\n]"),QString::SkipEmptyParts);
|
|
||||||
for (QStringList::iterator it_ret = rets.begin(); it_ret != rets.end(); ++it_ret) {
|
|
||||||
QString ret;
|
|
||||||
ret = *it_ret;
|
|
||||||
if (ret.contains(pkgname) && ret.startsWith("ii")) {
|
|
||||||
status_single = true;
|
|
||||||
qDebug() << "pkg "<<pkgname<<",Installation succeeded.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!status_single) { //install failed
|
|
||||||
status = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
status = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (status_single)
|
|
||||||
status = true;
|
|
||||||
}
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::execslots
|
|
||||||
* 关闭界面槽函数
|
|
||||||
*/
|
|
||||||
void updatehandle::execslots()
|
|
||||||
{
|
|
||||||
//设置推迟检测,更新标志位
|
|
||||||
timersetting->beginGroup(QString::fromLocal8Bit("Timer"));
|
|
||||||
timersetting->setValue("CheckCompleted",false);
|
|
||||||
timersetting->setValue("GeneratRandomTime",false);
|
|
||||||
timersetting->sync();
|
|
||||||
timersetting->endGroup();
|
|
||||||
emit execSignal();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::notify_send
|
|
||||||
* 发送消息通知函数
|
|
||||||
* @param arg
|
|
||||||
* 发送的正文
|
|
||||||
*/
|
|
||||||
void updatehandle::notify_send(QString arg)
|
|
||||||
{
|
|
||||||
QDBusInterface iface("org.freedesktop.Notifications",
|
|
||||||
"/org/freedesktop/Notifications",
|
|
||||||
"org.freedesktop.Notifications",
|
|
||||||
QDBusConnection::sessionBus());
|
|
||||||
QList<QVariant> args;
|
|
||||||
args<<tr("kylin-background-upgrade")
|
|
||||||
<<((unsigned int) 0)
|
|
||||||
<<QString("kylin-update-manager")
|
|
||||||
<<tr("update") //显示的是什么类型的信息//系统升级
|
|
||||||
<<arg //显示的具体信息
|
|
||||||
<<QStringList()
|
|
||||||
<<QVariantMap()
|
|
||||||
<<(int)-1;
|
|
||||||
iface.callWithArgumentList(QDBus::AutoDetect,"Notify",args);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::downloadTimeout
|
|
||||||
* 下载时间超时函数
|
|
||||||
*/
|
|
||||||
void updatehandle::downloadTimeout()
|
|
||||||
{
|
|
||||||
qDebug() << "Download the timeout, exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::_secsTo
|
|
||||||
*/
|
|
||||||
int updatehandle::_secsTo(QString time1, QString time2)
|
|
||||||
{
|
|
||||||
QStringList time1Slot,time2Slot;
|
|
||||||
// **:**
|
|
||||||
if (time1.contains(":")){
|
|
||||||
time1Slot = time1.split(":");
|
|
||||||
}else{return -1;}
|
|
||||||
if (time2.contains(":")){
|
|
||||||
time2Slot = time2.split(":");
|
|
||||||
}else{return -1;}
|
|
||||||
if (time1Slot.at(0) > time2Slot.at(0)) {
|
|
||||||
return 1;
|
|
||||||
} else if (time1Slot.at(0) == time2Slot.at(0)) {
|
|
||||||
if (time1Slot.at(1) > time2Slot.at(1)) {
|
|
||||||
return 1;
|
|
||||||
} else if (time1Slot.at(1) == time2Slot.at(1)) {
|
|
||||||
return 0;
|
|
||||||
} else if (time1Slot.at(1) < time2Slot.at(1)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
} else if (time1Slot.at(0) < time2Slot.at(0)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::readconf
|
|
||||||
* 读取配置文件
|
|
||||||
*/
|
|
||||||
void updatehandle::readconf()
|
|
||||||
{
|
|
||||||
QMap<QString, QVariant> Timer;
|
|
||||||
Timer.insert("CheckCompleted", bool(false));
|
|
||||||
Timer.insert("CheckUpgradeTime", " ");
|
|
||||||
Timer.insert("CheckUpgradeTimeSlot", "14:30:00-16:30:00");
|
|
||||||
Timer.insert("GeneratRandomTime", bool(true));
|
|
||||||
Timer.insert("RandomizedExecute", bool(true));
|
|
||||||
QMap<QString, QVariant> Settings;
|
|
||||||
Settings.insert("powersize", int(1));
|
|
||||||
Settings.insert("setpackagesize", "999999999");
|
|
||||||
// qDebug()<<"Settings "<<QString::number(float(999999999),'f',2);
|
|
||||||
|
|
||||||
confPath = QDir::homePath()+"/.config/kylin-background-upgrade/kylin-background-upgrade-conf.ini";
|
|
||||||
QFileInfo fileInfo(confPath);
|
|
||||||
if (!fileInfo.exists()) {
|
|
||||||
qDebug()<<"The background-upgrade configuration file isn't exists.";
|
|
||||||
QMapIterator<QString, QVariant> ir_timer(Timer);
|
|
||||||
QMapIterator<QString, QVariant> ir_settings(Settings);
|
|
||||||
QSettings *code_conf = new QSettings(confPath,QSettings::IniFormat);
|
|
||||||
code_conf->beginGroup(QString::fromLocal8Bit("Timer"));
|
|
||||||
while(ir_timer.hasNext()){
|
|
||||||
ir_timer.next();
|
|
||||||
code_conf->setValue(ir_timer.key(), ir_timer.value());
|
|
||||||
}
|
|
||||||
code_conf->sync();
|
|
||||||
code_conf->endGroup();
|
|
||||||
code_conf->beginGroup(QString::fromLocal8Bit("Settings"));
|
|
||||||
while(ir_settings.hasNext()){
|
|
||||||
ir_settings.next();
|
|
||||||
code_conf->setValue(ir_settings.key(), ir_settings.value());
|
|
||||||
}
|
|
||||||
code_conf->sync();
|
|
||||||
code_conf->endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
timersetting = new QSettings(confPath,QSettings::IniFormat);
|
|
||||||
timersetting->beginGroup(QString::fromLocal8Bit("Timer"));
|
|
||||||
CheckUpgradeTime = timersetting->value("CheckUpgradeTime").toString();
|
|
||||||
CheckUpgradeTimeSlot = timersetting->value("CheckUpgradeTimeSlot").toString();
|
|
||||||
RandomizedExecute = timersetting->value("RandomizedExecute").toBool();
|
|
||||||
GeneratRandomTime = timersetting->value("GeneratRandomTime").toBool();
|
|
||||||
CheckCompleted = timersetting->value("CheckCompleted").toBool();
|
|
||||||
qDebug()<<"[ CheckUpgradeTime: "<<CheckUpgradeTime<<", CheckUpgradeTimeSlot: "<<CheckUpgradeTimeSlot \
|
|
||||||
<<", RandomizedExecute: "<<RandomizedExecute<<", GeneratRandomTime: "<<GeneratRandomTime<<", CheckUpgradeTime: "<<CheckUpgradeTime\
|
|
||||||
<<", CheckCompleted: "<<CheckCompleted<<" ]";
|
|
||||||
timersetting->endGroup();
|
|
||||||
|
|
||||||
timersetting->beginGroup(QString::fromLocal8Bit("Settings"));
|
|
||||||
powerSize = timersetting->value("powersize").toInt();
|
|
||||||
setPackageSize = timersetting->value("setpackagesize").toFloat();
|
|
||||||
timersetting->endGroup();
|
|
||||||
|
|
||||||
QStringList timeSlot = CheckUpgradeTimeSlot.split("-");
|
|
||||||
qDebug()<<"timeSlot "<<timeSlot;
|
|
||||||
//需要刷新检测时间
|
|
||||||
if (GeneratRandomTime) {
|
|
||||||
QDateTime time = QDateTime::currentDateTime(); //获取系统现在的时间
|
|
||||||
QString current_datetime = time.toString("yyyy-MM-dd hh:mm:ss"); //设置显示格式
|
|
||||||
QString current_date= time.toString("yyyy-MM-dd"); //设置显示格式
|
|
||||||
QString current_time= time.toString("hh:mm:ss"); //设置显示格式
|
|
||||||
QString nowtime;
|
|
||||||
QByteArray str2char2 = current_time.toLatin1(); // must
|
|
||||||
nowtime = str2char2.data();
|
|
||||||
|
|
||||||
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
|
|
||||||
int a = 0;
|
|
||||||
timersetting->beginGroup(QString::fromLocal8Bit("Timer"));
|
|
||||||
QString timing = current_date+' '+timeSlot.at(0);
|
|
||||||
QString start_timing = timeSlot.at(0);
|
|
||||||
QString end_timing = timeSlot.at(1);
|
|
||||||
QStringList start_timingSlot,end_timingSlot;
|
|
||||||
QString time0,time1,time2,time3;
|
|
||||||
if (start_timing.contains(":")){
|
|
||||||
start_timingSlot = start_timing.split(":");
|
|
||||||
time0 = start_timingSlot.at(0);
|
|
||||||
time1 = start_timingSlot.at(1);
|
|
||||||
}
|
|
||||||
if (end_timing.contains(":")){
|
|
||||||
end_timingSlot = end_timing.split(":");
|
|
||||||
time2 = end_timingSlot.at(0);
|
|
||||||
time3 = end_timingSlot.at(1);
|
|
||||||
}
|
|
||||||
int strayParameter = (time2.toInt()*60+time3.toInt())-(time0.toInt()*60+time1.toInt());
|
|
||||||
a = 0;
|
|
||||||
if (strayParameter<0){
|
|
||||||
qDebug() << "Time format error.";
|
|
||||||
}else if (strayParameter==0) {
|
|
||||||
qDebug() << "strayParameter: "<< strayParameter << ", a "<<a;
|
|
||||||
} else {
|
|
||||||
a = qrand()%(strayParameter);
|
|
||||||
qDebug() << "strayParameter: "<< strayParameter << ", a "<<a;
|
|
||||||
}
|
|
||||||
QDateTime bojb = QDateTime::fromString(timing,"yyyy-MM-dd hh:mm:ss").addSecs(a*60);
|
|
||||||
if (CheckCompleted) {
|
|
||||||
bojb = bojb.addDays(1);
|
|
||||||
timersetting->setValue("CheckCompleted",false);
|
|
||||||
}
|
|
||||||
QString timing_time = bojb.toString("yyyy-MM-dd hh:mm:ss").toLatin1().data();
|
|
||||||
|
|
||||||
timersetting->setValue("CheckUpgradeTime",timing_time);
|
|
||||||
timersetting->setValue("GeneratRandomTime",false);
|
|
||||||
qDebug()<< "CheckUpgradeTime "<<timing_time;
|
|
||||||
timersetting->sync();
|
|
||||||
timersetting->endGroup();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,661 +0,0 @@
|
||||||
#include "updatewidget.h"
|
|
||||||
#include "ui_updatewidget.h"
|
|
||||||
#include <QPainterPath>
|
|
||||||
#include <QToolTip>
|
|
||||||
#include <QHoverEvent>
|
|
||||||
#include "ukuistylehelper/ukuistylehelper.h"
|
|
||||||
#include "windowmanager/windowmanager.h"
|
|
||||||
|
|
||||||
#define PANEL_DBUS_SERVICE "com.ukui.panel.desktop"
|
|
||||||
#define PANEL_DBUS_PATH "/"
|
|
||||||
#define PANEL_DBUS_INTERFACE "com.ukui.panel.desktop"
|
|
||||||
#define UKUI_PANEL_SETTING "org.ukui.panel.settings"
|
|
||||||
|
|
||||||
#define DBUS_NAME "org.ukui.SettingsDaemon"
|
|
||||||
#define DBUS_PATH "/org/ukui/SettingsDaemon/wayland"
|
|
||||||
#define DBUS_INTERFACE "org.ukui.SettingsDaemon.wayland"
|
|
||||||
|
|
||||||
updatewidget::updatewidget(bool check_Tips, QWidget *parent) :
|
|
||||||
QWidget(parent),
|
|
||||||
ui(new Ui::Form)
|
|
||||||
{
|
|
||||||
ui->setupUi(this);
|
|
||||||
//设置出现在屏幕的位置以及大小
|
|
||||||
listenPanelChange();
|
|
||||||
QString xdg_session_type = qgetenv("XDG_SESSION_TYPE");
|
|
||||||
if (xdg_session_type != "wayland"){
|
|
||||||
initPanelDbusGsetting();
|
|
||||||
GetsAvailableAreaScreen();
|
|
||||||
qDebug()<<"not wayland";
|
|
||||||
bIsWayland = false;
|
|
||||||
} else {
|
|
||||||
//注释掉的是原先的接口,已经废除。采用原本的获取方式
|
|
||||||
// initset_window_position();
|
|
||||||
// set_window_position();
|
|
||||||
initPanelDbusGsetting();
|
|
||||||
GetsAvailableAreaScreen();
|
|
||||||
qDebug()<<"wayland";
|
|
||||||
bIsWayland = true;
|
|
||||||
}
|
|
||||||
_check_Tips = check_Tips;
|
|
||||||
//设置任务栏无显示
|
|
||||||
setWindowFlags(Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
|
|
||||||
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
|
|
||||||
|
|
||||||
update_lab = new QLabel();
|
|
||||||
icon_lab = new QLabel();
|
|
||||||
|
|
||||||
tip_lab = new QLabel();
|
|
||||||
tip_lab->setText(tr(" Updatable app detected on your system!"));
|
|
||||||
agreebtn = new FixButton();
|
|
||||||
delaybtn = new FixButton();
|
|
||||||
window_close = new QPushButton(this);
|
|
||||||
|
|
||||||
window_close->setIcon(QIcon::fromTheme("window-close-symbolic"));
|
|
||||||
window_close->setProperty("isWindowButton", 0x2);
|
|
||||||
window_close->setProperty("useIconHighlightEffect", 0x8);
|
|
||||||
window_close->setFlat(true);
|
|
||||||
window_close->setToolTip(tr("Close"));
|
|
||||||
window_close->installEventFilter(this);
|
|
||||||
connect(window_close, &QPushButton::clicked, this, &updatewidget::onClick_close_btn);
|
|
||||||
|
|
||||||
QPixmap icon(QIcon::fromTheme("ukui-control-center").pixmap(QSize(26,26)));
|
|
||||||
|
|
||||||
m_pfirstlayout = new QVBoxLayout();
|
|
||||||
m_labellayout = new QHBoxLayout();
|
|
||||||
m_psecondlayout = new QHBoxLayout();
|
|
||||||
m_pselectlayout = new QHBoxLayout();
|
|
||||||
comboBox = new QComboBox();
|
|
||||||
comboBox->clear();
|
|
||||||
strList<<tr("30 minutes later")<<tr("1 hour later")<<tr("5 hours later")<<tr("1 day later")<<tr("3 days later");
|
|
||||||
comboBox->addItems(strList);
|
|
||||||
comboBox->installEventFilter(this);
|
|
||||||
|
|
||||||
labelwidget = new QWidget();
|
|
||||||
selectWidget = new QWidget();
|
|
||||||
statwidget = new QWidget();
|
|
||||||
|
|
||||||
agreebtn->setText(tr("Update"),1);
|
|
||||||
agreebtn->installEventFilter(this);
|
|
||||||
delaybtn->setText(tr("Delay"),1);
|
|
||||||
delaybtn->installEventFilter(this);
|
|
||||||
|
|
||||||
connect(agreebtn,&QPushButton::clicked,this,&updatewidget::agreeBtnClicked);
|
|
||||||
connect(comboBox,SIGNAL(activated(int)),this,SLOT(comboBoxClicked(int)));
|
|
||||||
connect(delaybtn,&QPushButton::clicked,this,&updatewidget::delayBtnClicked);
|
|
||||||
|
|
||||||
icon_lab->setPixmap(icon);
|
|
||||||
icon_lab->setScaledContents(true);
|
|
||||||
icon_lab->setMaximumSize(26,26);
|
|
||||||
update_lab->setMaximumHeight(26);
|
|
||||||
update_lab->setContentsMargins(0,0,0,3);
|
|
||||||
window_close->setFixedSize(24,24);
|
|
||||||
window_close->setContentsMargins(0,0,0,3);
|
|
||||||
m_labellayout->addWidget(icon_lab);
|
|
||||||
m_labellayout->addWidget(update_lab);
|
|
||||||
m_labellayout->addStretch();
|
|
||||||
m_labellayout->addWidget(window_close);
|
|
||||||
m_labellayout->setContentsMargins(0,0,0,20);
|
|
||||||
labelwidget->setLayout(m_labellayout);
|
|
||||||
|
|
||||||
m_pselectlayout->addWidget(tip_lab);
|
|
||||||
m_pselectlayout->setContentsMargins(0,0,0,25);
|
|
||||||
selectWidget->setLayout(m_pselectlayout);
|
|
||||||
|
|
||||||
m_psecondlayout->addStretch();
|
|
||||||
comboBox->setFixedHeight(35);
|
|
||||||
comboBox->setMinimumWidth(135);
|
|
||||||
comboBox->setMaximumWidth(155);
|
|
||||||
agreebtn->setFixedSize(100,35);
|
|
||||||
if (_check_Tips)
|
|
||||||
m_psecondlayout->addWidget(delaybtn);
|
|
||||||
else
|
|
||||||
m_psecondlayout->addWidget(comboBox);
|
|
||||||
m_psecondlayout->addWidget(agreebtn);
|
|
||||||
m_psecondlayout->setSpacing(15); //set space between comboBox and btn
|
|
||||||
m_psecondlayout->setContentsMargins(0,0,12,12);
|
|
||||||
statwidget->setLayout(m_psecondlayout);
|
|
||||||
|
|
||||||
m_pfirstlayout->addWidget(labelwidget);
|
|
||||||
m_pfirstlayout->addWidget(selectWidget);
|
|
||||||
m_pfirstlayout->addWidget(statwidget);
|
|
||||||
|
|
||||||
m_pfirstlayout->setSpacing(2);
|
|
||||||
this->setLayout(m_pfirstlayout);
|
|
||||||
this->setFixedSize(435,160);
|
|
||||||
|
|
||||||
// QGSettings *settings;
|
|
||||||
// if(QGSettings::isSchemaInstalled("org.ukui.style")){
|
|
||||||
// settings = new QGSettings("org.ukui.style");
|
|
||||||
// connect(settings,&QGSettings::changed,this,&ActiveConnectionWidget::GSettingsChanges);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// const QByteArray transparency_id(TRANSPARENCY_SETTINGS);
|
|
||||||
// if(QGSettings::isSchemaInstalled(transparency_id)) {
|
|
||||||
// transparency = new QGSettings(transparency_id);
|
|
||||||
// }
|
|
||||||
// if(QGSettings::isSchemaInstalled(transparency_id)) {
|
|
||||||
// getTransparency();
|
|
||||||
// connect(transparency,&QGSettings::changed,this,&ActiveConnectionWidget::GSettingsChanges);
|
|
||||||
// }
|
|
||||||
|
|
||||||
this->setProperty("useStyleWindowManager", false);
|
|
||||||
this->setProperty("useSystemStyleBlur", true);
|
|
||||||
this->setAttribute(Qt::WA_TranslucentBackground, true);
|
|
||||||
this->setWindowOpacity(0.9);
|
|
||||||
|
|
||||||
// labelwidget->setStyleSheet("background-color:green;");
|
|
||||||
// update_lab->setStyleSheet("background-color:blue;");
|
|
||||||
// selectWidget->setStyleSheet("background-color:red;");
|
|
||||||
// statwidget->setStyleSheet("background-color:orange;");
|
|
||||||
// comboBox->setStyleSheet("background-color:violet;");
|
|
||||||
// agreebtn->setStyleSheet("background-color:yellow;");
|
|
||||||
}
|
|
||||||
|
|
||||||
updatewidget::~updatewidget()
|
|
||||||
{
|
|
||||||
qDebug() << Q_FUNC_INFO << __LINE__;
|
|
||||||
delete ui;
|
|
||||||
}
|
|
||||||
|
|
||||||
void updatewidget::updateWidgetShow()
|
|
||||||
{
|
|
||||||
this->show();
|
|
||||||
qDebug()<<"should show:"<<updateWidgetRect;
|
|
||||||
|
|
||||||
if (bIsWayland)
|
|
||||||
kdk::WindowManager::setGeometry(this->windowHandle(), updateWidgetRect);
|
|
||||||
else
|
|
||||||
this->setGeometry(updateWidgetRect);
|
|
||||||
}
|
|
||||||
|
|
||||||
void updatewidget::onClick_close_btn()
|
|
||||||
{
|
|
||||||
// emit disAgreeBtnSignals();
|
|
||||||
qDebug()<<"User Cancel reminder, exit tray program!";
|
|
||||||
// exit(0);
|
|
||||||
qApp->quit();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatewidget::eventFilter
|
|
||||||
* 事件过滤器
|
|
||||||
*/
|
|
||||||
bool updatewidget::eventFilter(QObject *obj, QEvent *event)
|
|
||||||
{
|
|
||||||
if (obj == this->window_close) { //指定window_close
|
|
||||||
if (event->type() == QEvent::HoverMove) {
|
|
||||||
QPushButton *close_btn = qobject_cast<QPushButton *>(obj);
|
|
||||||
if (close_btn) {
|
|
||||||
QToolTip::showText(QCursor::pos(), close_btn->toolTip());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (obj == this->agreebtn || obj == this->delaybtn) {
|
|
||||||
if (event->type() == QEvent::HoverMove) {
|
|
||||||
FixButton *btn = qobject_cast<FixButton *>(obj);
|
|
||||||
if (btn) {
|
|
||||||
QToolTip::showText(QCursor::pos(), btn->toolTip());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (obj == this->comboBox) {
|
|
||||||
if (event->type() == QEvent::HoverMove) {
|
|
||||||
QComboBox *comboBox = qobject_cast<QComboBox *>(obj);
|
|
||||||
if (comboBox) {
|
|
||||||
QToolTip::showText(QCursor::pos(), comboBox->toolTip());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return QWidget::eventFilter(obj, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatewidget::initPanelDbusGsetting
|
|
||||||
* 初始化与任务栏gsetting和dbus
|
|
||||||
*/
|
|
||||||
void updatewidget::initPanelDbusGsetting()
|
|
||||||
{
|
|
||||||
/* 链接任务栏Dbus接口,获取任务栏高度和位置 */
|
|
||||||
m_pServiceInterface = new QDBusInterface(PANEL_DBUS_SERVICE, PANEL_DBUS_PATH, PANEL_DBUS_INTERFACE, QDBusConnection::sessionBus());
|
|
||||||
m_pServiceInterface->setTimeout(2147483647);
|
|
||||||
connect(m_pPanelSetting, &QGSettings::changed,[=](QString key){
|
|
||||||
if ("panelposition" == key | "panelsize" == key) {
|
|
||||||
GetsAvailableAreaScreen();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void updatewidget::listenPanelChange()
|
|
||||||
{
|
|
||||||
/* 链接任务栏dgsetting接口 */
|
|
||||||
if(QGSettings::isSchemaInstalled(UKUI_PANEL_SETTING))
|
|
||||||
m_pPanelSetting = new QGSettings(UKUI_PANEL_SETTING);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatewidget::connectTaskBarDbus
|
|
||||||
* 链接任务栏dbus获取高度的接口
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
int updatewidget::connectTaskBarDbus()
|
|
||||||
{
|
|
||||||
int panelHeight = 46;
|
|
||||||
if (m_pPanelSetting != nullptr) {
|
|
||||||
QStringList keys = m_pPanelSetting->keys();
|
|
||||||
if (keys.contains("panelsize")) {
|
|
||||||
panelHeight = m_pPanelSetting->get("panelsize").toInt();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
QDBusMessage msg = m_pServiceInterface->call("GetPanelSize", QVariant("Hight"));
|
|
||||||
panelHeight = msg.arguments().at(0).toInt();
|
|
||||||
return panelHeight;
|
|
||||||
}
|
|
||||||
return panelHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatewidget::getPanelSite
|
|
||||||
* 获取任务栏状态位置下上左右
|
|
||||||
* @return
|
|
||||||
* 返回任务栏位置
|
|
||||||
*/
|
|
||||||
int updatewidget::getPanelSite()
|
|
||||||
{
|
|
||||||
int panelPosition = 0;
|
|
||||||
if (m_pPanelSetting != nullptr) {
|
|
||||||
QStringList keys = m_pPanelSetting->keys();
|
|
||||||
if (keys.contains("panelposition")) {
|
|
||||||
panelPosition = m_pPanelSetting->get("panelposition").toInt();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
QDBusMessage msg = m_pServiceInterface->call("GetPanelPosition", QVariant("Site"));
|
|
||||||
panelPosition = msg.arguments().at(0).toInt();
|
|
||||||
}
|
|
||||||
qDebug() << "Current Position of ukui panel: " << panelPosition;
|
|
||||||
return panelPosition;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatewidget::GetsAvailableAreaScreen
|
|
||||||
* 获取屏幕的可用区域高度和宽度并设置位置
|
|
||||||
*/
|
|
||||||
void updatewidget::GetsAvailableAreaScreen()
|
|
||||||
{
|
|
||||||
//如果取不到任务栏的高度,还是优先获取桌面分辨率,可用区域
|
|
||||||
if ((0 == connectTaskBarDbus()) && (0 == getPanelSite())) {
|
|
||||||
QScreen* pScreen = QGuiApplication::primaryScreen();
|
|
||||||
QRect DeskSize = pScreen->availableGeometry();
|
|
||||||
m_nScreenWidth = DeskSize.width(); //桌面分辨率的宽
|
|
||||||
m_nScreenHeight = DeskSize.height(); //桌面分辨率的高
|
|
||||||
} else {
|
|
||||||
//如果取到任务栏的高度,则取屏幕分辨率的高度
|
|
||||||
int h = connectTaskBarDbus();
|
|
||||||
QRect screenRect = QGuiApplication::primaryScreen()->geometry();
|
|
||||||
m_nScreenWidth = screenRect.width();
|
|
||||||
m_nScreenHeight = screenRect.height();
|
|
||||||
m_pPeonySite = getPanelSite();
|
|
||||||
switch (m_pPeonySite)
|
|
||||||
{
|
|
||||||
case updatewidget::PanelDown :
|
|
||||||
{
|
|
||||||
qDebug()<<"Taskbar coordinates: [ '"<<m_nScreenWidth-445<<"','"<< m_nScreenHeight-h-170<<"','"<<300<<"','"<<150 - 100<<"']";
|
|
||||||
updateWidgetRect = QRect(m_nScreenWidth-445, m_nScreenHeight-h-170, 300, 150-100);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case updatewidget::PanelUp:
|
|
||||||
{
|
|
||||||
qDebug()<<"任务栏在上方: 显示坐标为: "<<m_nScreenWidth - 445 << m_nScreenHeight - 170 << 300 << 150 - 100;
|
|
||||||
updateWidgetRect = QRect(m_nScreenWidth-445, m_nScreenHeight-170, 300, 150-100);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case updatewidget::PanelLeft:
|
|
||||||
{
|
|
||||||
qDebug()<<"任务栏在左侧: 显示坐标为: "<<m_nScreenWidth - 445 << m_nScreenHeight - 170 << 300 << 150 - 100;
|
|
||||||
updateWidgetRect = QRect(m_nScreenWidth-445, m_nScreenHeight-170, 300, 150-100);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case updatewidget::PanelRight:
|
|
||||||
{
|
|
||||||
qDebug()<<"任务栏在右侧: 显示坐标为: "<<m_nScreenWidth - 445 - h << m_nScreenHeight - 170 << 300 << 150 - 100;
|
|
||||||
updateWidgetRect = QRect(m_nScreenWidth-445, m_nScreenHeight-170, 300, 150-100);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
qDebug() << "Current screen width: " << m_nScreenWidth <<"; height:"<< m_nScreenHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int updatewidget::getTaskbarPos(QString str)
|
|
||||||
{
|
|
||||||
QDBusInterface interface( "com.ukui.panel.desktop",
|
|
||||||
"/",
|
|
||||||
"com.ukui.panel.desktop",
|
|
||||||
QDBusConnection::sessionBus() );
|
|
||||||
|
|
||||||
QDBusReply<int> reply = interface.call("GetPanelPosition", str);
|
|
||||||
return reply;
|
|
||||||
}
|
|
||||||
|
|
||||||
int updatewidget::getTaskbarHeight(QString str)
|
|
||||||
{
|
|
||||||
QDBusInterface interface( "com.ukui.panel.desktop",
|
|
||||||
"/",
|
|
||||||
"com.ukui.panel.desktop",
|
|
||||||
QDBusConnection::sessionBus() );
|
|
||||||
|
|
||||||
QDBusReply<int> reply = interface.call("GetPanelSize", str);
|
|
||||||
return reply;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int updatewidget::getScreenGeometry(QString methodName)
|
|
||||||
{
|
|
||||||
int res = 0;
|
|
||||||
QDBusMessage message = QDBusMessage::createMethodCall(DBUS_NAME,
|
|
||||||
DBUS_PATH,
|
|
||||||
DBUS_INTERFACE,
|
|
||||||
methodName);
|
|
||||||
QDBusMessage response = QDBusConnection::sessionBus().call(message);
|
|
||||||
if (response.type() == QDBusMessage::ReplyMessage) {
|
|
||||||
if(response.arguments().isEmpty() == false) {
|
|
||||||
int value = response.arguments().takeFirst().toInt();
|
|
||||||
res = value;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qDebug()<<methodName<<"called failed";
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
void updatewidget::initset_window_position()
|
|
||||||
{
|
|
||||||
connect(m_pPanelSetting, &QGSettings::changed,[=](QString key){
|
|
||||||
if ("panelposition" == key | "panelsize" == key) {
|
|
||||||
set_window_position();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void updatewidget::set_window_position()
|
|
||||||
{
|
|
||||||
QRect rect;
|
|
||||||
int availableWidth,totalWidth;
|
|
||||||
int availableHeight,totalHeight;
|
|
||||||
rect = this->geometry();
|
|
||||||
int priX = getScreenGeometry("x");
|
|
||||||
int priY = getScreenGeometry("y");
|
|
||||||
int priWid = getScreenGeometry("width");
|
|
||||||
int priHei = getScreenGeometry("height");
|
|
||||||
QRect screenGeometry = qApp->primaryScreen()->geometry();
|
|
||||||
|
|
||||||
availableWidth = priX + priWid;
|
|
||||||
availableHeight = priY + priHei;
|
|
||||||
totalHeight = screenGeometry.height();
|
|
||||||
totalWidth = screenGeometry.width();
|
|
||||||
|
|
||||||
int distance = 4;
|
|
||||||
int n = 0;
|
|
||||||
int m = 46;
|
|
||||||
|
|
||||||
n = getTaskbarPos("position");
|
|
||||||
m = getTaskbarHeight("height");
|
|
||||||
if(n == 0){
|
|
||||||
//任务栏在下侧
|
|
||||||
this->setGeometry(priWid-435-distance,availableHeight-160-m-distance,this->width(),this->height());
|
|
||||||
qDebug()<<"任务栏在下侧"<<priWid-435-distance<<" "<<availableHeight-160-m-distance <<" "<<this->width()<<" "<<this->height();
|
|
||||||
}else if(n == 1){
|
|
||||||
//任务栏在上侧
|
|
||||||
this->setGeometry(priWid-435-distance,availableHeight-160-distance,this->width(),this->height());
|
|
||||||
qDebug()<<"任务栏在上侧"<<priWid-435-distance<<" "<<availableHeight-160-distance <<" "<<this->width()<<" "<<this->height();
|
|
||||||
} else if (n == 2){
|
|
||||||
//任务栏在左侧
|
|
||||||
this->setGeometry(priWid-435-distance,availableHeight-160-distance,this->width(),this->height());
|
|
||||||
qDebug()<<"任务栏在左侧"<<priWid-435-distance<<" "<<availableHeight-160-distance <<" "<<this->width()<<" "<<this->height();
|
|
||||||
} else if (n == 3){
|
|
||||||
//任务栏在右侧
|
|
||||||
this->setGeometry(availableWidth-435-m-distance,availableHeight-160-distance,this->width(),this->height());
|
|
||||||
qDebug()<<"任务栏在右侧"<<availableWidth-435-m-distance<<" "<<availableHeight-160-distance <<" "<<this->width()<<" "<<this->height();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatewidget::insideTime
|
|
||||||
* 获取时间
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
char *updatewidget::insideTime()
|
|
||||||
{
|
|
||||||
qDebug()<<"current select: "<<this->comboBox->currentText();
|
|
||||||
QDateTime time = QDateTime::currentDateTime(); //获取系统现在的时间
|
|
||||||
QString str = time.toString("yyyy-MM-dd hh:mm:ss"); //设置显示格式
|
|
||||||
QByteArray str2char2 = str.toLatin1(); // must
|
|
||||||
char *nowtime = str2char2.data();
|
|
||||||
|
|
||||||
if(comboBox->currentText() == strList.at(0)) {
|
|
||||||
QDateTime time = QDateTime::currentDateTime(); //获取系统现在的时间
|
|
||||||
QString str = time.toString("yyyy-MM-dd hh:mm:ss"); //设置显示格式
|
|
||||||
QDateTime bojb = QDateTime::fromString(str,"yyyy-MM-dd hh:mm:ss").addSecs(1800);
|
|
||||||
QString str1 = bojb.toString("yyyy-MM-dd hh:mm:ss");
|
|
||||||
QByteArray str2char2 = str1.toLatin1(); // must
|
|
||||||
nowtime = str2char2.data();
|
|
||||||
return nowtime;
|
|
||||||
} else if (comboBox->currentText() == strList.at(1)) {
|
|
||||||
QDateTime time = QDateTime::currentDateTime(); //获取系统现在的时间
|
|
||||||
QString str = time.toString("yyyy-MM-dd hh:mm:ss"); //设置显示格式
|
|
||||||
QDateTime bojb = QDateTime::fromString(str,"yyyy-MM-dd hh:mm:ss").addSecs(3600);
|
|
||||||
QString str1 = bojb.toString("yyyy-MM-dd hh:mm:ss");
|
|
||||||
QByteArray str2char2 = str1.toLatin1(); // must
|
|
||||||
nowtime = str2char2.data();
|
|
||||||
return nowtime;
|
|
||||||
} else if (comboBox->currentText() == strList.at(2)) {
|
|
||||||
QDateTime time = QDateTime::currentDateTime(); //获取系统现在的时间
|
|
||||||
QString str = time.toString("yyyy-MM-dd hh:mm:ss"); //设置显示格式
|
|
||||||
QDateTime bojb = QDateTime::fromString(str,"yyyy-MM-dd hh:mm:ss").addSecs(18000);
|
|
||||||
QString str1 = bojb.toString("yyyy-MM-dd hh:mm:ss");
|
|
||||||
QByteArray str2char2 = str1.toLatin1(); // must
|
|
||||||
nowtime = str2char2.data();
|
|
||||||
return nowtime;
|
|
||||||
} else if (comboBox->currentText() == strList.at(3)) {
|
|
||||||
QDateTime time = QDateTime::currentDateTime(); //获取系统现在的时间
|
|
||||||
QString str = time.toString("yyyy-MM-dd hh:mm:ss"); //设置显示格式
|
|
||||||
QDateTime bojb = QDateTime::fromString(str,"yyyy-MM-dd hh:mm:ss").addDays(1);
|
|
||||||
QString str1 = bojb.toString("yyyy-MM-dd hh:mm:ss");
|
|
||||||
QByteArray str2char2 = str1.toLatin1(); // must
|
|
||||||
nowtime = str2char2.data();
|
|
||||||
return nowtime;
|
|
||||||
} else if (comboBox->currentText() == strList.at(4)) {
|
|
||||||
QDateTime time = QDateTime::currentDateTime(); //获取系统现在的时间
|
|
||||||
QString str = time.toString("yyyy-MM-dd hh:mm:ss"); //设置显示格式
|
|
||||||
QDateTime bojb = QDateTime::fromString(str,"yyyy-MM-dd hh:mm:ss").addDays(3);
|
|
||||||
QString str1 = bojb.toString("yyyy-MM-dd hh:mm:ss");
|
|
||||||
QByteArray str2char2 = str1.toLatin1(); // must
|
|
||||||
nowtime = str2char2.data();
|
|
||||||
return nowtime;
|
|
||||||
}
|
|
||||||
return nowtime;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
bool updatewidget::_is_openkylin()
|
|
||||||
{
|
|
||||||
QString OPENKYLIN_DISTTRIBUTOR = "Openkylin";
|
|
||||||
QString command = "lsb_release -i -s";
|
|
||||||
QProcess process;
|
|
||||||
process.start(command);
|
|
||||||
process.waitForFinished();
|
|
||||||
|
|
||||||
QString result = process.readAllStandardOutput();
|
|
||||||
int ret = result.left(OPENKYLIN_DISTTRIBUTOR.length()).compare(OPENKYLIN_DISTTRIBUTOR.left(OPENKYLIN_DISTTRIBUTOR.length()));
|
|
||||||
return (0 == ret)?true:false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatewidget::agreeBtnClicked
|
|
||||||
* 同意更新按钮槽函数
|
|
||||||
*/
|
|
||||||
void updatewidget::agreeBtnClicked()
|
|
||||||
{
|
|
||||||
emit agreeBtnSignals();
|
|
||||||
bool _is_2107 = true;
|
|
||||||
QFile file("/etc/os-release");
|
|
||||||
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
|
||||||
QString line;
|
|
||||||
QTextStream in(&file);
|
|
||||||
line = in.readLine();
|
|
||||||
while(!line.isNull()) {
|
|
||||||
line = in.readLine();
|
|
||||||
if(line.contains("KYLIN_RELEASE_ID")) {
|
|
||||||
_is_2107 = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file.close();
|
|
||||||
QProcess p(0);
|
|
||||||
|
|
||||||
p.startDetached("ukui-control-center -m upgrade");
|
|
||||||
qDebug()<<"exec -m upgrade";
|
|
||||||
|
|
||||||
p.waitForStarted();
|
|
||||||
qDebug()<<"Open the control panel and start updating immediately, exit tray program!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatewidget::comboBoxClicked
|
|
||||||
* 推迟框槽函数
|
|
||||||
*/
|
|
||||||
void updatewidget::comboBoxClicked(int num)
|
|
||||||
{
|
|
||||||
//判断是否有kylin-background-upgrade目录,没有则创建
|
|
||||||
QString toDir = QDir::homePath();
|
|
||||||
toDir += "/.config/kylin-background-upgrade/";
|
|
||||||
QDir dir(toDir);
|
|
||||||
if(! dir.exists()) {
|
|
||||||
dir.mkdir(toDir);//只创建一级子目录,即必须保证上级目录存在
|
|
||||||
}
|
|
||||||
|
|
||||||
toDir += "kylin-background-upgrade-conf.ini";
|
|
||||||
QFileInfo fileInfo(toDir);
|
|
||||||
if (!fileInfo.exists()) {
|
|
||||||
qDebug()<<"The periodic configuration file fails to be opened, exit!";
|
|
||||||
exit(0);
|
|
||||||
} else {
|
|
||||||
char *nowtime=insideTime();
|
|
||||||
qDebug() << "current timing: "<<nowtime;
|
|
||||||
timersettings = new QSettings(toDir,QSettings::IniFormat);
|
|
||||||
timersettings->beginGroup(QString::fromLocal8Bit("Timer"));
|
|
||||||
timersettings->setValue("CheckUpgradeTime",nowtime);
|
|
||||||
timersettings->sync();
|
|
||||||
timersettings->endGroup();
|
|
||||||
}
|
|
||||||
emit disAgreeBtnSignals();
|
|
||||||
qDebug()<<"Users do not update, exit tray program!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatewidget::delayBtnClicked
|
|
||||||
* 延迟提醒,退出
|
|
||||||
*/
|
|
||||||
void updatewidget::delayBtnClicked()
|
|
||||||
{
|
|
||||||
qDebug() << "User deferred updates, exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatewidget::paintEvent
|
|
||||||
* 样式绘画画家
|
|
||||||
* @param e
|
|
||||||
*/
|
|
||||||
void updatewidget::paintEvent(QPaintEvent *e)
|
|
||||||
{
|
|
||||||
QStyleOption opt;
|
|
||||||
opt.init(this);
|
|
||||||
QPainter p(this);
|
|
||||||
/* 获取当前剪贴板中字体的颜色,作为背景色;
|
|
||||||
* 白字体 --> 黑背景
|
|
||||||
* 黑字体 --> 白字体
|
|
||||||
*/
|
|
||||||
p.setBrush(opt.palette.color(QPalette::Base));
|
|
||||||
p.setOpacity(1);
|
|
||||||
p.setPen(QPen(QColor(220,220,220)));
|
|
||||||
QPainterPath path;
|
|
||||||
opt.rect.adjust(0,0,0,0);
|
|
||||||
path.addRoundedRect(opt.rect,12,12);
|
|
||||||
p.setRenderHint(QPainter::Antialiasing); //反锯齿
|
|
||||||
p.drawRoundedRect(opt.rect,12,12);
|
|
||||||
setProperty("blurRegion",QRegion(path.toFillPolygon().toPolygon()));
|
|
||||||
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
|
|
||||||
|
|
||||||
QFontMetrics fontMetrics(this->font());
|
|
||||||
QString current_str = comboBox->currentText();
|
|
||||||
int fontSize = fontMetrics.width(current_str);
|
|
||||||
int showTextSize = comboBox->width() - 32;
|
|
||||||
if (fontSize > showTextSize) {
|
|
||||||
QString elidedText = fontMetrics.elidedText(comboBox->currentText(), Qt::ElideRight, showTextSize);
|
|
||||||
comboBox->setItemText(comboBox->currentIndex(), elidedText);
|
|
||||||
comboBox->setToolTip(current_str);
|
|
||||||
}
|
|
||||||
QWidget::paintEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updateTip::updateTip
|
|
||||||
* 提示框
|
|
||||||
* @param parent
|
|
||||||
*/
|
|
||||||
updateTip::updateTip(QWidget *parent) :
|
|
||||||
QWidget(parent)
|
|
||||||
{
|
|
||||||
//设置任务栏无显示
|
|
||||||
setWindowFlags(Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
|
|
||||||
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint | Qt::Popup);
|
|
||||||
|
|
||||||
m_layout = new QVBoxLayout();
|
|
||||||
tipLabel = new QLabel();
|
|
||||||
tipLabel->setText(tr("The system is updating silently"));
|
|
||||||
m_layout->addWidget(tipLabel);
|
|
||||||
this->setLayout(m_layout);
|
|
||||||
this->setProperty("useSystemStyleBlur", true);
|
|
||||||
this->setAttribute(Qt::WA_TranslucentBackground, true);
|
|
||||||
this->setWindowOpacity(0.9);
|
|
||||||
}
|
|
||||||
|
|
||||||
updateTip::~updateTip()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updateTip::paintEvent
|
|
||||||
* 样式绘画画家
|
|
||||||
* @param e
|
|
||||||
*/
|
|
||||||
void updateTip::paintEvent(QPaintEvent *e)
|
|
||||||
{
|
|
||||||
QStyleOption opt;
|
|
||||||
opt.init(this);
|
|
||||||
QPainter p(this);
|
|
||||||
/* 获取当前剪贴板中字体的颜色,作为背景色;
|
|
||||||
* 白字体 --> 黑背景
|
|
||||||
* 黑字体 --> 白字体
|
|
||||||
*/
|
|
||||||
p.setBrush(opt.palette.color(QPalette::Base));
|
|
||||||
p.setOpacity(1);
|
|
||||||
p.setPen(QPen(QColor(220,220,220)));
|
|
||||||
QPainterPath path;
|
|
||||||
opt.rect.adjust(0,0,0,0);
|
|
||||||
path.addRoundedRect(opt.rect,4,4);
|
|
||||||
p.setRenderHint(QPainter::Antialiasing); //反锯齿
|
|
||||||
p.drawRoundedRect(opt.rect,4,4);
|
|
||||||
setProperty("blurRegion",QRegion(path.toFillPolygon().toPolygon()));
|
|
||||||
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
|
|
||||||
QWidget::paintEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1,131 +0,0 @@
|
||||||
#ifndef TRAYWIDGET_H
|
|
||||||
#define TRAYWIDGET_H
|
|
||||||
|
|
||||||
#include <QWidget>
|
|
||||||
#include <QApplication>
|
|
||||||
#include <QLabel>
|
|
||||||
#include <QPushButton>
|
|
||||||
#include <QHBoxLayout>
|
|
||||||
#include <QDebug>
|
|
||||||
#include <QPainter>
|
|
||||||
#include <QProcess>
|
|
||||||
#include <QComboBox>
|
|
||||||
#include <QDir>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <QDateTime>
|
|
||||||
#include <QPoint>
|
|
||||||
#include <QDBusInterface>
|
|
||||||
#include <QGSettings>
|
|
||||||
#include <QScreen>
|
|
||||||
#include <QDBusReply>
|
|
||||||
#include <QSettings>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <QMouseEvent>
|
|
||||||
#include "Button/fixbutton.h"
|
|
||||||
|
|
||||||
namespace Ui {
|
|
||||||
class Form;
|
|
||||||
}
|
|
||||||
|
|
||||||
class updatewidget : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit updatewidget(bool check_Tips, QWidget *parent = nullptr);
|
|
||||||
~updatewidget();
|
|
||||||
|
|
||||||
enum PanelStatePosition
|
|
||||||
{
|
|
||||||
PanelDown = 0,
|
|
||||||
PanelUp,
|
|
||||||
PanelLeft,
|
|
||||||
PanelRight
|
|
||||||
};
|
|
||||||
|
|
||||||
bool _check_Tips;
|
|
||||||
QLabel *update_lab;
|
|
||||||
QLabel *icon_lab;
|
|
||||||
QLabel *tip_lab;
|
|
||||||
QLabel *close_lab;
|
|
||||||
|
|
||||||
FixButton *agreebtn;
|
|
||||||
FixButton *delaybtn;
|
|
||||||
QPushButton *window_close;
|
|
||||||
QWidget *labelwidget;
|
|
||||||
QWidget *statwidget;
|
|
||||||
QWidget *selectWidget;
|
|
||||||
QStringList strList;
|
|
||||||
QPixmap *icon;
|
|
||||||
|
|
||||||
QVBoxLayout *m_pfirstlayout = nullptr;
|
|
||||||
QHBoxLayout *m_labellayout = nullptr;
|
|
||||||
QHBoxLayout *m_psecondlayout = nullptr;
|
|
||||||
QHBoxLayout *m_pselectlayout = nullptr;
|
|
||||||
|
|
||||||
QDBusInterface* m_pServiceInterface; // 获取任务栏的高度
|
|
||||||
QGSettings *m_pPanelSetting = nullptr;
|
|
||||||
QComboBox *comboBox;
|
|
||||||
|
|
||||||
int m_nScreenWidth; // 屏幕分辨率的宽
|
|
||||||
int m_nScreenHeight; // 屏幕分辨率的高
|
|
||||||
int m_pPeonySite; // 任务栏位置
|
|
||||||
QSettings *timersettings; //读取timer配置文件
|
|
||||||
QRect updateWidgetRect;
|
|
||||||
bool bIsWayland = false;
|
|
||||||
|
|
||||||
int connectTaskBarDbus();
|
|
||||||
int getPanelSite();
|
|
||||||
void GetsAvailableAreaScreen();
|
|
||||||
char *insideTime();
|
|
||||||
int getTaskbarPos(QString str);
|
|
||||||
int getTaskbarHeight(QString str);
|
|
||||||
int getScreenGeometry(QString methodName);
|
|
||||||
void set_window_position();
|
|
||||||
void initset_window_position();
|
|
||||||
void listenPanelChange();
|
|
||||||
void initPanelDbusGsetting(); // 初始化与任务栏gsetting和dbus
|
|
||||||
bool eventFilter(QObject *, QEvent *); // 添加事件过滤器声明
|
|
||||||
bool _is_openkylin();
|
|
||||||
void updateWidgetShow();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ui::Form *ui;
|
|
||||||
void paintEvent(QPaintEvent *e);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void agreeBtnSignals();
|
|
||||||
void disAgreeBtnSignals();
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void agreeBtnClicked();
|
|
||||||
void comboBoxClicked(int);
|
|
||||||
void delayBtnClicked();
|
|
||||||
void onClick_close_btn();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class updateTip : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
explicit updateTip(QWidget *parent = nullptr);
|
|
||||||
~updateTip();
|
|
||||||
QLabel *tipLabel;
|
|
||||||
QVBoxLayout *m_layout = nullptr;
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
|
||||||
void paintEvent(QPaintEvent *e);
|
|
||||||
|
|
||||||
|
|
||||||
signals:
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // TRAYWIDGET_H
|
|
Binary file not shown.
|
@ -1,112 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!DOCTYPE TS>
|
|
||||||
<TS version="2.1" language="bo_CN">
|
|
||||||
<context>
|
|
||||||
<name>Form</name>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.ui" line="16"/>
|
|
||||||
<source>Form</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>trayicon</name>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/trayicon.cpp" line="10"/>
|
|
||||||
<source>The system is updating silently</source>
|
|
||||||
<translation type="unfinished">རྒྱུད་ཁོངས་ཁ་རོག་གེར་རིམ་འགྱུར་བྱེད་སྒང་།</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>updateTip</name>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="548"/>
|
|
||||||
<source>The system is updating silently</source>
|
|
||||||
<translation type="unfinished">རྒྱུད་ཁོངས་ཁ་རོག་གེར་རིམ་འགྱུར་བྱེད་སྒང་།</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>updatehandle</name>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="116"/>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="355"/>
|
|
||||||
<source>System update</source>
|
|
||||||
<translation type="unfinished">རྒྱུད་ཁོངས་གསར་སྒྱུར་</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="319"/>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="327"/>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="333"/>
|
|
||||||
<source>The system is updating silently</source>
|
|
||||||
<translation type="unfinished">རྒྱུད་ཁོངས་ཁ་རོག་གེར་རིམ་འགྱུར་བྱེད་སྒང་།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="511"/>
|
|
||||||
<source>The system has completed an important update, It is recommended that you restart immediately.</source>
|
|
||||||
<translation type="unfinished">མ་ལག་གི་འགག་རྩའི་གསར་སྒྱུར་ཞིག་ལེགས་གྲུབ་དང་།བསམ་འཆར་ལ་ཁྱེད་རང་འཕྲལ་མར་བསྐྱར་འབྱེད་།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="513"/>
|
|
||||||
<source>update error</source>
|
|
||||||
<translation type="unfinished">རིམ་འཕར་འགྲུབ་མེད།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="589"/>
|
|
||||||
<source>kylin-background-upgrade</source>
|
|
||||||
<translation type="unfinished">རྒྱབ་སྟེགས་གསར་སྒྱུར་བྱ་རིམ།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="592"/>
|
|
||||||
<source>update</source>
|
|
||||||
<translation type="unfinished">རྒྱུད་ཁོངས་རིམ་སྤོར་</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>updatewidget</name>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="42"/>
|
|
||||||
<source> Updatable app detected on your system!</source>
|
|
||||||
<translation type="unfinished"> རྒྱུད་ཁོངས་གསར་སྒྱུར་རྣམ་གྲངས་</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="51"/>
|
|
||||||
<source>Close</source>
|
|
||||||
<translation type="unfinished">སྒོ་རྒྱག་པ་</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>30 minutes later</source>
|
|
||||||
<translation type="unfinished">ཕྱིར་འགྱངས་སྐར་མ་30།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>1 hour later</source>
|
|
||||||
<translation type="unfinished">ཆུ་ཚོད་གཅིག་ནར་འགྱངས་།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>5 hours later</source>
|
|
||||||
<translation type="unfinished">ཆུ་ཚོད་5ནར་འགྱངས་།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>1 day later</source>
|
|
||||||
<translation type="unfinished">ཉིན་གཅིག་ནར་འགྱངས་།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>3 days later</source>
|
|
||||||
<translation type="unfinished">ཉིན་གསུམ་ནར་འགྱངས་།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="69"/>
|
|
||||||
<source>Update</source>
|
|
||||||
<translation type="unfinished">ལམ་སང་གསར་སྒྱུར་</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="70"/>
|
|
||||||
<source>Delay</source>
|
|
||||||
<translation type="unfinished">ནར་འགྱངས།</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
</TS>
|
|
Binary file not shown.
|
@ -1,6 +0,0 @@
|
||||||
SOURCES += \
|
|
||||||
$$PWD/fixbutton.cpp \
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
$$PWD/fixbutton.h \
|
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
#include "fixbutton.h"
|
|
||||||
#include <QFontMetrics>
|
|
||||||
#include <QDebug>
|
|
||||||
|
|
||||||
FixButton::FixButton(QWidget *parent):
|
|
||||||
QPushButton(parent)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
FixButton::~FixButton()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void FixButton::paintEvent(QPaintEvent *event)
|
|
||||||
{
|
|
||||||
QFontMetrics fontMetrics(this->font());
|
|
||||||
int fontSize = fontMetrics.width(mStr);
|
|
||||||
int showTextSize = this->width() - 32;
|
|
||||||
if (fontSize > showTextSize) {
|
|
||||||
this->setText(fontMetrics.elidedText(mStr, Qt::ElideRight, showTextSize), false);
|
|
||||||
this->setToolTip(mStr);
|
|
||||||
} else {
|
|
||||||
this->setText(mStr, false);
|
|
||||||
this->setToolTip("");
|
|
||||||
}
|
|
||||||
QPushButton::paintEvent(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
void FixButton::setText(const QString & text, bool saveTextFlag)
|
|
||||||
{
|
|
||||||
if (saveTextFlag)
|
|
||||||
mStr = text;
|
|
||||||
QPushButton::setText(text);
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
#ifndef _FIXBUTTON_H_
|
|
||||||
#define _FIXBUTTON_H_
|
|
||||||
#include <QPushButton>
|
|
||||||
|
|
||||||
class FixButton : public QPushButton
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
FixButton(QWidget *parent = nullptr);
|
|
||||||
~FixButton();
|
|
||||||
void setText(const QString &text, bool saveTextFlag = true);
|
|
||||||
private:
|
|
||||||
void paintEvent(QPaintEvent *event);
|
|
||||||
|
|
||||||
private:
|
|
||||||
QString mStr;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,4 +0,0 @@
|
||||||
INCLUDEPATH += $$PWD
|
|
||||||
|
|
||||||
include(Button/button.pri)
|
|
||||||
#include(ComboBox/comboBox.pri)
|
|
|
@ -1,6 +1,6 @@
|
||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Name=update-notify-force
|
Name=update-notify-force
|
||||||
Exec=/usr/bin/kylin-update-notify --check-upgrade
|
Exec=/usr/bin/kylin-background-upgrade --check-upgrade
|
||||||
Type=Application
|
Type=Application
|
||||||
NoDisplay=true
|
NoDisplay=true
|
||||||
Comment=update-notify-force
|
Comment=update-notify-force
|
|
@ -1,4 +0,0 @@
|
||||||
TEMPLATE = subdirs
|
|
||||||
SUBDIRS = \
|
|
||||||
kylin-update-notify \
|
|
||||||
kylin-update-notify-immutable
|
|
|
@ -0,0 +1,388 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE QtCreatorProject>
|
||||||
|
<!-- Written by QtCreator 4.11.0, 2024-07-23T09:58:27. -->
|
||||||
|
<qtcreator>
|
||||||
|
<data>
|
||||||
|
<variable>EnvironmentId</variable>
|
||||||
|
<value type="QByteArray">{d046ac2c-d866-413d-b1bb-19624e2982b6}</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||||
|
<value type="int">0</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||||
|
<value type="QString" key="language">Cpp</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
||||||
|
<value type="QString" key="language">QmlJS</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||||
|
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||||
|
<valuemap type="QVariantMap"/>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">桌面</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">桌面</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{aec71f56-69fb-48e2-9c09-f1e33c937a53}</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">1</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/kylin/openkylin/build-kylin-update-notify-unknown-Debug</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/kylin/openkylin/build-kylin-update-notify-unknown-Release</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/kylin/openkylin/build-kylin-update-notify-unknown-Profile</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||||
|
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
|
||||||
|
<value type="QString">cpu-cycles</value>
|
||||||
|
</valuelist>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
|
||||||
|
<value type="int" key="Analyzer.Perf.Frequency">250</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
|
||||||
|
<value type="QString">-e</value>
|
||||||
|
<value type="QString">cpu-cycles</value>
|
||||||
|
<value type="QString">--call-graph</value>
|
||||||
|
<value type="QString">dwarf,4096</value>
|
||||||
|
<value type="QString">-F</value>
|
||||||
|
<value type="QString">250</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
|
||||||
|
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
|
||||||
|
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
|
||||||
|
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||||
|
<value type="int">0</value>
|
||||||
|
<value type="int">1</value>
|
||||||
|
<value type="int">2</value>
|
||||||
|
<value type="int">3</value>
|
||||||
|
<value type="int">4</value>
|
||||||
|
<value type="int">5</value>
|
||||||
|
<value type="int">6</value>
|
||||||
|
<value type="int">7</value>
|
||||||
|
<value type="int">8</value>
|
||||||
|
<value type="int">9</value>
|
||||||
|
<value type="int">10</value>
|
||||||
|
<value type="int">11</value>
|
||||||
|
<value type="int">12</value>
|
||||||
|
<value type="int">13</value>
|
||||||
|
<value type="int">14</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||||
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/kylin/openkylin/kylin-update-notify/kylin-update-notify-immutable/kylin-update-notify-immutable.pro</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/kylin/openkylin/kylin-update-notify/kylin-update-notify-immutable/kylin-update-notify-immutable.pro</value>
|
||||||
|
<value type="QString" key="RunConfiguration.Arguments"></value>
|
||||||
|
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
|
||||||
|
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||||
|
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
|
||||||
|
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/kylin/openkylin/build-kylin-update-notify-unknown-Debug/kylin-update-notify-immutable</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.1">
|
||||||
|
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
|
||||||
|
<value type="QString">cpu-cycles</value>
|
||||||
|
</valuelist>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
|
||||||
|
<value type="int" key="Analyzer.Perf.Frequency">250</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
|
||||||
|
<value type="QString">-e</value>
|
||||||
|
<value type="QString">cpu-cycles</value>
|
||||||
|
<value type="QString">--call-graph</value>
|
||||||
|
<value type="QString">dwarf,4096</value>
|
||||||
|
<value type="QString">-F</value>
|
||||||
|
<value type="QString">250</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
|
||||||
|
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
|
||||||
|
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
|
||||||
|
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||||
|
<value type="int">0</value>
|
||||||
|
<value type="int">1</value>
|
||||||
|
<value type="int">2</value>
|
||||||
|
<value type="int">3</value>
|
||||||
|
<value type="int">4</value>
|
||||||
|
<value type="int">5</value>
|
||||||
|
<value type="int">6</value>
|
||||||
|
<value type="int">7</value>
|
||||||
|
<value type="int">8</value>
|
||||||
|
<value type="int">9</value>
|
||||||
|
<value type="int">10</value>
|
||||||
|
<value type="int">11</value>
|
||||||
|
<value type="int">12</value>
|
||||||
|
<value type="int">13</value>
|
||||||
|
<value type="int">14</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||||
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/kylin/openkylin/kylin-update-notify/kylin-update-notify/kylin-update-notify.pro</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/kylin/openkylin/kylin-update-notify/kylin-update-notify/kylin-update-notify.pro</value>
|
||||||
|
<value type="QString" key="RunConfiguration.Arguments"></value>
|
||||||
|
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
|
||||||
|
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||||
|
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
|
||||||
|
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/kylin/openkylin/build-kylin-update-notify-unknown-Debug/kylin-update-notify</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">2</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||||
|
<value type="int">1</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||||
|
<value type="int">22</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>Version</variable>
|
||||||
|
<value type="int">22</value>
|
||||||
|
</data>
|
||||||
|
</qtcreator>
|
|
@ -1,20 +0,0 @@
|
||||||
#!/usr/bin/python3
|
|
||||||
import apt
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
def calculate_upgradable_pkgs():
|
|
||||||
cache = apt.Cache()
|
|
||||||
pkgs_to_upgrade = []
|
|
||||||
|
|
||||||
for pkg in cache:
|
|
||||||
if pkg.is_installed and pkg.is_upgradable :
|
|
||||||
pkgs_to_upgrade.append(pkg.name)
|
|
||||||
|
|
||||||
if cache.get_changes():
|
|
||||||
cache.clear()
|
|
||||||
|
|
||||||
if len(pkgs_to_upgrade) != 0:
|
|
||||||
subprocess.Popen('dbus-send --system --type=signal / com.kylin.update.notification.DownloadFinish', shell=True)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
calculate_upgradable_pkgs()
|
|
Binary file not shown.
Binary file not shown.
Before ![]() (image error) Size: 5.1 KiB |
Binary file not shown.
Before ![]() (image error) Size: 957 B |
|
@ -1,10 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=自动更新托盘更新程序
|
|
||||||
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=forking
|
|
||||||
TimeoutStartSec=infinity
|
|
||||||
ExecStart=/usr/bin/kylin-background-upgrade
|
|
||||||
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=静默更新定时检测
|
|
||||||
|
|
||||||
[Timer]
|
|
||||||
OnStartupSec=30min
|
|
||||||
OnUnitInactiveSec=2h
|
|
||||||
AccuracySec=20s
|
|
||||||
Unit=kylin-background-upgrade-silent.service
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=default.target
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
[Settings]
|
|
||||||
powersize=1
|
|
||||||
setpackagesize=999999999
|
|
||||||
|
|
||||||
[Timer]
|
|
||||||
checkUpgradeTime=
|
|
||||||
checkUpgradeTimeSlot=9:30-11:30
|
|
||||||
RandomizedExecute=True
|
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Name=kylin-background-upgrade
|
|
||||||
Name[zh_CN]=更新管理器托盘程序
|
|
||||||
Exec=/usr/bin/kylin-background-upgrade --check-immediately
|
|
||||||
Icon=kylin-update-manager
|
|
||||||
Type=Application
|
|
||||||
X-UKUI-AutoRestart=true
|
|
||||||
OnlyShowIn=UKUI
|
|
||||||
X-UKUI-Autostart-Phase=Application
|
|
||||||
NoDisplay=true
|
|
|
@ -1,6 +0,0 @@
|
||||||
[Timer]
|
|
||||||
CheckUpgradeTime=
|
|
||||||
CheckCompleted=false
|
|
||||||
CheckUpgradeTimeSlot=09:30:00-11:30:00
|
|
||||||
GeneratRandomTime=true
|
|
||||||
RandomizedExecute=true
|
|
|
@ -1,39 +0,0 @@
|
||||||
<schemalist gettext-domain="ukui-log4qt-kylin-background-upgrade">
|
|
||||||
<schema id="org.ukui.ukui-log4qt-kylin-background-upgrade" path="/org/ukui/ukui-log4qt-kylin-background-upgrade/">
|
|
||||||
<key type="s" name="log4j-handleqtmessages">
|
|
||||||
<default>"true"</default>
|
|
||||||
<summary>hook qt messages</summary>
|
|
||||||
<description>Control if hook qt messages</description>
|
|
||||||
</key>
|
|
||||||
<key type="s" name="log4j-rootlogger">
|
|
||||||
<default>"DEBUG,console,daily"</default>
|
|
||||||
<summary>config rootLogger's level and appenders</summary>
|
|
||||||
<description>config rootLogger's level and appenders:"level,appender"</description>
|
|
||||||
</key>
|
|
||||||
<key type="s" name="log4j-appender-daily-datepattern">
|
|
||||||
<default>".yyyy-MM-dd"</default>
|
|
||||||
<summary>daily log file pattern</summary>
|
|
||||||
<description>set daily log file pattern format:one day</description>
|
|
||||||
</key>
|
|
||||||
<key type="s" name="log4j-appender-daily-layout-conversionpattern">
|
|
||||||
<default>"%d{yyyy-MM-dd HH:mm:ss,zzz}(%-4r)[%t]|%-5p| - %m%n"</default>
|
|
||||||
<summary>set log message's format</summary>
|
|
||||||
<description>set log message's format</description>
|
|
||||||
</key>
|
|
||||||
<key type="i" name="delaytime">
|
|
||||||
<default>3600</default>
|
|
||||||
<summary>set check log files delay time</summary>
|
|
||||||
<description>set check log files delay time</description>
|
|
||||||
</key>
|
|
||||||
<key type="i" name="maxfilecount">
|
|
||||||
<default>7</default>
|
|
||||||
<summary>set log files count</summary>
|
|
||||||
<description>set log files count,unit s</description>
|
|
||||||
</key>
|
|
||||||
<key type="i" name="maxfilesize">
|
|
||||||
<default>512</default>
|
|
||||||
<summary>set log files total size</summary>
|
|
||||||
<description>set log files total size, unit M</description>
|
|
||||||
</key>
|
|
||||||
</schema>
|
|
||||||
</schemalist>
|
|
Binary file not shown.
Before ![]() (image error) Size: 7.9 KiB |
|
@ -1,4 +0,0 @@
|
||||||
PROJECT_ROOTDIR = $$PWD
|
|
||||||
|
|
||||||
INCLUDEPATH = ./widgets
|
|
||||||
include(./widgets/widgets.pri)
|
|
|
@ -1,6 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Name=update-notify-force
|
|
||||||
Exec=/usr/bin/kylin-update-notify --check-upgrade
|
|
||||||
Type=Application
|
|
||||||
NoDisplay=true
|
|
||||||
Comment=update-notify-force
|
|
|
@ -1,42 +0,0 @@
|
||||||
QT += core gui dbus network KWindowSystem sql
|
|
||||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
|
||||||
|
|
||||||
CONFIG += c++11 link_pkgconfig
|
|
||||||
|
|
||||||
# 项目名
|
|
||||||
TARGET = kylin-background-upgrade
|
|
||||||
TEMPLATE = app
|
|
||||||
|
|
||||||
LIBS +=-lukui-log4qt
|
|
||||||
|
|
||||||
include(env.pri)
|
|
||||||
INCLUDEPATH +=./widgets
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
./src/core.cpp \
|
|
||||||
./src/main.cpp \
|
|
||||||
./src/traydbus.cpp \
|
|
||||||
./src/trayicon.cpp \
|
|
||||||
./src/updatehandle.cpp \
|
|
||||||
./src/updatewidget.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
./src/core.h \
|
|
||||||
./src/traydbus.h \
|
|
||||||
./src/trayicon.h \
|
|
||||||
./src/updatehandle.h \
|
|
||||||
./src/updatewidget.h
|
|
||||||
|
|
||||||
TRANSLATIONS += translations/kylin-background-upgrade_zh_CN.ts \
|
|
||||||
translations/kylin-background-upgrade_bo_CN.ts
|
|
||||||
|
|
||||||
PKGCONFIG += gsettings-qt kysdk-waylandhelper
|
|
||||||
|
|
||||||
FORMS += \
|
|
||||||
./src/updatewidget.ui
|
|
||||||
|
|
||||||
RESOURCES += \
|
|
||||||
./data/Resources.qrc
|
|
||||||
|
|
||||||
DISTFILES += \
|
|
||||||
./data/update.png
|
|
|
@ -1,23 +0,0 @@
|
||||||
#ifndef CORE_H
|
|
||||||
#define CORE_H
|
|
||||||
|
|
||||||
#include <QMainWindow>
|
|
||||||
#include "updatehandle.h"
|
|
||||||
|
|
||||||
class core : public QMainWindow
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
core(QString getnum, QWidget *parent = nullptr);
|
|
||||||
~core();
|
|
||||||
updatehandle *updateHandle;
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void execSignal();
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void execSlots();
|
|
||||||
|
|
||||||
};
|
|
||||||
#endif // CORE_H
|
|
|
@ -1,35 +0,0 @@
|
||||||
#include "trayicon.h"
|
|
||||||
|
|
||||||
trayicon::trayicon(QWidget *parent) : QSystemTrayIcon(parent)
|
|
||||||
{
|
|
||||||
initAction();
|
|
||||||
}
|
|
||||||
|
|
||||||
void trayicon::initAction()
|
|
||||||
{
|
|
||||||
this->setToolTip(tr("The system is updating silently"));
|
|
||||||
this->setIcon(QIcon(":/update.png"));
|
|
||||||
|
|
||||||
m_trayMenu = new QMenu();
|
|
||||||
m_topWidget = new QWidget();
|
|
||||||
m_topWidget->setFixedSize(30,30);
|
|
||||||
m_topWidget->installEventFilter(this);
|
|
||||||
m_topWidgetAction = new QWidgetAction(this);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief trayicon::eventFilter
|
|
||||||
* 事件过滤器
|
|
||||||
*/
|
|
||||||
bool trayicon::eventFilter(QObject *obj, QEvent *event)
|
|
||||||
{
|
|
||||||
// if (obj == m_topWidget && event->type() == QEvent::MouseButtonPress)
|
|
||||||
// {
|
|
||||||
// QPainter painter(m_topWidget);
|
|
||||||
// painter.setPen(Qt::NoPen);
|
|
||||||
// painter.setBrush(QColor(42,120,192));
|
|
||||||
// painter.drawRect(m_topWidget->rect());
|
|
||||||
// }
|
|
||||||
return QSystemTrayIcon::eventFilter(obj,event);
|
|
||||||
}
|
|
|
@ -1,33 +0,0 @@
|
||||||
#ifndef TRAYICON_H
|
|
||||||
#define TRAYICON_H
|
|
||||||
|
|
||||||
#include <QWidget>
|
|
||||||
#include <QSystemTrayIcon>
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QPainter>
|
|
||||||
#include <QEvent>
|
|
||||||
#include <QDebug>
|
|
||||||
#include <QWidgetAction>
|
|
||||||
|
|
||||||
class trayicon : public QSystemTrayIcon
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
explicit trayicon(QWidget *parent = nullptr);
|
|
||||||
void initAction();
|
|
||||||
|
|
||||||
QAction *action_show;
|
|
||||||
QMenu *m_trayMenu;
|
|
||||||
QWidget *m_topWidget;
|
|
||||||
QWidgetAction *m_topWidgetAction;
|
|
||||||
QMenu* trayIconMenu;
|
|
||||||
QAction* OpenSetUp;
|
|
||||||
protected:
|
|
||||||
bool eventFilter(QObject *obj, QEvent *event);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // TRAYICON_H
|
|
|
@ -1,105 +0,0 @@
|
||||||
#ifndef TRAY_H
|
|
||||||
#define TRAY_H
|
|
||||||
|
|
||||||
#include <QMap>
|
|
||||||
#include <QDebug>
|
|
||||||
#include <QWidget>
|
|
||||||
#include <QProcess>
|
|
||||||
#include <QSettings>
|
|
||||||
#include <QSqlQuery>
|
|
||||||
#include <QTextCodec>
|
|
||||||
#include <QPushButton>
|
|
||||||
#include <QTranslator>
|
|
||||||
#include <QSqlDatabase>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include <QSqlQueryModel>
|
|
||||||
#include <QNetworkRequest>
|
|
||||||
#include <QNetworkAccessManager>
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/file.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
#include "traydbus.h"
|
|
||||||
#include "trayicon.h"
|
|
||||||
#include "updatewidget.h"
|
|
||||||
|
|
||||||
|
|
||||||
class updatehandle : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
updatehandle(QString getnum1,QWidget *parent = nullptr);
|
|
||||||
~updatehandle();
|
|
||||||
trayicon *trayIcon; //托盘实例化
|
|
||||||
QStringList important; //保存重要更新包名
|
|
||||||
QString argnum; //得到命令行输入参数
|
|
||||||
traydbusservice *object; //托盘dbus服务
|
|
||||||
bool powerState; //保存电量是否可获取
|
|
||||||
QString powerNum = "0"; //保存电量值
|
|
||||||
QString confPath = ""; //保存配置文件位置
|
|
||||||
|
|
||||||
bool dbusConnectStatus=false; //d-bus连接状态
|
|
||||||
bool messstate1=true;
|
|
||||||
bool messstate2=true;
|
|
||||||
int powerSize; //电源设定值
|
|
||||||
float setPackageSize; //包大小设定值
|
|
||||||
QString CheckUpgradeTime; //检查更新时间
|
|
||||||
QString CheckUpgradeTimeSlot; //检查更新时间段
|
|
||||||
bool CheckCompleted; //是否检查完成
|
|
||||||
bool RandomizedExecute; //是否随机执行
|
|
||||||
bool GeneratRandomTime; //是否刷新随机时间
|
|
||||||
bool errorStatus=false; //是否完整下载安装的状态值
|
|
||||||
|
|
||||||
updatewidget *choice_window; //托盘选择框
|
|
||||||
updateTip *tip_window; //托盘提示框框
|
|
||||||
QStringList checkCrucial; //保存静默升级包以及大小信息
|
|
||||||
|
|
||||||
source_dbus *m_sourceMutual; //源管理器dbus
|
|
||||||
update_dbus *m_updateMutual; //更新管理器dbus
|
|
||||||
power_dbus *Power_dbus;
|
|
||||||
QTimer *timerDownload; //托盘下载时间错误延时处理
|
|
||||||
QTimer *timerLock; //文件锁定时检测
|
|
||||||
QSettings *mqsetting; //读取配置文件
|
|
||||||
QSettings *timersetting; //读取timer配置文件
|
|
||||||
|
|
||||||
|
|
||||||
void initUI(QString); //初始化界面
|
|
||||||
void initDbus(); //初始化dbus
|
|
||||||
void initTranslator(); //初始化翻译加载
|
|
||||||
void getTemplateList(); //获取源管理器文件中的可选更新与强制更新
|
|
||||||
void processData(QMap<QString,QStringList> data); //处理获取的更新数据
|
|
||||||
void handleCrucial(QStringList checkCrucialAll); //处理静默升级包
|
|
||||||
void handleImportant(); //处理可选升级包
|
|
||||||
void register_dbus(); //注册D-bus服务
|
|
||||||
bool checktime(); //检查设定更新时间
|
|
||||||
|
|
||||||
//数据库相关
|
|
||||||
QSqlDatabase db;
|
|
||||||
QSqlQueryModel model;
|
|
||||||
|
|
||||||
bool m_getsql(); //获取更新管理器数据库信息
|
|
||||||
void notify_send(QString arg); //向notification发送信息显示
|
|
||||||
|
|
||||||
bool packageDownOrNot(QStringList arg);
|
|
||||||
void readconf(); //读取配置文件
|
|
||||||
int _secsTo(QString,QString); //时间差
|
|
||||||
void getpower(); //获取电量值
|
|
||||||
void UpdateDectCheck(bool); //调用后端UpdateDetect
|
|
||||||
bool ignoreOrDelay(bool mode); //是否开机检查检查弹窗
|
|
||||||
bool package_installation_status(QStringList);
|
|
||||||
signals:
|
|
||||||
void execSignal(); //关闭窗口信号
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void onActivated(trayicon::ActivationReason reason); //更新选择页面
|
|
||||||
void tray_Show(); //启动托盘显示
|
|
||||||
void execslots(); //关闭窗口槽函数
|
|
||||||
void d_busStatus(QString,int32_t,QString); //判断下载状态的槽函数
|
|
||||||
void InstallFinsih(bool,QStringList,QString,QString); //状态槽函数
|
|
||||||
void downloadTimeout(); //延时检测下载状态
|
|
||||||
void UpdateDectSlot(bool,QStringList,QString,QString); //updatedetect回调函数
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // TRAY_H
|
|
|
@ -1,21 +0,0 @@
|
||||||
<ui version="4.0">
|
|
||||||
<author/>
|
|
||||||
<comment/>
|
|
||||||
<exportmacro/>
|
|
||||||
<class>Form</class>
|
|
||||||
<widget class="QWidget" name="Form">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>400</width>
|
|
||||||
<height>300</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>Form</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<pixmapfunction/>
|
|
||||||
<connections/>
|
|
||||||
</ui>
|
|
|
@ -1 +0,0 @@
|
||||||
[{"excluded":[],"includePaths":["/usr/include/x86_64-linux-gnu/qt5/QGSettings","/usr/include/KF5/KWindowSystem","/usr/include/x86_64-linux-gnu/qt5","/usr/include/x86_64-linux-gnu/qt5/QtWidgets","/usr/include/x86_64-linux-gnu/qt5/QtGui","/usr/include/x86_64-linux-gnu/qt5/QtDBus","/usr/include/x86_64-linux-gnu/qt5/QtNetwork","/usr/include/x86_64-linux-gnu/qt5/QtSql","/usr/include/x86_64-linux-gnu/qt5/QtCore","/home/li/ukui/kylin-background-upgrade/kylin-background-upgrade","/home/li/ukui/kylin-background-upgrade/kylin-background-upgrade"],"projectFile":"/home/li/ukui/kylin-background-upgrade/kylin-background-upgrade/kylin-background-upgrade.pro","sources":["/home/li/ukui/kylin-background-upgrade/kylin-background-upgrade/core.cpp","/home/li/ukui/kylin-background-upgrade/kylin-background-upgrade/core.h","/home/li/ukui/kylin-background-upgrade/kylin-background-upgrade/main.cpp","/home/li/ukui/kylin-background-upgrade/kylin-background-upgrade/traydbus.cpp","/home/li/ukui/kylin-background-upgrade/kylin-background-upgrade/traydbus.h","/home/li/ukui/kylin-background-upgrade/kylin-background-upgrade/trayicon.cpp","/home/li/ukui/kylin-background-upgrade/kylin-background-upgrade/trayicon.h","/home/li/ukui/kylin-background-upgrade/kylin-background-upgrade/updatehandle.cpp","/home/li/ukui/kylin-background-upgrade/kylin-background-upgrade/updatehandle.h","/home/li/ukui/kylin-background-upgrade/kylin-background-upgrade/updatewidget.cpp","/home/li/ukui/kylin-background-upgrade/kylin-background-upgrade/updatewidget.h","/home/li/ukui/kylin-background-upgrade/kylin-background-upgrade/updatewidget.ui"]}]
|
|
Binary file not shown.
|
@ -1,112 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!DOCTYPE TS>
|
|
||||||
<TS version="2.1" language="bo_CN">
|
|
||||||
<context>
|
|
||||||
<name>Form</name>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.ui" line="16"/>
|
|
||||||
<source>Form</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>trayicon</name>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/trayicon.cpp" line="10"/>
|
|
||||||
<source>The system is updating silently</source>
|
|
||||||
<translation type="unfinished">རྒྱུད་ཁོངས་ཁ་རོག་གེར་རིམ་འགྱུར་བྱེད་སྒང་།</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>updateTip</name>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="548"/>
|
|
||||||
<source>The system is updating silently</source>
|
|
||||||
<translation type="unfinished">རྒྱུད་ཁོངས་ཁ་རོག་གེར་རིམ་འགྱུར་བྱེད་སྒང་།</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>updatehandle</name>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="116"/>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="355"/>
|
|
||||||
<source>System update</source>
|
|
||||||
<translation type="unfinished">རྒྱུད་ཁོངས་གསར་སྒྱུར་</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="319"/>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="327"/>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="333"/>
|
|
||||||
<source>The system is updating silently</source>
|
|
||||||
<translation type="unfinished">རྒྱུད་ཁོངས་ཁ་རོག་གེར་རིམ་འགྱུར་བྱེད་སྒང་།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="511"/>
|
|
||||||
<source>The system has completed an important update, It is recommended that you restart immediately.</source>
|
|
||||||
<translation type="unfinished">མ་ལག་གི་འགག་རྩའི་གསར་སྒྱུར་ཞིག་ལེགས་གྲུབ་དང་།བསམ་འཆར་ལ་ཁྱེད་རང་འཕྲལ་མར་བསྐྱར་འབྱེད་།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="513"/>
|
|
||||||
<source>update error</source>
|
|
||||||
<translation type="unfinished">རིམ་འཕར་འགྲུབ་མེད།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="589"/>
|
|
||||||
<source>kylin-background-upgrade</source>
|
|
||||||
<translation type="unfinished">རྒྱབ་སྟེགས་གསར་སྒྱུར་བྱ་རིམ།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="592"/>
|
|
||||||
<source>update</source>
|
|
||||||
<translation type="unfinished">རྒྱུད་ཁོངས་རིམ་སྤོར་</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>updatewidget</name>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="42"/>
|
|
||||||
<source> Updatable app detected on your system!</source>
|
|
||||||
<translation type="unfinished"> རྒྱུད་ཁོངས་གསར་སྒྱུར་རྣམ་གྲངས་</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="51"/>
|
|
||||||
<source>Close</source>
|
|
||||||
<translation type="unfinished">སྒོ་རྒྱག་པ་</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>30 minutes later</source>
|
|
||||||
<translation type="unfinished">ཕྱིར་འགྱངས་སྐར་མ་30།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>1 hour later</source>
|
|
||||||
<translation type="unfinished">ཆུ་ཚོད་གཅིག་ནར་འགྱངས་།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>5 hours later</source>
|
|
||||||
<translation type="unfinished">ཆུ་ཚོད་5ནར་འགྱངས་།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>1 day later</source>
|
|
||||||
<translation type="unfinished">ཉིན་གཅིག་ནར་འགྱངས་།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>3 days later</source>
|
|
||||||
<translation type="unfinished">ཉིན་གསུམ་ནར་འགྱངས་།</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="69"/>
|
|
||||||
<source>Update</source>
|
|
||||||
<translation type="unfinished">ལམ་སང་གསར་སྒྱུར་</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="70"/>
|
|
||||||
<source>Delay</source>
|
|
||||||
<translation type="unfinished">ནར་འགྱངས།</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
</TS>
|
|
Binary file not shown.
|
@ -1,151 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!DOCTYPE TS>
|
|
||||||
<TS version="2.1" language="zh_CN">
|
|
||||||
<context>
|
|
||||||
<name>Form</name>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.ui" line="16"/>
|
|
||||||
<source>Form</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>QObject</name>
|
|
||||||
<message>
|
|
||||||
<source>The system is updating silently</source>
|
|
||||||
<translation type="vanished">系统正在静默更新</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>trayicon</name>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/trayicon.cpp" line="10"/>
|
|
||||||
<source>The system is updating silently</source>
|
|
||||||
<translation>系统正在静默更新</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>updateTip</name>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="548"/>
|
|
||||||
<source>The system is updating silently</source>
|
|
||||||
<translation>系统正在静默更新</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>updatehandle</name>
|
|
||||||
<message>
|
|
||||||
<source>The system has completed an important update. It is recommended that you restart immediately.</source>
|
|
||||||
<translation type="vanished">系统已经完成一项关键更新,建议您立即重启</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="319"/>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="327"/>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="333"/>
|
|
||||||
<source>The system is updating silently</source>
|
|
||||||
<translation>系统正在静默更新</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>System update detected </source>
|
|
||||||
<translation type="vanished">检测到有系统更新</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>System update detected</source>
|
|
||||||
<translation type="vanished">检测到有系统更新</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>The system has completed a critical update, and some software packages failed to update. It is recommended that you restart immediately</source>
|
|
||||||
<translation type="obsolete">系统完成一项关键更新,部分软件包更新失败,建议您立即重启</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="116"/>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="355"/>
|
|
||||||
<source>System update</source>
|
|
||||||
<translation>系统更新</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="511"/>
|
|
||||||
<source>The system has completed an important update, It is recommended that you restart immediately.</source>
|
|
||||||
<translation>系统完成一项关键更新,建议您立即重启</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="513"/>
|
|
||||||
<source>update error</source>
|
|
||||||
<translation>升级失败</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="589"/>
|
|
||||||
<source>kylin-background-upgrade</source>
|
|
||||||
<translation>后台更新程序</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="592"/>
|
|
||||||
<source>update</source>
|
|
||||||
<translation>系统升级</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>updatewidget</name>
|
|
||||||
<message>
|
|
||||||
<source>Please remind me later</source>
|
|
||||||
<translation type="vanished">请在以下时间段之后提醒我</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>at</source>
|
|
||||||
<translation type="vanished">在</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>No more reminders</source>
|
|
||||||
<translation type="vanished">内不再提醒</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>No reminders</source>
|
|
||||||
<translation type="vanished">内不再提醒</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="42"/>
|
|
||||||
<source> Updatable app detected on your system!</source>
|
|
||||||
<translation type="unfinished"> 系统有更新项目</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="51"/>
|
|
||||||
<source>Close</source>
|
|
||||||
<translation type="unfinished">关闭</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>30 minutes later</source>
|
|
||||||
<translation>推迟 30 分钟</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>1 hour later</source>
|
|
||||||
<translation type="unfinished">推迟 1 小时</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>3 days later</source>
|
|
||||||
<translation type="unfinished">推迟 3 天</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="70"/>
|
|
||||||
<source>Delay</source>
|
|
||||||
<translation type="unfinished">推迟</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>5 hours later</source>
|
|
||||||
<translation>推迟 5 小时</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>1 day later</source>
|
|
||||||
<translation>推迟 1 天</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="69"/>
|
|
||||||
<source>Update</source>
|
|
||||||
<translation>立即更新</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
</TS>
|
|
|
@ -1,6 +0,0 @@
|
||||||
SOURCES += \
|
|
||||||
$$PWD/fixbutton.cpp \
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
$$PWD/fixbutton.h \
|
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
#include "fixbutton.h"
|
|
||||||
#include <QFontMetrics>
|
|
||||||
#include <QDebug>
|
|
||||||
|
|
||||||
FixButton::FixButton(QWidget *parent):
|
|
||||||
QPushButton(parent)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
FixButton::~FixButton()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void FixButton::paintEvent(QPaintEvent *event)
|
|
||||||
{
|
|
||||||
QFontMetrics fontMetrics(this->font());
|
|
||||||
int fontSize = fontMetrics.width(mStr);
|
|
||||||
int showTextSize = this->width() - 32;
|
|
||||||
if (fontSize > showTextSize) {
|
|
||||||
this->setText(fontMetrics.elidedText(mStr, Qt::ElideRight, showTextSize), false);
|
|
||||||
this->setToolTip(mStr);
|
|
||||||
} else {
|
|
||||||
this->setText(mStr, false);
|
|
||||||
this->setToolTip("");
|
|
||||||
}
|
|
||||||
QPushButton::paintEvent(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
void FixButton::setText(const QString & text, bool saveTextFlag)
|
|
||||||
{
|
|
||||||
if (saveTextFlag)
|
|
||||||
mStr = text;
|
|
||||||
QPushButton::setText(text);
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
#ifndef _FIXBUTTON_H_
|
|
||||||
#define _FIXBUTTON_H_
|
|
||||||
#include <QPushButton>
|
|
||||||
|
|
||||||
class FixButton : public QPushButton
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
FixButton(QWidget *parent = nullptr);
|
|
||||||
~FixButton();
|
|
||||||
void setText(const QString &text, bool saveTextFlag = true);
|
|
||||||
private:
|
|
||||||
void paintEvent(QPaintEvent *event);
|
|
||||||
|
|
||||||
private:
|
|
||||||
QString mStr;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,4 +0,0 @@
|
||||||
INCLUDEPATH += $$PWD
|
|
||||||
|
|
||||||
include(Button/button.pri)
|
|
||||||
#include(ComboBox/comboBox.pri)
|
|
|
@ -11,7 +11,7 @@ core::core(QString getnum, QWidget *parent)
|
||||||
|
|
||||||
core::~core()
|
core::~core()
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO << __LINE__;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void core::execSlots()
|
void core::execSlots()
|
|
@ -6,50 +6,42 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <ukui-log4qt.h>
|
#include <ukui-log4qt.h>
|
||||||
#include<qdebug.h>
|
#include<qdebug.h>
|
||||||
#include <QLockFile>
|
|
||||||
|
|
||||||
#define PROGRAM_NAME "kylin-background-upgrade"
|
#define PROGRAM_NAME "kylin-background-upgrade"
|
||||||
#define LOG_NAME "/.config/kylin-background-upgrade/kylin-background-upgrade.log"
|
|
||||||
#define LOG_SILENT_NAME "/.config/kylin-background-upgrade/kylin-background-upgrade-silent.log"
|
|
||||||
#define LOG_MANUL_NAME "/.config/kylin-background-upgrade/kylin-background-upgrade-manul.log"
|
|
||||||
|
|
||||||
static FILE *fp = NULL;
|
static FILE *fp = NULL;
|
||||||
QString toDir;
|
|
||||||
static bool _silentOrManul = true;
|
|
||||||
|
|
||||||
void msgHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg)
|
void msgHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg)
|
||||||
{
|
{
|
||||||
static char logPath[255] = {0};
|
static char logPath[255] = {0};
|
||||||
int uid = -1;
|
static int uid = -1;
|
||||||
static int pid = 0;
|
|
||||||
|
|
||||||
Q_UNUSED(context);
|
Q_UNUSED(context);
|
||||||
|
|
||||||
QDateTime currentTime = QDateTime::currentDateTime();
|
QDateTime currentTime = QDateTime::currentDateTime();
|
||||||
QString timeStr = currentTime.toString("yy.MM.dd hh:mm:ss +zzz");
|
QString timeStr = currentTime.toString("yy.MM.dd hh:mm:ss +zzz");
|
||||||
pid = (int)getpid();
|
|
||||||
uid = (int)getuid();
|
|
||||||
// 获取用于控制命令行输出的环境变量
|
// 获取用于控制命令行输出的环境变量
|
||||||
char *ctrlEnv = getenv("BACKGROUND_UPGRADE_DEBUG");
|
char *ctrlEnv = getenv("XXXX_DEBUG");
|
||||||
QString env;
|
QString env;
|
||||||
|
|
||||||
// 格式化输出字符串,添加消息发生时间、消息等级
|
// 格式化输出字符串,添加消息发生时间、消息等级
|
||||||
QString outMsg;
|
QString outMsg;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case QtDebugMsg:
|
case QtDebugMsg:
|
||||||
outMsg = QString("[%1 D .%2 :%4]: %3").arg(timeStr).arg(pid).arg(msg).arg(uid);
|
outMsg = QString("[%1 D]: %2").arg(timeStr).arg(msg);
|
||||||
break;
|
break;
|
||||||
case QtInfoMsg:
|
case QtInfoMsg:
|
||||||
outMsg = QString("[%1 D .%2 :%4]: %3").arg(timeStr).arg(pid).arg(msg).arg(uid);
|
outMsg = QString("[%1 I]: %2").arg(timeStr).arg(msg);
|
||||||
break;
|
break;
|
||||||
case QtWarningMsg:
|
case QtWarningMsg:
|
||||||
outMsg = QString("[%1 D .%2 :%4]: %3").arg(timeStr).arg(pid).arg(msg).arg(uid);
|
outMsg = QString("[%1 W]: %2").arg(timeStr).arg(msg);
|
||||||
break;
|
break;
|
||||||
case QtCriticalMsg:
|
case QtCriticalMsg:
|
||||||
outMsg = QString("[%1 D .%2 :%4]: %3").arg(timeStr).arg(pid).arg(msg).arg(uid);
|
outMsg = QString("[%1 C]: %2").arg(timeStr).arg(msg);
|
||||||
break;
|
break;
|
||||||
case QtFatalMsg:
|
case QtFatalMsg:
|
||||||
outMsg = QString("[%1 D .%2 :%4]: %3").arg(timeStr).arg(pid).arg(msg).arg(uid);
|
outMsg = QString("[%1 F]: %2").arg(timeStr).arg(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fp != NULL) {
|
if (fp != NULL) {
|
||||||
|
@ -72,43 +64,31 @@ void msgHandler(QtMsgType type, const QMessageLogContext& context, const QString
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
void log_env_init(QString arg){
|
void log_env_init(){
|
||||||
static int uid = -1;
|
static int uid = -1;
|
||||||
static char logPath[98] = {0};
|
static char logPath[255] = {0};
|
||||||
bool _is_root = false;
|
bool _is_root = false;
|
||||||
toDir = QDir::homePath();
|
|
||||||
toDir += "/.config/kylin-background-upgrade/";
|
|
||||||
QDir dir(toDir);
|
|
||||||
if(!dir.exists()) {
|
|
||||||
dir.mkdir(toDir);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 初始执行时,设置log文件路径
|
// 初始执行时,设置log文件路径
|
||||||
if (uid == -1) {
|
if (uid == -1) {
|
||||||
uid = getuid();
|
uid = getuid();
|
||||||
|
|
||||||
}
|
}
|
||||||
if (uid == 0) {
|
if (uid == 0) {
|
||||||
// root user
|
// root user
|
||||||
sprintf(logPath, "/var/log/kylin-background-upgrade/kylin-background-upgrade.log");
|
sprintf(logPath, "/var/log/kylin-background-upgrade/kylin-background-upgrade.log", uid, PROGRAM_NAME);
|
||||||
_is_root = true;
|
_is_root = true;
|
||||||
} else {
|
} else {
|
||||||
// normal user
|
// normal user
|
||||||
// sprintf(logPath, "/run/user/%d/%s.log", uid, PROGRAM_NAME);
|
sprintf(logPath, "/run/user/%d/%s.log", uid, PROGRAM_NAME);
|
||||||
//QString 转 const char*
|
|
||||||
std::string str = QDir::homePath().toStdString();
|
|
||||||
const char* ch = str.c_str();
|
|
||||||
if (arg == "--check-upgrade" || arg == "--check-immediately") {
|
|
||||||
sprintf(logPath, "%s%s", ch, LOG_MANUL_NAME);
|
|
||||||
} else {
|
|
||||||
sprintf(logPath, "%s%s", ch, LOG_SILENT_NAME);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
printf("Logfile path: %s\n", logPath);
|
||||||
|
|
||||||
if (access(logPath, F_OK|W_OK) == 0) { // log文件存在且可写
|
if (access(logPath, F_OK|W_OK) == 0) { // log文件存在且可写
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
fp = fopen(logPath, "a+");
|
fp = fopen(logPath, "a+");
|
||||||
QFileInfo info(logPath);
|
QFileInfo info(logPath);
|
||||||
if (info.size() > 1024*1024*20) { //20MB
|
if (info.size() > 1024*1024*200) { //200MB
|
||||||
fclose(fp); fp = NULL;
|
fclose(fp); fp = NULL;
|
||||||
QFile fileclean(logPath);
|
QFile fileclean(logPath);
|
||||||
fileclean.open(QIODevice::WriteOnly | QIODevice::Text | QFile::Truncate);
|
fileclean.open(QIODevice::WriteOnly | QIODevice::Text | QFile::Truncate);
|
||||||
|
@ -140,67 +120,35 @@ void log_env_init(QString arg){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool _is_openkylin()
|
|
||||||
{
|
|
||||||
QString OPENKYLIN_DISTTRIBUTOR = "Openkylin";
|
|
||||||
QString command = "lsb_release -i -s";
|
|
||||||
QProcess process;
|
|
||||||
process.start(command);
|
|
||||||
process.waitForFinished();
|
|
||||||
|
|
||||||
QString result = process.readAllStandardOutput();
|
|
||||||
int ret = result.left(OPENKYLIN_DISTTRIBUTOR.length()).compare(OPENKYLIN_DISTTRIBUTOR.left(OPENKYLIN_DISTTRIBUTOR.length()));
|
|
||||||
return (0 == ret)?true:false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
QString arg=QString::fromLatin1(argv[1]);
|
QString arg=QString::fromLatin1(argv[1]);
|
||||||
log_env_init(arg);
|
// initUkuiLog4qt("kylin-background-upgrade");
|
||||||
|
log_env_init();
|
||||||
qInstallMessageHandler(msgHandler);
|
qInstallMessageHandler(msgHandler);
|
||||||
char *dis_env=getenv("DISPLAY");
|
char *x=getenv("DISPLAY");
|
||||||
QString display_env(dis_env);
|
|
||||||
if(display_env != NULL){
|
|
||||||
qDebug()<<"The desktop graphics environment is normal, DISPLAY="<<dis_env;
|
|
||||||
} else {
|
|
||||||
qDebug()<<"The desktop graphics environment is abnormal, DISPLAY="<<dis_env<<", exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
QLockFile manul_lock(toDir+"manul.lock");
|
|
||||||
QLockFile silent_lock(toDir+"silent.lock");
|
|
||||||
qDebug()<<"";
|
qDebug()<<"";
|
||||||
qDebug()<<"---------------------------------------------------------------------------------------------------";
|
qDebug()<<"---------------------------------------------------------------------------------------------------";
|
||||||
if (arg == "--check-upgrade" || arg == "--check-immediately") {
|
qDebug()<<"Start check upgradable ...";
|
||||||
qDebug()<<"Start check upgradable ...";
|
|
||||||
if (arg == "--check-immediately") {
|
|
||||||
qDebug()<<"Perform a boot update check ...";
|
|
||||||
}
|
|
||||||
if (!manul_lock.tryLock(0)) {
|
|
||||||
qDebug()<<"Another process is checking for updates, exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qDebug()<<"Start silent upgrade ...";
|
|
||||||
if (!silent_lock.tryLock(0)) {
|
|
||||||
qDebug()<<"Another process is silently upgrading, exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
if (_is_openkylin()) {
|
|
||||||
qDebug()<<"openkylin, exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
QString s1(x);
|
||||||
|
if(s1 != NULL){
|
||||||
|
qDebug()<<"The desktop graphics environment is normal .";
|
||||||
|
} else {
|
||||||
|
qDebug()<<"The desktop graphics environment is abnormal .";
|
||||||
|
putenv("DISPLAY=:0");
|
||||||
|
}
|
||||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
|
||||||
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||||
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||||
#endif
|
#endif
|
||||||
|
// callPyFunc *lxy = new callPyFunc();
|
||||||
|
|
||||||
setenv("QT_QPA_PLATFORMTHEME","ukui",true);
|
setenv("QT_QPA_PLATFORMTHEME","ukui",true);
|
||||||
qunsetenv("SESSION_MANAGER");
|
qunsetenv("SESSION_MANAGER");
|
||||||
QApplication a(argc, argv);
|
QApplication a(argc, argv);
|
||||||
core m_core(arg);
|
core *m_core= new core(arg);
|
||||||
// QObject::connect(m_core,SIGNAL(execSignal()),&a,SLOT(quit()));
|
QObject::connect(m_core,SIGNAL(execSignal()),&a,SLOT(quit()));
|
||||||
return a.exec();
|
return a.exec();
|
||||||
}
|
}
|
|
@ -70,12 +70,12 @@ source_dbus::source_dbus(QObject *parent)
|
||||||
:QObject(parent)
|
:QObject(parent)
|
||||||
{
|
{
|
||||||
connectTimer = new QTimer(this);
|
connectTimer = new QTimer(this);
|
||||||
connect(connectTimer, SIGNAL(timeout()), this, SLOT(connectDbus()));
|
// connect(connectTimer, SIGNAL(timeout()), this, SLOT(connectDbus()));
|
||||||
}
|
}
|
||||||
|
|
||||||
source_dbus::~source_dbus()
|
source_dbus::~source_dbus()
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO << __LINE__;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -164,7 +164,7 @@ update_dbus* update_dbus::getInstance()
|
||||||
update_dbus::update_dbus(QObject *parent)
|
update_dbus::update_dbus(QObject *parent)
|
||||||
:QObject(parent)
|
:QObject(parent)
|
||||||
{
|
{
|
||||||
initUpdate_Dbus();
|
// initUpdate_Dbus();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,9 +270,17 @@ QStringList update_dbus::checkForUpdates(QStringList arg)
|
||||||
bool update_dbus::checkForUpdateDect()
|
bool update_dbus::checkForUpdateDect()
|
||||||
{
|
{
|
||||||
qDebug()<<"Start to check system upgrade ...";
|
qDebug()<<"Start to check system upgrade ...";
|
||||||
connect(interface,SIGNAL(UpdateDetectFinished(bool, QStringList, QString, QString)),this,SLOT(UpdateDectSlot(bool, QStringList, QString, QString)));
|
// connect(interface,SIGNAL(UpdateDetectFinished(bool, QStringList, QString, QString)),this,SLOT(UpdateDectSlot(bool, QStringList, QString, QString)));
|
||||||
QDBusReply<QVariantList> res = interface->asyncCall("UpdateDetect");
|
// QDBusReply<QVariantList> res = interface->call("UpdateDetect");
|
||||||
qDebug() << "UpdateDetect (mode: MODE_UPDATE_DETECT) ...";
|
// QProcess process;
|
||||||
|
// process.start("/home/lxy/kylin-background-upgrade/OpenKylin/kylin-background-upgrade/checkUpdate.py");
|
||||||
|
// process.waitForStarted();
|
||||||
|
// process.waitForFinished();//以阻塞的方式等待释放
|
||||||
|
// QStringList updatelists;
|
||||||
|
// updatelists.append("kylin-video");
|
||||||
|
// QString errorcode = "";
|
||||||
|
// QString errorstring = "";
|
||||||
|
// UpdateDectSlot(true,updatelists,errorcode, errorstring);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QMutexLocker>
|
#include <QMutexLocker>
|
||||||
|
#include <QProcess>
|
||||||
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
|
@ -1,6 +1,5 @@
|
||||||
#include "updatehandle.h"
|
#include "updatehandle.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <QProcess>
|
|
||||||
|
|
||||||
updatehandle::updatehandle(QString getnum1,QWidget *parent) : QWidget(parent)
|
updatehandle::updatehandle(QString getnum1,QWidget *parent) : QWidget(parent)
|
||||||
{
|
{
|
||||||
|
@ -15,7 +14,7 @@ updatehandle::updatehandle(QString getnum1,QWidget *parent) : QWidget(parent)
|
||||||
|
|
||||||
updatehandle::~updatehandle()
|
updatehandle::~updatehandle()
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO << __LINE__;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -74,31 +73,16 @@ void updatehandle::initUI(QString argnum)
|
||||||
timerDownload = new QTimer(this);
|
timerDownload = new QTimer(this);
|
||||||
connect(timerDownload, SIGNAL(timeout()), this, SLOT(downloadTimeout()));
|
connect(timerDownload, SIGNAL(timeout()), this, SLOT(downloadTimeout()));
|
||||||
|
|
||||||
if(argnum.contains("--check-immediately")){
|
|
||||||
qDebug()<<"exec --check-immediately";
|
|
||||||
} else if(argnum.contains("--check-upgrade")) {
|
|
||||||
qDebug()<<"exec --check-upgrade";
|
|
||||||
} else {
|
|
||||||
qDebug()<<"exec slient.";
|
|
||||||
}
|
|
||||||
|
|
||||||
trayIcon = new trayicon(this);
|
trayIcon = new trayicon(this);
|
||||||
bool ignore_or_delay = ignoreOrDelay(argnum.contains("--check-immediately",Qt::CaseInsensitive));
|
choice_window = new updatewidget();//更新选择页面
|
||||||
choice_window = new updatewidget(ignore_or_delay);//更新选择页面
|
|
||||||
tip_window = new updateTip(); //静默升级提示
|
tip_window = new updateTip(); //静默升级提示
|
||||||
|
|
||||||
if (argnum == "") {
|
if (argnum.contains("--check-upgrade",Qt::CaseInsensitive)) {
|
||||||
//监听连接源管理器d-bus
|
|
||||||
//监听托盘点击事件,3:单击,2:双击,1:右键
|
|
||||||
connect(trayIcon,&trayicon::activated, this,&updatehandle::onActivated);
|
|
||||||
connect(m_sourceMutual,&source_dbus::ready,this,&updatehandle::getTemplateList);
|
|
||||||
m_sourceMutual->connectDbus();
|
|
||||||
} else if (argnum.contains("--check-upgrade",Qt::CaseInsensitive)||ignore_or_delay) {
|
|
||||||
//连接关闭功能槽函数
|
//连接关闭功能槽函数
|
||||||
connect(choice_window,&updatewidget::disAgreeBtnSignals,this,&updatehandle::execslots);
|
connect(choice_window,&updatewidget::disAgreeBtnSignals,this,&updatehandle::execslots);
|
||||||
UpdateDectCheck(ignore_or_delay);
|
UpdateDectCheck();
|
||||||
} else {
|
} else {
|
||||||
qDebug()<<"No update,exit!";
|
qDebug()<<"no --check-upgrade, exit.";
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -113,9 +97,9 @@ void updatehandle::tray_Show()
|
||||||
if (!m_updateMutual->listenState()) {
|
if (!m_updateMutual->listenState()) {
|
||||||
if (m_getsql()) {
|
if (m_getsql()) {
|
||||||
qDebug()<<"m_getsql 的值为true";
|
qDebug()<<"m_getsql 的值为true";
|
||||||
choice_window->update_lab->setText(tr("System update"));
|
choice_window->update_lab->setText(tr("System update detected"));
|
||||||
if (argnum != "update") {
|
if (argnum != "update") {
|
||||||
choice_window->updateWidgetShow();
|
choice_window->show();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qDebug()<<"更新管理器关闭检测更新,托盘程序结束";
|
qDebug()<<"更新管理器关闭检测更新,托盘程序结束";
|
||||||
|
@ -219,10 +203,8 @@ void updatehandle::getTemplateList()
|
||||||
QString str2;
|
QString str2;
|
||||||
QStringList m_crucial;
|
QStringList m_crucial;
|
||||||
QFile file1("/var/lib/kylin-software-properties/template/crucial.list");
|
QFile file1("/var/lib/kylin-software-properties/template/crucial.list");
|
||||||
if (!file1.open(QIODevice::ReadOnly | QIODevice::Text)){
|
if (!file1.open(QIODevice::ReadOnly | QIODevice::Text))
|
||||||
qDebug()<<"cat not open file crucial.list";
|
return ;
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
while (!file1.atEnd()) {
|
while (!file1.atEnd()) {
|
||||||
QByteArray line = file1.readLine();
|
QByteArray line = file1.readLine();
|
||||||
str1 += QString(line);
|
str1 += QString(line);
|
||||||
|
@ -234,10 +216,8 @@ void updatehandle::getTemplateList()
|
||||||
|
|
||||||
QStringList m_important;
|
QStringList m_important;
|
||||||
QFile file2("/var/lib/kylin-software-properties/template/important.list");
|
QFile file2("/var/lib/kylin-software-properties/template/important.list");
|
||||||
if (!file2.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
if (!file2.open(QIODevice::ReadOnly | QIODevice::Text))
|
||||||
qDebug()<<"cat not open file important.list";
|
return ;
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
while (!file2.atEnd()) {
|
while (!file2.atEnd()) {
|
||||||
QByteArray line = file2.readLine();
|
QByteArray line = file2.readLine();
|
||||||
str2 += QString(line);
|
str2 += QString(line);
|
||||||
|
@ -309,7 +289,6 @@ void updatehandle::handleCrucial(QStringList checkCrucialAll)
|
||||||
for (int i=1;i<checkCrucialAll.count();i+=2) {
|
for (int i=1;i<checkCrucialAll.count();i+=2) {
|
||||||
crucialPackageSize.append(checkCrucialAll.at(i));
|
crucialPackageSize.append(checkCrucialAll.at(i));
|
||||||
}
|
}
|
||||||
checkCrucial = crucialPackage;
|
|
||||||
qDebug()<<"Checking for inactivity in silent upgrading ...";
|
qDebug()<<"Checking for inactivity in silent upgrading ...";
|
||||||
timerDownload->start(20*60*1000);
|
timerDownload->start(20*60*1000);
|
||||||
if (powerState) { //判断是否获取到电量
|
if (powerState) { //判断是否获取到电量
|
||||||
|
@ -333,31 +312,31 @@ void updatehandle::handleCrucial(QStringList checkCrucialAll)
|
||||||
notify_send(tr("The system is updating silently"));
|
notify_send(tr("The system is updating silently"));
|
||||||
trayIcon->setVisible(true);
|
trayIcon->setVisible(true);
|
||||||
qDebug()<<"The system is updating silently ...";
|
qDebug()<<"The system is updating silently ...";
|
||||||
m_updateMutual->installAndUpgrade(crucialPackage);
|
// m_updateMutual->installAndUpgrade(crucialPackage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief updatehandle::UpdateDectSlot
|
* @brief updatehandle::handleImportant
|
||||||
* 处理可选升级包
|
* 处理可选升级包
|
||||||
*/
|
*/
|
||||||
void updatehandle::UpdateDectSlot(bool status,QStringList list,QString errorstring,QString errorcode)
|
void updatehandle::UpdateDectSlot()
|
||||||
{
|
{
|
||||||
if (!status) {
|
// if (!status) {
|
||||||
qDebug() << "Update Detect failed: " << QString("%1 %2").arg(errorstring).arg(errorcode);
|
//// qDebug() << "Update Detect failed: " << QString("%1 %2").arg(errorstring).arg(errorcode);
|
||||||
exit(0);
|
// exit(0);
|
||||||
} else {
|
// } else {
|
||||||
if (list.length() == 0) {
|
// if (list.length() == 0) {
|
||||||
qDebug() << "The software on this computer is up to date, exit!";
|
// qDebug() << "The software on this computer is up to date, exit!";
|
||||||
exit(0);
|
// exit(0);
|
||||||
} else {
|
// } else {
|
||||||
choice_window->update_lab->setText(tr("System update"));
|
choice_window->update_lab->setText(tr("System update detected"));
|
||||||
if (argnum != "update") {
|
if (argnum != "update") {
|
||||||
choice_window->updateWidgetShow();
|
choice_window->show();
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
//完成检测,刷新下次更新标志位
|
//完成检测,刷新下次更新标志位
|
||||||
timersetting->beginGroup(QString::fromLocal8Bit("Timer"));
|
timersetting->beginGroup(QString::fromLocal8Bit("Timer"));
|
||||||
timersetting->setValue("GeneratRandomTime",true);
|
timersetting->setValue("GeneratRandomTime",true);
|
||||||
|
@ -370,11 +349,31 @@ void updatehandle::UpdateDectSlot(bool status,QStringList list,QString errorstri
|
||||||
* @brief updatehandle::UpdateDectCheck
|
* @brief updatehandle::UpdateDectCheck
|
||||||
* 处理可选升级包
|
* 处理可选升级包
|
||||||
*/
|
*/
|
||||||
void updatehandle::UpdateDectCheck(bool _check_immediately)
|
void updatehandle::UpdateDectCheck()
|
||||||
{
|
{
|
||||||
//判断是否有系统更新
|
//判断是否有系统更新
|
||||||
if(checktime() || !RandomizedExecute || _check_immediately){
|
if(!checktime()){
|
||||||
if (m_getsql() || _check_immediately) {
|
qDebug()<<"Detection update has been opened ...";
|
||||||
|
// connect(m_updateMutual,&update_dbus::UpdateDectFinished,this,&updatehandle::UpdateDectSlot);
|
||||||
|
QDBusConnection::systemBus().connect(QString(),QString("/"),"com.kylin.update.notification","DownloadFinish",this,SLOT(UpdateDectSlot()));
|
||||||
|
// bool ret= m_updateMutual->checkForUpdateDect();
|
||||||
|
} else {
|
||||||
|
qDebug()<<"The scheduled time is not reached, exit.";
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief updatehandle::handleImportant
|
||||||
|
* 处理可选升级包
|
||||||
|
*/
|
||||||
|
void updatehandle::handleImportant()
|
||||||
|
{
|
||||||
|
//判断是否需要检查系统更新
|
||||||
|
|
||||||
|
if(checktime()){
|
||||||
|
if (!m_updateMutual->listenState()) {
|
||||||
|
if (m_getsql()) {
|
||||||
qDebug()<<"Detection update has been opened ...";
|
qDebug()<<"Detection update has been opened ...";
|
||||||
connect(m_updateMutual,&update_dbus::UpdateDectFinished,this,&updatehandle::UpdateDectSlot);
|
connect(m_updateMutual,&update_dbus::UpdateDectFinished,this,&updatehandle::UpdateDectSlot);
|
||||||
bool ret= m_updateMutual->checkForUpdateDect();
|
bool ret= m_updateMutual->checkForUpdateDect();
|
||||||
|
@ -383,48 +382,13 @@ void updatehandle::UpdateDectCheck(bool _check_immediately)
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qDebug()<<"The scheduled time is not reached, exit.";
|
qDebug()<<"更新管理器已运行,程序退出";
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatehandle::ignoreOrDelays
|
|
||||||
* 处理可选升级包
|
|
||||||
*/
|
|
||||||
bool updatehandle::ignoreOrDelay(bool mode)
|
|
||||||
{
|
|
||||||
static char flagPath[64] = {0};
|
|
||||||
sprintf(flagPath, "/var/cache/kylin-update-manager/ignoreOrDelay");
|
|
||||||
bool ignore_or_delay = false;
|
|
||||||
QFile file(flagPath);
|
|
||||||
|
|
||||||
//判断是否完成第一步更新
|
|
||||||
if (access(flagPath, F_OK) == 0) { // flag文件存在且可写
|
|
||||||
qDebug()<<flagPath<<"is found!";
|
|
||||||
|
|
||||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
|
|
||||||
ignore_or_delay = false;
|
|
||||||
QByteArray line = file.readLine();
|
|
||||||
if(QString(line).contains("2107",Qt::CaseInsensitive)) {
|
|
||||||
ignore_or_delay = true;
|
|
||||||
qDebug()<<"The first step of the upgrade has been completed, Detection of the second step of the upgrade! [2107]";
|
|
||||||
// //需要清空文件
|
|
||||||
// file.close();
|
|
||||||
// file.open(QIODevice::Truncate);
|
|
||||||
// file.close();
|
|
||||||
// file.open(QIODevice::WriteOnly);
|
|
||||||
} else if (QString(line).contains("2203",Qt::CaseInsensitive)) {
|
|
||||||
ignore_or_delay = true;
|
|
||||||
qDebug()<<"The first step of the upgrade has been completed, Detection of the second step of the upgrade! [2203]";
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
qDebug()<<flagPath<<"isn't found!";
|
qDebug()<<"The scheduled time is not reached, exit.";
|
||||||
ignore_or_delay = false;
|
exit(0);
|
||||||
}
|
}
|
||||||
file.close();
|
|
||||||
return ignore_or_delay&&mode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -500,14 +464,10 @@ void updatehandle::d_busStatus(QString arg,int32_t args,QString state)
|
||||||
|
|
||||||
void updatehandle::InstallFinsih(bool state,QStringList pkgname,QString error,QString reason)
|
void updatehandle::InstallFinsih(bool state,QStringList pkgname,QString error,QString reason)
|
||||||
{
|
{
|
||||||
bool _check_status;
|
|
||||||
timerDownload->stop();
|
timerDownload->stop();
|
||||||
//apt返回失败时判断是否安装成功
|
if(state){
|
||||||
if (!state)
|
|
||||||
_check_status = package_installation_status(checkCrucial);
|
|
||||||
|
|
||||||
if(state || _check_status){
|
|
||||||
qDebug() << "Silent upgrade is complete, exit.";
|
qDebug() << "Silent upgrade is complete, exit.";
|
||||||
|
// qDebug() << (tr("The system has completed an important update, It is recommended that you restart immediately."));
|
||||||
notify_send(tr("The system has completed an important update, It is recommended that you restart immediately."));
|
notify_send(tr("The system has completed an important update, It is recommended that you restart immediately."));
|
||||||
}else{
|
}else{
|
||||||
QString errorstate = tr("update error");
|
QString errorstate = tr("update error");
|
||||||
|
@ -521,55 +481,12 @@ void updatehandle::InstallFinsih(bool state,QStringList pkgname,QString error,QS
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool updatehandle::package_installation_status(QStringList pkgs)
|
|
||||||
{
|
|
||||||
QString pkgname;
|
|
||||||
QString cmd;
|
|
||||||
QProcess process;
|
|
||||||
bool status,status_single;
|
|
||||||
for (QStringList::iterator it = pkgs.begin(); it != pkgs.end(); ++it) {
|
|
||||||
pkgname = *it;
|
|
||||||
status_single = false;
|
|
||||||
cmd = QString("dpkg -l %1").arg(pkgname);
|
|
||||||
process.start(cmd);
|
|
||||||
process.waitForFinished();
|
|
||||||
QByteArray result_ = process.readAllStandardOutput();
|
|
||||||
if (QString::fromLocal8Bit(result_) != "") {
|
|
||||||
QStringList rets = QString::fromLocal8Bit(result_).split(QRegExp("[\n]"),QString::SkipEmptyParts);
|
|
||||||
for (QStringList::iterator it_ret = rets.begin(); it_ret != rets.end(); ++it_ret) {
|
|
||||||
QString ret;
|
|
||||||
ret = *it_ret;
|
|
||||||
if (ret.contains(pkgname) && ret.startsWith("ii")) {
|
|
||||||
status_single = true;
|
|
||||||
qDebug() << "pkg "<<pkgname<<",Installation succeeded.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!status_single) { //install failed
|
|
||||||
status = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
status = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (status_single)
|
|
||||||
status = true;
|
|
||||||
}
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief updatehandle::execslots
|
* @brief updatehandle::execslots
|
||||||
* 关闭界面槽函数
|
* 关闭界面槽函数
|
||||||
*/
|
*/
|
||||||
void updatehandle::execslots()
|
void updatehandle::execslots()
|
||||||
{
|
{
|
||||||
//设置推迟检测,更新标志位
|
|
||||||
timersetting->beginGroup(QString::fromLocal8Bit("Timer"));
|
|
||||||
timersetting->setValue("CheckCompleted",false);
|
|
||||||
timersetting->setValue("GeneratRandomTime",false);
|
|
||||||
timersetting->sync();
|
|
||||||
timersetting->endGroup();
|
|
||||||
emit execSignal();
|
emit execSignal();
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,9 +86,7 @@ public:
|
||||||
void readconf(); //读取配置文件
|
void readconf(); //读取配置文件
|
||||||
int _secsTo(QString,QString); //时间差
|
int _secsTo(QString,QString); //时间差
|
||||||
void getpower(); //获取电量值
|
void getpower(); //获取电量值
|
||||||
void UpdateDectCheck(bool); //调用后端UpdateDetect
|
void UpdateDectCheck(); //调用后端UpdateDetect
|
||||||
bool ignoreOrDelay(bool mode); //是否开机检查检查弹窗
|
|
||||||
bool package_installation_status(QStringList);
|
|
||||||
signals:
|
signals:
|
||||||
void execSignal(); //关闭窗口信号
|
void execSignal(); //关闭窗口信号
|
||||||
|
|
||||||
|
@ -99,7 +97,7 @@ protected slots:
|
||||||
void d_busStatus(QString,int32_t,QString); //判断下载状态的槽函数
|
void d_busStatus(QString,int32_t,QString); //判断下载状态的槽函数
|
||||||
void InstallFinsih(bool,QStringList,QString,QString); //状态槽函数
|
void InstallFinsih(bool,QStringList,QString,QString); //状态槽函数
|
||||||
void downloadTimeout(); //延时检测下载状态
|
void downloadTimeout(); //延时检测下载状态
|
||||||
void UpdateDectSlot(bool,QStringList,QString,QString); //updatedetect回调函数
|
void UpdateDectSlot(); //updatedetect回调函数
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TRAY_H
|
#endif // TRAY_H
|
|
@ -1,11 +1,6 @@
|
||||||
#include "updatewidget.h"
|
#include "updatewidget.h"
|
||||||
#include "ui_updatewidget.h"
|
#include "ui_updatewidget.h"
|
||||||
#include <QPainterPath>
|
#include <QPainterPath>
|
||||||
#include <QToolTip>
|
|
||||||
#include <QHoverEvent>
|
|
||||||
#include "ukuistylehelper/ukuistylehelper.h"
|
|
||||||
#include "windowmanager/windowmanager.h"
|
|
||||||
|
|
||||||
#define PANEL_DBUS_SERVICE "com.ukui.panel.desktop"
|
#define PANEL_DBUS_SERVICE "com.ukui.panel.desktop"
|
||||||
#define PANEL_DBUS_PATH "/"
|
#define PANEL_DBUS_PATH "/"
|
||||||
#define PANEL_DBUS_INTERFACE "com.ukui.panel.desktop"
|
#define PANEL_DBUS_INTERFACE "com.ukui.panel.desktop"
|
||||||
|
@ -15,7 +10,7 @@
|
||||||
#define DBUS_PATH "/org/ukui/SettingsDaemon/wayland"
|
#define DBUS_PATH "/org/ukui/SettingsDaemon/wayland"
|
||||||
#define DBUS_INTERFACE "org.ukui.SettingsDaemon.wayland"
|
#define DBUS_INTERFACE "org.ukui.SettingsDaemon.wayland"
|
||||||
|
|
||||||
updatewidget::updatewidget(bool check_Tips, QWidget *parent) :
|
updatewidget::updatewidget(QWidget *parent) :
|
||||||
QWidget(parent),
|
QWidget(parent),
|
||||||
ui(new Ui::Form)
|
ui(new Ui::Form)
|
||||||
{
|
{
|
||||||
|
@ -27,7 +22,6 @@ updatewidget::updatewidget(bool check_Tips, QWidget *parent) :
|
||||||
initPanelDbusGsetting();
|
initPanelDbusGsetting();
|
||||||
GetsAvailableAreaScreen();
|
GetsAvailableAreaScreen();
|
||||||
qDebug()<<"not wayland";
|
qDebug()<<"not wayland";
|
||||||
bIsWayland = false;
|
|
||||||
} else {
|
} else {
|
||||||
//注释掉的是原先的接口,已经废除。采用原本的获取方式
|
//注释掉的是原先的接口,已经废除。采用原本的获取方式
|
||||||
// initset_window_position();
|
// initset_window_position();
|
||||||
|
@ -35,179 +29,69 @@ updatewidget::updatewidget(bool check_Tips, QWidget *parent) :
|
||||||
initPanelDbusGsetting();
|
initPanelDbusGsetting();
|
||||||
GetsAvailableAreaScreen();
|
GetsAvailableAreaScreen();
|
||||||
qDebug()<<"wayland";
|
qDebug()<<"wayland";
|
||||||
bIsWayland = true;
|
|
||||||
}
|
}
|
||||||
_check_Tips = check_Tips;
|
|
||||||
//设置任务栏无显示
|
//设置任务栏无显示
|
||||||
setWindowFlags(Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
|
setWindowFlags(Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
|
||||||
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
|
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
|
||||||
|
|
||||||
update_lab = new QLabel();
|
update_lab = new QLabel();
|
||||||
icon_lab = new QLabel();
|
|
||||||
|
|
||||||
tip_lab = new QLabel();
|
tip_lab = new QLabel();
|
||||||
tip_lab->setText(tr(" Updatable app detected on your system!"));
|
tip_lab->setText(tr("at"));
|
||||||
agreebtn = new FixButton();
|
tip_lab1 = new QLabel();
|
||||||
delaybtn = new FixButton();
|
tip_lab1->setText(tr("No reminders"));
|
||||||
window_close = new QPushButton(this);
|
agreebtn = new QPushButton();
|
||||||
|
disagreebtn = new QPushButton();
|
||||||
window_close->setIcon(QIcon::fromTheme("window-close-symbolic"));
|
|
||||||
window_close->setProperty("isWindowButton", 0x2);
|
|
||||||
window_close->setProperty("useIconHighlightEffect", 0x8);
|
|
||||||
window_close->setFlat(true);
|
|
||||||
window_close->setToolTip(tr("Close"));
|
|
||||||
window_close->installEventFilter(this);
|
|
||||||
connect(window_close, &QPushButton::clicked, this, &updatewidget::onClick_close_btn);
|
|
||||||
|
|
||||||
QPixmap icon(QIcon::fromTheme("ukui-control-center").pixmap(QSize(26,26)));
|
|
||||||
|
|
||||||
m_pfirstlayout = new QVBoxLayout();
|
m_pfirstlayout = new QVBoxLayout();
|
||||||
m_labellayout = new QHBoxLayout();
|
m_labellayout = new QHBoxLayout();
|
||||||
m_psecondlayout = new QHBoxLayout();
|
m_psecondlayout = new QHBoxLayout();
|
||||||
m_pselectlayout = new QHBoxLayout();
|
m_pselectlayout = new QHBoxLayout();
|
||||||
|
|
||||||
comboBox = new QComboBox();
|
comboBox = new QComboBox();
|
||||||
comboBox->clear();
|
comboBox->clear();
|
||||||
strList<<tr("30 minutes later")<<tr("1 hour later")<<tr("5 hours later")<<tr("1 day later")<<tr("3 days later");
|
strList<<tr("In 30 minutes")<<tr("one hours later")<<tr("five hours later")<<tr("one day later")<<tr("three day later")<<tr("five day later");
|
||||||
comboBox->addItems(strList);
|
comboBox->addItems(strList);
|
||||||
comboBox->installEventFilter(this);
|
|
||||||
|
|
||||||
labelwidget = new QWidget();
|
labelwidget = new QWidget();
|
||||||
selectWidget = new QWidget();
|
|
||||||
statwidget = new QWidget();
|
statwidget = new QWidget();
|
||||||
|
selectWidget = new QWidget();
|
||||||
|
|
||||||
agreebtn->setText(tr("Update"),1);
|
agreebtn->setText(tr("Update"));
|
||||||
agreebtn->installEventFilter(this);
|
disagreebtn->setText(tr("Delay"));
|
||||||
delaybtn->setText(tr("Delay"),1);
|
|
||||||
delaybtn->installEventFilter(this);
|
|
||||||
|
|
||||||
connect(agreebtn,&QPushButton::clicked,this,&updatewidget::agreeBtnClicked);
|
connect(agreebtn,&QPushButton::clicked,this,&updatewidget::agreeBtnClicked);
|
||||||
connect(comboBox,SIGNAL(activated(int)),this,SLOT(comboBoxClicked(int)));
|
connect(disagreebtn,&QPushButton::clicked,this,&updatewidget::disAgreeBtnClicked);
|
||||||
connect(delaybtn,&QPushButton::clicked,this,&updatewidget::delayBtnClicked);
|
|
||||||
|
|
||||||
icon_lab->setPixmap(icon);
|
|
||||||
icon_lab->setScaledContents(true);
|
|
||||||
icon_lab->setMaximumSize(26,26);
|
|
||||||
update_lab->setMaximumHeight(26);
|
|
||||||
update_lab->setContentsMargins(0,0,0,3);
|
|
||||||
window_close->setFixedSize(24,24);
|
|
||||||
window_close->setContentsMargins(0,0,0,3);
|
|
||||||
m_labellayout->addWidget(icon_lab);
|
|
||||||
m_labellayout->addWidget(update_lab);
|
m_labellayout->addWidget(update_lab);
|
||||||
m_labellayout->addStretch();
|
|
||||||
m_labellayout->addWidget(window_close);
|
|
||||||
m_labellayout->setContentsMargins(0,0,0,20);
|
|
||||||
labelwidget->setLayout(m_labellayout);
|
labelwidget->setLayout(m_labellayout);
|
||||||
|
|
||||||
m_pselectlayout->addWidget(tip_lab);
|
m_pselectlayout->addWidget(tip_lab);
|
||||||
m_pselectlayout->setContentsMargins(0,0,0,25);
|
m_pselectlayout->addWidget(comboBox);
|
||||||
|
m_pselectlayout->addWidget(tip_lab1);
|
||||||
|
m_pselectlayout->addStretch();
|
||||||
selectWidget->setLayout(m_pselectlayout);
|
selectWidget->setLayout(m_pselectlayout);
|
||||||
|
|
||||||
m_psecondlayout->addStretch();
|
|
||||||
comboBox->setFixedHeight(35);
|
m_psecondlayout->addWidget(disagreebtn);
|
||||||
comboBox->setMinimumWidth(135);
|
|
||||||
comboBox->setMaximumWidth(155);
|
|
||||||
agreebtn->setFixedSize(100,35);
|
|
||||||
if (_check_Tips)
|
|
||||||
m_psecondlayout->addWidget(delaybtn);
|
|
||||||
else
|
|
||||||
m_psecondlayout->addWidget(comboBox);
|
|
||||||
m_psecondlayout->addWidget(agreebtn);
|
m_psecondlayout->addWidget(agreebtn);
|
||||||
m_psecondlayout->setSpacing(15); //set space between comboBox and btn
|
|
||||||
m_psecondlayout->setContentsMargins(0,0,12,12);
|
|
||||||
statwidget->setLayout(m_psecondlayout);
|
statwidget->setLayout(m_psecondlayout);
|
||||||
|
|
||||||
m_pfirstlayout->addWidget(labelwidget);
|
m_pfirstlayout->addWidget(labelwidget);
|
||||||
m_pfirstlayout->addWidget(selectWidget);
|
m_pfirstlayout->addWidget(selectWidget);
|
||||||
m_pfirstlayout->addWidget(statwidget);
|
m_pfirstlayout->addWidget(statwidget);
|
||||||
|
|
||||||
m_pfirstlayout->setSpacing(2);
|
|
||||||
this->setLayout(m_pfirstlayout);
|
this->setLayout(m_pfirstlayout);
|
||||||
this->setFixedSize(435,160);
|
this->setAttribute(Qt::WA_TranslucentBackground);
|
||||||
|
this->setFixedSize(330,180);
|
||||||
|
|
||||||
// QGSettings *settings;
|
|
||||||
// if(QGSettings::isSchemaInstalled("org.ukui.style")){
|
|
||||||
// settings = new QGSettings("org.ukui.style");
|
|
||||||
// connect(settings,&QGSettings::changed,this,&ActiveConnectionWidget::GSettingsChanges);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// const QByteArray transparency_id(TRANSPARENCY_SETTINGS);
|
|
||||||
// if(QGSettings::isSchemaInstalled(transparency_id)) {
|
|
||||||
// transparency = new QGSettings(transparency_id);
|
|
||||||
// }
|
|
||||||
// if(QGSettings::isSchemaInstalled(transparency_id)) {
|
|
||||||
// getTransparency();
|
|
||||||
// connect(transparency,&QGSettings::changed,this,&ActiveConnectionWidget::GSettingsChanges);
|
|
||||||
// }
|
|
||||||
|
|
||||||
this->setProperty("useStyleWindowManager", false);
|
|
||||||
this->setProperty("useSystemStyleBlur", true);
|
|
||||||
this->setAttribute(Qt::WA_TranslucentBackground, true);
|
|
||||||
this->setWindowOpacity(0.9);
|
|
||||||
|
|
||||||
// labelwidget->setStyleSheet("background-color:green;");
|
|
||||||
// update_lab->setStyleSheet("background-color:blue;");
|
|
||||||
// selectWidget->setStyleSheet("background-color:red;");
|
|
||||||
// statwidget->setStyleSheet("background-color:orange;");
|
|
||||||
// comboBox->setStyleSheet("background-color:violet;");
|
|
||||||
// agreebtn->setStyleSheet("background-color:yellow;");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
updatewidget::~updatewidget()
|
updatewidget::~updatewidget()
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO << __LINE__;
|
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
void updatewidget::updateWidgetShow()
|
|
||||||
{
|
|
||||||
this->show();
|
|
||||||
qDebug()<<"should show:"<<updateWidgetRect;
|
|
||||||
|
|
||||||
if (bIsWayland)
|
|
||||||
kdk::WindowManager::setGeometry(this->windowHandle(), updateWidgetRect);
|
|
||||||
else
|
|
||||||
this->setGeometry(updateWidgetRect);
|
|
||||||
}
|
|
||||||
|
|
||||||
void updatewidget::onClick_close_btn()
|
|
||||||
{
|
|
||||||
// emit disAgreeBtnSignals();
|
|
||||||
qDebug()<<"User Cancel reminder, exit tray program!";
|
|
||||||
// exit(0);
|
|
||||||
qApp->quit();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatewidget::eventFilter
|
|
||||||
* 事件过滤器
|
|
||||||
*/
|
|
||||||
bool updatewidget::eventFilter(QObject *obj, QEvent *event)
|
|
||||||
{
|
|
||||||
if (obj == this->window_close) { //指定window_close
|
|
||||||
if (event->type() == QEvent::HoverMove) {
|
|
||||||
QPushButton *close_btn = qobject_cast<QPushButton *>(obj);
|
|
||||||
if (close_btn) {
|
|
||||||
QToolTip::showText(QCursor::pos(), close_btn->toolTip());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (obj == this->agreebtn || obj == this->delaybtn) {
|
|
||||||
if (event->type() == QEvent::HoverMove) {
|
|
||||||
FixButton *btn = qobject_cast<FixButton *>(obj);
|
|
||||||
if (btn) {
|
|
||||||
QToolTip::showText(QCursor::pos(), btn->toolTip());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (obj == this->comboBox) {
|
|
||||||
if (event->type() == QEvent::HoverMove) {
|
|
||||||
QComboBox *comboBox = qobject_cast<QComboBox *>(obj);
|
|
||||||
if (comboBox) {
|
|
||||||
QToolTip::showText(QCursor::pos(), comboBox->toolTip());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return QWidget::eventFilter(obj, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief updatewidget::initPanelDbusGsetting
|
* @brief updatewidget::initPanelDbusGsetting
|
||||||
* 初始化与任务栏gsetting和dbus
|
* 初始化与任务栏gsetting和dbus
|
||||||
|
@ -297,26 +181,26 @@ void updatewidget::GetsAvailableAreaScreen()
|
||||||
{
|
{
|
||||||
case updatewidget::PanelDown :
|
case updatewidget::PanelDown :
|
||||||
{
|
{
|
||||||
qDebug()<<"Taskbar coordinates: [ '"<<m_nScreenWidth-445<<"','"<< m_nScreenHeight-h-170<<"','"<<300<<"','"<<150 - 100<<"']";
|
this->setGeometry(m_nScreenWidth - 340,m_nScreenHeight - h - 190,300,150-100);
|
||||||
updateWidgetRect = QRect(m_nScreenWidth-445, m_nScreenHeight-h-170, 300, 150-100);
|
qDebug()<<"Taskbar coordinates: [ '"<<m_nScreenWidth-340<<"','"<< m_nScreenHeight-h-190<<"','"<<300<<"','"<<150 - 100<<"']";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case updatewidget::PanelUp:
|
case updatewidget::PanelUp:
|
||||||
{
|
{
|
||||||
qDebug()<<"任务栏在上方: 显示坐标为: "<<m_nScreenWidth - 445 << m_nScreenHeight - 170 << 300 << 150 - 100;
|
this->setGeometry(m_nScreenWidth - 340,m_nScreenHeight - 190,300,150-100);
|
||||||
updateWidgetRect = QRect(m_nScreenWidth-445, m_nScreenHeight-170, 300, 150-100);
|
qDebug()<<"任务栏在上方: 显示坐标为: "<<m_nScreenWidth - 340 << m_nScreenHeight - 190 << 300 << 150 - 100;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case updatewidget::PanelLeft:
|
case updatewidget::PanelLeft:
|
||||||
{
|
{
|
||||||
qDebug()<<"任务栏在左侧: 显示坐标为: "<<m_nScreenWidth - 445 << m_nScreenHeight - 170 << 300 << 150 - 100;
|
this->setGeometry(m_nScreenWidth - 340,m_nScreenHeight - 190,300,150-100);
|
||||||
updateWidgetRect = QRect(m_nScreenWidth-445, m_nScreenHeight-170, 300, 150-100);
|
qDebug()<<"任务栏在左侧: 显示坐标为: "<<m_nScreenWidth - 340 << m_nScreenHeight - 190 << 300 << 150 - 100;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case updatewidget::PanelRight:
|
case updatewidget::PanelRight:
|
||||||
{
|
{
|
||||||
qDebug()<<"任务栏在右侧: 显示坐标为: "<<m_nScreenWidth - 445 - h << m_nScreenHeight - 170 << 300 << 150 - 100;
|
this->setGeometry(m_nScreenWidth - 340 - h,m_nScreenHeight - 190,300,150-100);
|
||||||
updateWidgetRect = QRect(m_nScreenWidth-445, m_nScreenHeight-170, 300, 150-100);
|
qDebug()<<"任务栏在右侧: 显示坐标为: "<<m_nScreenWidth - 340 - h << m_nScreenHeight - 190 << 300 << 150 - 100;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -405,20 +289,20 @@ void updatewidget::set_window_position()
|
||||||
m = getTaskbarHeight("height");
|
m = getTaskbarHeight("height");
|
||||||
if(n == 0){
|
if(n == 0){
|
||||||
//任务栏在下侧
|
//任务栏在下侧
|
||||||
this->setGeometry(priWid-435-distance,availableHeight-160-m-distance,this->width(),this->height());
|
this->setGeometry(priWid-330-distance,availableHeight-180-m-distance,this->width(),this->height());
|
||||||
qDebug()<<"任务栏在下侧"<<priWid-435-distance<<" "<<availableHeight-160-m-distance <<" "<<this->width()<<" "<<this->height();
|
qDebug()<<"任务栏在下侧"<<priWid-330-distance<<" "<<availableHeight-180-m-distance <<" "<<this->width()<<" "<<this->height();
|
||||||
}else if(n == 1){
|
}else if(n == 1){
|
||||||
//任务栏在上侧
|
//任务栏在上侧
|
||||||
this->setGeometry(priWid-435-distance,availableHeight-160-distance,this->width(),this->height());
|
this->setGeometry(priWid-330-distance,availableHeight-180-distance,this->width(),this->height());
|
||||||
qDebug()<<"任务栏在上侧"<<priWid-435-distance<<" "<<availableHeight-160-distance <<" "<<this->width()<<" "<<this->height();
|
qDebug()<<"任务栏在上侧"<<priWid-330-distance<<" "<<availableHeight-180-distance <<" "<<this->width()<<" "<<this->height();
|
||||||
} else if (n == 2){
|
} else if (n == 2){
|
||||||
//任务栏在左侧
|
//任务栏在左侧
|
||||||
this->setGeometry(priWid-435-distance,availableHeight-160-distance,this->width(),this->height());
|
this->setGeometry(priWid-330-distance,availableHeight-180-distance,this->width(),this->height());
|
||||||
qDebug()<<"任务栏在左侧"<<priWid-435-distance<<" "<<availableHeight-160-distance <<" "<<this->width()<<" "<<this->height();
|
qDebug()<<"任务栏在左侧"<<priWid-330-distance<<" "<<availableHeight-180-distance <<" "<<this->width()<<" "<<this->height();
|
||||||
} else if (n == 3){
|
} else if (n == 3){
|
||||||
//任务栏在右侧
|
//任务栏在右侧
|
||||||
this->setGeometry(availableWidth-435-m-distance,availableHeight-160-distance,this->width(),this->height());
|
this->setGeometry(availableWidth-330-m-distance,availableHeight-180-distance,this->width(),this->height());
|
||||||
qDebug()<<"任务栏在右侧"<<availableWidth-435-m-distance<<" "<<availableHeight-160-distance <<" "<<this->width()<<" "<<this->height();
|
qDebug()<<"任务栏在右侧"<<availableWidth-330-m-distance<<" "<<availableHeight-180-distance <<" "<<this->width()<<" "<<this->height();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -429,7 +313,7 @@ void updatewidget::set_window_position()
|
||||||
*/
|
*/
|
||||||
char *updatewidget::insideTime()
|
char *updatewidget::insideTime()
|
||||||
{
|
{
|
||||||
qDebug()<<"current select: "<<this->comboBox->currentText();
|
qDebug()<<comboBox->currentText();
|
||||||
QDateTime time = QDateTime::currentDateTime(); //获取系统现在的时间
|
QDateTime time = QDateTime::currentDateTime(); //获取系统现在的时间
|
||||||
QString str = time.toString("yyyy-MM-dd hh:mm:ss"); //设置显示格式
|
QString str = time.toString("yyyy-MM-dd hh:mm:ss"); //设置显示格式
|
||||||
QByteArray str2char2 = str.toLatin1(); // must
|
QByteArray str2char2 = str.toLatin1(); // must
|
||||||
|
@ -475,24 +359,19 @@ char *updatewidget::insideTime()
|
||||||
QByteArray str2char2 = str1.toLatin1(); // must
|
QByteArray str2char2 = str1.toLatin1(); // must
|
||||||
nowtime = str2char2.data();
|
nowtime = str2char2.data();
|
||||||
return nowtime;
|
return nowtime;
|
||||||
|
} else if (comboBox->currentText() == strList.at(5)) {
|
||||||
|
QDateTime time = QDateTime::currentDateTime(); //获取系统现在的时间
|
||||||
|
QString str = time.toString("yyyy-MM-dd hh:mm:ss"); //设置显示格式
|
||||||
|
QDateTime bojb = QDateTime::fromString(str,"yyyy-MM-dd hh:mm:ss").addDays(5);
|
||||||
|
QString str1 = bojb.toString("yyyy-MM-dd hh:mm:ss");
|
||||||
|
QByteArray str2char2 = str1.toLatin1(); // must
|
||||||
|
nowtime = str2char2.data();
|
||||||
|
return nowtime;
|
||||||
}
|
}
|
||||||
return nowtime;
|
return nowtime;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool updatewidget::_is_openkylin()
|
|
||||||
{
|
|
||||||
QString OPENKYLIN_DISTTRIBUTOR = "Openkylin";
|
|
||||||
QString command = "lsb_release -i -s";
|
|
||||||
QProcess process;
|
|
||||||
process.start(command);
|
|
||||||
process.waitForFinished();
|
|
||||||
|
|
||||||
QString result = process.readAllStandardOutput();
|
|
||||||
int ret = result.left(OPENKYLIN_DISTTRIBUTOR.length()).compare(OPENKYLIN_DISTTRIBUTOR.left(OPENKYLIN_DISTTRIBUTOR.length()));
|
|
||||||
return (0 == ret)?true:false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief updatewidget::agreeBtnClicked
|
* @brief updatewidget::agreeBtnClicked
|
||||||
* 同意更新按钮槽函数
|
* 同意更新按钮槽函数
|
||||||
|
@ -500,35 +379,19 @@ bool updatewidget::_is_openkylin()
|
||||||
void updatewidget::agreeBtnClicked()
|
void updatewidget::agreeBtnClicked()
|
||||||
{
|
{
|
||||||
emit agreeBtnSignals();
|
emit agreeBtnSignals();
|
||||||
bool _is_2107 = true;
|
qDebug()<<"WifiButtonClickSlot is running";
|
||||||
QFile file("/etc/os-release");
|
|
||||||
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
|
||||||
QString line;
|
|
||||||
QTextStream in(&file);
|
|
||||||
line = in.readLine();
|
|
||||||
while(!line.isNull()) {
|
|
||||||
line = in.readLine();
|
|
||||||
if(line.contains("KYLIN_RELEASE_ID")) {
|
|
||||||
_is_2107 = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file.close();
|
|
||||||
QProcess p(0);
|
QProcess p(0);
|
||||||
|
|
||||||
p.startDetached("ukui-control-center -m upgrade");
|
p.startDetached("ukui-control-center -m upgrade");
|
||||||
qDebug()<<"exec -m upgrade";
|
|
||||||
|
|
||||||
p.waitForStarted();
|
p.waitForStarted();
|
||||||
qDebug()<<"Open the control panel and start updating immediately, exit tray program!";
|
qDebug()<<"Open the control panel and start updating immediately, exit tray program!";
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief updatewidget::comboBoxClicked
|
* @brief updatewidget::disAgreeBtnClicked
|
||||||
* 推迟框槽函数
|
* 延迟提醒按钮槽函数
|
||||||
*/
|
*/
|
||||||
void updatewidget::comboBoxClicked(int num)
|
void updatewidget::disAgreeBtnClicked()
|
||||||
{
|
{
|
||||||
//判断是否有kylin-background-upgrade目录,没有则创建
|
//判断是否有kylin-background-upgrade目录,没有则创建
|
||||||
QString toDir = QDir::homePath();
|
QString toDir = QDir::homePath();
|
||||||
|
@ -545,7 +408,7 @@ void updatewidget::comboBoxClicked(int num)
|
||||||
exit(0);
|
exit(0);
|
||||||
} else {
|
} else {
|
||||||
char *nowtime=insideTime();
|
char *nowtime=insideTime();
|
||||||
qDebug() << "current timing: "<<nowtime;
|
qDebug() << "nowtime "<<nowtime;
|
||||||
timersettings = new QSettings(toDir,QSettings::IniFormat);
|
timersettings = new QSettings(toDir,QSettings::IniFormat);
|
||||||
timersettings->beginGroup(QString::fromLocal8Bit("Timer"));
|
timersettings->beginGroup(QString::fromLocal8Bit("Timer"));
|
||||||
timersettings->setValue("CheckUpgradeTime",nowtime);
|
timersettings->setValue("CheckUpgradeTime",nowtime);
|
||||||
|
@ -557,16 +420,6 @@ void updatewidget::comboBoxClicked(int num)
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief updatewidget::delayBtnClicked
|
|
||||||
* 延迟提醒,退出
|
|
||||||
*/
|
|
||||||
void updatewidget::delayBtnClicked()
|
|
||||||
{
|
|
||||||
qDebug() << "User deferred updates, exit!";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief updatewidget::paintEvent
|
* @brief updatewidget::paintEvent
|
||||||
* 样式绘画画家
|
* 样式绘画画家
|
||||||
|
@ -591,16 +444,6 @@ void updatewidget::paintEvent(QPaintEvent *e)
|
||||||
p.drawRoundedRect(opt.rect,12,12);
|
p.drawRoundedRect(opt.rect,12,12);
|
||||||
setProperty("blurRegion",QRegion(path.toFillPolygon().toPolygon()));
|
setProperty("blurRegion",QRegion(path.toFillPolygon().toPolygon()));
|
||||||
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
|
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
|
||||||
|
|
||||||
QFontMetrics fontMetrics(this->font());
|
|
||||||
QString current_str = comboBox->currentText();
|
|
||||||
int fontSize = fontMetrics.width(current_str);
|
|
||||||
int showTextSize = comboBox->width() - 32;
|
|
||||||
if (fontSize > showTextSize) {
|
|
||||||
QString elidedText = fontMetrics.elidedText(comboBox->currentText(), Qt::ElideRight, showTextSize);
|
|
||||||
comboBox->setItemText(comboBox->currentIndex(), elidedText);
|
|
||||||
comboBox->setToolTip(current_str);
|
|
||||||
}
|
|
||||||
QWidget::paintEvent(e);
|
QWidget::paintEvent(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -621,9 +464,7 @@ updateTip::updateTip(QWidget *parent) :
|
||||||
tipLabel->setText(tr("The system is updating silently"));
|
tipLabel->setText(tr("The system is updating silently"));
|
||||||
m_layout->addWidget(tipLabel);
|
m_layout->addWidget(tipLabel);
|
||||||
this->setLayout(m_layout);
|
this->setLayout(m_layout);
|
||||||
this->setProperty("useSystemStyleBlur", true);
|
this->setAttribute(Qt::WA_TranslucentBackground);
|
||||||
this->setAttribute(Qt::WA_TranslucentBackground, true);
|
|
||||||
this->setWindowOpacity(0.9);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
updateTip::~updateTip()
|
updateTip::~updateTip()
|
|
@ -21,8 +21,6 @@
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <QMouseEvent>
|
|
||||||
#include "Button/fixbutton.h"
|
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class Form;
|
class Form;
|
||||||
|
@ -33,7 +31,7 @@ class updatewidget : public QWidget
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit updatewidget(bool check_Tips, QWidget *parent = nullptr);
|
explicit updatewidget(QWidget *parent = nullptr);
|
||||||
~updatewidget();
|
~updatewidget();
|
||||||
|
|
||||||
enum PanelStatePosition
|
enum PanelStatePosition
|
||||||
|
@ -44,20 +42,16 @@ public:
|
||||||
PanelRight
|
PanelRight
|
||||||
};
|
};
|
||||||
|
|
||||||
bool _check_Tips;
|
|
||||||
QLabel *update_lab;
|
QLabel *update_lab;
|
||||||
QLabel *icon_lab;
|
|
||||||
QLabel *tip_lab;
|
QLabel *tip_lab;
|
||||||
QLabel *close_lab;
|
QLabel *tip_lab1;
|
||||||
|
|
||||||
FixButton *agreebtn;
|
QPushButton *agreebtn;
|
||||||
FixButton *delaybtn;
|
QPushButton *disagreebtn;
|
||||||
QPushButton *window_close;
|
|
||||||
QWidget *labelwidget;
|
QWidget *labelwidget;
|
||||||
QWidget *statwidget;
|
QWidget *statwidget;
|
||||||
QWidget *selectWidget;
|
QWidget *selectWidget;
|
||||||
QStringList strList;
|
QStringList strList;
|
||||||
QPixmap *icon;
|
|
||||||
|
|
||||||
QVBoxLayout *m_pfirstlayout = nullptr;
|
QVBoxLayout *m_pfirstlayout = nullptr;
|
||||||
QHBoxLayout *m_labellayout = nullptr;
|
QHBoxLayout *m_labellayout = nullptr;
|
||||||
|
@ -72,8 +66,6 @@ public:
|
||||||
int m_nScreenHeight; // 屏幕分辨率的高
|
int m_nScreenHeight; // 屏幕分辨率的高
|
||||||
int m_pPeonySite; // 任务栏位置
|
int m_pPeonySite; // 任务栏位置
|
||||||
QSettings *timersettings; //读取timer配置文件
|
QSettings *timersettings; //读取timer配置文件
|
||||||
QRect updateWidgetRect;
|
|
||||||
bool bIsWayland = false;
|
|
||||||
|
|
||||||
int connectTaskBarDbus();
|
int connectTaskBarDbus();
|
||||||
int getPanelSite();
|
int getPanelSite();
|
||||||
|
@ -86,9 +78,6 @@ public:
|
||||||
void initset_window_position();
|
void initset_window_position();
|
||||||
void listenPanelChange();
|
void listenPanelChange();
|
||||||
void initPanelDbusGsetting(); // 初始化与任务栏gsetting和dbus
|
void initPanelDbusGsetting(); // 初始化与任务栏gsetting和dbus
|
||||||
bool eventFilter(QObject *, QEvent *); // 添加事件过滤器声明
|
|
||||||
bool _is_openkylin();
|
|
||||||
void updateWidgetShow();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::Form *ui;
|
Ui::Form *ui;
|
||||||
|
@ -100,9 +89,8 @@ signals:
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void agreeBtnClicked();
|
void agreeBtnClicked();
|
||||||
void comboBoxClicked(int);
|
void disAgreeBtnClicked();
|
||||||
void delayBtnClicked();
|
|
||||||
void onClick_close_btn();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,92 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1" language="bo_CN">
|
||||||
|
<context>
|
||||||
|
<name>updatewidget</name>
|
||||||
|
<message>
|
||||||
|
<source>at</source>
|
||||||
|
<translation>རླུང་གནོན་ཆེན་པོ།</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Delay</source>
|
||||||
|
<translation>ཕྱིར་འགྱངས།</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>five hours later</source>
|
||||||
|
<translation>རྗེས་སུ་དུས་ཚོད%d</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>one hours later</source>
|
||||||
|
<translation>ཆུ་ཚོད་གཅིག</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>three day later</source>
|
||||||
|
<translation>ཉིན་གསུམ།</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>In 30 minutes</source>
|
||||||
|
<translation>སྐར་མ་སུམ་ཅུ།</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Update</source>
|
||||||
|
<translation>གསར་སྒྱུར།</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>No reminders</source>
|
||||||
|
<translation>དྲན་སྐུལ།</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>five day later</source>
|
||||||
|
<translation>ཉིན་ལྔ།</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>one day later</source>
|
||||||
|
<translation>ཉིན་གཅིག</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>updatehandle</name>
|
||||||
|
<message>
|
||||||
|
<source>update error</source>
|
||||||
|
<translation>རིམ་འཕར་འགྲུབ་མེད།</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>kylin-background-upgrade</source>
|
||||||
|
<translation>རྒྱབ་སྟེགས་རིམ་འགྱུར་བྱ་རིམ།</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>The system is updating silently</source>
|
||||||
|
<translation>རྒྱུད་ཁོངས་ཁ་རོག་གེར་རིམ་འགྱུར་བྱེད་སྒང་།</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>update</source>
|
||||||
|
<translation>ཁུངས་གསར་བསྒྱུར།</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>The system has completed an important update. It is recommended that you restart immediately</source>
|
||||||
|
<translation>རྒྱུད་ཁོངས་ཀྱིས་གནད་འགག་གི་རིམ་འགྱུར་ཞིག་ལེགས་འགྲུབ་བྱུང་བས། བསམ་ཚུལ་ཡིན་ན་ཁྱེད་ཀྱིས་མྱུར་དུ་འཁོར་སྒོ་སླར་ཕྱེ་བྱོས།</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>System update detected</source>
|
||||||
|
<translation>རྒྱུད་ཁོངས་རིམ་འགྱུར་ཞིག་ཞིབ་དཔྱད་ཚད་ལེན་བྱས་པ།</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>The system has completed a critical update, and some software packages failed to update. It is recommended that you restart immediately</source>
|
||||||
|
<translation>རྒྱུད་ཁོངས་ཀྱིས་གནད་འགག་གི་རིམ་འགྱུར་ཞིག་ལེགས་འགྲུབ་བྱུང་བས། མཉེན་ཆས་ཁག་གཅིག་རིམ་འགྱུར་ལེགས་འགྲུབ་མ་བྱུང་་། བསམ་འཆར་ཡིན་ན་ཁྱེད་ཀྱིས་མྱུར་དུ་འཁོར་སྒོ་སླར་ཕྱེ་བྱོས།</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>trayicon</name>
|
||||||
|
<message>
|
||||||
|
<source>The system is updating silently</source>
|
||||||
|
<translation>རྒྱུད་ཁོངས་ཁ་རོག་གེར་རིམ་འགྱུར་བྱེད་སྒང་།</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>updateTip</name>
|
||||||
|
<message>
|
||||||
|
<source>The system is updating silently</source>
|
||||||
|
<translation>རྒྱུད་ཁོངས་ཁ་རོག་གེར་རིམ་འགྱུར་བྱེད་སྒང་།</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
Binary file not shown.
|
@ -27,7 +27,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>updateTip</name>
|
<name>updateTip</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/updatewidget.cpp" line="548"/>
|
<location filename="../src/updatewidget.cpp" line="464"/>
|
||||||
<source>The system is updating silently</source>
|
<source>The system is updating silently</source>
|
||||||
<translation>系统正在静默更新</translation>
|
<translation>系统正在静默更新</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -39,9 +39,9 @@
|
||||||
<translation type="vanished">系统已经完成一项关键更新,建议您立即重启</translation>
|
<translation type="vanished">系统已经完成一项关键更新,建议您立即重启</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/updatehandle.cpp" line="319"/>
|
<location filename="../src/updatehandle.cpp" line="303"/>
|
||||||
<location filename="../src/updatehandle.cpp" line="327"/>
|
<location filename="../src/updatehandle.cpp" line="310"/>
|
||||||
<location filename="../src/updatehandle.cpp" line="333"/>
|
<location filename="../src/updatehandle.cpp" line="315"/>
|
||||||
<source>The system is updating silently</source>
|
<source>The system is updating silently</source>
|
||||||
<translation>系统正在静默更新</translation>
|
<translation>系统正在静默更新</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -50,36 +50,33 @@
|
||||||
<translation type="vanished">检测到有系统更新</translation>
|
<translation type="vanished">检测到有系统更新</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
|
<location filename="../src/updatehandle.cpp" line="105"/>
|
||||||
|
<location filename="../src/updatehandle.cpp" line="336"/>
|
||||||
<source>System update detected</source>
|
<source>System update detected</source>
|
||||||
<translation type="vanished">检测到有系统更新</translation>
|
<translation>检测到有系统更新</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>The system has completed a critical update, and some software packages failed to update. It is recommended that you restart immediately</source>
|
<source>The system has completed a critical update, and some software packages failed to update. It is recommended that you restart immediately</source>
|
||||||
<translation type="obsolete">系统完成一项关键更新,部分软件包更新失败,建议您立即重启</translation>
|
<translation type="obsolete">系统完成一项关键更新,部分软件包更新失败,建议您立即重启</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/updatehandle.cpp" line="116"/>
|
<location filename="../src/updatehandle.cpp" line="482"/>
|
||||||
<location filename="../src/updatehandle.cpp" line="355"/>
|
<location filename="../src/updatehandle.cpp" line="483"/>
|
||||||
<source>System update</source>
|
|
||||||
<translation>系统更新</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatehandle.cpp" line="511"/>
|
|
||||||
<source>The system has completed an important update, It is recommended that you restart immediately.</source>
|
<source>The system has completed an important update, It is recommended that you restart immediately.</source>
|
||||||
<translation>系统完成一项关键更新,建议您立即重启</translation>
|
<translation>系统完成一项关键更新,建议您立即重启</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/updatehandle.cpp" line="513"/>
|
<location filename="../src/updatehandle.cpp" line="485"/>
|
||||||
<source>update error</source>
|
<source>update error</source>
|
||||||
<translation>升级失败</translation>
|
<translation>升级失败</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/updatehandle.cpp" line="589"/>
|
<location filename="../src/updatehandle.cpp" line="518"/>
|
||||||
<source>kylin-background-upgrade</source>
|
<source>kylin-background-upgrade</source>
|
||||||
<translation>后台更新程序</translation>
|
<translation>后台更新程序</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/updatehandle.cpp" line="592"/>
|
<location filename="../src/updatehandle.cpp" line="521"/>
|
||||||
<source>update</source>
|
<source>update</source>
|
||||||
<translation>系统升级</translation>
|
<translation>系统升级</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -91,61 +88,74 @@
|
||||||
<translation type="vanished">请在以下时间段之后提醒我</translation>
|
<translation type="vanished">请在以下时间段之后提醒我</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
|
<location filename="../src/updatewidget.cpp" line="40"/>
|
||||||
<source>at</source>
|
<source>at</source>
|
||||||
<translation type="vanished">在</translation>
|
<translation>在</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>No more reminders</source>
|
<source>No more reminders</source>
|
||||||
<translation type="vanished">内不再提醒</translation>
|
<translation type="vanished">内不再提醒</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>No reminders</source>
|
|
||||||
<translation type="vanished">内不再提醒</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/updatewidget.cpp" line="42"/>
|
<location filename="../src/updatewidget.cpp" line="42"/>
|
||||||
<source> Updatable app detected on your system!</source>
|
<source>No reminders</source>
|
||||||
<translation type="unfinished"> 系统有更新项目</translation>
|
<translation>内不再提醒</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/updatewidget.cpp" line="51"/>
|
<location filename="../src/updatewidget.cpp" line="53"/>
|
||||||
<source>Close</source>
|
<source>In 30 minutes</source>
|
||||||
<translation type="unfinished">关闭</translation>
|
<translation>三十分钟</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
<location filename="../src/updatewidget.cpp" line="53"/>
|
||||||
<source>30 minutes later</source>
|
<source>one hours later</source>
|
||||||
<translation>推迟 30 分钟</translation>
|
<translation>一个小时</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
<location filename="../src/updatewidget.cpp" line="53"/>
|
||||||
<source>1 hour later</source>
|
<source>three day later</source>
|
||||||
<translation type="unfinished">推迟 1 小时</translation>
|
<translation>三天</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
<location filename="../src/updatewidget.cpp" line="53"/>
|
||||||
<source>3 days later</source>
|
<source>five day later</source>
|
||||||
<translation type="unfinished">推迟 3 天</translation>
|
<translation>五天</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/updatewidget.cpp" line="70"/>
|
<location filename="../src/updatewidget.cpp" line="60"/>
|
||||||
<source>Delay</source>
|
|
||||||
<translation type="unfinished">推迟</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>5 hours later</source>
|
|
||||||
<translation>推迟 5 小时</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="62"/>
|
|
||||||
<source>1 day later</source>
|
|
||||||
<translation>推迟 1 天</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/updatewidget.cpp" line="69"/>
|
|
||||||
<source>Update</source>
|
<source>Update</source>
|
||||||
<translation>立即更新</translation>
|
<translation>立即更新</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/updatewidget.cpp" line="61"/>
|
||||||
|
<source>Delay</source>
|
||||||
|
<translation>推迟</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Two hours later</source>
|
||||||
|
<translation type="vanished">两个小时</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/updatewidget.cpp" line="53"/>
|
||||||
|
<source>five hours later</source>
|
||||||
|
<translation>五个小时</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/updatewidget.cpp" line="53"/>
|
||||||
|
<source>one day later</source>
|
||||||
|
<translation>一天</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>two day later</source>
|
||||||
|
<translation type="vanished">两天</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Agree</source>
|
||||||
|
<translation type="vanished">立即更新</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Disagree</source>
|
||||||
|
<translation type="vanished">推迟</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
</TS>
|
</TS>
|
Loading…
Reference in New Issue