supporting flatpak 1.4

This commit is contained in:
Vinicius Moreira
2019-06-12 18:13:37 -03:00
parent fe46fad5c2
commit 7b03ccba2e
3 changed files with 65 additions and 26 deletions

View File

@@ -1,3 +1,4 @@
import re
import subprocess
from typing import List
@@ -7,9 +8,10 @@ def _package_str_to_json(line: str, version: str) -> dict:
app_array = line.split('\t')
if version >= '1.4.0':
app = {'name': app_array[0], 'id': app_array[1], 'version': app_array[2], 'branch': app_array[3], 'runtime': 'runtime' in app_array[4]}
# TODO not working yet
app = {'name': app_array[0],
'id': app_array[1],
'version': app_array[2],
'branch': app_array[3]}
elif '1.0' <= version < '1.1':
app = {'ref': app_array[0], 'options': app_array[1]}
@@ -18,16 +20,29 @@ def _package_str_to_json(line: str, version: str) -> dict:
app['arch'] = ref_data[1]
app['branch'] = ref_data[2]
app['name'] = ref_data[0].split('.')[-1]
app['runtime'] = 'runtime' in app['options']
app['version'] = None
else:
raise Exception('Unsupported version')
info = re.findall('\w+:\s.+', get_info(app['id']))
fields_to_get = ['origin', 'arch', 'ref']
for field in info:
field_val = field.split(':')
field_name = field_val[0].lower()
if field_name in fields_to_get:
app[field_name] = field_val[1].strip()
if field_name == 'ref':
app['runtime'] = app['ref'].startswith('runtime/')
return app
def _run_cmd(cmd: str) -> str:
def _run_cmd(cmd: str, expected_code: int = 0) -> str:
res = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE)
return res.stdout.decode() if res.returncode == 0 else None
return res.stdout.decode() if res.returncode == expected_code else None
def get_version():
@@ -35,6 +50,10 @@ def get_version():
return res.split(' ')[1].strip() if res else None
def get_info(app_id: str):
return _run_cmd('flatpak info ' + app_id)
def list_installed() -> List[str]:
apps_str = _run_cmd('flatpak list')
@@ -46,10 +65,14 @@ def list_installed() -> List[str]:
return None
def check_update(ref: dict) -> bool:
res = _run_cmd('flatpak update ' + ref)
def check_update(pak_id: dict) -> bool:
res = _run_cmd('flatpak update ' + pak_id)
return 'Updating in system' in res
def update(ref: str):
return bool(_run_cmd('flatpak update -y ' + ref))
def list_updates():
return _run_cmd('flatpak update', expected_code=1)

View File

@@ -37,21 +37,26 @@ class FlatpakManager:
if packages:
packages.sort(key=lambda p: p['name'].lower())
available_updates = flatpak.list_updates()
for pak in packages:
if self.packages_db:
package_data = self.packages_db.get(pak['id'], None)
pak_data = self.packages_db.get(pak['id'], None)
else:
package_data = None
pak_data = None
if not package_data:
if not pak_data:
pak['latest_release'] = None
pak['icon'] = None
else:
pak['latest_release'] = package_data['currentReleaseVersion']
pak['icon'] = __FLATHUB_URL__ + package_data['iconDesktopUrl']
pak['latest_release'] = pak_data['currentReleaseVersion']
pak['icon'] = pak_data['iconDesktopUrl']
pak['update'] = flatpak.check_update(pak['ref'])
if pak['icon'].startswith('/'):
pak['icon'] = __FLATHUB_URL__ + pak['icon']
pak['update'] = pak['id'] in available_updates
self.packages = packages
return [*self.packages]