diff --git a/CHANGELOG.md b/CHANGELOG.md index a5f0582a..7ef86581 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,21 @@ 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/). ## [0.9.4] 2020 +### Features +- Ignore updates: now it is possible to ignore updates from software packages through their actions button (**+**). Supported types: Arch packages + +

+ +

+

+ +

+- Packages with ignored updates have their versions displayed with a brown shade +

+ +

+ + ### Improvements - Arch - faster caching data process during initialization diff --git a/README.md b/README.md index d01bc0c9..bea6e8b8 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,11 @@

-**bauh** ( ba-oo ), formerly known as **fpakman**, is a graphical interface for managing your Linux applications / packages. It currently supports -the following types: AppImage, Arch ( repositories / AUR ), Flatpak, Snap and native Web applications. +**bauh** ( ba-oo ), formerly known as **fpakman**, is a graphical interface for managing your Linux applications/packages. It currently supports +the following formats: AppImage, Arch ( repositories / AUR ), Flatpak, Snap and native Web applications. Key features: -- A management panel where you can: search, install, uninstall, launch, downgrade and retrieve the release history from software packages. +- A management panel where you can: search, install, uninstall, upgrade, downgrade, launch, ignore updates and retrieve releases history from software packages./ - Tray mode: launches attached to the system tray and publishes notifications when there are software updates available - System backup: it integrates with **Timeshift** to provide a simple and safe backup process before applying any change to your system. @@ -169,6 +169,7 @@ db_updater: - **refresh mirrors**: allows the user to define multiple mirrors locations and sort by the fastest ( `sudo pacman-mirrors -c country1,country2 && sudo pacman-mirrors --fasttrack 5 && sudo pacman -Syy` ) - **quick system upgrade**: it executes a default pacman upgrade ( `pacman -Syyu --noconfirm` ) - **clean cache**: it cleans the pacman cache diretory ( default: `/var/cache/pacman/pkg` ) +- Packages with ignored updates are defined at **~/.config/bauh/arch/updates_ignored.txt** - The configuration file is located at **~/.config/bauh/arch.yml** and it allows the following customizations: ``` optimize: true # if 'false': disables the auto-compilation improvements diff --git a/bauh/api/abstract/controller.py b/bauh/api/abstract/controller.py index e1aa32b8..f3f7157c 100644 --- a/bauh/api/abstract/controller.py +++ b/bauh/api/abstract/controller.py @@ -340,3 +340,9 @@ class SoftwareManager(ABC): def fill_sizes(self, pkgs: List[SoftwarePackage]): pass + + def ignore_update(self, pkg: SoftwarePackage): + pass + + def revert_ignored_update(self, pkg: SoftwarePackage): + pass diff --git a/bauh/api/abstract/model.py b/bauh/api/abstract/model.py index d594e376..66f56d9b 100644 --- a/bauh/api/abstract/model.py +++ b/bauh/api/abstract/model.py @@ -95,6 +95,12 @@ class SoftwarePackage(ABC): def can_be_installed(self): return not self.installed + def is_update_ignored(self) -> bool: + return False + + def supports_ignored_updates(self) -> bool: + return False + @abstractmethod def get_type(self): """ diff --git a/bauh/gems/arch/__init__.py b/bauh/gems/arch/__init__.py index 98117b48..44820a2a 100644 --- a/bauh/gems/arch/__init__.py +++ b/bauh/gems/arch/__init__.py @@ -9,11 +9,12 @@ BUILD_DIR = '{}/arch'.format(TEMP_DIR) ARCH_CACHE_PATH = CACHE_PATH + '/arch' CATEGORIES_FILE_PATH = ARCH_CACHE_PATH + '/categories.txt' URL_CATEGORIES_FILE = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/arch/categories.txt' -CONFIG_DIR = '{}/.config/bauh/arch'.format(Path.home()) +CONFIG_DIR = '{}/.config/bauh/arch'.format(str(Path.home())) CUSTOM_MAKEPKG_FILE = '{}/makepkg.conf'.format(CONFIG_DIR) AUR_INDEX_FILE = '{}/arch.txt'.format(BUILD_DIR) CONFIG_FILE = '{}/arch.yml'.format(CONFIG_PATH) SUGGESTIONS_FILE = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/arch/aur_suggestions.txt' +UPDATES_IGNORED_FILE = '{}/updates_ignored.txt'.format(CONFIG_DIR) def get_icon_path() -> str: diff --git a/bauh/gems/arch/controller.py b/bauh/gems/arch/controller.py index cddf956b..c4f23d38 100644 --- a/bauh/gems/arch/controller.py +++ b/bauh/gems/arch/controller.py @@ -30,7 +30,8 @@ from bauh.commons.html import bold from bauh.commons.system import SystemProcess, ProcessHandler, new_subprocess, run_cmd, SimpleProcess from bauh.gems.arch import BUILD_DIR, aur, pacman, makepkg, message, confirmation, disk, git, \ gpg, URL_CATEGORIES_FILE, CATEGORIES_FILE_PATH, CUSTOM_MAKEPKG_FILE, SUGGESTIONS_FILE, \ - CONFIG_FILE, get_icon_path, database, mirrors, sorting, cpu_manager, ARCH_CACHE_PATH + CONFIG_FILE, get_icon_path, database, mirrors, sorting, cpu_manager, ARCH_CACHE_PATH, UPDATES_IGNORED_FILE, \ + CONFIG_DIR from bauh.gems.arch.aur import AURClient from bauh.gems.arch.config import read_config from bauh.gems.arch.dependencies import DependenciesAnalyser @@ -529,6 +530,14 @@ class ArchManager(SoftwareManager): for t in map_threads: t.join() + if pkgs: + ignored = self._list_ignored_updates() + + if ignored: + for p in pkgs: + if p.name in ignored: + p.update_ignored = True + return SearchResult(pkgs, None, len(pkgs)) def _downgrade_aur_pkg(self, context: TransactionContext): @@ -1016,6 +1025,8 @@ class ArchManager(SoftwareManager): body=self.i18n['arch.uninstall.clean_cached.error'].format(bold(p)), type_=MessageType.WARNING) + self._revert_ignored_updates(to_uninstall) + self._update_progress(context, 100) return uninstalled @@ -1932,7 +1943,7 @@ class ArchManager(SoftwareManager): aur_type, repo_type = self.i18n['gem.arch.type.aur.label'], self.i18n['gem.arch.type.arch_repo.label'] - return [PackageUpdate(p.name, p.latest_version, aur_type if p.repository == 'aur' else repo_type, p.name) for p in installed if p.update] + return [PackageUpdate(p.name, p.latest_version, aur_type if p.repository == 'aur' else repo_type, p.name) for p in installed if p.update and not p.is_update_ignored()] def list_warnings(self, internet_available: bool) -> List[str]: warnings = [] @@ -2246,3 +2257,37 @@ class ArchManager(SoftwareManager): return False return True + + def _list_ignored_updates(self) -> Set[str]: + if os.path.exists(UPDATES_IGNORED_FILE): + with open(UPDATES_IGNORED_FILE) as f: + return {line.strip() for line in f.read().split('\n') if line} + + def ignore_update(self, pkg: ArchPackage): + ignored = self._list_ignored_updates() + + if not ignored or pkg.name not in ignored: + Path(CONFIG_DIR).mkdir(parents=True, exist_ok=True) + + with open(UPDATES_IGNORED_FILE, 'a+') as f: + f.write('{}\n'.format(pkg.name)) + + pkg.update_ignored = True + + def _revert_ignored_updates(self, pkgs: Iterable[str]): + if os.path.exists(UPDATES_IGNORED_FILE): + ignored = [] + with open(UPDATES_IGNORED_FILE) as f: + for line in f.read().split('\n'): + if line: + clean_line = line.strip() + + if clean_line and clean_line not in pkgs: + ignored.append(clean_line) + + with open(UPDATES_IGNORED_FILE, 'w+') as f: + f.writelines(ignored) + + def revert_ignored_update(self, pkg: ArchPackage): + self._revert_ignored_updates({pkg.name}) + pkg.update_ignored = False \ No newline at end of file diff --git a/bauh/gems/arch/model.py b/bauh/gems/arch/model.py index 4b82168a..410950c2 100644 --- a/bauh/gems/arch/model.py +++ b/bauh/gems/arch/model.py @@ -16,7 +16,7 @@ class ArchPackage(SoftwarePackage): first_submitted: datetime.datetime = None, last_modified: datetime.datetime = None, maintainer: str = None, url_download: str = None, pkgbuild: str = None, repository: str = None, desktop_entry: str = None, installed: bool = False, srcinfo: dict = None, dependencies: Set[str] = None, - categories: List[str] = None, i18n: I18n = None): + categories: List[str] = None, i18n: I18n = None, update_ignored: bool = False): super(ArchPackage, self).__init__(name=name, version=version, latest_version=latest_version, description=description, installed=installed, categories=categories) @@ -36,6 +36,7 @@ class ArchPackage(SoftwarePackage): self.src_info = srcinfo self.dependencies = dependencies self.i18n = i18n + self.update_ignored = update_ignored @staticmethod def disk_cache_path(pkgname: str): @@ -132,6 +133,12 @@ class ArchPackage(SoftwarePackage): def supports_backup(self) -> bool: return True + def is_update_ignored(self) -> bool: + return self.update_ignored + + def supports_ignored_updates(self) -> bool: + return self.installed + def __str__(self): return self.__repr__() diff --git a/bauh/view/core/controller.py b/bauh/view/core/controller.py index 662510b8..dbb77449 100755 --- a/bauh/view/core/controller.py +++ b/bauh/view/core/controller.py @@ -539,3 +539,15 @@ class GenericSoftwareManager(SoftwareManager): for t in threads: t.join() + + def ignore_update(self, pkg: SoftwarePackage): + manager = self._get_manager_for(pkg) + + if manager: + manager.ignore_update(pkg) + + def revert_ignored_update(self, pkg: SoftwarePackage): + manager = self._get_manager_for(pkg) + + if manager: + manager.revert_ignored_update(pkg) diff --git a/bauh/view/qt/apps_table.py b/bauh/view/qt/apps_table.py index f2ac4ae1..51140a25 100644 --- a/bauh/view/qt/apps_table.py +++ b/bauh/view/qt/apps_table.py @@ -121,6 +121,7 @@ class AppsTable(QTableWidget): menu_row.setCursor(QCursor(Qt.PointingHandCursor)) if pkg.model.installed: + if pkg.model.has_history(): action_history = QAction(self.i18n["manage_window.apps_table.row.actions.history"]) action_history.setIcon(QIcon(resource.get_path('img/history.svg'))) @@ -145,6 +146,21 @@ class AppsTable(QTableWidget): action_downgrade.setIcon(QIcon(resource.get_path('img/downgrade.svg'))) menu_row.addAction(action_downgrade) + if pkg.model.supports_ignored_updates(): + if pkg.model.is_update_ignored(): + action_ignore_updates = QAction( + self.i18n["manage_window.apps_table.row.actions.ignore_updates_reverse"]) + action_ignore_updates.setIcon(QIcon(resource.get_path('img/revert_update_ignored.svg'))) + else: + action_ignore_updates = QAction(self.i18n["manage_window.apps_table.row.actions.ignore_updates"]) + action_ignore_updates.setIcon(QIcon(resource.get_path('img/ignore_update.svg'))) + + def ignore_updates(): + self.window.ignore_updates(pkg) + + action_ignore_updates.triggered.connect(ignore_updates) + menu_row.addAction(action_ignore_updates) + if bool(pkg.model.get_custom_supported_actions()): for action in pkg.model.get_custom_supported_actions(): item = QAction(self.i18n[action.i18_label_key]) @@ -263,7 +279,7 @@ class AppsTable(QTableWidget): if change_update_col: col_update = None - if update_check_enabled and pkg.model.update: + if update_check_enabled and not pkg.model.is_update_ignored() and pkg.model.update: col_update = QToolBar() col_update.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred) col_update.addWidget(UpdateToggleButton(pkg=pkg, @@ -351,11 +367,15 @@ class AppsTable(QTableWidget): else: tooltip = self.i18n['version.unknown'] - if pkg.model.update: + if pkg.model.update and not pkg.model.is_update_ignored(): label_version.setStyleSheet("color: {}; font-weight: bold".format(GREEN)) tooltip = self.i18n['version.installed_outdated'] - if pkg.model.installed and pkg.model.update and pkg.model.version and pkg.model.latest_version and pkg.model.version != pkg.model.latest_version: + if pkg.model.is_update_ignored(): + label_version.setStyleSheet("color: {}; font-weight: bold".format(BROWN)) + tooltip = self.i18n['version.updates_ignored'] + + if pkg.model.installed and pkg.model.update and not pkg.model.is_update_ignored() and pkg.model.version and pkg.model.latest_version and pkg.model.version != pkg.model.latest_version: tooltip = '{}. {}: {}'.format(tooltip, self.i18n['version.latest'], pkg.model.latest_version) label_version.setText(label_version.text() + ' > {}'.format(pkg.model.latest_version)) diff --git a/bauh/view/qt/commons.py b/bauh/view/qt/commons.py index 6bac8966..30aa9556 100644 --- a/bauh/view/qt/commons.py +++ b/bauh/view/qt/commons.py @@ -22,7 +22,7 @@ def update_info(pkgv: PackageView, pkgs_info: dict): else: pkgs_info['napps_count'] += 1 - if pkgv.model.update: + if pkgv.model.update and not pkgv.model.is_update_ignored(): if pkgv.model.is_application(): pkgs_info['app_updates'] += 1 else: diff --git a/bauh/view/qt/thread.py b/bauh/view/qt/thread.py index ff995cfe..32b8c62f 100644 --- a/bauh/view/qt/thread.py +++ b/bauh/view/qt/thread.py @@ -907,3 +907,26 @@ class GetScreenshots(AsyncAction): self.notify_finished({'pkg': self.pkg, 'screenshots': self.manager.get_screenshots(self.pkg.model)}) self.pkg = None + + +class IgnorePackageUpdates(AsyncAction): + + def __init__(self, manager: SoftwareManager, pkg: PackageView = None): + super(IgnorePackageUpdates, self).__init__() + self.pkg = pkg + self.manager = manager + + def run(self): + if self.pkg: + try: + if self.pkg.model.is_update_ignored(): + self.manager.revert_ignored_update(self.pkg.model) + res = {'action': 'ignore_updates_reverse', 'success': not self.pkg.model.is_update_ignored(), 'pkg': self.pkg} + else: + self.manager.ignore_update(self.pkg.model) + res = {'action': 'ignore_updates', 'success': self.pkg.model.is_update_ignored(), 'pkg': self.pkg} + + self.notify_finished(res) + + finally: + self.pkg = None \ No newline at end of file diff --git a/bauh/view/qt/window.py b/bauh/view/qt/window.py index 2088f34c..99a0daa8 100755 --- a/bauh/view/qt/window.py +++ b/bauh/view/qt/window.py @@ -34,7 +34,8 @@ from bauh.view.qt.settings import SettingsWindow from bauh.view.qt.thread import UpgradeSelected, RefreshApps, UninstallApp, DowngradeApp, GetAppInfo, \ GetAppHistory, SearchPackages, InstallPackage, AnimateProgress, NotifyPackagesReady, FindSuggestions, \ ListWarnings, \ - AsyncAction, LaunchApp, ApplyFilters, CustomSoftwareAction, GetScreenshots, CustomAction, NotifyInstalledLoaded + AsyncAction, LaunchApp, ApplyFilters, CustomSoftwareAction, GetScreenshots, CustomAction, NotifyInstalledLoaded, \ + IgnorePackageUpdates from bauh.view.qt.view_model import PackageView, PackageViewStatus from bauh.view.util import util, resource from bauh.view.util.translation import I18n @@ -322,6 +323,9 @@ class ManageWindow(QWidget): self.thread_notify_pkgs_ready.signal_changed.connect(self._update_package_data) self.thread_notify_pkgs_ready.signal_finished.connect(self._update_state_when_pkgs_ready) + self.thread_ignore_updates = IgnorePackageUpdates(manager=self.manager) + self._bind_async_action(self.thread_ignore_updates, finished_call=self.finish_ignore_updates) + self.toolbar_bottom = QToolBar() self.toolbar_bottom.setIconSize(QSize(16, 16)) self.toolbar_bottom.setStyleSheet('QToolBar { spacing: 3px }') @@ -1256,3 +1260,22 @@ class ManageWindow(QWidget): menu_row.adjustSize() menu_row.popup(QCursor.pos()) menu_row.exec_() + + def ignore_updates(self, pkg: PackageView): + status_key = 'ignore_updates' if not pkg.model.is_update_ignored() else 'ignore_updates_reverse' + self._begin_action(self.i18n['manage_window.status.{}'.format(status_key)].format(pkg.model.name)) + self.thread_ignore_updates.pkg = pkg + self.thread_ignore_updates.start() + + def finish_ignore_updates(self, res: dict): + self.finish_action() + + if res['success']: + self.table_apps.update_package(res['pkg']) + dialog.show_message(title=self.i18n['success'].capitalize(), + body=self.i18n['action.{}.success'.format(res['action'])].format(bold(res['pkg'].model.name)), + type_=MessageType.INFO) + else: + dialog.show_message(title=self.i18n['fail'].capitalize(), + body=self.i18n['action.{}.fail'.format(res['action'])].format(bold(res['pkg'].model.name)), + type_=MessageType.ERROR) diff --git a/bauh/view/resources/img/ignore_update.svg b/bauh/view/resources/img/ignore_update.svg new file mode 100644 index 00000000..e1148552 --- /dev/null +++ b/bauh/view/resources/img/ignore_update.svg @@ -0,0 +1,134 @@ + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bauh/view/resources/img/revert_update_ignored.svg b/bauh/view/resources/img/revert_update_ignored.svg new file mode 100644 index 00000000..b327932f --- /dev/null +++ b/bauh/view/resources/img/revert_update_ignored.svg @@ -0,0 +1,189 @@ + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bauh/view/resources/locale/ca b/bauh/view/resources/locale/ca index d6a980a5..093d50b6 100644 --- a/bauh/view/resources/locale/ca +++ b/bauh/view/resources/locale/ca @@ -57,6 +57,10 @@ action.disk_trim.error=There was a problem while optimizing the disk action.failed=L'acció ha fallat action.history.no_history.body=There is no available history for {} action.history.no_history.title=No history +action.ignore_updates.fail=It was not possible to ignore updates from {} +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.not_allowed=Action not allowed action.request_reboot.title=System restart @@ -268,6 +272,8 @@ locale.tr=turc manage_window.apps_table.row.actions.downgrade=Reverteix manage_window.apps_table.row.actions.downgrade.popup.body=Voleu revertir «{}»? manage_window.apps_table.row.actions.history=Historial +manage_window.apps_table.row.actions.ignore_updates=Ignore updates +manage_window.apps_table.row.actions.ignore_updates_reverse=Revert ignored updates manage_window.apps_table.row.actions.info=Informació manage_window.apps_table.row.actions.install=Instal·la manage_window.apps_table.row.actions.install.popup.body=Voleu instal·lar «{}» a l’ordinador? @@ -301,6 +307,8 @@ manage_window.settings.about=Quant a manage_window.status.downgrading=S’està revertint manage_window.status.filtering=S’està filtrant manage_window.status.history=S’està recuperant l’historial +manage_window.status.ignore_updates=Ignoring updates from {} +manage_window.status.ignore_updates_reverse=Reverting updates ignored from {} manage_window.status.info=S’està recuperant la informació manage_window.status.installed=Loading installed manage_window.status.installing=S’està instal·lant @@ -380,6 +388,7 @@ version.latest=versió més recent version.outdated=no actualitzada version.unknown=no informat version.updated=actualitzada +version.updates_ignored=Updates ignored view.components.file_chooser.placeholder=Feu clic aquí per seleccionar warning=avís warning.update_available=There is a new {} version available ({}). Check out the news at {}. diff --git a/bauh/view/resources/locale/de b/bauh/view/resources/locale/de index 8c71a9cc..371d6e2c 100644 --- a/bauh/view/resources/locale/de +++ b/bauh/view/resources/locale/de @@ -57,6 +57,10 @@ action.disk_trim.error=There was a problem while optimizing the disk action.failed=Aktion fehlgeschlagen action.history.no_history.body=There is no available history for {} action.history.no_history.title=No history +action.ignore_updates.fail=It was not possible to ignore updates from {} +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=Informationen über diese Anwendung anzeigen action.not_allowed=Action not allowed action.request_reboot.title=System restart @@ -267,6 +271,8 @@ locale.tr=Türkisch manage_window.apps_table.row.actions.downgrade=Downgraden manage_window.apps_table.row.actions.downgrade.popup.body={} wirklich downgraden? manage_window.apps_table.row.actions.history=Verlauf +manage_window.apps_table.row.actions.ignore_updates=Ignore updates +manage_window.apps_table.row.actions.ignore_updates_reverse=Revert ignored updates manage_window.apps_table.row.actions.info=Information manage_window.apps_table.row.actions.install=Installieren manage_window.apps_table.row.actions.install.popup.body={} installieren? @@ -300,6 +306,8 @@ manage_window.settings.about=Über manage_window.status.downgrading=Downgraden manage_window.status.filtering=Filtern manage_window.status.history=Verlauf laden +manage_window.status.ignore_updates=Ignoring updates from {} +manage_window.status.ignore_updates_reverse=Reverting updates ignored from {} manage_window.status.info=Informationen laden manage_window.status.installed=Loading installed manage_window.status.installing=Installieren @@ -379,6 +387,7 @@ version.latest=Aktuellste Version version.outdated=veraltet version.unknown=unbekannt version.updated=geupdated +version.updates_ignored=Updates ignored view.components.file_chooser.placeholder=Auswählen warning=Warnung warning.update_available=There is a new {} version available ({}). Check out the news at {}. diff --git a/bauh/view/resources/locale/en b/bauh/view/resources/locale/en index 019eb1f0..358017f9 100644 --- a/bauh/view/resources/locale/en +++ b/bauh/view/resources/locale/en @@ -57,6 +57,10 @@ action.disk_trim=Optimizing disc ( TRIM ) action.failed=Action failed action.history.no_history.body=There is no available history for {} action.history.no_history.title=No history +action.ignore_updates.fail=It was not possible to ignore updates from {} +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.not_allowed=Action not allowed action.request_reboot.title=System restart @@ -267,6 +271,8 @@ locale.tr=turkish manage_window.apps_table.row.actions.downgrade.popup.body=Do you really want to downgrade {} ? manage_window.apps_table.row.actions.downgrade=Downgrade manage_window.apps_table.row.actions.history=History +manage_window.apps_table.row.actions.ignore_updates=Ignore updates +manage_window.apps_table.row.actions.ignore_updates_reverse=Revert ignored updates manage_window.apps_table.row.actions.info=Information manage_window.apps_table.row.actions.install.popup.body=Install {} on your device ? manage_window.apps_table.row.actions.install.popup.title=Installation @@ -300,6 +306,8 @@ manage_window.settings.about=About manage_window.status.downgrading=Downgrading manage_window.status.filtering=Filtering manage_window.status.history=Retrieving history +manage_window.status.ignore_updates=Ignoring updates from {} +manage_window.status.ignore_updates_reverse=Reverting updates ignored from {} manage_window.status.info=Retrieving information manage_window.status.installed=Loading installed manage_window.status.installing=Installing @@ -378,6 +386,7 @@ version.latest=latest version version.outdated=outdated version.unknown=not informed version.updated=updated +version.updates_ignored=Updates ignored version=version view.components.file_chooser.placeholder=Click here to select warning=warning diff --git a/bauh/view/resources/locale/es b/bauh/view/resources/locale/es index e6e3c361..8ea2bca2 100644 --- a/bauh/view/resources/locale/es +++ b/bauh/view/resources/locale/es @@ -57,6 +57,10 @@ action.disk_trim.error=Hubo un problema al optimizar el disco action.failed=Acción fallida action.history.no_history.body=There is no available history for {} action.history.no_history.title=No history +action.ignore_updates.fail=No fue posible ignorar las actualizaciones de {} +action.ignore_updates.success=Las actualizaciones de {} serán ignoradas de ahora en adelante +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.not_allowed=Acción no permitida action.request_reboot.title=Reinicio de sistema @@ -268,6 +272,8 @@ locale.tr=turco manage_window.apps_table.row.actions.downgrade=Revertir versión manage_window.apps_table.row.actions.downgrade.popup.body=¿Realmente quiere revertir la versión actual de {}? manage_window.apps_table.row.actions.history=Histórico +manage_window.apps_table.row.actions.ignore_updates=Ignorar actualizaciones +manage_window.apps_table.row.actions.ignore_updates_reverse=Revertir actualizaciones ignoradas manage_window.apps_table.row.actions.info=Información manage_window.apps_table.row.actions.install=Instalar manage_window.apps_table.row.actions.install.popup.body=¿Quiere instalar {} en el equipo? @@ -301,6 +307,8 @@ manage_window.settings.about=Acerca de manage_window.status.downgrading=Revirtiendo manage_window.status.filtering=Filtrando manage_window.status.history=Obteniendo el histórico +manage_window.status.ignore_updates=Ignorando las actualizaciones de {} +manage_window.status.ignore_updates_reverse=Revertir actualizaciones ignoradas de {} manage_window.status.info=Obteniendo información manage_window.status.installed=Cargando instalados manage_window.status.installing=Instalando @@ -380,6 +388,7 @@ version.latest=versión más reciente version.outdated=desactualizada version.unknown=versión no informada version.updated=actualizada +version.updates_ignored=Actualizaciónes ignoradas view.components.file_chooser.placeholder=Pulse aquí para seleccionar warning=aviso warning.update_available=Hay una nueva versión de {} disponible ({}). Vea las novedades en {}. diff --git a/bauh/view/resources/locale/it b/bauh/view/resources/locale/it index 557b00f1..4a8c5193 100644 --- a/bauh/view/resources/locale/it +++ b/bauh/view/resources/locale/it @@ -57,6 +57,10 @@ action.disk_trim.error=There was a problem while optimizing the disk action.failed=Azione non riuscita action.history.no_history.body=There is no available history for {} action.history.no_history.title=No history +action.ignore_updates.fail=It was not possible to ignore updates from {} +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.not_allowed=Action not allowed action.request_reboot.title=System restart @@ -269,6 +273,8 @@ locale.tr=turco manage_window.apps_table.row.actions.downgrade=Downgrade manage_window.apps_table.row.actions.downgrade.popup.body=Vuoi veramente fare il downgrade {} ? manage_window.apps_table.row.actions.history=Cronologia +manage_window.apps_table.row.actions.ignore_updates=Ignore updates +manage_window.apps_table.row.actions.ignore_updates_reverse=Revert ignored updates manage_window.apps_table.row.actions.info=Informazioni manage_window.apps_table.row.actions.install=Installa manage_window.apps_table.row.actions.install.popup.body=Installa {} nel tuo dispositivo ? @@ -302,6 +308,8 @@ manage_window.settings.about=Informazione su manage_window.status.downgrading=Downgrading manage_window.status.filtering=Filtraggio manage_window.status.history=Recupero della cronologia +manage_window.status.ignore_updates=Ignoring updates from {} +manage_window.status.ignore_updates_reverse=Reverting updates ignored from {} manage_window.status.info=Recupero di informazioni manage_window.status.installed=Loading installed manage_window.status.installing=Installazione @@ -382,6 +390,7 @@ version.latest=ultima versione version.outdated=obsoleta version.unknown=non informato version.updated=aggiornata +version.updates_ignored=Updates ignored view.components.file_chooser.placeholder=Fai clic qui per selezionare warning=Avviso warning.update_available=There is a new {} version available ({}). Check out the news at {}. diff --git a/bauh/view/resources/locale/pt b/bauh/view/resources/locale/pt index 18f4f2df..d7cb7275 100644 --- a/bauh/view/resources/locale/pt +++ b/bauh/view/resources/locale/pt @@ -57,6 +57,10 @@ action.disk_trim=Otimizando disco ( TRIM ) action.failed=Ação falhou action.history.no_history.body=Não existe histórico disponível para {} action.history.no_history.title=Sem histórico +action.ignore_updates.fail=Não foi possível ignorar as atualizações de {} +action.ignore_updates.success=As atualizações de {} serão ignoradas a partir de agora +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.not_allowed=Ação não permitida action.request_reboot.title=Reinicialização de sistema @@ -267,6 +271,8 @@ locale.tr=turco manage_window.apps_table.row.actions.downgrade.popup.body=Você realmente quer reverter a versão atual de {} ? manage_window.apps_table.row.actions.downgrade=Reverter versão manage_window.apps_table.row.actions.history=Histórico +manage_window.apps_table.row.actions.ignore_updates=Ignorar atualizações +manage_window.apps_table.row.actions.ignore_updates_reverse=Reverter atualizações ignoradas manage_window.apps_table.row.actions.info=Informação manage_window.apps_table.row.actions.install.popup.body=Instalar {} no seu dispositivo ? manage_window.apps_table.row.actions.install.popup.title=Instalação @@ -300,6 +306,8 @@ manage_window.settings.about=Sobre manage_window.status.downgrading=Revertendo manage_window.status.filtering=Filtrando manage_window.status.history=Obtendo histórico +manage_window.status.ignore_updates=Ignorando atualizações de {} +manage_window.status.ignore_updates_reverse=Revertendo atualizações ignoradas de {} manage_window.status.info=Obtendo informação manage_window.status.installed=Carregando instalados manage_window.status.installing=Instalando @@ -378,6 +386,7 @@ version.latest=versão mais recente version.outdated=desatualizada version.unknown=versão não informada version.updated=atualizada +version.updates_ignored=Atualizações ignoradas version=versão view.components.file_chooser.placeholder=Clique aqui para selecionar warning=aviso diff --git a/bauh/view/resources/locale/ru b/bauh/view/resources/locale/ru index 1fe98df4..5d214775 100644 --- a/bauh/view/resources/locale/ru +++ b/bauh/view/resources/locale/ru @@ -57,6 +57,10 @@ action.disk_trim.error=There was a problem while optimizing the disk action.failed=Действие не удалось action.history.no_history.body=There is no available history for {} action.history.no_history.title=No history +action.ignore_updates.fail=It was not possible to ignore updates from {} +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=Нажмите здесь, чтобы посмотреть информацию об этом приложении action.not_allowed=Действие не допускается action.request_reboot.title=System restart @@ -267,6 +271,8 @@ locale.tr=Турецкий manage_window.apps_table.row.actions.downgrade=Откат версии manage_window.apps_table.row.actions.downgrade.popup.body=Вы действительно хотите откатить версию {}? manage_window.apps_table.row.actions.history=История версий +manage_window.apps_table.row.actions.ignore_updates=Ignore updates +manage_window.apps_table.row.actions.ignore_updates_reverse=Revert ignored updates manage_window.apps_table.row.actions.info=Информация manage_window.apps_table.row.actions.install=Установка manage_window.apps_table.row.actions.install.popup.body=Установить {} на Ваше устройство? @@ -300,6 +306,8 @@ manage_window.settings.about=О программе manage_window.status.downgrading=Откатить manage_window.status.filtering=Фильтрация manage_window.status.history=Извлечение истории +manage_window.status.ignore_updates=Ignoring updates from {} +manage_window.status.ignore_updates_reverse=Reverting updates ignored from {} manage_window.status.info=Извлечение информации manage_window.status.installed=Загрузка установленных manage_window.status.installing=Установить @@ -379,6 +387,7 @@ version.latest=Последняя версия version.outdated=Устаревшая version.unknown=не сообщать version.updated=Обновленная +version.updates_ignored=Updates ignored view.components.file_chooser.placeholder=Нажмите здесь, чтобы выбрать warning=Предупреждение warning.update_available=There is a new {} version available ({}). Check out the news at {}. diff --git a/bauh/view/resources/locale/tr b/bauh/view/resources/locale/tr index c9c4cf3a..a2cfdf56 100644 --- a/bauh/view/resources/locale/tr +++ b/bauh/view/resources/locale/tr @@ -57,6 +57,10 @@ action.disk_trim=Diski optimize etme ( TRIM ) action.failed=Eylem başarısız action.history.no_history.body={} için kullanılabilir geçmiş yok action.history.no_history.title=Geçmiş yok +action.ignore_updates.fail=It was not possible to ignore updates from {} +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.not_allowed=Eyleme izin verilmiyor action.request_reboot.title=Sistemi yeniden başlat @@ -267,6 +271,8 @@ locale.tr=türkçe manage_window.apps_table.row.actions.downgrade.popup.body=Gerçekten sürüm düşürmek istiyor musunuz {} ? manage_window.apps_table.row.actions.downgrade=Sürüm düşür manage_window.apps_table.row.actions.history=Tarihçe +manage_window.apps_table.row.actions.ignore_updates=Ignore updates +manage_window.apps_table.row.actions.ignore_updates_reverse=Revert ignored updates manage_window.apps_table.row.actions.info=Bilgilendirme manage_window.apps_table.row.actions.install.popup.body={} Cihazınıza yüklensin mi ? manage_window.apps_table.row.actions.install.popup.title=Kurulum @@ -300,6 +306,8 @@ manage_window.settings.about=Hakkında manage_window.status.downgrading=Düşürülüyor manage_window.status.filtering=Filtreleniyor manage_window.status.history=Geçmiş bilgisi alınıyor +manage_window.status.ignore_updates=Ignoring updates from {} +manage_window.status.ignore_updates_reverse=Reverting updates ignored from {} manage_window.status.info=Bilgilendirme alınıyor manage_window.status.installed=Yükleme tamamlandı manage_window.status.installing=Yükleniyor @@ -378,6 +386,7 @@ version.latest=son sürüm version.outdated=güncel değil version.unknown=bilgilendirilmemiş version.updated=güncellendi +version.updates_ignored=Updates ignored version=sürüm view.components.file_chooser.placeholder=Seçmek için buraya tıkla warning=uyarı diff --git a/pictures/releases/0.9.4/ignore_updates.png b/pictures/releases/0.9.4/ignore_updates.png new file mode 100644 index 00000000..96be8a50 Binary files /dev/null and b/pictures/releases/0.9.4/ignore_updates.png differ diff --git a/pictures/releases/0.9.4/revert_ignored_updates.png b/pictures/releases/0.9.4/revert_ignored_updates.png new file mode 100644 index 00000000..f5e78123 Binary files /dev/null and b/pictures/releases/0.9.4/revert_ignored_updates.png differ diff --git a/pictures/releases/0.9.4/version_ignored_updates.png b/pictures/releases/0.9.4/version_ignored_updates.png new file mode 100644 index 00000000..6bacb4e7 Binary files /dev/null and b/pictures/releases/0.9.4/version_ignored_updates.png differ