diff --git a/CHANGELOG.md b/CHANGELOG.md
index 11ae7139..a91ac27a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,9 @@ 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/).
## NEXT
+### Features
+ - new **verified** filter for the management table
+
### Improvements
- Arch
- adding the AUR's URL on the package information dialog [#339](https://github.com/vinifmor/bauh/issues/339)
@@ -18,6 +21,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- the "Skip" button on the initialization panel is now enabled after 10 seconds [#310](https://github.com/vinifmor/bauh/issues/310)
- faster package icons download
- faster packages filtering (`type`, `category`, `name`, etc... up to **95% less time**)
+ - displaying a text warning before installing an unverified package (unverified = not verified by the system maintainers or a trustable source)
+ - at the moment the following packaging formats are considered completely **unverified**: AppImage, AUR, native Web application
+ - Snap supports both verified and unverified software
### Fixes
- AppImage
diff --git a/bauh/gems/arch/model.py b/bauh/gems/arch/model.py
index d7e36886..fd09525e 100644
--- a/bauh/gems/arch/model.py
+++ b/bauh/gems/arch/model.py
@@ -288,3 +288,6 @@ class ArchPackage(SoftwarePackage):
@property
def orphan(self) -> bool:
return self.maintainer is None
+
+ def is_trustable(self) -> bool:
+ return self.repository and self.repository != "aur"
diff --git a/bauh/gems/arch/resources/locale/ca b/bauh/gems/arch/resources/locale/ca
index 7e28eb72..1cf570e4 100644
--- a/bauh/gems/arch/resources/locale/ca
+++ b/bauh/gems/arch/resources/locale/ca
@@ -314,4 +314,3 @@ gem.arch.info=Software packages available for distributions based on Arch Linux
gem.arch.label=Arch
gem.arch.type.arch_repo.label=Arch - Dipòsit
gem.arch.type.aur.label=Arch - AUR
-gem.aur.install.warning=Els paquets AUR són mantinguts per una comunitat d’usuaris independent. No hi ha cap garantia que funcionin o que no danyin el vostre sistema.
\ No newline at end of file
diff --git a/bauh/gems/arch/resources/locale/de b/bauh/gems/arch/resources/locale/de
index 95317b3a..74bbc6e8 100644
--- a/bauh/gems/arch/resources/locale/de
+++ b/bauh/gems/arch/resources/locale/de
@@ -314,4 +314,3 @@ gem.arch.info=Verfügbare Softwarepakete für Distributionen, die auf Arch Linux
gem.arch.label=Arch
gem.arch.type.arch_repo.label=Arch - Repository
gem.arch.type.aur.label=Arch - AUR
-gem.aur.install.warning=AUR-Pakete werden von einer unabhängigen Benutzergemeinschaft gepflegt. Es gibt keine Garantie, dass sie funktionieren oder Ihr System nicht beschädigen.
\ No newline at end of file
diff --git a/bauh/gems/arch/resources/locale/en b/bauh/gems/arch/resources/locale/en
index 6cf743b6..e75fd066 100644
--- a/bauh/gems/arch/resources/locale/en
+++ b/bauh/gems/arch/resources/locale/en
@@ -314,4 +314,3 @@ gem.arch.info=Software packages available for distributions based on Arch Linux
gem.arch.label=Arch
gem.arch.type.arch_repo.label=Arch - Repository
gem.arch.type.aur.label=Arch - AUR
-gem.aur.install.warning=AUR packages are maintained by an independent user community. There is no warranty they will work or not harm your system.
\ No newline at end of file
diff --git a/bauh/gems/arch/resources/locale/es b/bauh/gems/arch/resources/locale/es
index 88856e67..7cdb770f 100644
--- a/bauh/gems/arch/resources/locale/es
+++ b/bauh/gems/arch/resources/locale/es
@@ -314,4 +314,3 @@ gem.arch.info=Paquetes de software disponibles para distribuciones basadas en Ar
gem.arch.label=Arch
gem.arch.type.arch_repo.label=Arch - Repositorio
gem.arch.type.aur.label=Arch - AUR
-gem.aur.install.warning=Los paquetes AUR son mantenidos por una comunidad de usuarios independiente. No hay garantía de que funcionen o que no dañen su sistema.
diff --git a/bauh/gems/arch/resources/locale/fr b/bauh/gems/arch/resources/locale/fr
index 29745eb7..47e819e5 100644
--- a/bauh/gems/arch/resources/locale/fr
+++ b/bauh/gems/arch/resources/locale/fr
@@ -314,4 +314,3 @@ gem.arch.info=Paquets logiciels disponibles pour les distributions basées sur A
gem.arch.label=Arch
gem.arch.type.arch_repo.label=Arch - Dépôt
gem.arch.type.aur.label=Arch - AUR
-gem.aur.install.warning=Les paquets AUR sont maintenus par une communauté indépendante. Il n'y a aucune garantie qu'ils fonctionneront et qu'ils n'endommageront pas votre système.
diff --git a/bauh/gems/arch/resources/locale/it b/bauh/gems/arch/resources/locale/it
index 0e054bad..6b05004d 100644
--- a/bauh/gems/arch/resources/locale/it
+++ b/bauh/gems/arch/resources/locale/it
@@ -314,4 +314,3 @@ gem.arch.info=Software packages available for distributions based on Arch Linux
gem.arch.label=Arch
gem.arch.type.arch_repo.label=Arch - Deposito
gem.arch.type.aur.label=Arch - AUR
-gem.aur.install.warning=I pacchetti AUR sono gestiti da una comunità di utenti indipendenti. Non esiste alcuna garanzia che funzionino o non danneggino il sistema.
\ No newline at end of file
diff --git a/bauh/gems/arch/resources/locale/pt b/bauh/gems/arch/resources/locale/pt
index b51be327..6c051272 100644
--- a/bauh/gems/arch/resources/locale/pt
+++ b/bauh/gems/arch/resources/locale/pt
@@ -313,4 +313,3 @@ gem.arch.info=Pacotes de software disponíveis para distribuições baseadas em
gem.arch.label=Arch
gem.arch.type.arch_repo.label=Arch - Repositório
gem.arch.type.aur.label=Arch - AUR
-gem.aur.install.warning=Pacotes do AUR são mantidos por uma comunidade de usuários independente. Não há garantia que funcionarão ou que não prejudicarão o seus sistema.
diff --git a/bauh/gems/arch/resources/locale/ru b/bauh/gems/arch/resources/locale/ru
index 36f07978..c6cd95dd 100644
--- a/bauh/gems/arch/resources/locale/ru
+++ b/bauh/gems/arch/resources/locale/ru
@@ -314,4 +314,3 @@ gem.arch.info=Пакеты программного обеспечения, до
gem.arch.label=Arch
gem.arch.type.arch_repo.label=Arch - Репозиторий
gem.arch.type.aur.label=Arch - AUR
-gem.aur.install.warning=AUR-пакеты поддерживаются независимым сообществом пользователей. Нет никакой гарантии, что они будут работать или не навредят вашей системе.
diff --git a/bauh/gems/arch/resources/locale/tr b/bauh/gems/arch/resources/locale/tr
index a44c7852..8aeb0f48 100644
--- a/bauh/gems/arch/resources/locale/tr
+++ b/bauh/gems/arch/resources/locale/tr
@@ -314,4 +314,3 @@ gem.arch.info=Arch Linux tabanlı dağıtımlar için mevcut yazılım paketleri
gem.arch.label=Arch
gem.arch.type.arch_repo.label=Arch - Depoları
gem.arch.type.aur.label=Arch - AUR
-gem.aur.install.warning=AUR paketleri bağımsız bir Arch Kullanıcı Topluluğu tarafından sağlanır. Çalışacaklarının veya sisteminize zarar vermeyeceklerinin garantisi yoktur.
diff --git a/bauh/gems/debian/model.py b/bauh/gems/debian/model.py
index a4188843..e506a373 100644
--- a/bauh/gems/debian/model.py
+++ b/bauh/gems/debian/model.py
@@ -132,6 +132,9 @@ class DebianPackage(SoftwarePackage):
def supports_ignored_updates(self) -> bool:
return True
+ def is_trustable(self) -> bool:
+ return True
+
def __eq__(self, other):
if isinstance(other, DebianPackage):
return self.name == other.name
diff --git a/bauh/gems/flatpak/model.py b/bauh/gems/flatpak/model.py
index c44ff456..a15b9be1 100644
--- a/bauh/gems/flatpak/model.py
+++ b/bauh/gems/flatpak/model.py
@@ -159,6 +159,9 @@ class FlatpakApplication(SoftwarePackage):
if self.id and self.arch and self.branch:
self.ref = f'{self.id}/{self.arch}/{self.branch}'
+ def is_trustable(self) -> bool:
+ return True
+
def __repr__(self) -> str:
return f'Flatpak (id={self.id}, branch={self.branch}, origin={self.origin}, installation={self.installation},' \
f' partial={self.partial}, update_component={self.update_component})'
diff --git a/bauh/view/qt/apps_table.py b/bauh/view/qt/apps_table.py
index 9bacbefb..12b3768b 100644
--- a/bauh/view/qt/apps_table.py
+++ b/bauh/view/qt/apps_table.py
@@ -11,6 +11,7 @@ from PyQt5.QtWidgets import QTableWidget, QTableView, QMenu, QToolButton, QWidge
from bauh.api.abstract.cache import MemoryCache
from bauh.api.abstract.model import PackageStatus, CustomSoftwareAction
+from bauh.api.abstract.view import MessageType
from bauh.commons.html import strip_html, bold
from bauh.view.qt.components import IconButton, QCustomMenuAction, QCustomToolbar
from bauh.view.qt.dialog import ConfirmationDialog
@@ -206,15 +207,17 @@ class PackagesTable(QTableWidget):
body = self.i18n['manage_window.apps_table.row.actions.install.popup.body'].format(self._bold(str(pkgv)))
- warning = self.i18n.get('gem.{}.install.warning'.format(pkgv.model.get_type().lower()))
-
- if warning:
+ confirm_icon = MessageType.INFO
+ if not pkgv.model.is_trustable():
+ warning = self.i18n["action.install.unverified.warning"]
+ confirm_icon = MessageType.WARNING
body += '
{}'.format(
' '.join(('{}.'.format(phrase) for phrase in warning.split('.') if phrase)))
if ConfirmationDialog(title=self.i18n['manage_window.apps_table.row.actions.install.popup.title'],
body=self._parag(body),
- i18n=self.i18n).ask():
+ i18n=self.i18n,
+ confirmation_icon_type=confirm_icon).ask():
self.window.install(pkgv)
def _update_pkg_icon(self, url_: str, content: Optional[bytes], table_idx: int):
diff --git a/bauh/view/qt/commons.py b/bauh/view/qt/commons.py
index 1cd470f8..919239b9 100644
--- a/bauh/view/qt/commons.py
+++ b/bauh/view/qt/commons.py
@@ -15,13 +15,14 @@ class PackageFilters(NamedTuple):
only_apps: bool
only_installed: bool
only_updates: bool
+ only_verified: bool
search: Optional[str] # initial search term
type: str
@property
def anything(self) -> bool:
return not self.only_installed and not self.only_updates and not self.only_apps \
- and not self.name and self.type == "any" and self.category == "any"
+ and not self.only_verified and not self.name and self.type == "any" and self.category == "any"
def new_pkgs_info() -> Dict[str, Any]:
@@ -35,6 +36,7 @@ def new_pkgs_info() -> Dict[str, Any]:
'not_installed': 0,
'installed': 0,
'categories': set(),
+ 'verified': 0,
'pkgs': []} # total packages
@@ -46,6 +48,9 @@ def update_info(pkgv: PackageView, pkgs_info: Dict[str, Any]):
else:
pkgs_info['napps_count'] += 1
+ if pkgv.model.is_trustable():
+ pkgs_info['verified'] += 1
+
if pkgv.model.update and not pkgv.model.is_update_ignored():
if pkgv.model.is_application():
pkgs_info['app_updates'] += 1
@@ -94,6 +99,9 @@ def is_package_hidden(pkg: PackageView, filters: PackageFilters) -> bool:
if not hidden and filters.only_updates:
hidden = not pkg.model.update or pkg.model.is_update_ignored()
+ if not hidden and filters.only_verified:
+ hidden = not pkg.model.is_trustable()
+
if not hidden and filters.type is not None and filters.type != "any":
hidden = pkg.model.get_type() != filters.type
diff --git a/bauh/view/qt/dialog.py b/bauh/view/qt/dialog.py
index 13ffc0f5..94de3e11 100644
--- a/bauh/view/qt/dialog.py
+++ b/bauh/view/qt/dialog.py
@@ -35,7 +35,8 @@ class ConfirmationDialog(QDialog):
widgets: Optional[List[QWidget]] = None, confirmation_button: bool = True, deny_button: bool = True,
window_cancel: bool = False, confirmation_label: Optional[str] = None, deny_label: Optional[str] = None,
confirmation_icon: bool = True, min_width: Optional[int] = None,
- min_height: Optional[int] = None, max_width: Optional[int] = None):
+ min_height: Optional[int] = None, max_width: Optional[int] = None,
+ confirmation_icon_type: MessageType = MessageType.INFO):
super(ConfirmationDialog, self).__init__()
if not window_cancel:
@@ -79,6 +80,7 @@ class ConfirmationDialog(QDialog):
if confirmation_icon:
lb_icon = QLabel()
lb_icon.setObjectName("confirm_dialog_icon")
+ lb_icon.setProperty("type", confirmation_icon_type.name.lower())
container_body.layout().addWidget(lb_icon)
if body:
diff --git a/bauh/view/qt/view_index.py b/bauh/view/qt/view_index.py
index d2a89595..0a64657a 100644
--- a/bauh/view/qt/view_index.py
+++ b/bauh/view/qt/view_index.py
@@ -17,15 +17,19 @@ def new_type_index() -> Dict[str, Dict[str, Dict[str, List[PackageView]]]]:
return defaultdict(new_category_idx)
-def new_update_index() -> Dict[int, Dict[str, Dict[str, Dict[str, List[PackageView]]]]]:
+def new_verified_index() -> Dict[int, Dict[str, Dict[str, Dict[str, List[PackageView]]]]]:
return defaultdict(new_type_index)
-def new_app_index() -> Dict[int, Dict[int, Dict[str, Dict[str, Dict[str, List[PackageView]]]]]]:
+def new_update_index() -> Dict[int, Dict[int, Dict[str, Dict[str, Dict[str, List[PackageView]]]]]]:
+ return defaultdict(new_verified_index)
+
+
+def new_app_index() -> Dict[int, Dict[int, Dict[int, Dict[str, Dict[str, Dict[str, List[PackageView]]]]]]]:
return defaultdict(new_update_index)
-def new_package_index() -> Dict[int, Dict[int, Dict[int, Dict[str, Dict[str, Dict[str, List[PackageView]]]]]]]:
+def new_package_index() -> Dict[int, Dict[int, Dict[int, Dict[int, Dict[str, Dict[str, Dict[str, List[PackageView]]]]]]]]:
return defaultdict(new_app_index)
@@ -42,6 +46,9 @@ def add_to_index(pkgv: PackageView, index: dict) -> None:
else:
update_lvl = app_lvl[0]
+ # verified keys: (1) verified | (0) unverified
+ verified_lvl = update_lvl[1 if pkgv.model.is_trustable() else 0]
+
norm_name = pkgv.name.strip().lower()
starts_with_chars = tuple(norm_name[0:i] for i in range(1, len(norm_name) + 1))
@@ -49,13 +56,13 @@ def add_to_index(pkgv: PackageView, index: dict) -> None:
category = cat.lower().strip()
# any type > specific category > any character (None)
- update_lvl["any"][category][None].append(pkgv)
+ verified_lvl["any"][category][None].append(pkgv)
# any type > specific category > characters (start
for chars in starts_with_chars:
- update_lvl["any"][category][chars].append(pkgv)
+ verified_lvl["any"][category][chars].append(pkgv)
- type_lvl = update_lvl[pkgv.model.get_type()]
+ type_lvl = verified_lvl[pkgv.model.get_type()]
# specific type > specific category > any character (None)
type_lvl[category][None].append(pkgv)
@@ -65,7 +72,7 @@ def add_to_index(pkgv: PackageView, index: dict) -> None:
type_lvl[category][chars].append(pkgv)
-def generate_queries(filters: PackageFilters) -> Generator[Tuple[Optional[Union[int, str]]], None, None]:
+def generate_queries(filters: PackageFilters) -> Generator[Tuple[Optional[Union[int, str]], ...], None, None]:
chars_query = None
if filters.name:
@@ -74,11 +81,13 @@ def generate_queries(filters: PackageFilters) -> Generator[Tuple[Optional[Union[
installed_queries = (1,) if filters.only_installed else (1, 0)
apps_queries = (1,) if filters.only_apps else (1, 0)
updates_queries = (1,) if filters.only_updates else (1, 0)
+ verified_queries = (1,) if filters.only_verified else (1, 0)
for installed in installed_queries:
for app in apps_queries:
for update in updates_queries:
- yield installed, app, update, filters.type, filters.category, chars_query
+ for verified in verified_queries:
+ yield installed, app, update, verified, filters.type, filters.category, chars_query
def query_packages(index: dict, filters: PackageFilters) -> Generator[PackageView, None, None]:
@@ -90,7 +99,7 @@ def query_packages(index: dict, filters: PackageFilters) -> Generator[PackageVie
yielded_pkgs = defaultdict(set)
for query in queries:
- packages = index[query[0]][query[1]][query[2]][query[3]][query[4]][query[5]]
+ packages = index[query[0]][query[1]][query[2]][query[3]][query[4]][query[5]][query[6]]
for pkgv in packages:
yield pkgv
@@ -111,7 +120,7 @@ def query_packages(index: dict, filters: PackageFilters) -> Generator[PackageVie
if 0 < yield_limit <= yield_count:
break
- packages = index[query[0]][query[1]][query[2]][query[3]][query[4]][None]
+ packages = index[query[0]][query[1]][query[2]][query[3]][query[4]][query[5]][None]
for pkgv in packages:
# checking if the package has already been yielded
diff --git a/bauh/view/qt/window.py b/bauh/view/qt/window.py
index 5c5bfeeb..ae39fd33 100755
--- a/bauh/view/qt/window.py
+++ b/bauh/view/qt/window.py
@@ -75,13 +75,14 @@ CHECK_INSTALLED = 6
CHECK_UPDATES = 7
CHECK_APPS = 8
COMBO_TYPES = 9
-COMBO_CATEGORIES = 10
-INP_NAME = 11
-CHECK_DETAILS = 12
-BT_SETTINGS = 13
-BT_CUSTOM_ACTIONS = 14
-BT_ABOUT = 15
-BT_THEMES = 16
+CHECK_VERIFIED = 10
+COMBO_CATEGORIES = 11
+INP_NAME = 12
+CHECK_DETAILS = 13
+BT_SETTINGS = 14
+BT_CUSTOM_ACTIONS = 15
+BT_ABOUT = 16
+BT_THEMES = 17
# component groups ids
GROUP_FILTERS = 1
@@ -177,6 +178,16 @@ class ManageWindow(QWidget):
self.toolbar_filters.layout().addWidget(self.check_apps)
self.comp_manager.register_component(CHECK_APPS, self.check_apps)
+ self.check_verified = QCheckBox()
+ self.check_verified.setObjectName('check_verified')
+ self.check_verified.setCursor(QCursor(Qt.PointingHandCursor))
+ self.check_verified.setText(self.i18n['manage_window.checkbox.only_verified'])
+ self.check_verified.setChecked(False)
+ self.check_verified.stateChanged.connect(self._handle_filter_only_verified)
+ self.check_verified.sizePolicy().setRetainSizeWhenHidden(True)
+ self.toolbar_filters.layout().addWidget(self.check_verified)
+ self.comp_manager.register_component(CHECK_VERIFIED, self.check_verified)
+
self.any_type_filter = 'any'
self.cache_type_filter_icons = {}
self.combo_filter_type = QComboBox()
@@ -434,6 +445,7 @@ class ManageWindow(QWidget):
self.layout.addWidget(self.container_progress)
self.filter_only_apps = True
+ self.filter_only_verified = False
self.type_filter = self.any_type_filter
self.category_filter = self.any_category_filter
self.filter_updates = False
@@ -462,22 +474,23 @@ class ManageWindow(QWidget):
qt_utils.centralize(self)
def _register_groups(self):
- common_filters = (CHECK_APPS, CHECK_UPDATES, COMBO_CATEGORIES, COMBO_TYPES, INP_NAME)
+ common_filters = (CHECK_APPS, CHECK_VERIFIED, CHECK_UPDATES, COMBO_CATEGORIES, COMBO_TYPES, INP_NAME)
self.comp_manager.register_group(GROUP_FILTERS, False, CHECK_INSTALLED, *common_filters)
self.comp_manager.register_group(GROUP_VIEW_SEARCH, False,
- COMBO_CATEGORIES, COMBO_TYPES, INP_NAME, # filters
- BT_INSTALLED, BT_SUGGESTIONS, CHECK_INSTALLED) # buttons
+ CHECK_INSTALLED, CHECK_VERIFIED, COMBO_CATEGORIES, COMBO_TYPES, INP_NAME,
+ BT_INSTALLED, BT_SUGGESTIONS)
self.comp_manager.register_group(GROUP_VIEW_INSTALLED, False,
BT_REFRESH, BT_UPGRADE, # buttons
*common_filters)
self.comp_manager.register_group(GROUP_UPPER_BAR, False,
- CHECK_APPS, CHECK_UPDATES, CHECK_INSTALLED, COMBO_CATEGORIES, COMBO_TYPES, INP_NAME,
- BT_INSTALLED, BT_SUGGESTIONS, BT_REFRESH, BT_UPGRADE)
+ CHECK_APPS, CHECK_VERIFIED, CHECK_UPDATES, CHECK_INSTALLED, COMBO_CATEGORIES,
+ COMBO_TYPES, INP_NAME, BT_INSTALLED, BT_SUGGESTIONS, BT_REFRESH, BT_UPGRADE)
- self.comp_manager.register_group(GROUP_LOWER_BTS, False, BT_SUGGESTIONS, BT_THEMES, BT_CUSTOM_ACTIONS, BT_SETTINGS, BT_ABOUT)
+ self.comp_manager.register_group(GROUP_LOWER_BTS, False, BT_SUGGESTIONS, BT_THEMES, BT_CUSTOM_ACTIONS,
+ BT_SETTINGS, BT_ABOUT)
def update_custom_actions(self):
self.custom_actions = [a for a in self.manager.gen_custom_actions()]
@@ -653,6 +666,10 @@ class ManageWindow(QWidget):
self.filter_only_apps = status == 2
self.begin_apply_filters()
+ def _handle_filter_only_verified(self, status: int):
+ self.filter_only_verified = status == 2
+ self.begin_apply_filters()
+
def _handle_filter_only_installed(self, status: int):
self.filter_installed = status == 2
self.begin_apply_filters()
@@ -974,6 +991,7 @@ class ManageWindow(QWidget):
display_limit=0 if self.filter_updates else self.display_limit,
name=self.input_name.text().strip(),
only_apps=False if self.search_performed else self.filter_only_apps,
+ only_verified=self.filter_only_verified,
only_updates=False if ignore_updates else self.filter_updates,
only_installed=self.filter_installed,
search=self.searched_term,
@@ -1029,6 +1047,7 @@ class ManageWindow(QWidget):
self.check_apps.setCheckable(True)
self._change_checkbox(self.check_apps, True, 'filter_only_apps', trigger=False)
+ self._update_verified_filter(verified_available=pkgs_info['verified'] > 0, keep_state=keep_filters)
self.change_update_state(pkgs_info=pkgs_info, trigger_filters=False, keep_selected=keep_filters and bool(pkgs_info['pkgs_displayed']))
self._update_categories(pkgs_info['categories'], keep_selected=keep_filters and bool(pkgs_info['pkgs_displayed']))
self._update_type_filters(pkgs_info['available_types'], keep_selected=keep_filters and bool(pkgs_info['pkgs_displayed']))
@@ -1081,6 +1100,19 @@ class ManageWindow(QWidget):
else:
self.comp_manager.set_component_visible(CHECK_INSTALLED, has_installed)
+ def _update_verified_filter(self, keep_state: bool = True, verified_available: Optional[bool] = None):
+ if verified_available is not None:
+ has_verified = verified_available
+ else:
+ has_verified = False
+ if self.pkgs_available:
+ has_verified = next((True for p in self.pkgs_available if p.model.is_trustable()), False)
+
+ if not keep_state or not has_verified:
+ self._change_checkbox(self.check_verified, False, 'filter_only_verified', trigger=False)
+
+ self.comp_manager.set_component_visible(CHECK_VERIFIED, has_verified)
+
def _apply_filters(self, pkgs_info: dict, ignore_updates: bool):
pkgs_info['pkgs_displayed'] = []
filters = self._gen_filters(ignore_updates=ignore_updates)
diff --git a/bauh/view/resources/locale/ca b/bauh/view/resources/locale/ca
index 50abfaf6..64467e65 100644
--- a/bauh/view/resources/locale/ca
+++ b/bauh/view/resources/locale/ca
@@ -66,6 +66,7 @@ action.ignore_updates.success=Updates from {} will be ignored from now on
action.ignore_updates_reverse.fail=It was not possible to revert ignored updates from {}
action.ignore_updates_reverse.success=Updates from {} will be displayed again from now on
action.info.tooltip=Feu clic aquí per a veure informació sobre aquesta aplicació
+action.install.unverified.warning=This app has not been verified by this system maintainers or a trusted source. Check its information before proceeding.
action.not_allowed=Action not allowed
action.request_reboot.title=System restart
action.reset=Restore
@@ -344,6 +345,7 @@ manage_window.bt_themes.tip=Click here to choose a theme
manage_window.bt_themes.option.invalid=Invalid
manage_window.checkbox.only_apps=Aplicacions
manage_window.checkbox.only_installed=Instal·lats
+manage_window.checkbox.only_verified=Verificats
manage_window.checkbox.show_details=Mostra detalls
manage_window.columns.installed=Installed
manage_window.columns.latest_version=Versió més recent
diff --git a/bauh/view/resources/locale/de b/bauh/view/resources/locale/de
index 6826140d..2b668f4c 100644
--- a/bauh/view/resources/locale/de
+++ b/bauh/view/resources/locale/de
@@ -66,6 +66,7 @@ action.ignore_updates.success=Updates von {} werden an jetzt ignoriert
action.ignore_updates_reverse.fail=Es war nicht möglich, ignorierte Aktualisierungen von {} rückgängig zu machen
action.ignore_updates_reverse.success=Aktualisierungen von {} werden ab jetzt wieder angezeigt
action.info.tooltip=Klicken Sie hier, um Informationen über diese Anwendung anzuzeigen
+action.install.unverified.warning=This app has not been verified by this system maintainers or a trusted source. Check its information before proceeding.
action.not_allowed=Aktion nicht erlaubt
action.request_reboot.title=System neustarten
action.reset=Wiederherstellen
@@ -346,6 +347,7 @@ manage_window.bt_themes.tip=Klicken Sie hier, um ein Thema auszuwählen
manage_window.bt_themes.option.invalid=Ungültig
manage_window.checkbox.only_apps=Anwendungen
manage_window.checkbox.only_installed=Installierte
+manage_window.checkbox.only_verified=Verifiziert
manage_window.checkbox.show_details=Details anzeigen
manage_window.columns.installed=Installiert
manage_window.columns.latest_version=Neueste Version
diff --git a/bauh/view/resources/locale/en b/bauh/view/resources/locale/en
index caff3dc1..3c51e6e6 100644
--- a/bauh/view/resources/locale/en
+++ b/bauh/view/resources/locale/en
@@ -66,6 +66,7 @@ action.ignore_updates.success=Updates from {} will be ignored from now on
action.ignore_updates_reverse.fail=It was not possible to revert ignored updates from {}
action.ignore_updates_reverse.success=Updates from {} will be displayed again from now on
action.info.tooltip=Click here to see information about this application
+action.install.unverified.warning=This app has not been verified by this system maintainers or a trusted source. Check its information before proceeding.
action.not_allowed=Action not allowed
action.request_reboot.title=System restart
action.reset=Restore
@@ -346,6 +347,7 @@ manage_window.bt_themes.tip=Click here to choose a theme
manage_window.bt_themes.option.invalid=Invalid
manage_window.checkbox.only_apps=Apps
manage_window.checkbox.only_installed=Installed
+manage_window.checkbox.only_verified=Verified
manage_window.checkbox.show_details=Show details
manage_window.columns.installed=Installed
manage_window.columns.latest_version=Latest Version
diff --git a/bauh/view/resources/locale/es b/bauh/view/resources/locale/es
index 9ac06a98..eeaff4c7 100644
--- a/bauh/view/resources/locale/es
+++ b/bauh/view/resources/locale/es
@@ -66,6 +66,7 @@ action.ignore_updates.success=Las actualizaciones de {} serán ignoradas de ahor
action.ignore_updates_reverse.fail=No fue posible revertir las actualizaciones ignoradas de {}
action.ignore_updates_reverse.success=Las actualizaciones de {} se mostrarán nuevamente a partir de ahora
action.info.tooltip=Pulse aquí para ver información sobre esta aplicación
+action.install.unverified.warning=Este ap no ha sido verificado por los mantenedores de este sistema ni por una fuente confiable. Verifique su información antes de continuar.
action.not_allowed=Acción no permitida
action.request_reboot.title=Reinicio de sistema
action.reset=Restaurar
@@ -345,6 +346,7 @@ manage_window.bt_themes.tip=Pulse aquí para elegir un tema
manage_window.bt_themes.option.invalid=Inválido
manage_window.checkbox.only_apps=Aplicaciones
manage_window.checkbox.only_installed=Instalados
+manage_window.checkbox.only_verified=Verificados
manage_window.checkbox.show_details=Mostrar detalles
manage_window.columns.installed=Instaladas
manage_window.columns.latest_version=Versión más reciente
diff --git a/bauh/view/resources/locale/fr b/bauh/view/resources/locale/fr
index 5b0a2a72..93f31150 100644
--- a/bauh/view/resources/locale/fr
+++ b/bauh/view/resources/locale/fr
@@ -66,6 +66,7 @@ action.ignore_updates.success=Les mises à jour de {} seront désormais ignorée
action.ignore_updates_reverse.fail=Il était impossible d'annuler les mises à jour de {}
action.ignore_updates_reverse.success=Les mises à jour de {} sont désormais de retour
action.info.tooltip=Cliquez ici pour plus d'informations sur cette application
+action.install.unverified.warning=This app has not been verified by this system maintainers or a trusted source. Check its information before proceeding.
action.not_allowed=Action non permise
action.request_reboot.title=Redémarrage du système
action.reset=Restaurer
@@ -342,6 +343,7 @@ manage_window.bt_themes.tip=Click here to choose a theme
manage_window.bt_themes.option.invalid=Invalid
manage_window.checkbox.only_apps=Apps
manage_window.checkbox.only_installed=Installées
+manage_window.checkbox.only_verified=Vérifiés
manage_window.checkbox.show_details=Détails
manage_window.columns.installed=Installé
manage_window.columns.latest_version=Dernière Version
diff --git a/bauh/view/resources/locale/it b/bauh/view/resources/locale/it
index 30617852..e3a8c44c 100644
--- a/bauh/view/resources/locale/it
+++ b/bauh/view/resources/locale/it
@@ -66,6 +66,7 @@ action.ignore_updates.success=Updates from {} will be ignored from now on
action.ignore_updates_reverse.fail=It was not possible to revert ignored updates from {}
action.ignore_updates_reverse.success=Updates from {} will be displayed again from now on
action.info.tooltip=Clicca qui per vedere informazioni su questa applicazione
+action.install.unverified.warning=This app has not been verified by this system maintainers or a trusted source. Check its information before proceeding.
action.not_allowed=Action not allowed
action.request_reboot.title=System restart
action.reset=Restore
@@ -345,6 +346,7 @@ manage_window.bt_themes.tip=Click here to choose a theme
manage_window.bt_themes.option.invalid=Invalid
manage_window.checkbox.only_apps=Apps
manage_window.checkbox.only_installed=Installate
+manage_window.checkbox.only_verified=Verificati
manage_window.checkbox.show_details=Mostra dettagli
manage_window.columns.installed=Installed
manage_window.columns.latest_version=Ultima Versione
diff --git a/bauh/view/resources/locale/pt b/bauh/view/resources/locale/pt
index 17e898f7..63d68d60 100644
--- a/bauh/view/resources/locale/pt
+++ b/bauh/view/resources/locale/pt
@@ -66,6 +66,7 @@ action.ignore_updates.success=As atualizações de {} serão ignoradas a partir
action.ignore_updates_reverse.fail=Não foi possível reverter as atualizações ignoradas de {}
action.ignore_updates_reverse.success=As atualizações de {} serão exibidas novamente a partir de agora
action.info.tooltip=Clique aqui para ver informações sobre este aplicativo
+action.install.unverified.warning=Este app não foi verificado pelos mantenedores desse sistema ou uma fonte confiável. Confira suas informações antes de prosseguir.
action.not_allowed=Ação não permitida
action.request_reboot.title=Reinicialização de sistema
action.reset=Restaurar
@@ -344,6 +345,7 @@ manage_window.bt_themes.tip=Clique aqui para escolher um tema
manage_window.bt_themes.option.invalid=Inválido
manage_window.checkbox.only_apps=Aplicativos
manage_window.checkbox.only_installed=Instalados
+manage_window.checkbox.only_verified=Verificados
manage_window.checkbox.show_details=Mostrar detalhes
manage_window.columns.installed=Instalado
manage_window.columns.latest_version=Última Versão
diff --git a/bauh/view/resources/locale/ru b/bauh/view/resources/locale/ru
index 3ab9e2d9..5d9ed67d 100644
--- a/bauh/view/resources/locale/ru
+++ b/bauh/view/resources/locale/ru
@@ -66,6 +66,7 @@ action.ignore_updates.success=Обновления от {} теперь буду
action.ignore_updates_reverse.fail=Не удалось вернуть игнорируемые обновления из {}
action.ignore_updates_reverse.success=Теперь обновления из {} будут отображаться снова
action.info.tooltip=Нажмите здесь, чтобы посмотреть информацию об этом приложении
+action.install.unverified.warning=This app has not been verified by this system maintainers or a trusted source. Check its information before proceeding.
action.not_allowed=Действие не допускается
action.request_reboot.title=Перезапуск системы
action.reset=Восстановить
@@ -346,6 +347,7 @@ manage_window.bt_themes.tip=Нажмите здесь, чтобы выбрать
manage_window.bt_themes.option.invalid=Недопустимый
manage_window.checkbox.only_apps=Приложения
manage_window.checkbox.only_installed=Установленные
+manage_window.checkbox.only_verified=Проверено
manage_window.checkbox.show_details=Показать детали
manage_window.columns.installed=Установленно
manage_window.columns.latest_version=Последняя версия
diff --git a/bauh/view/resources/locale/tr b/bauh/view/resources/locale/tr
index 750b26e5..60d13751 100644
--- a/bauh/view/resources/locale/tr
+++ b/bauh/view/resources/locale/tr
@@ -66,6 +66,7 @@ action.ignore_updates.success=Updates from {} will be ignored from now on
action.ignore_updates_reverse.fail=It was not possible to revert ignored updates from {}
action.ignore_updates_reverse.success=Updates from {} will be displayed again from now on
action.info.tooltip=Uygulama bilgilerini görmek için buraya tıkla
+action.install.unverified.warning=This app has not been verified by this system maintainers or a trusted source. Check its information before proceeding.
action.not_allowed=Eyleme izin verilmiyor
action.request_reboot.title=Sistemi yeniden başlat
action.reset=Restore
@@ -343,6 +344,7 @@ manage_window.bt_themes.tip=Tema seçmek için burayı tıkla
manage_window.bt_themes.option.invalid=Invalid
manage_window.checkbox.only_apps=Uygulamalar
manage_window.checkbox.only_installed=Yüklü
+manage_window.checkbox.only_verified=Doğrulandı
manage_window.checkbox.show_details=Detayları göster
manage_window.columns.installed=Yüklü
manage_window.columns.latest_version=Son sürüm
diff --git a/bauh/view/resources/style/darcula/darcula.qss b/bauh/view/resources/style/darcula/darcula.qss
index cb948165..ad703a5c 100644
--- a/bauh/view/resources/style/darcula/darcula.qss
+++ b/bauh/view/resources/style/darcula/darcula.qss
@@ -424,6 +424,10 @@ QLabel#confirm_dialog_icon {
qproperty-pixmap: url("@style_dir/img/question.svg");
}
+QLabel#confirm_dialog_icon[type = "warning"] {
+ qproperty-pixmap: url("@style_dir/img/warning.svg");
+}
+
FormQt IconButton#clean_field {
qproperty-icon: url("@style_dir/img/clean.svg");
}
diff --git a/bauh/view/resources/style/knight/img/warning.svg b/bauh/view/resources/style/knight/img/warning.svg
new file mode 100644
index 00000000..31c505ed
--- /dev/null
+++ b/bauh/view/resources/style/knight/img/warning.svg
@@ -0,0 +1,122 @@
+
+
diff --git a/bauh/view/resources/style/knight/knight.qss b/bauh/view/resources/style/knight/knight.qss
index cf42fe6b..2ef53231 100644
--- a/bauh/view/resources/style/knight/knight.qss
+++ b/bauh/view/resources/style/knight/knight.qss
@@ -417,6 +417,10 @@ QLabel#confirm_dialog_icon {
qproperty-pixmap: url("@style_dir/img/help.svg");
}
+QLabel#confirm_dialog_icon[type = "warning"] {
+ qproperty-pixmap: url("@style_dir/img/warning.svg");
+}
+
FormQt IconButton#clean_field {
qproperty-icon: url("@style_dir/img/clean.svg");
}
diff --git a/bauh/view/resources/style/light/light.qss b/bauh/view/resources/style/light/light.qss
index 18e3f224..dc78d424 100644
--- a/bauh/view/resources/style/light/light.qss
+++ b/bauh/view/resources/style/light/light.qss
@@ -83,6 +83,10 @@ QLabel#confirm_dialog_icon {
qproperty-pixmap: url("@style_dir/img/question.svg");
}
+QLabel#confirm_dialog_icon[type = "warning"] {
+ qproperty-pixmap: url("@style_dir/img/warning.svg");
+}
+
QPlainTextEdit[console = 'true'] {
background: @console.background.color;
color: @console.font.color;
diff --git a/bauh/view/resources/style/sublime/sublime.qss b/bauh/view/resources/style/sublime/sublime.qss
index df3e6353..41dc257b 100644
--- a/bauh/view/resources/style/sublime/sublime.qss
+++ b/bauh/view/resources/style/sublime/sublime.qss
@@ -131,6 +131,10 @@ QLabel#confirm_dialog_icon {
qproperty-pixmap: url("@style_dir/img/question.svg");
}
+QLabel#confirm_dialog_icon[type = "warning"] {
+ qproperty-pixmap: url("@style_dir/img/warning.svg");
+}
+
QPlainTextEdit {
background: @texteditor.background.color;
color: @texteditor.font.color;