|
|
|
@ -7,10 +7,17 @@ import logging
|
|
|
|
|
|
|
|
|
|
import apt_pkg
|
|
|
|
|
from gettext import gettext as _
|
|
|
|
|
from .backend import InstallBackend
|
|
|
|
|
from .Core.loop import mainloop
|
|
|
|
|
import SystemUpdater.Core.enums as enums
|
|
|
|
|
from .Core.errors import *
|
|
|
|
|
from .Core.utils import humanize_size
|
|
|
|
|
from SystemUpdater.Core.utils import get_proc_from_dbus_name,PolicyKit_Authority
|
|
|
|
|
from SystemUpdater.Core.UpdaterConfigParser import UpgradeConfig
|
|
|
|
|
import locale
|
|
|
|
|
from xml.etree import ElementTree
|
|
|
|
|
from .Core.MyCache import MyCache
|
|
|
|
|
from importlib import reload
|
|
|
|
|
|
|
|
|
|
UPDATER_DBUS_INTERFACE = 'com.kylin.UpgradeStrategies.interface'
|
|
|
|
|
UPDATER_DBUS_PATH = '/com/kylin/UpgradeStrategies'
|
|
|
|
@ -54,60 +61,6 @@ class UpgradeStrategiesDbusController(dbus.service.Object):
|
|
|
|
|
|
|
|
|
|
self.transaction = None
|
|
|
|
|
|
|
|
|
|
# def _update_important_reply(self,retval):
|
|
|
|
|
# if bool(retval) == False:
|
|
|
|
|
# self.UpdateDetectFinished(False,[''],enums.get_error_string_from_enum(enums.ERROR_UPDATE_SOURCE_FAILED),\
|
|
|
|
|
# enums.get_error_description_from_enum(enums.ERROR_UPDATE_SOURCE_FAILED))
|
|
|
|
|
# else:
|
|
|
|
|
# self.parent.start_update_backend()
|
|
|
|
|
|
|
|
|
|
# def _update_important_error(self,retval):
|
|
|
|
|
# logging.error(str(retval))
|
|
|
|
|
# self.UpdateDetectFinished(False,[''],enums.get_error_string_from_enum(enums.ERROR_UPDATE_SOURCE_FAILED),\
|
|
|
|
|
# enums.get_error_description_from_enum(enums.ERROR_UPDATE_SOURCE_FAILED))
|
|
|
|
|
|
|
|
|
|
# #更新important.list的本次升级的列表
|
|
|
|
|
# def on_update_important_list(self):
|
|
|
|
|
# self.UpdateDetectStatusChanged(10,_("Updating Source Template"))
|
|
|
|
|
# obj = self.bus.get_object('com.kylin.software.properties', '/com/kylin/software/properties')
|
|
|
|
|
# interface = dbus.Interface(obj, dbus_interface='com.kylin.software.properties.interface')
|
|
|
|
|
# interface.updateSourceTemplate(timeout=20,reply_handler=self._update_important_reply,error_handler=self._update_important_error)
|
|
|
|
|
|
|
|
|
|
# def is_reboot_required(self):
|
|
|
|
|
# """If a reboot is required to get all changes into effect."""
|
|
|
|
|
# return os.path.exists(os.path.join(apt_pkg.config.find_dir("Dir"),
|
|
|
|
|
# "var/run/reboot-required"))
|
|
|
|
|
|
|
|
|
|
# def is_logout_required(self):
|
|
|
|
|
# """If a logout is required to get all changes into effect."""
|
|
|
|
|
# return os.path.exists(os.path.join(apt_pkg.config.find_dir("Dir"),
|
|
|
|
|
# "var/run/logout-required"))
|
|
|
|
|
|
|
|
|
|
# #重启aptdeamon后台服务
|
|
|
|
|
# def make_aptdeamon_restart(self):
|
|
|
|
|
# try:
|
|
|
|
|
# obj = self.bus.get_object('org.debian.apt', '/org/debian/apt')
|
|
|
|
|
# interface = dbus.Interface(obj, dbus_interface='org.debian.apt')
|
|
|
|
|
# logging.info("Now start to restart Aptdeamon...")
|
|
|
|
|
# interface.Quit()
|
|
|
|
|
# except Exception as e:
|
|
|
|
|
# logging.error(str(e))
|
|
|
|
|
|
|
|
|
|
# #设置aptdeamon的环境变量
|
|
|
|
|
# def set_aptdeamon_environ(self,key,value):
|
|
|
|
|
# try:
|
|
|
|
|
# logging.info("Set aptdeaom environment variables %s = %s...",key,value)
|
|
|
|
|
# obj = self.bus.get_object('org.debian.apt', '/org/debian/apt')
|
|
|
|
|
# interface = dbus.Interface(obj, dbus_interface='org.debian.apt')
|
|
|
|
|
# retval = interface.SetEnviron(key,value)
|
|
|
|
|
# return retval
|
|
|
|
|
# except Exception as e:
|
|
|
|
|
# logging.error(str(e))
|
|
|
|
|
# if key == "init" and value == "config":
|
|
|
|
|
# self.make_aptdeamon_restart()
|
|
|
|
|
# time.sleep(0.5)
|
|
|
|
|
# return False
|
|
|
|
|
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE,
|
|
|
|
|
in_signature="", out_signature="",
|
|
|
|
|
sender_keyword="caller_name")
|
|
|
|
@ -119,17 +72,276 @@ class UpgradeStrategiesDbusController(dbus.service.Object):
|
|
|
|
|
mainloop.quit()
|
|
|
|
|
logging.debug("Exit")
|
|
|
|
|
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE,
|
|
|
|
|
in_signature="", out_signature="",
|
|
|
|
|
sender_keyword="caller_name")
|
|
|
|
|
def interface1(self, caller_name):
|
|
|
|
|
logging.info("interface1")
|
|
|
|
|
#set config value
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE,in_signature='sss',out_signature='b')
|
|
|
|
|
def SetConfigValue(self,section, option, value):
|
|
|
|
|
try:
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'Method'+COLORLOG_SUFFIX+' SetConfigValue ...')
|
|
|
|
|
if self.parent.configs_uncover.has_section(str(section)) and self.parent.configs_uncover.has_option(str(section),str(option)):
|
|
|
|
|
if self.parent.configs_uncover.setValue(str(section), str(option),str(value)) == True:
|
|
|
|
|
return True
|
|
|
|
|
else:
|
|
|
|
|
return False
|
|
|
|
|
elif self.parent.sqlite3_server.ucconfigs.has_section(str(section)) and self.parent.sqlite3_server.ucconfigs.has_option(str(section),str(option)):
|
|
|
|
|
if self.parent.sqlite3_server.ucconfigs.setValue(str(section), str(option),str(value)) == True:
|
|
|
|
|
return True
|
|
|
|
|
else:
|
|
|
|
|
return False
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logging.error(e)
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
#更新进度信息 0~100 进度信息 101为非预期的信号
|
|
|
|
|
@dbus.service.signal(UPDATER_DBUS_INTERFACE,signature='is')
|
|
|
|
|
def UpdateDetectStatusChanged(self,progress,status):
|
|
|
|
|
logging.info(COLORLOG_PREFIX+"Emitting"+COLORLOG_SUFFIX+" UpdateDetectStatusChanged progress = %d , status = %s",progress,status)
|
|
|
|
|
#get config value
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE,in_signature='ss',out_signature='bs')
|
|
|
|
|
def GetConfigValue(self,section, option):
|
|
|
|
|
try:
|
|
|
|
|
if self.parent.configs_cover.has_section(str(section)) and self.parent.configs_cover.has_option(str(section),str(option)):
|
|
|
|
|
value = str(self.parent.configs_cover.get(str(section), str(option)))
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'Method'+COLORLOG_SUFFIX+" GetConfigValue section:%s option:%s value:%s ...",section,option,value)
|
|
|
|
|
return True,value
|
|
|
|
|
if self.parent.configs_uncover.has_section(str(section)) and self.parent.configs_uncover.has_option(str(section),str(option)):
|
|
|
|
|
value = str(self.parent.configs_uncover.get(str(section), str(option)))
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'Method'+COLORLOG_SUFFIX+" GetConfigValue section:%s option:%s value:%s ...",section,option,value)
|
|
|
|
|
return True,value
|
|
|
|
|
elif self.parent.sqlite3_server.ucconfigs.has_section(str(section)) and self.parent.sqlite3_server.ucconfigs.has_option(str(section),str(option)):
|
|
|
|
|
value = str(self.parent.sqlite3_server.ucconfigs.get(str(section), str(option)))
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'Method'+COLORLOG_SUFFIX+" GetConfigValue section:%s option:%s value:%s ...",section,option,value)
|
|
|
|
|
return True,value
|
|
|
|
|
else:
|
|
|
|
|
logging.warning("Warning: Can't found section:%s option:%s ... ",section, option)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logging.error("Error: GetConfigValue section:%s option:%s, %s.",section, option, e)
|
|
|
|
|
return False,''
|
|
|
|
|
|
|
|
|
|
#设置数据库配置信息
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE,in_signature='ss',out_signature='b',sender_keyword='sender')
|
|
|
|
|
def DatabaseInfoSet(self,field_name,field_value,sender=None):
|
|
|
|
|
Status = False
|
|
|
|
|
sender_name = get_proc_from_dbus_name(sender)
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'Method'+COLORLOG_SUFFIX+' SetDatabaseInfo,field_name:%s,field_value:%s,caller:%s .',\
|
|
|
|
|
field_name,field_value,sender_name)
|
|
|
|
|
Status = self.parent.sqlite3_server.insert_into_display(field_name,field_value)
|
|
|
|
|
return bool(Status)
|
|
|
|
|
|
|
|
|
|
#数据库获取配置信息
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE,in_signature='s',out_signature='s',sender_keyword='sender')
|
|
|
|
|
def DatabaseInfoGet(self,field_name,sender=None):
|
|
|
|
|
field_value = ''
|
|
|
|
|
sender_name = get_proc_from_dbus_name(sender)
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'Method'+COLORLOG_SUFFIX+' GetDatabaseInfo field_name:%s caller:%s',field_name,sender_name)
|
|
|
|
|
field_value = self.parent.sqlite3_server.select_from_display(str(field_name))
|
|
|
|
|
logging.info("Get field_value:%s",field_value)
|
|
|
|
|
return field_value
|
|
|
|
|
|
|
|
|
|
# # dbus接口:改变apt下载速度
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE, in_signature='sb', out_signature='b',sender_keyword='sender')
|
|
|
|
|
def DownloadspeedLimitSet(self, speed, set,sender = None):
|
|
|
|
|
sender_name = get_proc_from_dbus_name(sender)
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'Method'+COLORLOG_SUFFIX+' DownloadspeedLimitSet, speed:%s, set:%r, sender name: %s .'%(speed, set, sender_name))
|
|
|
|
|
#来重启Aptdeamon
|
|
|
|
|
self.parent.init_config_aptdeamon = True
|
|
|
|
|
if set:
|
|
|
|
|
with open("/etc/apt/apt.conf.d/80apt-download", "w+") as f:
|
|
|
|
|
try:
|
|
|
|
|
f.write("Acquire::http::Dl-Limit" + " \"" + "%s" % str(speed) + "\";\n")
|
|
|
|
|
f.write("Acquire::https::Dl-Limit" + " \"" + "%s" % str(speed) + "\";\n")
|
|
|
|
|
#更改数据库值
|
|
|
|
|
self.parent.sqlite3_server.insert_into_display("download_limit","true")
|
|
|
|
|
self.parent.sqlite3_server.insert_into_display("download_limit_value",str(speed))
|
|
|
|
|
#发送信号
|
|
|
|
|
self.ButtonStatusChange("speed" , str(speed))
|
|
|
|
|
return True
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logging.error(e)
|
|
|
|
|
return False
|
|
|
|
|
else:
|
|
|
|
|
if os.path.exists("/etc/apt/apt.conf.d/80apt-download"):
|
|
|
|
|
os.remove("/etc/apt/apt.conf.d/80apt-download")
|
|
|
|
|
self.parent.sqlite3_server.insert_into_display("download_limit","false")
|
|
|
|
|
self.ButtonStatusChange("speed", "0")
|
|
|
|
|
return True
|
|
|
|
|
else:
|
|
|
|
|
self.parent.sqlite3_server.insert_into_display("download_limit","false")
|
|
|
|
|
self.ButtonStatusChange("speed", "0")
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
# # dbus接口:获取apt下载速度
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE, out_signature='bs',sender_keyword='sender')
|
|
|
|
|
def DownloadspeedLimitGet(self,sender = None):
|
|
|
|
|
sender_name = get_proc_from_dbus_name(sender)
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'Method'+COLORLOG_SUFFIX+' DownloadspeedLimitGet sender: %s .', sender_name)
|
|
|
|
|
try:
|
|
|
|
|
download_limit = self.parent.sqlite3_server.select_from_display("download_limit")
|
|
|
|
|
if download_limit == "true":
|
|
|
|
|
download_limit_value = self.parent.sqlite3_server.select_from_display("download_limit_value")
|
|
|
|
|
return True,str(download_limit_value)
|
|
|
|
|
else:
|
|
|
|
|
return False,str("0")
|
|
|
|
|
except:
|
|
|
|
|
return False, "0"
|
|
|
|
|
|
|
|
|
|
## dbus接口: 开启或关闭预下载功能
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE, in_signature='b', out_signature='b',sender_keyword='sender')
|
|
|
|
|
def SetPreDownloadState(self, _state,sender = None):
|
|
|
|
|
state = bool(_state)
|
|
|
|
|
sender_name = get_proc_from_dbus_name(sender)
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'method'+COLORLOG_SUFFIX+' SetPreDownloadState, state is %r, sender name: %s .',state,sender_name)
|
|
|
|
|
try:
|
|
|
|
|
if state:
|
|
|
|
|
self.parent.uuconfigs.setValue("autoUpgradePolicy", "preDownload", "on", True)
|
|
|
|
|
else :
|
|
|
|
|
self.parent.uuconfigs.setValue("autoUpgradePolicy", "preDownload", "off", True)
|
|
|
|
|
self.ChangeUpgradePolicy()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logging.error(str(e))
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
## dbus接口: 发送立即更新的信号
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE, out_signature='b')
|
|
|
|
|
def AutoUpgradeAllNow(self):
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'method'+COLORLOG_SUFFIX+' AutoUpgradeAllNow ...')
|
|
|
|
|
try:
|
|
|
|
|
self.UpgradeAllNow()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logging.error(str(e))
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
## dbus接口: 开启关闭自动更新功能
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE, in_signature='b', out_signature='b')
|
|
|
|
|
def SetAutoUpgradeState(self, _state):
|
|
|
|
|
state = bool(_state)
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'method'+COLORLOG_SUFFIX+' SetAutoUpgradeState, state is %r ...',state)
|
|
|
|
|
try:
|
|
|
|
|
if state:
|
|
|
|
|
self.parent.uuconfigs.setValue("autoUpgradePolicy", "autoUpgradeState", "on", True)
|
|
|
|
|
self.parent.sqlite3_server.insert_into_display("autoupdate_allow", "true")
|
|
|
|
|
self.ButtonStatusChange("autoUpgradeStatus", "true")
|
|
|
|
|
else :
|
|
|
|
|
self.parent.uuconfigs.setValue("autoUpgradePolicy", "autoUpgradeState", "off", True)
|
|
|
|
|
# self.parent.uuconfigs.setValue("autoUpgradePolicy", "downloadMode", "manual", True)
|
|
|
|
|
# self.parent.uuconfigs.setValue("autoUpgradePolicy", "installMode", "manual", True)
|
|
|
|
|
self.parent.sqlite3_server.insert_into_display("autoupdate_allow", "false")
|
|
|
|
|
self.ButtonStatusChange("autoUpgradeStatus", "false")
|
|
|
|
|
self.ChangeUpgradePolicy()
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logging.error(str(e))
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
## dbus接口: 设置自动更新策略
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE, in_signature='is', out_signature='b')
|
|
|
|
|
def SetAutoUpgradeMode(self, mode, time):
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'method'+COLORLOG_SUFFIX+' SetAutoUpgradeMode, mode is %s, time is %s ...',mode, time)
|
|
|
|
|
try:
|
|
|
|
|
if mode == UU_UPGRADE_MODE_TIMING:
|
|
|
|
|
self.parent.uuconfigs.setValue("autoUpgradePolicy", "downloadMode", "timing", True)
|
|
|
|
|
self.parent.uuconfigs.setValue("autoUpgradePolicy", "downloadTime", str(time), True)
|
|
|
|
|
self.parent.uuconfigs.setValue("autoUpgradePolicy", "installMode", "timing", True)
|
|
|
|
|
self.ButtonStatusChange("autoUpgradeTime", str(time))
|
|
|
|
|
elif mode == UU_UPGRADE_MODE_BEFORE_SHUTDOWN:
|
|
|
|
|
self.parent.uuconfigs.setValue("autoUpgradePolicy", "downloadMode", "timing", True)
|
|
|
|
|
self.parent.uuconfigs.setValue("autoUpgradePolicy", "installMode", "bshutdown", True)
|
|
|
|
|
self.ChangeUpgradePolicy()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logging.error(str(e))
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
# kill 进程
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE, in_signature='i', out_signature='b')
|
|
|
|
|
def KillProcessSignal(self, pid):
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'Method'+COLORLOG_SUFFIX+' KillProcessSignal is %d', pid)
|
|
|
|
|
try:
|
|
|
|
|
# 判断文件是否存在
|
|
|
|
|
if (os.path.exists(RUN_UNATTENDED_UPGRADE)):
|
|
|
|
|
os.kill(int(pid), 9)
|
|
|
|
|
logging.info('%s has been killed', pid)
|
|
|
|
|
else:
|
|
|
|
|
logging.warning('%s is not exist.', RUN_UNATTENDED_UPGRADE)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logging.error(str(e))
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
# 获取系统版本号
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE, out_signature='ss',sender_keyword='sender')
|
|
|
|
|
def GetSystemUpdateVersion(self,sender=None):
|
|
|
|
|
sender_name = get_proc_from_dbus_name(sender)
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'Method'+COLORLOG_SUFFIX+' GetSystemUpdateVersion sender: %s .', sender_name)
|
|
|
|
|
os_version = ''
|
|
|
|
|
update_version = ''
|
|
|
|
|
try:
|
|
|
|
|
self.parent.sqlite3_server.ucconfigs = UpgradeConfig(datadir = "/etc/kylin-version", name = "kylin-system-version.conf")
|
|
|
|
|
if not os.path.exists("/etc/kylin-version/kylin-system-version.conf"):
|
|
|
|
|
logging.warning("System version file doesn't exist.")
|
|
|
|
|
update_version,os_version = self.parent.sqlite3_server.get_default_version()
|
|
|
|
|
return str(os_version),str(update_version)
|
|
|
|
|
os_version = str(self.parent.sqlite3_server.ucconfigs.get("SYSTEM","os_version"))
|
|
|
|
|
update_version = str(self.parent.sqlite3_server.ucconfigs.get("SYSTEM","update_version"))
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logging.error(str(e))
|
|
|
|
|
return str(e),''
|
|
|
|
|
logging.info('Current os_version: %s, release_id: %s .', os_version, update_version)
|
|
|
|
|
return os_version,update_version
|
|
|
|
|
|
|
|
|
|
# # dbus接口: 后端大数据采集
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE, in_signature='ss', out_signature='b',sender_keyword='sender')
|
|
|
|
|
def DataBackendCollect(self, messageType, uploadMessage, sender=None):
|
|
|
|
|
sender_name = get_proc_from_dbus_name(sender)
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'Method'+COLORLOG_SUFFIX+' DataBackendCollect, messageType is %s, called by: %s .',messageType,sender_name)
|
|
|
|
|
logging.debug("uploadMessage: %s.", uploadMessage)
|
|
|
|
|
try:
|
|
|
|
|
self.parent.collector.UpdateMsg(messageType, uploadMessage)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logging.error(str(e))
|
|
|
|
|
|
|
|
|
|
# 检查更新
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE, in_signature='as', out_signature='as', sender_keyword='sender')
|
|
|
|
|
def CheckInstalledOrUpgrade(self, pkgs, sender=None):
|
|
|
|
|
sender_name = get_proc_from_dbus_name(sender)
|
|
|
|
|
try:
|
|
|
|
|
pkglist = []
|
|
|
|
|
cache = MyCache(None)
|
|
|
|
|
self.parent.collector.cache = cache
|
|
|
|
|
for i in pkgs:
|
|
|
|
|
name = str(i).strip().replace("\n", "")
|
|
|
|
|
if name in cache:
|
|
|
|
|
pkg = cache[name]
|
|
|
|
|
if pkg.is_installed == False or pkg.is_upgradable == True:
|
|
|
|
|
pkglist.append(pkg.name)
|
|
|
|
|
pkglist.append(str(pkg.candidate.size))
|
|
|
|
|
self.parent.collector.make_background_version(pkg)
|
|
|
|
|
self.parent.collector.background_upgradable.append(pkg.name)
|
|
|
|
|
except:
|
|
|
|
|
logging.error("CheckInstalledOrUpgrade: Failed to obtain package information: %s" % str(i), exc_info=True)
|
|
|
|
|
# if len(pkglist) != 0:
|
|
|
|
|
# logging.info(COLORMETHOR_PREFIX+'Method'+COLORLOG_SUFFIX+' CheckInstalledOrUpgrade, called by: %s, Upgrade list: %s .', sender_name, ", ".join(pkglist))
|
|
|
|
|
return pkglist
|
|
|
|
|
|
|
|
|
|
# 提供插入更新历史的接口
|
|
|
|
|
@dbus.service.method(UPDATER_DBUS_INTERFACE, in_signature='a{sv}', out_signature='b', sender_keyword='sender')
|
|
|
|
|
def InsertUpgradeHistory(self, arg = {}, sender=None):
|
|
|
|
|
try:
|
|
|
|
|
# {"appname":GLib.Variant("s", "kylin-system-updater"), "version":GLib.Variant("s", "string value")}
|
|
|
|
|
# "description":GLib.Variant("s", "Update Manager for Kylin"), "date":GLib.Variant("s", "2022-07-27 15:23:51")
|
|
|
|
|
# "status":GLib.Variant("s", "failed"), "keyword":GLib.Variant("s", "1")
|
|
|
|
|
# "errorcode":GLib.Variant("s", "System upgrade is complete. "), "appname_cn":GLib.Variant("s", "音乐")
|
|
|
|
|
sender_name = get_proc_from_dbus_name(sender)
|
|
|
|
|
logging.info(COLORMETHOR_PREFIX+'Method'+COLORLOG_SUFFIX+' Call InsertUpgradeHistory from %s.', sender_name)
|
|
|
|
|
if not self.parent.sqlite3_server.insert_upgrade_history(arg, sender_name) :
|
|
|
|
|
return False
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logging.error("InsertUpgradeHistory Failed: %s" % str(e), exc_info=True)
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
# dbus 信号:用于发送立即更新信号
|
|
|
|
|
@dbus.service.signal(UPDATER_DBUS_INTERFACE)
|
|
|
|
|
def UpgradeAllNow(self):
|
|
|
|
|
logging.info(COLORLOG_PREFIX + "Emitting" + COLORLOG_SUFFIX +" UpgradeAllNow")
|
|
|
|
|
|
|
|
|
|
WRITABLE_PROPERTIES = ()
|
|
|
|
|
|
|
|
|
@ -237,28 +449,36 @@ class UpgradeStrategiesDbusController(dbus.service.Object):
|
|
|
|
|
|
|
|
|
|
def _set_property(self, iface, name, value, sender):
|
|
|
|
|
"""Helper to set a property on the properties D-Bus interface."""
|
|
|
|
|
# if iface == UPDATER_DBUS_INTERFACE:
|
|
|
|
|
# if name == "ShutdownInstall":
|
|
|
|
|
# self.parent.configs_uncover.setValue("InstallMode","shutdown_install",str(bool(value)))
|
|
|
|
|
# elif name == "P2pBootstrap":
|
|
|
|
|
# self.parent.apt_p2p_config.set_bootstrap(str(value))
|
|
|
|
|
# else:
|
|
|
|
|
# raise dbus.exceptions.DBusException("Unknown or read only "
|
|
|
|
|
# "property: %s" % name)
|
|
|
|
|
# else:
|
|
|
|
|
# raise dbus.exceptions.DBusException("Unknown interface: %s" %
|
|
|
|
|
# iface)
|
|
|
|
|
pass
|
|
|
|
|
if iface == UPDATER_DBUS_INTERFACE:
|
|
|
|
|
if name == "ShutdownInstall":
|
|
|
|
|
self.parent.configs_uncover.setValue("InstallMode","shutdown_install",str(bool(value)))
|
|
|
|
|
elif name == "P2pBootstrap":
|
|
|
|
|
self.parent.apt_p2p_config.set_bootstrap(str(value))
|
|
|
|
|
elif name == "UploadUpgradeLog":
|
|
|
|
|
self.parent.configs_uncover.setValue("SystemStatus","upload_upgrade_log",str(bool(value)))
|
|
|
|
|
elif name == "UploadInstallerLog":
|
|
|
|
|
self.parent.configs_uncover.setValue("SystemStatus","upload_installer_log",str(bool(value)))
|
|
|
|
|
else:
|
|
|
|
|
raise dbus.exceptions.DBusException("Unknown or read only "
|
|
|
|
|
"property: %s" % name)
|
|
|
|
|
else:
|
|
|
|
|
raise dbus.exceptions.DBusException("Unknown interface: %s" %
|
|
|
|
|
iface)
|
|
|
|
|
|
|
|
|
|
def _get_properties(self, iface):
|
|
|
|
|
"""Helper get the properties of a D-Bus interface."""
|
|
|
|
|
# if iface == UPDATER_DBUS_INTERFACE:
|
|
|
|
|
# return {
|
|
|
|
|
# "ShutdownInstall": dbus.Boolean(
|
|
|
|
|
# self.parent.configs_uncover.getWithDefault("InstallMode", "shutdown_install", False)),
|
|
|
|
|
if iface == UPDATER_DBUS_INTERFACE:
|
|
|
|
|
return {
|
|
|
|
|
"ShutdownInstall": dbus.Boolean(
|
|
|
|
|
self.parent.configs_uncover.getWithDefault("InstallMode", "shutdown_install", False)),
|
|
|
|
|
|
|
|
|
|
# "P2pBootstrap": dbus.String(self.parent.apt_p2p_config.get_bootstrap())
|
|
|
|
|
# }
|
|
|
|
|
# else:
|
|
|
|
|
# return {}
|
|
|
|
|
pass
|
|
|
|
|
'''
|
|
|
|
|
"P2pBootstrap": dbus.String(self.parent.apt_p2p_config.get_bootstrap()),
|
|
|
|
|
|
|
|
|
|
"UploadUpgradeLog": dbus.Boolean(
|
|
|
|
|
self.parent.configs_uncover.getWithDefault("SystemStatus", "upload_upgrade_log", True)),
|
|
|
|
|
|
|
|
|
|
"UploadInstallerLog": dbus.Boolean(
|
|
|
|
|
self.parent.configs_uncover.getWithDefault("SystemStatus", "upload_installer_log", False))
|
|
|
|
|
}
|
|
|
|
|
else:
|
|
|
|
|
return {}
|
|
|
|
|