mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-07 04:44:15 +02:00
flatpak categories filter
This commit is contained in:
@@ -10,6 +10,7 @@ def new_pkgs_info() -> dict:
|
|||||||
'napp_updates': 0,
|
'napp_updates': 0,
|
||||||
'pkgs_displayed': [],
|
'pkgs_displayed': [],
|
||||||
'not_installed': 0,
|
'not_installed': 0,
|
||||||
|
'categories': set(),
|
||||||
'pkgs': []} # total packages
|
'pkgs': []} # total packages
|
||||||
|
|
||||||
|
|
||||||
@@ -29,6 +30,9 @@ def update_info(pkgv: PackageView, pkgs_info: dict):
|
|||||||
|
|
||||||
pkgs_info['updates'] += 1
|
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['pkgs'].append(pkgv)
|
||||||
pkgs_info['not_installed'] += 1 if not pkgv.model.installed else 0
|
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':
|
if not hidden and filters['type'] is not None and filters['type'] != 'any':
|
||||||
hidden = pkgv.model.get_type() != filters['type']
|
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']:
|
if not hidden and filters['updates']:
|
||||||
hidden = not pkgv.model.update
|
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.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.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 = InputFilter(self.apply_filters_async)
|
||||||
self.input_name_filter.setMaxLength(10)
|
self.input_name_filter.setMaxLength(10)
|
||||||
self.input_name_filter.setPlaceholderText(self.i18n['manage_window.name_filter.placeholder'] + '...')
|
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.filter_only_apps = True
|
||||||
self.type_filter = self.any_type_filter
|
self.type_filter = self.any_type_filter
|
||||||
|
self.category_filter = self.any_category_filter
|
||||||
self.filter_updates = False
|
self.filter_updates = False
|
||||||
self._maximized = False
|
self._maximized = False
|
||||||
self.progress_controll_enabled = True
|
self.progress_controll_enabled = True
|
||||||
@@ -376,6 +387,10 @@ class ManageWindow(QWidget):
|
|||||||
self.type_filter = self.combo_filter_type.itemData(idx)
|
self.type_filter = self.combo_filter_type.itemData(idx)
|
||||||
self.apply_filters_async()
|
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):
|
def _notify_model_data_change(self):
|
||||||
self.table_apps.fill_async_data()
|
self.table_apps.fill_async_data()
|
||||||
|
|
||||||
@@ -557,6 +572,7 @@ class ManageWindow(QWidget):
|
|||||||
return {
|
return {
|
||||||
'only_apps': self.filter_only_apps,
|
'only_apps': self.filter_only_apps,
|
||||||
'type': self.type_filter,
|
'type': self.type_filter,
|
||||||
|
'category': self.category_filter,
|
||||||
'updates': False if ignore_updates else self.filter_updates,
|
'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,
|
'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
|
'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.ref_input_name_filter.setVisible(True)
|
||||||
|
|
||||||
self._update_type_filters(pkgs_info['available_types'])
|
self._update_type_filters(pkgs_info['available_types'])
|
||||||
|
self._update_categories(pkgs_info['categories'])
|
||||||
|
|
||||||
self._update_table(pkgs_info=pkgs_info)
|
self._update_table(pkgs_info=pkgs_info)
|
||||||
|
|
||||||
@@ -660,6 +677,27 @@ class ManageWindow(QWidget):
|
|||||||
else:
|
else:
|
||||||
self.ref_combo_filter_type.setVisible(False)
|
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):
|
def resize_and_center(self, accept_lower_width: bool = True):
|
||||||
if self.pkgs:
|
if self.pkgs:
|
||||||
new_width = reduce(operator.add, [self.table_apps.columnWidth(i) for i in range(self.table_apps.columnCount())])
|
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:
|
if clear_filters:
|
||||||
self._update_type_filters({})
|
self._update_type_filters({})
|
||||||
|
self._update_categories(set())
|
||||||
else:
|
else:
|
||||||
self.combo_filter_type.setEnabled(False)
|
self.combo_filter_type.setEnabled(False)
|
||||||
|
|
||||||
@@ -788,6 +827,7 @@ class ManageWindow(QWidget):
|
|||||||
self.ref_input_name_filter.setVisible(True)
|
self.ref_input_name_filter.setVisible(True)
|
||||||
self.update_bt_upgrade()
|
self.update_bt_upgrade()
|
||||||
self._update_type_filters()
|
self._update_type_filters()
|
||||||
|
self._update_categories()
|
||||||
|
|
||||||
if self.ref_bt_installed.isVisible():
|
if self.ref_bt_installed.isVisible():
|
||||||
self.ref_bt_installed.setEnabled(True)
|
self.ref_bt_installed.setEnabled(True)
|
||||||
|
|||||||
@@ -122,6 +122,7 @@ console.install_logs.path=Installation logs can be found at {}
|
|||||||
author=author
|
author=author
|
||||||
source=source
|
source=source
|
||||||
size=size
|
size=size
|
||||||
|
category=category
|
||||||
categories=categories
|
categories=categories
|
||||||
summary=summary
|
summary=summary
|
||||||
popup.screenshots.no_screenshot.body=it was not possible to retrieve {} screenshots
|
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
|
author=autor
|
||||||
source=origen
|
source=origen
|
||||||
size=tamaño
|
size=tamaño
|
||||||
|
category=categoría
|
||||||
categories=categorías
|
categories=categorías
|
||||||
summary=sumario
|
summary=sumario
|
||||||
manage_window.status.screenshots=Obteniendo imágenes de {}
|
manage_window.status.screenshots=Obteniendo imágenes de {}
|
||||||
action.screenshots.tooltip=Haga clic aquí para ver algunas fotos de esta aplicación
|
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
|
author=autor
|
||||||
source=fonte
|
source=fonte
|
||||||
size=tamanho
|
size=tamanho
|
||||||
|
category=categoria
|
||||||
categories=categorias
|
categories=categorias
|
||||||
summary=resumo
|
summary=resumo
|
||||||
manage_window.status.screenshots=Obtendo imagens de {}
|
manage_window.status.screenshots=Obtendo imagens de {}
|
||||||
action.screenshots.tooltip=Clique aqui para ver algumas fotos desse aplicativo
|
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