display limit

This commit is contained in:
Vinicius Moreira
2019-08-31 11:07:17 -03:00
parent a6422c6edc
commit 1c1527a5cd
5 changed files with 54 additions and 25 deletions

View File

@@ -54,6 +54,7 @@ You can change some application settings via environment variables or arguments
- **BAUH_CHECK_PACKAGING_ONCE**: If the available supported packaging types should be checked ONLY once. It improves the application speed if enabled, but can generate errors if you uninstall any packaging technology while using it, and every time a supported packaging type is installed it will only be available after a restart. Use **0** (disable, default) or **1** (enable).
- **BAUH_TRAY**: If the tray icon and update-check daemon should be created. Use **0** (disable, default) or **1** (enable).
- **BAUH_SUGGESTIONS**: If application suggestions should be displayed if no app is installed (runtimes do not count as apps). Use **0** (disable) or **1** (enable, default).
- **BAUH_MAX_DISPLAYED**: Maximum number of displayed packages in the management panel table. Default: 200.
### How to improve the application performance
- If you don't care about a specific packaging technology and don't want the app to deal with it, just disable it via the specific argument or environment variable. For instance, if I don't care

View File

@@ -47,7 +47,8 @@ manage_window = ManageWindow(locale_keys=i18n,
disk_cache=args.disk_cache,
download_icons=bool(args.download_icons),
screen_size=app.primaryScreen().size(),
suggestions=args.sugs)
suggestions=args.sugs,
display_limit=args.max_displayed)
if args.tray:
trayIcon = TrayIcon(locale_keys=i18n,

View File

@@ -42,6 +42,7 @@ def read() -> Namespace:
parser.add_argument('--tray', action="store", default=os.getenv('BAUH_TRAY', 0), choices=[0, 1], type=int,
help='If the tray icon and update-check daemon should be created. Default: %(default)s')
parser.add_argument('--sugs', action="store", default=os.getenv('BAUH_SUGGESTIONS', 1), choices=[0, 1], type=int, help='If app suggestions should be displayed if no application package is installed (runtimes / libraries do not count as apps). Default: %(default)s')
parser.add_argument('-md', '--max-displayed', action="store", default=os.getenv('BAUH_MAX_DISPLAYED', 200), choices=[0, 1], type=int, help='Maximum number of displayed packages in the management panel table. Default: %(default)s')
args = parser.parse_args()
if args.cache_exp < 0:

View File

@@ -117,6 +117,7 @@ class RefreshApps(AsyncAction):
if app_found:
del res.installed[idx_found]
res.installed.insert(0, app_found)
elif self.pkg_types:
refreshed_types = self.pkg_types

View File

@@ -38,15 +38,16 @@ class ManageWindow(QWidget):
def _toolbar_button_style(self, bg: str):
return 'QPushButton { color: white; font-weight: bold; background: ' + bg + '}'
def __init__(self, locale_keys: dict, icon_cache: MemoryCache, manager: SoftwareManager, disk_cache: bool, download_icons: bool, screen_size, suggestions: bool, tray_icon=None):
def __init__(self, locale_keys: dict, icon_cache: MemoryCache, manager: SoftwareManager, disk_cache: bool, download_icons: bool, screen_size, suggestions: bool, display_limit: int, tray_icon=None):
super(ManageWindow, self).__init__()
self.locale_keys = locale_keys
self.manager = manager
self.tray_icon = tray_icon
self.working = False # restrict the number of threaded actions
self.pkgs = []
self.pkgs_installed = []
self.label_flatpak = None
self.pkgs = [] # packages current loaded in the table
self.pkgs_available = [] # all packages loaded in memory
self.pkgs_installed = [] # cached installed packages
self.display_limit = display_limit
self.icon_cache = icon_cache
self.disk_cache = disk_cache
self.download_icons = download_icons
@@ -442,10 +443,11 @@ class ManageWindow(QWidget):
elif not self.toolbar_substatus.isVisible():
self.toolbar_substatus.show()
def apply_filters(self):
if self.pkgs:
visible_apps = len(self.pkgs)
for idx, app_v in enumerate(self.pkgs):
def apply_filters(self, update_check_enabled: bool = True):
if self.pkgs_available:
pkgs_displayed = []
displayed = 0
for idx, app_v in enumerate(self.pkgs_available):
hidden = self.filter_only_apps and not app_v.model.is_application()
if not hidden and self.type_filter is not None and self.type_filter != 'any':
@@ -454,18 +456,24 @@ class ManageWindow(QWidget):
if not hidden and self.filter_updates:
hidden = not app_v.model.update
self.table_apps.setRowHidden(idx, hidden)
# self.table_apps.setRowHidden(idx, hidden)
app_v.visible = not hidden
visible_apps -= 1 if hidden else 0
if not hidden and displayed < self.display_limit:
pkgs_displayed.append(app_v)
displayed += 1
self.pkgs = pkgs_displayed
self.table_apps.update_apps(pkgs_displayed, update_check_enabled=update_check_enabled)
self.change_update_state(change_filters=False)
if not self._maximized:
self.table_apps.change_headers_policy(QHeaderView.Stretch)
self.table_apps.change_headers_policy()
self.resize_and_center(accept_lower_width=visible_apps > 0)
self.resize_and_center(accept_lower_width=displayed > 0)
self.label_displayed.setText('{} / {}'.format(visible_apps, len(self.pkgs)))
self.label_displayed.setText('{} / {}'.format(displayed, len(self.pkgs_available)))
else:
self.label_displayed.setText('')
@@ -529,10 +537,13 @@ class ManageWindow(QWidget):
def update_pkgs(self, new_pkgs: List[SoftwarePackage], as_installed: bool, update_check_enabled: bool = True, types: Set[type] = None):
pkgs_info = {'napps': 0, # number of apps (not libraries, runtimes or something else)
'available_types': {}}
'available_types': {}, # available package types in 'new_pkgs'
'total': 0} # total packages
self.pkgs = []
self.pkgs_available = []
if new_pkgs is not None:
self.pkgs = []
old_installed = None
if as_installed:
@@ -542,25 +553,40 @@ class ManageWindow(QWidget):
for pkg in new_pkgs:
app_model = PackageView(model=pkg, visible=pkg.is_application() or not self.checkbox_only_apps.isChecked())
self._update_pkgs_info(app_model, pkgs_info)
self.pkgs.append(app_model)
if as_installed:
self.pkgs_installed.append(app_model)
self.pkgs_available.append(app_model)
if pkgs_info['total'] < self.display_limit:
self.pkgs.append(app_model)
pkgs_info['total'] += 1
if old_installed and types:
for pkgv in old_installed:
if not pkgv.model.__class__ in types:
self._update_pkgs_info(pkgv, pkgs_info)
self.pkgs.append(pkgv)
if as_installed:
self.pkgs_installed.append(pkgv)
self.pkgs_available.append(pkgv)
if pkgs_info['total'] < self.display_limit:
self.pkgs.append(pkgv)
pkgs_info['total'] += 1
if as_installed:
self.pkgs_installed = self.pkgs_available
else: # use installed
self.pkgs = self.pkgs_installed
for pkgv in self.pkgs:
for pkgv in self.pkgs_installed:
self._update_pkgs_info(pkgv, pkgs_info)
self.pkgs_available.append(pkgv)
if pkgs_info['total'] < self.display_limit:
self.pkgs.append(pkgv)
pkgs_info['total'] += 1
if pkgs_info['napps'] == 0:
if self.first_refresh:
self._begin_search('')
@@ -574,8 +600,7 @@ class ManageWindow(QWidget):
self.checkbox_only_apps.setChecked(True)
self._update_type_filters(pkgs_info['available_types'])
self.table_apps.update_apps(self.pkgs, update_check_enabled=update_check_enabled)
self.apply_filters()
self.apply_filters(update_check_enabled=update_check_enabled)
self.change_update_state()
self.resize_and_center()