This commit is contained in:
Vinícius Moreira
2019-07-28 12:44:29 -03:00
committed by GitHub
11 changed files with 74 additions and 17 deletions

View File

@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [0.4.2] - 2019-07-28
### Improvements
- showing a warning dialog when the application starts and **snapd** is unavailable
### Fixes:
- [Snaps read index error](https://github.com/vinifmor/fpakman/issues/30)
## [0.4.1] - 2019-07-25 ## [0.4.1] - 2019-07-25
### Improvements ### Improvements
- retrieving some Snaps data (icon, description and confinement) through Ubuntu API instead of Snap Store - retrieving some Snaps data (icon, description and confinement) through Ubuntu API instead of Snap Store

View File

@@ -1,4 +1,4 @@
__version__ = '0.4.1' __version__ = '0.4.2'
__app_name__ = 'fpakman' __app_name__ = 'fpakman'
import os import os

View File

@@ -21,6 +21,7 @@ from fpakman.core.snap.model import SnapApplication
from fpakman.util import util from fpakman.util import util
from fpakman.util.cache import Cache from fpakman.util.cache import Cache
from fpakman.util.memory import CacheCleaner from fpakman.util.memory import CacheCleaner
from fpakman.view.qt import dialog
from fpakman.view.qt.systray import TrayIcon from fpakman.view.qt.systray import TrayIcon
@@ -85,7 +86,7 @@ managers = []
if args.flatpak: if args.flatpak:
flatpak_api_cache = Cache(expiration_time=args.cache_exp) flatpak_api_cache = Cache(expiration_time=args.cache_exp)
cache_map[FlatpakApplication] = flatpak_api_cache cache_map[FlatpakApplication] = flatpak_api_cache
managers.append(FlatpakManager(app_args=args, api_cache=flatpak_api_cache, disk_cache=args.disk_cache, http_session=http_session)) managers.append(FlatpakManager(app_args=args, api_cache=flatpak_api_cache, disk_cache=args.disk_cache, http_session=http_session, locale_keys=locale_keys))
caches.append(flatpak_api_cache) caches.append(flatpak_api_cache)
if args.disk_cache: if args.disk_cache:
@@ -94,7 +95,7 @@ if args.flatpak:
if args.snap: if args.snap:
snap_api_cache = Cache(expiration_time=args.cache_exp) snap_api_cache = Cache(expiration_time=args.cache_exp)
cache_map[SnapApplication] = snap_api_cache cache_map[SnapApplication] = snap_api_cache
managers.append(SnapManager(app_args=args, disk_cache=args.disk_cache, api_cache=snap_api_cache, http_session=http_session)) managers.append(SnapManager(app_args=args, disk_cache=args.disk_cache, api_cache=snap_api_cache, http_session=http_session, locale_keys=locale_keys))
caches.append(snap_api_cache) caches.append(snap_api_cache)
if args.disk_cache: if args.disk_cache:
@@ -124,4 +125,10 @@ trayIcon.show()
CacheCleaner(caches).start() CacheCleaner(caches).start()
warnings = manager.list_warnings()
if warnings:
for warning in warnings:
dialog.show_warning(title=locale_keys['warning'].capitalize(), body=warning)
sys.exit(app.exec_()) sys.exit(app.exec_())

View File

@@ -9,8 +9,9 @@ from fpakman.core.system import FpakmanProcess
class ApplicationManager(ABC): class ApplicationManager(ABC):
def __init__(self, app_args): def __init__(self, app_args, locale_keys: dict):
self.app_args = app_args self.app_args = app_args
self.locale_keys = locale_keys
@abstractmethod @abstractmethod
def search(self, word: str, disk_loader: DiskCacheLoader) -> Dict[str, List[Application]]: def search(self, word: str, disk_loader: DiskCacheLoader) -> Dict[str, List[Application]]:
@@ -84,6 +85,10 @@ class ApplicationManager(ABC):
def list_updates(self) -> List[ApplicationUpdate]: def list_updates(self) -> List[ApplicationUpdate]:
pass pass
@abstractmethod
def list_warnings(self) -> List[str]:
pass
class GenericApplicationManager(ApplicationManager): class GenericApplicationManager(ApplicationManager):
@@ -266,3 +271,18 @@ class GenericApplicationManager(ApplicationManager):
updates.extend(man.list_updates()) updates.extend(man.list_updates())
return updates return updates
def list_warnings(self) -> List[str]:
if self.managers:
warnings = None
for man in self.managers:
man_warnings = man.list_warnings()
if man_warnings:
if warnings is None:
warnings = []
warnings.extend(man_warnings)
return warnings

View File

@@ -17,8 +17,8 @@ from fpakman.util.cache import Cache
class FlatpakManager(ApplicationManager): class FlatpakManager(ApplicationManager):
def __init__(self, app_args: Namespace, api_cache: Cache, disk_cache: bool, http_session): def __init__(self, app_args: Namespace, api_cache: Cache, disk_cache: bool, http_session, locale_keys: dict):
super(FlatpakManager, self).__init__(app_args=app_args) super(FlatpakManager, self).__init__(app_args=app_args, locale_keys=locale_keys)
self.api_cache = api_cache self.api_cache = api_cache
self.http_session = http_session self.http_session = http_session
self.disk_cache = disk_cache self.disk_cache = disk_cache
@@ -176,5 +176,7 @@ class FlatpakManager(ApplicationManager):
updates.append(ApplicationUpdate(app_id='{}:{}'.format(app['id'], app['branch']), updates.append(ApplicationUpdate(app_id='{}:{}'.format(app['id'], app['branch']),
app_type='flatpak', app_type='flatpak',
version=app.get('version'))) version=app.get('version')))
return updates return updates
def list_warnings(self) -> List[str]:
return None

View File

@@ -17,8 +17,8 @@ from fpakman.util.cache import Cache
class SnapManager(ApplicationManager): class SnapManager(ApplicationManager):
def __init__(self, app_args: Namespace, api_cache: Cache, disk_cache: bool, http_session): def __init__(self, app_args: Namespace, api_cache: Cache, disk_cache: bool, http_session, locale_keys: dict):
super(SnapManager, self).__init__(app_args=app_args) super(SnapManager, self).__init__(app_args=app_args, locale_keys=locale_keys)
self.api_cache = api_cache self.api_cache = api_cache
self.http_session = http_session self.http_session = http_session
self.disk_cache = disk_cache self.disk_cache = disk_cache
@@ -133,3 +133,7 @@ class SnapManager(ApplicationManager):
def list_updates(self) -> List[ApplicationUpdate]: def list_updates(self) -> List[ApplicationUpdate]:
return [] return []
def list_warnings(self) -> List[str]:
if snap.get_snapd_version() == 'unavailable':
return [self.locale_keys['snap.notification.snapd_unavailable']]

View File

@@ -9,7 +9,7 @@ BASE_CMD = 'snap'
def is_installed(): def is_installed():
version = get_snapd_version() version = get_snapd_version()
return False if version is None else True return False if version is None or version == 'unavailable' else True
def get_version(): def get_version():
@@ -27,7 +27,7 @@ def get_snapd_version():
if lines and len(lines) >= 2: if lines and len(lines) >= 2:
version = lines[1].split(' ')[-1].strip() version = lines[1].split(' ')[-1].strip()
return version if version and version.lower() != 'unavailable' else None return version.lower() if version else None
else: else:
return None return None
@@ -39,8 +39,8 @@ def app_str_to_json(app: str) -> dict:
'version': app_data[1], 'version': app_data[1],
'rev': app_data[2], 'rev': app_data[2],
'tracking': app_data[3], 'tracking': app_data[3],
'publisher': app_data[4], 'publisher': app_data[4] if len(app_data) >= 5 else None,
'notes': app_data[5] 'notes': app_data[5] if len(app_data) >= 6 else None
} }
app_json.update(get_info(app_json['name'], ('summary', 'type', 'description'))) app_json.update(get_info(app_json['name'], ('summary', 'type', 'description')))

View File

@@ -99,4 +99,6 @@ version.installed=installed version
version.latest=latest version version.latest=latest version
version.installed_outdated=the installed version is outdated version.installed_outdated=the installed version is outdated
version.unknown=not informed version.unknown=not informed
app.name=application name app.name=application name
warning=warning
snap.notification.snapd_unavailable=snapd seems not to be enabled. snap packages will not be available.

View File

@@ -100,4 +100,6 @@ version.installed=versión instalada
version.latest=versión más reciente version.latest=versión más reciente
version.installed_outdated=la versión instalada está desactualizada version.installed_outdated=la versión instalada está desactualizada
version.unknown=versión no informada version.unknown=versión no informada
app.name=nombre del aplicativo app.name=nombre del aplicativo
warning=aviso
snap.notification.snapd_unavailable=snapd no parece estar habilitado. los paquetes snap estarán indisponibles.

View File

@@ -100,4 +100,6 @@ version.installed=versão instalada
version.latest=versão mais recente version.latest=versão mais recente
version.installed_outdated=a versão instalada está desatualizada version.installed_outdated=a versão instalada está desatualizada
version.unknown=versão não informada version.unknown=versão não informada
app.name=nome do aplicativo app.name=nome do aplicativo
warning=aviso
snap.notification.snapd_unavailable=snapd não parece estar habilitado. os pacotes snap estarão indisponíveis.

View File

@@ -1,5 +1,5 @@
from PyQt5.QtGui import QIcon from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QMessageBox, QSizePolicy from PyQt5.QtWidgets import QMessageBox
from fpakman.core import resource from fpakman.core import resource
@@ -16,6 +16,18 @@ def show_error(title: str, body: str, icon: QIcon = QIcon(resource.get_path('img
error_msg.exec_() error_msg.exec_()
def show_warning(title: str, body: str, icon: QIcon = QIcon(resource.get_path('img/logo.svg'))):
msg = QMessageBox()
msg.setIcon(QMessageBox.Warning)
msg.setWindowTitle(title)
msg.setText(body)
if icon:
msg.setWindowIcon(icon)
msg.exec_()
def ask_confirmation(title: str, body: str, locale_keys: dict, icon: QIcon = QIcon(resource.get_path('img/logo.svg'))): def ask_confirmation(title: str, body: str, locale_keys: dict, icon: QIcon = QIcon(resource.get_path('img/logo.svg'))):
dialog_confirmation = QMessageBox() dialog_confirmation = QMessageBox()
dialog_confirmation.setIcon(QMessageBox.Question) dialog_confirmation.setIcon(QMessageBox.Question)