[flatpak] initial partial update support | [ui] trying to fix resize issues

This commit is contained in:
Vinícius Moreira
2020-01-09 19:20:57 -03:00
parent d8d603b73c
commit edc3785e42
4 changed files with 73 additions and 31 deletions

View File

@@ -104,16 +104,29 @@ class FlatpakManager(SoftwareManager):
if thread_updates:
thread_updates.join()
update_map = updates[0]
for app_json in installed:
model = self._map_to_model(app_json=app_json, installed=True,
disk_loader=disk_loader, internet=internet_available)
if version >= '1.5.0':
model.update = '{}/{}'.format(app_json['id'], app_json['branch']) in updates[0] if updates else None
else:
model.update = app_json['ref'] in updates[0] if updates else None
model.update = None
models.append(model)
if update_map['full'] or update_map['partial']:
if version >= '1.5.0':
update_id = '{}/{}'.format(app_json['id'], app_json['branch'])
if update_map['full'] and update_id in update_map['full']:
model.update = True
if update_map['partial']:
for partial in update_map['partial']:
if app_json['id'] in partial and '/' + app_json['branch'] in partial:
partial_model = model.gen_partial(partial.split('/')[0])
partial_model.update = True
models.append(partial_model)
else:
model.update = app_json['ref'] in updates[0] if updates else None
return SearchResult(models, None, len(models))
def downgrade(self, pkg: FlatpakApplication, root_password: str, watcher: ProcessWatcher) -> bool:

View File

@@ -2,7 +2,7 @@ import re
import subprocess
from datetime import datetime
from io import StringIO
from typing import List
from typing import List, Dict
from bauh.api.exception import NoInternetException
from bauh.commons.system import new_subprocess, run_cmd, new_root_subprocess
@@ -157,22 +157,31 @@ def uninstall(app_ref: str):
return new_subprocess([BASE_CMD, 'uninstall', app_ref, '-y'])
def list_updates_as_str(version: str):
def list_updates_as_str(version: str) -> Dict[str, set]:
if version < '1.2':
# TODO
return run_cmd('{} update --no-related'.format(BASE_CMD), ignore_return_code=True)
else:
updates = new_subprocess([BASE_CMD, 'update']).stdout
out = StringIO()
reg = r'[0-9]+\.\s+.+' if version >= '1.5.0' else r'[0-9]+\.\s+(\w+|\.)+\s+\w+\s+(\w|\.)+'
reg = r'[0-9]+\.\s+(\w+|\.)+\s+(\w|\.)+' if version >= '1.5.0' else r'[0-9]+\.\s+(\w+|\.)+\s+\w+\s+(\w|\.)+'
res = {'partial': set(), 'full': set()}
for o in new_subprocess(['grep', '-E', reg, '-o', '--color=never'], stdin=updates).stdout:
if o:
out.write('/'.join(o.decode().strip().split('\t')[2:]) + '\n')
line_split = o.decode().strip().split('\t')
update_id = line_split[2] + '/' + line_split[3]
out.seek(0)
return out.read()
if len(line_split) == 7:
if line_split[4] != 'i':
if '(partial)' in line_split[6]:
res['partial'].add(update_id)
else:
res['full'].add(update_id)
else:
res['full'].add(update_id)
return res
def downgrade(app_ref: str, commit: str, root_password: str) -> subprocess.Popen:

View File

@@ -1,3 +1,6 @@
import copy
from typing import Set
from bauh.api.abstract.model import SoftwarePackage
from bauh.commons import resource
@@ -16,6 +19,7 @@ class FlatpakApplication(SoftwarePackage):
self.origin = origin
self.runtime = runtime
self.commit = commit
self.partial = False
if runtime:
self.categories = ['runtime']
@@ -24,13 +28,13 @@ class FlatpakApplication(SoftwarePackage):
return self.description is None and self.icon_url
def has_history(self):
return self.installed and self.ref
return not self.partial and self.installed and self.ref
def has_info(self):
return bool(self.id)
def can_be_downgraded(self):
return self.installed and self.ref
return not self.partial and self.installed and self.ref
def get_type(self):
return 'flatpak'
@@ -63,7 +67,21 @@ class FlatpakApplication(SoftwarePackage):
setattr(self, attr, data[attr])
def can_be_run(self) -> bool:
return self.installed and not self.runtime
return self.installed and not self.runtime and not self.partial
def get_publisher(self):
return self.origin
def can_be_uninstalled(self):
return self.installed and not self.partial
def gen_partial(self, partial_id: str) -> "FlatpakApplication":
partial = copy.deepcopy(self)
partial.id = partial_id
if self.ref:
ref_split = self.ref.split('/')
partial.ref = '/'.join((ref_split[0], partial_id, *ref_split[2:]))
partial.partial = True
return partial