mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-07 01:14:15 +02:00
flatpak categories filter
This commit is contained in:
@@ -10,6 +10,7 @@ def new_pkgs_info() -> dict:
|
||||
'napp_updates': 0,
|
||||
'pkgs_displayed': [],
|
||||
'not_installed': 0,
|
||||
'categories': set(),
|
||||
'pkgs': []} # total packages
|
||||
|
||||
|
||||
@@ -29,6 +30,9 @@ def update_info(pkgv: PackageView, pkgs_info: dict):
|
||||
|
||||
pkgs_info['updates'] += 1
|
||||
|
||||
if pkgv.model.categories:
|
||||
pkgs_info['categories'].update([s.lower() for s in pkgv.model.categories])
|
||||
|
||||
pkgs_info['pkgs'].append(pkgv)
|
||||
pkgs_info['not_installed'] += 1 if not pkgv.model.installed else 0
|
||||
|
||||
@@ -39,6 +43,9 @@ def apply_filters(pkgv: PackageView, filters: dict, info: dict):
|
||||
if not hidden and filters['type'] is not None and filters['type'] != 'any':
|
||||
hidden = pkgv.model.get_type() != filters['type']
|
||||
|
||||
if not hidden and filters['category'] is not None and filters['category'] != 'any':
|
||||
hidden = not pkgv.model.categories or not [c for c in pkgv.model.categories if c.lower() == filters['category']]
|
||||
|
||||
if not hidden and filters['updates']:
|
||||
hidden = not pkgv.model.update
|
||||
|
||||
|
||||
@@ -136,6 +136,16 @@ class ManageWindow(QWidget):
|
||||
self.combo_filter_type.addItem(load_icon(resource.get_path('img/logo.svg'), 14), self.i18n[self.any_type_filter].capitalize(), self.any_type_filter)
|
||||
self.ref_combo_filter_type = self.toolbar.addWidget(self.combo_filter_type)
|
||||
|
||||
self.any_category_filter = 'any'
|
||||
self.combo_categories = QComboBox()
|
||||
self.combo_categories.setStyleSheet('QLineEdit { height: 2px}')
|
||||
self.combo_categories.setEditable(True)
|
||||
self.combo_categories.lineEdit().setReadOnly(True)
|
||||
self.combo_categories.lineEdit().setAlignment(Qt.AlignCenter)
|
||||
self.combo_categories.activated.connect(self._handle_category_filter)
|
||||
self.combo_categories.addItem('--{}--'.format(self.i18n['category'].capitalize()), self.any_category_filter)
|
||||
self.ref_combo_categories = self.toolbar.addWidget(self.combo_categories)
|
||||
|
||||
self.input_name_filter = InputFilter(self.apply_filters_async)
|
||||
self.input_name_filter.setMaxLength(10)
|
||||
self.input_name_filter.setPlaceholderText(self.i18n['manage_window.name_filter.placeholder'] + '...')
|
||||
@@ -263,6 +273,7 @@ class ManageWindow(QWidget):
|
||||
|
||||
self.filter_only_apps = True
|
||||
self.type_filter = self.any_type_filter
|
||||
self.category_filter = self.any_category_filter
|
||||
self.filter_updates = False
|
||||
self._maximized = False
|
||||
self.progress_controll_enabled = True
|
||||
@@ -376,6 +387,10 @@ class ManageWindow(QWidget):
|
||||
self.type_filter = self.combo_filter_type.itemData(idx)
|
||||
self.apply_filters_async()
|
||||
|
||||
def _handle_category_filter(self, idx: int):
|
||||
self.category_filter = self.combo_categories.itemData(idx)
|
||||
self.apply_filters_async()
|
||||
|
||||
def _notify_model_data_change(self):
|
||||
self.table_apps.fill_async_data()
|
||||
|
||||
@@ -557,6 +572,7 @@ class ManageWindow(QWidget):
|
||||
return {
|
||||
'only_apps': self.filter_only_apps,
|
||||
'type': self.type_filter,
|
||||
'category': self.category_filter,
|
||||
'updates': False if ignore_updates else self.filter_updates,
|
||||
'name': self.input_name_filter.get_text().lower() if self.input_name_filter.get_text() else None,
|
||||
'display_limit': self.display_limit if updates <= 0 else None
|
||||
@@ -617,6 +633,7 @@ class ManageWindow(QWidget):
|
||||
self.ref_input_name_filter.setVisible(True)
|
||||
|
||||
self._update_type_filters(pkgs_info['available_types'])
|
||||
self._update_categories(pkgs_info['categories'])
|
||||
|
||||
self._update_table(pkgs_info=pkgs_info)
|
||||
|
||||
@@ -660,6 +677,27 @@ class ManageWindow(QWidget):
|
||||
else:
|
||||
self.ref_combo_filter_type.setVisible(False)
|
||||
|
||||
def _update_categories(self, categories: Set[str] = None):
|
||||
|
||||
if categories is None:
|
||||
self.ref_combo_categories.setVisible(self.combo_categories.count() > 1)
|
||||
else:
|
||||
self.category_filter = self.any_category_filter
|
||||
|
||||
if categories and len(categories) > 1:
|
||||
if self.combo_categories.count() > 1:
|
||||
for _ in range(self.combo_categories.count() - 1):
|
||||
self.combo_categories.removeItem(1)
|
||||
|
||||
for c in categories:
|
||||
i18n_cat = self.i18n.get(c)
|
||||
cat_label = i18n_cat if i18n_cat else c
|
||||
self.combo_categories.addItem(cat_label.capitalize(), c)
|
||||
|
||||
self.ref_combo_categories.setVisible(True)
|
||||
else:
|
||||
self.ref_combo_categories.setVisible(False)
|
||||
|
||||
def resize_and_center(self, accept_lower_width: bool = True):
|
||||
if self.pkgs:
|
||||
new_width = reduce(operator.add, [self.table_apps.columnWidth(i) for i in range(self.table_apps.columnCount())])
|
||||
@@ -758,6 +796,7 @@ class ManageWindow(QWidget):
|
||||
|
||||
if clear_filters:
|
||||
self._update_type_filters({})
|
||||
self._update_categories(set())
|
||||
else:
|
||||
self.combo_filter_type.setEnabled(False)
|
||||
|
||||
@@ -788,6 +827,7 @@ class ManageWindow(QWidget):
|
||||
self.ref_input_name_filter.setVisible(True)
|
||||
self.update_bt_upgrade()
|
||||
self._update_type_filters()
|
||||
self._update_categories()
|
||||
|
||||
if self.ref_bt_installed.isVisible():
|
||||
self.ref_bt_installed.setEnabled(True)
|
||||
|
||||
@@ -122,6 +122,7 @@ console.install_logs.path=Installation logs can be found at {}
|
||||
author=author
|
||||
source=source
|
||||
size=size
|
||||
category=category
|
||||
categories=categories
|
||||
summary=summary
|
||||
popup.screenshots.no_screenshot.body=it was not possible to retrieve {} screenshots
|
||||
@@ -122,8 +122,14 @@ console.install_logs.path=Los registros de instalación se pueden encontrar en {
|
||||
author=autor
|
||||
source=origen
|
||||
size=tamaño
|
||||
category=categoría
|
||||
categories=categorías
|
||||
summary=sumario
|
||||
manage_window.status.screenshots=Obteniendo imágenes de {}
|
||||
action.screenshots.tooltip=Haga clic aquí para ver algunas fotos de esta aplicación
|
||||
popup.screenshots.no_screenshot.body=No fue posible recuperar las fotos de {}
|
||||
popup.screenshots.no_screenshot.body=No fue posible recuperar las fotos de {}
|
||||
games=juegos
|
||||
videoeditor=edito de video
|
||||
browser=navegador
|
||||
music=música
|
||||
development=desarrollo
|
||||
@@ -122,8 +122,14 @@ console.install_logs.path=Os registros de instalação podem ser encontrados em
|
||||
author=autor
|
||||
source=fonte
|
||||
size=tamanho
|
||||
category=categoria
|
||||
categories=categorias
|
||||
summary=resumo
|
||||
manage_window.status.screenshots=Obtendo imagens de {}
|
||||
action.screenshots.tooltip=Clique aqui para ver algumas fotos desse aplicativo
|
||||
popup.screenshots.no_screenshot.body=Não foi possível obter as fotos de {}
|
||||
popup.screenshots.no_screenshot.body=Não foi possível obter as fotos de {}
|
||||
games=jogos
|
||||
videoeditor=edito de vídeo
|
||||
browser=navegador
|
||||
music=música
|
||||
development=desenvolvimento
|
||||
Reference in New Issue
Block a user