not changing the table applied filters after a uninstall | [flatpak] runtimes categorized as 'runtimes'

This commit is contained in:
Vinicius Moreira
2019-10-23 17:24:12 -03:00
parent 270cf0e1d1
commit 24beb25fca
4 changed files with 69 additions and 36 deletions

View File

@@ -11,8 +11,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Improvements ### Improvements
- 3 password attempts for root authentication - 3 password attempts for root authentication
- not changing the table applied filters after a uninstall
- AppImage: - AppImage:
- showing an error popup when **AppImageLauncher** messes up with an application installation - showing an error popup when **AppImageLauncher** messes up with an application installation
- Flatpak:
- Runtimes now are categorized as "runtimes"
- AUR: - AUR:
- showing a "user-friendly" popup when there are integrity issues with the source-files of a building package - showing a "user-friendly" popup when there are integrity issues with the source-files of a building package
- not waiting for the categories file to be retrieved from the cloud during application boot ( reduces boot time ) - not waiting for the categories file to be retrieved from the cloud during application boot ( reduces boot time )

View File

@@ -17,6 +17,9 @@ class FlatpakApplication(SoftwarePackage):
self.runtime = runtime self.runtime = runtime
self.commit = commit self.commit = commit
if runtime:
self.categories = ['runtime']
def is_incomplete(self): def is_incomplete(self):
return self.description is None and self.icon_url return self.description is None and self.icon_url

View File

@@ -55,7 +55,7 @@ class AboutDialog(QDialog):
layout.addWidget(gems_widget) layout.addWidget(gems_widget)
layout.addWidget(QLabel('')) layout.addWidget(QLabel(''))
label_version = QLabel(locale_keys['version'].lower() + ': ' + __version__) label_version = QLabel(locale_keys['version'].lower() + ' ' + __version__)
label_version.setStyleSheet('QLabel { font-size: 10px; font-weight: bold }') label_version.setStyleSheet('QLabel { font-size: 10px; font-weight: bold }')
label_version.setAlignment(Qt.AlignCenter) label_version.setAlignment(Qt.AlignCenter)
layout.addWidget(label_version) layout.addWidget(label_version)

View File

@@ -19,8 +19,6 @@ from bauh.api.http import HttpClient
from bauh.commons.html import bold from bauh.commons.html import bold
from bauh.view.core.config import Configuration from bauh.view.core.config import Configuration
from bauh.view.core.controller import GenericSoftwareManager from bauh.view.core.controller import GenericSoftwareManager
from bauh.view.qt.screenshots import ScreenshotsDialog
from bauh.view.util import util, resource
from bauh.view.qt import dialog, commons, qt_utils from bauh.view.qt import dialog, commons, qt_utils
from bauh.view.qt.about import AboutDialog from bauh.view.qt.about import AboutDialog
from bauh.view.qt.apps_table import AppsTable, UpdateToggleButton from bauh.view.qt.apps_table import AppsTable, UpdateToggleButton
@@ -30,12 +28,14 @@ from bauh.view.qt.gem_selector import GemSelectorPanel
from bauh.view.qt.history import HistoryDialog from bauh.view.qt.history import HistoryDialog
from bauh.view.qt.info import InfoDialog from bauh.view.qt.info import InfoDialog
from bauh.view.qt.root import is_root, ask_root_password from bauh.view.qt.root import is_root, ask_root_password
from bauh.view.qt.screenshots import ScreenshotsDialog
from bauh.view.qt.styles import StylesComboBox from bauh.view.qt.styles import StylesComboBox
from bauh.view.qt.thread import UpdateSelectedApps, RefreshApps, UninstallApp, DowngradeApp, GetAppInfo, \ from bauh.view.qt.thread import UpdateSelectedApps, RefreshApps, UninstallApp, DowngradeApp, GetAppInfo, \
GetAppHistory, SearchPackages, InstallPackage, AnimateProgress, VerifyModels, FindSuggestions, ListWarnings, \ GetAppHistory, SearchPackages, InstallPackage, AnimateProgress, VerifyModels, FindSuggestions, ListWarnings, \
AsyncAction, LaunchApp, ApplyFilters, CustomAction, GetScreenshots AsyncAction, LaunchApp, ApplyFilters, CustomAction, GetScreenshots
from bauh.view.qt.view_model import PackageView from bauh.view.qt.view_model import PackageView
from bauh.view.qt.view_utils import load_icon from bauh.view.qt.view_utils import load_icon
from bauh.view.util import util, resource
DARK_ORANGE = '#FF4500' DARK_ORANGE = '#FF4500'
@@ -283,6 +283,7 @@ class ManageWindow(QWidget):
self._maximized = False self._maximized = False
self.progress_controll_enabled = True self.progress_controll_enabled = True
self.recent_installation = False self.recent_installation = False
self.recent_uninstall = False
self.dialog_about = None self.dialog_about = None
self.first_refresh = suggestions self.first_refresh = suggestions
@@ -437,7 +438,7 @@ class ManageWindow(QWidget):
def refresh_apps(self, keep_console: bool = True, top_app: PackageView = None, pkg_types: Set[Type[SoftwarePackage]] = None): def refresh_apps(self, keep_console: bool = True, top_app: PackageView = None, pkg_types: Set[Type[SoftwarePackage]] = None):
self.recent_installation = False self.recent_installation = False
self.type_filter = None # self.type_filter = None
self.input_search.clear() self.input_search.clear()
if not keep_console: if not keep_console:
@@ -445,7 +446,7 @@ class ManageWindow(QWidget):
self.ref_checkbox_updates.setVisible(False) self.ref_checkbox_updates.setVisible(False)
self.ref_checkbox_only_apps.setVisible(False) self.ref_checkbox_only_apps.setVisible(False)
self._begin_action(self.i18n['manage_window.status.refreshing'], keep_bt_installed=False, clear_filters=True) self._begin_action(self.i18n['manage_window.status.refreshing'], keep_bt_installed=False, clear_filters=not self.recent_uninstall)
self.thread_refresh.app = top_app # the app will be on top when refresh happens self.thread_refresh.app = top_app # the app will be on top when refresh happens
self.thread_refresh.pkg_types = pkg_types self.thread_refresh.pkg_types = pkg_types
@@ -455,8 +456,9 @@ class ManageWindow(QWidget):
self.finish_action() self.finish_action()
self.ref_checkbox_only_apps.setVisible(bool(res['installed'])) self.ref_checkbox_only_apps.setVisible(bool(res['installed']))
self.ref_bt_upgrade.setVisible(True) self.ref_bt_upgrade.setVisible(True)
self.update_pkgs(res['installed'], as_installed=as_installed, types=res['types']) self.update_pkgs(res['installed'], as_installed=as_installed, types=res['types'], keep_filters=self.recent_uninstall)
self.first_refresh = False self.first_refresh = False
self.recent_uninstall = False
self._hide_fields_after_recent_installation() self._hide_fields_after_recent_installation()
def uninstall_app(self, app: PackageView): def uninstall_app(self, app: PackageView):
@@ -470,7 +472,7 @@ class ManageWindow(QWidget):
return return
self._handle_console_option(True) self._handle_console_option(True)
self._begin_action('{} {}'.format(self.i18n['manage_window.status.uninstalling'], app.model.name)) self._begin_action('{} {}'.format(self.i18n['manage_window.status.uninstalling'], app.model.name), clear_filters=False)
self.thread_uninstall.app = app self.thread_uninstall.app = app
self.thread_uninstall.root_password = pwd self.thread_uninstall.root_password = pwd
@@ -489,6 +491,7 @@ class ManageWindow(QWidget):
util.notify_user('{} ({}) {}'.format(pkgv.model.name, pkgv.model.get_type(), self.i18n['uninstalled'])) util.notify_user('{} ({}) {}'.format(pkgv.model.name, pkgv.model.get_type(), self.i18n['uninstalled']))
only_pkg_type = len([p for p in self.pkgs if p.model.get_type() == pkgv.model.get_type()]) >= 2 only_pkg_type = len([p for p in self.pkgs if p.model.get_type() == pkgv.model.get_type()]) >= 2
self.recent_uninstall = True
self.refresh_apps(pkg_types={pkgv.model.__class__} if only_pkg_type else None) self.refresh_apps(pkg_types={pkgv.model.__class__} if only_pkg_type else None)
else: else:
if self._can_notify_user(): if self._can_notify_user():
@@ -553,7 +556,7 @@ class ManageWindow(QWidget):
self.ref_bt_upgrade.setVisible(show_bt_upgrade) self.ref_bt_upgrade.setVisible(show_bt_upgrade)
def change_update_state(self, pkgs_info: dict, trigger_filters: bool = True): def change_update_state(self, pkgs_info: dict, trigger_filters: bool = True, keep_selected: bool = False):
self.update_bt_upgrade(pkgs_info) self.update_bt_upgrade(pkgs_info)
if pkgs_info['updates'] > 0: if pkgs_info['updates'] > 0:
@@ -562,13 +565,14 @@ class ManageWindow(QWidget):
if not self.ref_checkbox_updates.isVisible(): if not self.ref_checkbox_updates.isVisible():
self.ref_checkbox_updates.setVisible(True) self.ref_checkbox_updates.setVisible(True)
if not self.filter_updates: if not self.filter_updates and not keep_selected:
self._change_checkbox(self.checkbox_updates, True, 'filter_updates', trigger_filters) self._change_checkbox(self.checkbox_updates, True, 'filter_updates', trigger_filters)
if pkgs_info['napp_updates'] > 0 and self.filter_only_apps: if pkgs_info['napp_updates'] > 0 and self.filter_only_apps and not keep_selected:
self._change_checkbox(self.checkbox_only_apps, False, 'filter_only_apps', trigger_filters) self._change_checkbox(self.checkbox_only_apps, False, 'filter_only_apps', trigger_filters)
else: else:
self._change_checkbox(self.checkbox_updates, False, 'filter_updates', trigger_filters) if not keep_selected:
self._change_checkbox(self.checkbox_updates, False, 'filter_updates', trigger_filters)
self.ref_checkbox_updates.setVisible(False) self.ref_checkbox_updates.setVisible(False)
@@ -592,7 +596,7 @@ class ManageWindow(QWidget):
'display_limit': self.display_limit if updates <= 0 else None 'display_limit': self.display_limit if updates <= 0 else None
} }
def update_pkgs(self, new_pkgs: List[SoftwarePackage], as_installed: bool, types: Set[type] = None, ignore_updates: bool = False): def update_pkgs(self, new_pkgs: List[SoftwarePackage], as_installed: bool, types: Set[type] = None, ignore_updates: bool = False, keep_filters: bool = False):
self.input_name_filter.setText('') self.input_name_filter.setText('')
pkgs_info = commons.new_pkgs_info() pkgs_info = commons.new_pkgs_info()
filters = self._gen_filters(ignore_updates) filters = self._gen_filters(ignore_updates)
@@ -620,21 +624,24 @@ class ManageWindow(QWidget):
commons.update_info(pkgv, pkgs_info) commons.update_info(pkgv, pkgs_info)
commons.apply_filters(pkgv, filters, pkgs_info) commons.apply_filters(pkgv, filters, pkgs_info)
if pkgs_info['apps_count'] == 0: if not keep_filters:
if self.first_refresh: if pkgs_info['apps_count'] == 0:
self._begin_search('') if self.first_refresh:
self.thread_suggestions.start() self._begin_search('')
return self.thread_suggestions.start()
return
else:
self._change_checkbox(self.checkbox_only_apps, False, 'filter_only_apps', trigger=False)
self.checkbox_only_apps.setCheckable(False)
else: else:
self._change_checkbox(self.checkbox_only_apps, False, 'filter_only_apps', trigger=False) self.checkbox_only_apps.setCheckable(True)
self.checkbox_only_apps.setCheckable(False) self._change_checkbox(self.checkbox_only_apps, True, 'filter_only_apps', trigger=False)
else:
self.checkbox_only_apps.setCheckable(True)
self._change_checkbox(self.checkbox_only_apps, True, 'filter_only_apps', trigger=False)
self.change_update_state(pkgs_info=pkgs_info, trigger_filters=False) self.change_update_state(pkgs_info=pkgs_info, trigger_filters=False, keep_selected=keep_filters and bool(self.pkgs))
self._update_categories(pkgs_info['categories'], keep_selected=keep_filters and bool(self.pkgs))
self._update_type_filters(pkgs_info['available_types'], keep_selected=keep_filters and bool(self.pkgs))
self._apply_filters(pkgs_info, ignore_updates=ignore_updates) self._apply_filters(pkgs_info, ignore_updates=ignore_updates)
self.change_update_state(pkgs_info=pkgs_info, trigger_filters=False) self.change_update_state(pkgs_info=pkgs_info, trigger_filters=False, keep_selected=keep_filters and bool(self.pkgs))
self.pkgs_available = pkgs_info['pkgs'] self.pkgs_available = pkgs_info['pkgs']
@@ -646,9 +653,6 @@ class ManageWindow(QWidget):
if self.pkgs: if self.pkgs:
self.ref_input_name_filter.setVisible(True) 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) self._update_table(pkgs_info=pkgs_info)
if new_pkgs: if new_pkgs:
@@ -666,19 +670,25 @@ class ManageWindow(QWidget):
for pkgv in pkgs_info['pkgs']: for pkgv in pkgs_info['pkgs']:
commons.apply_filters(pkgv, filters, pkgs_info) commons.apply_filters(pkgv, filters, pkgs_info)
def _update_type_filters(self, available_types: dict = None): def _update_type_filters(self, available_types: dict = None, keep_selected: bool = False):
if available_types is None: if available_types is None:
self.ref_combo_filter_type.setVisible(self.combo_filter_type.count() > 1) self.ref_combo_filter_type.setVisible(self.combo_filter_type.count() > 1)
else: else:
self.type_filter = self.any_type_filter keeping_selected = keep_selected and available_types and self.type_filter in available_types
if not keeping_selected:
self.type_filter = self.any_type_filter
if available_types and len(available_types) > 1: if available_types and len(available_types) > 1:
if self.combo_filter_type.count() > 1: if self.combo_filter_type.count() > 1:
for _ in range(self.combo_filter_type.count() - 1): for _ in range(self.combo_filter_type.count() - 1):
self.combo_filter_type.removeItem(1) self.combo_filter_type.removeItem(1)
for app_type, icon_path in available_types.items(): sel_type = -1
for idx, item in enumerate(available_types.items()):
app_type, icon_path = item[0], item[1]
icon = self.cache_type_filter_icons.get(app_type) icon = self.cache_type_filter_icons.get(app_type)
if not icon: if not icon:
@@ -687,28 +697,45 @@ class ManageWindow(QWidget):
self.combo_filter_type.addItem(icon, app_type.capitalize(), app_type) self.combo_filter_type.addItem(icon, app_type.capitalize(), app_type)
if keeping_selected and app_type == self.type_filter:
sel_type = idx + 1
self.combo_filter_type.blockSignals(True)
self.combo_filter_type.setCurrentIndex(sel_type if sel_type > -1 else 0)
self.combo_filter_type.blockSignals(False)
self.ref_combo_filter_type.setVisible(True) self.ref_combo_filter_type.setVisible(True)
else: else:
self.ref_combo_filter_type.setVisible(False) self.ref_combo_filter_type.setVisible(False)
def _update_categories(self, categories: Set[str] = None): def _update_categories(self, categories: Set[str] = None, keep_selected: bool = False):
if categories is None: if categories is None:
self.ref_combo_categories.setVisible(self.combo_categories.count() > 1) self.ref_combo_categories.setVisible(self.combo_categories.count() > 1)
else: else:
self.category_filter = self.any_category_filter keeping_selected = keep_selected and categories and self.category_filter in categories
if not keeping_selected:
self.category_filter = self.any_category_filter
if categories: if categories:
if self.combo_categories.count() > 1: if self.combo_categories.count() > 1:
for _ in range(self.combo_categories.count() - 1): for _ in range(self.combo_categories.count() - 1):
self.combo_categories.removeItem(1) self.combo_categories.removeItem(1)
for c in categories: selected_cat = -1
for idx, c in enumerate(categories):
i18n_cat = self.i18n.get(c) i18n_cat = self.i18n.get(c)
cat_label = i18n_cat if i18n_cat else c cat_label = i18n_cat if i18n_cat else c
self.combo_categories.addItem(cat_label.capitalize(), c) self.combo_categories.addItem(cat_label.capitalize(), c)
if keeping_selected and c == self.category_filter:
selected_cat = idx + 1
self.combo_categories.blockSignals(True)
self.combo_categories.setCurrentIndex(selected_cat if selected_cat > -1 else 0)
self.combo_categories.blockSignals(False)
self.ref_combo_categories.setVisible(True) self.ref_combo_categories.setVisible(True)
else: else:
self.ref_combo_categories.setVisible(False) self.ref_combo_categories.setVisible(False)
@@ -815,7 +842,7 @@ class ManageWindow(QWidget):
else: else:
self.combo_filter_type.setEnabled(False) self.combo_filter_type.setEnabled(False)
def finish_action(self): def finish_action(self, keep_filters: bool = False):
self.ref_combo_styles.setVisible(True) self.ref_combo_styles.setVisible(True)
self.thread_animate_progress.stop = True self.thread_animate_progress.stop = True
self.thread_animate_progress.wait(msecs=1000) self.thread_animate_progress.wait(msecs=1000)
@@ -841,8 +868,8 @@ class ManageWindow(QWidget):
if self.pkgs: if self.pkgs:
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(keep_selected=keep_filters)
self._update_categories() self._update_categories(keep_selected=keep_filters)
if self.ref_bt_installed.isVisible(): if self.ref_bt_installed.isVisible():
self.ref_bt_installed.setEnabled(True) self.ref_bt_installed.setEnabled(True)