优化代码 进行解耦

This commit is contained in:
wangsong 2021-11-01 20:09:55 +08:00
parent 13738ae3e2
commit 43d6300ef7
1 changed files with 58 additions and 57 deletions

View File

@ -50,24 +50,19 @@ class InstallBackend():
self.action = action
if self.window_main.update_list != None:
self.local_upgrade_data = window_main.update_list.local_upgrade_data
self.upgrade_data = window_main.update_list.local_upgrade_data
#要拿到升级列表必须调用_make_upgrade_list
self.now_upgrade = NowUpgradePara([],MODE_DEFAULT_STATUS,[])
def start(self,_upgrade_mode = MODE_DEFAULT_STATUS,partial_upgrade_list = []):
#安装升级包 首先必须调用ACTION_CHECK_RESOLVER 计算依赖解决方便 标记cache 进行升级
if self.action == self.ACTION_INSTALL:
self.now_upgrade.upgrade_mode = _upgrade_mode
if _upgrade_mode != MODE_UPGRADE_SINGLE:
self._make_upgrade_list(_upgrade_mode,partial_upgrade_list)
#检查磁盘的状态
_success,desc = check_free_space(self.cache)
if _success == False and desc != None:
header = _("Can not upgrade")
self._action_done(self.action,True,False,header,desc)
return
logging.info("Disk Check finished...")
#拿到升级列表
self.now_upgrade.upgrade_groups,self.now_upgrade.single_pkgs = self._make_groups_list(self.upgrade_data,_upgrade_mode,partial_upgrade_list)
pkgs_install,pkgs_upgrade,pkgs_remove = self._get_mark_from_cache(self.cache)
@ -79,6 +74,14 @@ class InstallBackend():
desc = _("Check if the upgrade package does not exist for this upgrade")
self._action_done(self.action,True,False,header,desc)
return
#检查磁盘的状态
_success,desc = check_free_space(self.cache)
if _success == False and desc != None:
header = _("Can not upgrade")
self._action_done(self.action,True,False,header,desc)
return
logging.info("Disk Check finished...")
try:
self.commit(pkgs_install, pkgs_upgrade, pkgs_remove)
except Exception as e:
@ -89,8 +92,10 @@ class InstallBackend():
header = ''
desc = ''
if _upgrade_mode != MODE_UPGRADE_SYSTEM:
#获取要升级的列表
pkgs_install,pkgs_upgrade = self._make_upgrade_list(_upgrade_mode,partial_upgrade_list)
#获取要升级的组列表
self.now_upgrade.upgrade_groups,self.now_upgrade.single_pkgs = self._make_groups_list(self.upgrade_data,_upgrade_mode,partial_upgrade_list)
#获取要升级和安装的包列表
pkgs_install,pkgs_upgrade = self._make_pkgs_list(self.cache,self.upgrade_data.upgrade_groups_pkgs,self.now_upgrade.upgrade_groups,self.now_upgrade.single_pkgs)
#计算解决依赖关系
_success,delete_pkgs,delete_desc,header,desc = self._make_problem_resolver(pkgs_install,pkgs_upgrade)
pkgs_install,pkgs_upgrade,pkgs_remove = self._get_mark_from_cache(self.cache)
@ -159,7 +164,7 @@ class InstallBackend():
pkgs_upgrade = []
pkgs_remove = []
#获取调整包列表 去掉版本号
adjust_pkgs = [i.split("=")[0] for i in self.local_upgrade_data.adjust_pkgs]
adjust_pkgs = [i.split("=")[0] for i in self.upgrade_data.adjust_pkgs]
for pkg in cache:
try:
if pkg.marked_install:
@ -167,12 +172,12 @@ class InstallBackend():
if pkg.is_auto_installed:
pkgname += "#auto"
if pkg.name in adjust_pkgs:
pkgs_install.append(self.local_upgrade_data.adjust_pkgs[adjust_pkgs.index(pkg.name)])
pkgs_install.append(self.upgrade_data.adjust_pkgs[adjust_pkgs.index(pkg.name)])
else:
pkgs_install.append(pkgname)
elif pkg.marked_upgrade:
if pkg.name in adjust_pkgs:
pkgs_upgrade.append(self.local_upgrade_data.adjust_pkgs[adjust_pkgs.index(pkg.name)])
pkgs_upgrade.append(self.upgrade_data.adjust_pkgs[adjust_pkgs.index(pkg.name)])
else:
pkgs_upgrade.append(pkg.name)
elif pkg.marked_delete:
@ -181,47 +186,47 @@ class InstallBackend():
pass
return pkgs_install,pkgs_upgrade,pkgs_remove
#获取当前升级的升级列表
def _make_groups_list(self,upgrade_data,_upgrade_mode,partial_upgrade_list):
groups_list = []
pkg_list = []
#可选升级
if _upgrade_mode == MODE_UPGRADE_PARTIAL:
for i in partial_upgrade_list:
#组升级方式
if i in upgrade_data.upgrade_groups:
groups_list.append(i)
#单包升级方式
elif i in upgrade_data.single_pkgs:
pkg_list.append(i)
else:
logging.warning("this package(%s) not in selected list",i)
#全部升级列表
elif _upgrade_mode == MODE_UPGRADE_ALL:
groups_list = upgrade_data.upgrade_groups
pkg_list = upgrade_data.single_pkgs
return groups_list,pkg_list
#从本地中获取本次升级需要升级的包 部分升级和全部升级使用 全盘升级不适用
def _make_upgrade_list(self,_upgrade_mode,partial_upgrade_list):
def _make_pkgs_list(self,cache,groups_pkgs,groups_list,pkg_list):
pkgs_install = []
pkgs_upgrade = []
local_groups_list = []
local_pkg_list = []
try:
#可选升级
if _upgrade_mode == MODE_UPGRADE_PARTIAL:
for i in partial_upgrade_list:
#组升级方式
if i in self.local_upgrade_data.upgrade_groups:
local_groups_list.append(i)
#单包升级方式
elif i in self.local_upgrade_data.single_pkgs:
local_pkg_list.append(i)
else:
logging.warning("this package(%s) not in selected list",i)
#全部升级列表
elif _upgrade_mode == MODE_UPGRADE_ALL:
local_groups_list = self.local_upgrade_data.upgrade_groups
local_pkg_list = self.local_upgrade_data.single_pkgs
#单包的升级方式
if local_pkg_list:
self.now_upgrade.single_pkgs += local_pkg_list
for pkg in local_pkg_list:
if self.cache[pkg].is_installed:
pkgs_upgrade.append(pkg)
else:
pkgs_install.append(pkg)
for pkg in pkg_list:
if cache[pkg].is_installed:
pkgs_upgrade.append(pkg)
else:
pkgs_install.append(pkg)
#遍历升级组列表
if local_groups_list:
self.now_upgrade.upgrade_groups += local_groups_list
for group_name in local_groups_list:
pkgs_install += self.local_upgrade_data.upgrade_groups_pkgs.get(group_name,[]).get('pkgs_install',[])
pkgs_upgrade += self.local_upgrade_data.upgrade_groups_pkgs.get(group_name,[]).get('pkgs_upgrade',[])
for group_name in groups_list:
pkgs_install += groups_pkgs.get(group_name,[]).get('pkgs_install',[])
pkgs_upgrade += groups_pkgs.get(group_name,[]).get('pkgs_upgrade',[])
return pkgs_install,pkgs_upgrade
except Exception as e:
@ -308,22 +313,18 @@ class InstallBackend():
if self.now_upgrade.upgrade_mode != MODE_UPGRADE_SINGLE:
#升级完成后从升级列表删除
for groups in self.now_upgrade.upgrade_groups:
self.local_upgrade_data.upgrade_groups.remove(groups)
self.upgrade_data.upgrade_groups.remove(groups)
for pkg in self.now_upgrade.single_pkgs:
self.local_upgrade_data.single_pkgs.remove(pkg)
self.upgrade_data.single_pkgs.remove(pkg)
else:
#只有安装配置文件包 才会走到此处
self.window_main.start_available()
return
if error_string == None:
error_string = ''
if error_desc == None:
error_desc = ''
# 信息插入数据库 and 发送信号
if error_string != '' or error_desc != '':
logging.info(error_string + error_desc)
# 信息插入数据库 and 发送信号
self.window_main.sqlite3_server.insert_info(self.now_upgrade.upgrade_mode,self.now_upgrade.single_pkgs,self.now_upgrade.upgrade_groups,success,error_string,error_desc)
self.window_main.dbusController.UpdateInstallFinished(success,upgrade_content,error_string,error_desc)
elif action == self.ACTION_UPDATE: