Merge branch 'backend_dev' of gitlab2.kylin.com:kylin-desktop/update-manager-group/kylin-system-updater into backend_dev

This commit is contained in:
luoxueyi 2021-12-17 14:40:11 +08:00
commit c56f0b1291
6 changed files with 91 additions and 67 deletions

View File

@ -431,33 +431,28 @@ class UpdateManager():
def _setup_dbus(self):
# check if there is another g-a-i already and if not setup one
# listening on dbus
try:
bus = dbus.SystemBus()
except Exception:
logging.error("warning: could not initiate dbus")
return
try:
proxy_obj = bus.get_object(UPDATER_DBUS_SERVICE,
UPDATER_DBUS_PATH)
#替换后台
bus = dbus.SystemBus()
try:
bus_name = dbus.service.BusName(UPDATER_DBUS_SERVICE,
bus,
do_not_queue=True)
logging.info(_("initiate dbus success ..."))
return UpdateManagerDbusController(self, bus_name)
except dbus.exceptions.NameExistsException:
if self.options.replace is False:
logging.critical("Another daemon is already running")
sys.exit(1)
else:
logging.warning("Replacing already running daemon")
proxy_obj.Quit(dbus_interface=UPDATER_DBUS_INTERFACE,
timeout=300)
time.sleep(1)
bus_name = dbus.service.BusName(UPDATER_DBUS_SERVICE,
bus,
do_not_queue=True)
return UpdateManagerDbusController(self, bus_name)
except dbus.DBusException:
logging.warning("Replacing already running daemon")
the_other_guy = bus.get_object(UPDATER_DBUS_SERVICE,
UPDATER_DBUS_PATH)
the_other_guy.Quit(dbus_interface=UPDATER_DBUS_INTERFACE,
timeout=300)
time.sleep(1)
bus_name = dbus.service.BusName(UPDATER_DBUS_SERVICE,
bus)
logging.info(_("initiate dbus success ..."))
bus,
do_not_queue=True)
return UpdateManagerDbusController(self, bus_name)
# 是否查找本地依赖

View File

@ -19,21 +19,23 @@ UPDATER_DBUS_SERVICE = 'com.kylin.systemupgrade'
#颜色设置
COLORLOG_SUFFIX = "\033[0m"
# RED_PRE = "\033[31;1m"
# GREEN_PRE = "\033[32;1m"
# YELLOW_PRE = "\033[33;1m"
# BULE_PRE = "\033[34;1m"
# RED_PRE = "\033[35;1m"
# BACK_BLACK_PER = "\033[40;1m"
# BACK_RED_PER = "\033[41;1m"
# BACK_GREEN_PER = "\033[42;1m"
BACK_YELLOW_PER = "\033[43;1m"
# BACK_BLUE_PER = "\033[44;1m"
# GREEN_GREENBACK_PRE = "\033[1;32;42m"
BULE_GREENBACK_PRE = "\033[1;34;42m"
# Define some foreground colors
BLACK = 30
RED = 31
GREEN = 32
YELLOW = 33
BLUE = 34
MAGENTA = 35
CYAN = 36
WHITE = 37
COLORLOG_PREFIX = BACK_YELLOW_PER
COLORMETHOR_PREFIX = BULE_GREENBACK_PRE
#字体颜色
FRONT_COLOR_SEQ = "\033[1;%dm"
#背景颜色
BACK_COLOR_SEQ = "\033[%d;1m"
COLORLOG_PREFIX = FRONT_COLOR_SEQ % GREEN
COLORMETHOR_PREFIX = FRONT_COLOR_SEQ % CYAN
#dbus 建立
class UpdateManagerDbusController(dbus.service.Object):
@ -144,8 +146,17 @@ class UpdateManagerDbusController(dbus.service.Object):
#获取后端现在的状态
@dbus.service.method(UPDATER_DBUS_INTERFACE,out_signature='i')
def GetBackendStatus(self):
def GetBackendStatus(self,user_lang):
try:
# if user_lang not in os.environ["LANG"]:
# 如果系统不是中文也不是英文 就默认中文
# if user_lang != "en" and user_lang != "zh_CN:en":
# logging.error("%s",user_lang)
# user_lang = "zh_CN:en"
# logging.warning("The system language is switched %s to %s",os.environ["LANGUAGE"],user_lang)
# os.environ["LANGUAGE"] = user_lang
#处于更新和升级中的话 不进行更新
logging.info(COLORMETHOR_PREFIX+'method'+COLORLOG_SUFFIX+' GetBackendStatus ...')
return self.parent.is_working

View File

@ -1,14 +1,6 @@
#!/usr/bin/env python
from aptdaemon import client, errors
from defer import inline_callbacks
from aptdaemon.enums import (EXIT_SUCCESS,
EXIT_FAILED,
EXIT_CANCELLED,
get_error_description_from_enum,
get_error_string_from_enum,
get_status_string_from_enum
)
from SystemUpdater.backend import InstallBackend
import logging
from gettext import gettext as _
@ -30,6 +22,24 @@ class InstallBackendAptdaemon(InstallBackend):
def __init__(self, window_main, action):
InstallBackend.__init__(self, window_main, action)
self.window_main = window_main
from aptdaemon import client
from aptdaemon import errors
from aptdaemon.enums import (EXIT_SUCCESS,
EXIT_FAILED,
EXIT_CANCELLED,
get_error_description_from_enum,
get_error_string_from_enum,
get_status_string_from_enum
)
self.errors = errors
self.EXIT_SUCCESS = EXIT_SUCCESS
self.EXIT_FAILED = EXIT_FAILED
self.EXIT_CANCELLED = EXIT_CANCELLED
self.get_error_description_from_enum = get_error_description_from_enum
self.get_error_string_from_enum = get_error_string_from_enum
self.get_status_string_from_enum = get_status_string_from_enum
#客户端连接aptdeamon的dbus接口
self.client = client.AptClient()
self.trans_failed_msg = None
@ -106,7 +116,7 @@ class InstallBackendAptdaemon(InstallBackend):
# 注册回调函数 接收更新的状态
yield self._show_transaction(trans, self.ACTION_UPDATE,
_("Checking for updates…"), False)
except errors.NotAuthorizedError:
except self.errors.NotAuthorizedError:
self._action_done(self.ACTION_UPDATE,
authorized=False, success=False,
error_string='', error_desc='')
@ -128,11 +138,11 @@ class InstallBackendAptdaemon(InstallBackend):
yield self._show_transaction(trans, self.ACTION_INSTALL,
_("Installing updates…"), True)
except errors.NotAuthorizedError:
except self.errors.NotAuthorizedError:
self._action_done(self.ACTION_INSTALL,
authorized=False, success=False,
error_string='', error_desc='')
except errors.TransactionFailed as e:
except self.errors.TransactionFailed as e:
self.trans_failed_msg = str(e)
except dbus.DBusException as e:
if e.get_dbus_name() != "org.freedesktop.DBus.Error.NoReply":
@ -154,7 +164,7 @@ class InstallBackendAptdaemon(InstallBackend):
# 注册回调函数 接收更新的状态
yield self._show_transaction(trans, self.ACTION_INSTALL_DEB,
_("Installing deb packages…"), False)
except errors.NotAuthorizedError:
except self.errors.NotAuthorizedError:
self._action_done(self.ACTION_INSTALL_DEB,
authorized=False, success=False,
error_string='', error_desc='')
@ -174,7 +184,7 @@ class InstallBackendAptdaemon(InstallBackend):
# 注册回调函数 接收更新的状态
yield self._show_transaction(trans, self.ACTION_FIX_BROKEN,
_("Installing deb packages…"), False)
except errors.NotAuthorizedError:
except self.errors.NotAuthorizedError:
self._action_done(self.ACTION_FIX_BROKEN,
authorized=False, success=False,
error_string='', error_desc='')
@ -193,7 +203,7 @@ class InstallBackendAptdaemon(InstallBackend):
# 注册回调函数 接收更新的状态
yield self._show_transaction(trans, self.ACTION_FIX_INCOMPLETE,
_("fix incomplete install"), False)
except errors.NotAuthorizedError:
except self.errors.NotAuthorizedError:
self._action_done(self.ACTION_FIX_INCOMPLETE,
authorized=False, success=False,
error_string='', error_desc='')
@ -212,7 +222,7 @@ class InstallBackendAptdaemon(InstallBackend):
# 注册回调函数 接收更新的状态
yield self._show_transaction(trans, self.ACTION_CLEAN,
_("Remove all downloaded files."), False)
except errors.NotAuthorizedError:
except self.errors.NotAuthorizedError:
self._action_done(self.ACTION_CLEAN,
authorized=False, success=False,
error_string='', error_desc='')
@ -231,7 +241,7 @@ class InstallBackendAptdaemon(InstallBackend):
# 注册回调函数 接收更新的状态
yield self._show_transaction(trans, self.ACTION_DOWNLOADONLY,
_("Downloading deb packages…"), False)
except errors.NotAuthorizedError:
except self.errors.NotAuthorizedError:
self._action_done(self.ACTION_DOWNLOADONLY,
authorized=False, success=False,
error_string='', error_desc='')
@ -250,7 +260,7 @@ class InstallBackendAptdaemon(InstallBackend):
# 注册回调函数 接收更新的状态
yield self._show_transaction(trans, self.ACTION_REMOVE_PACKAGES,
_("Installing deb packages…"), False)
except errors.NotAuthorizedError:
except self.errors.NotAuthorizedError:
self._action_done(self.ACTION_REMOVE_PACKAGES,
authorized=False, success=False,
error_string='', error_desc='')
@ -280,7 +290,7 @@ class InstallBackendAptdaemon(InstallBackend):
#同步状态回调
def _on_status_changed(self, trans, status,action):
#转化词条
self.trans_status = get_status_string_from_enum(status)
self.trans_status = self.get_status_string_from_enum(status)
self._dist_status_changed(action,self.now_upgrade.upgrade_groups+self.now_upgrade.single_pkgs,\
self.trans_progress,self.trans_status,self.details)
@ -342,14 +352,14 @@ class InstallBackendAptdaemon(InstallBackend):
if self.action == self.ACTION_REMOVE_PACKAGES or self.action == self.ACTION_UPDATE:
return
logging.info("\033[43;1m" + "emit" + "\033[0m" +" Cancelable: %r",Cancelable)
logging.info("\033[1;32m" + "Emitting" + "\033[0m" +" Cancelable: %r",Cancelable)
self.window_main.dbusController.Cancelable(Cancelable)
#增加取消信号的频发机制
self.trans_cancelable = Cancelable
#增加记录当产生错误的时候 详细信息
def _on_error_changed(self, trans,error_code, error_details):
# error_string = get_error_string_from_enum(error_code)
# error_string = self.get_error_string_from_enum(error_code)
self.trans_error_details = str(error_details)
logging.error(str(error_details))
@ -375,29 +385,29 @@ class InstallBackendAptdaemon(InstallBackend):
#退出
self.on_install_stage = False
if status == EXIT_FAILED:
error_string = get_error_string_from_enum(trans.error.code)
error_desc = get_error_description_from_enum(trans.error.code)
if status == self.EXIT_FAILED:
error_string = self.get_error_string_from_enum(trans.error.code)
error_desc = self.get_error_description_from_enum(trans.error.code)
if self.trans_failed_msg:
error_desc = error_desc + "\n" + self.trans_failed_msg
#取消下载
elif status == EXIT_CANCELLED:
elif status == self.EXIT_CANCELLED:
error_string = _("Failed to fetch")
error_desc = _("_Cancel Upgrade")
elif status == EXIT_SUCCESS and action == self.ACTION_INSTALL:
elif status == self.EXIT_SUCCESS and action == self.ACTION_INSTALL:
error_string = _("System upgrade is complete.")
elif status == EXIT_SUCCESS and action == self.ACTION_REMOVE_PACKAGES:
elif status == self.EXIT_SUCCESS and action == self.ACTION_REMOVE_PACKAGES:
error_string = _("Uninstallation completed")
is_success = (status == EXIT_SUCCESS)
is_success = (status == self.EXIT_SUCCESS)
try:
self._action_done(action,
is_cancelled=(status == EXIT_CANCELLED), success=is_success,
is_cancelled=(status == self.EXIT_CANCELLED), success=is_success,
error_string=error_string, error_desc=error_desc)
except TypeError:
# this module used to be be lazily imported and in older code
# trans_failed= is not accepted
# TODO: this workaround can be dropped in Ubuntu 20.10
self._action_done(action,
is_cancelled=(status == EXIT_CANCELLED), success=is_success,
is_cancelled=(status == self.EXIT_CANCELLED), success=is_success,
error_string=error_string, error_desc=error_desc)

View File

@ -451,6 +451,10 @@ class InstallBackend():
self.window_main.dbusController.PurgePackagesFinished(success,error_string,error_desc)
elif action == self.ACTION_INSTALL_DEB:
#FIXME: '\r\n: \r\n\r\n'就认为是验证失败
if success == False and '\r\n: \r\n\r\n' in self.trans_error_details:
error_string = _("Package validation failed and installation was rejected.")
error_desc = ''
self.window_main.dbusController.InstalldebFinished(success,error_string,error_desc)
#将安装完成的插入数据库 安装失败的计算那些包安装失败了 分类插入数据库中

View File

@ -70,7 +70,8 @@ if __name__ == "__main__":
else:
logging.basicConfig(format=FORMAT,level=logging.DEBUG,filename = logfile(),filemode = 'a')
logging.info('kylin-system-updater(lang:%s) starting ...',os.environ["LANGUAGE"])
# logging.info('kylin-system-updater(lang:%s) starting ...',os.environ["LANGUAGE"])
logging.info('kylin-system-updater starting ...')
app = UpdateManager(options)

View File

@ -2598,6 +2598,9 @@ msgstr "更新管理器升级完成,请重启控制面板后再进行系统更
msgid "Uninstallation completed"
msgstr "卸载完成。"
msgid "Package validation failed and installation was rejected."
msgstr "软件包验证失败,拒绝安装。"
msgid "Other tasks are being updated and upgraded, please uninstall them later."
msgstr "其他任务正在更新升级中,请稍后再卸载。"