[feature] new custom action to open the system backup tool

This commit is contained in:
Vinicius Moreira
2020-06-04 12:16:53 -03:00
parent 9dcfa89e24
commit 44d70f5efd
12 changed files with 59 additions and 1 deletions

View File

@@ -5,6 +5,11 @@ 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/). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [0.9.5] 2020 ## [0.9.5] 2020
### Features
- new custom action (**+**) to open the system backups (snapshots). It is just a shortcut to Timeshift.
<p align="center">
<img src="https://raw.githubusercontent.com/vinifmor/bauh/staging/pictures/releases/0.9.5/backup_action.png">
</p>
### Improvements ### Improvements
- Arch - Arch

View File

@@ -2,6 +2,7 @@ import re
import re import re
import time import time
import traceback import traceback
from subprocess import Popen, PIPE, STDOUT
from threading import Thread from threading import Thread
from typing import List, Set, Type, Tuple, Dict from typing import List, Set, Type, Tuple, Dict
@@ -15,6 +16,7 @@ from bauh.api.abstract.view import ViewComponent, TabGroupComponent
from bauh.api.exception import NoInternetException from bauh.api.exception import NoInternetException
from bauh.commons import internet from bauh.commons import internet
from bauh.commons.html import bold from bauh.commons.html import bold
from bauh.commons.system import run_cmd
from bauh.view.core.settings import GenericSettingsManager from bauh.view.core.settings import GenericSettingsManager
from bauh.view.core.update import check_for_update from bauh.view.core.update import check_for_update
from bauh.view.util import resource from bauh.view.util import resource
@@ -57,12 +59,30 @@ class GenericSoftwareManager(SoftwareManager):
icon_path=resource.get_path('img/logo.svg'), icon_path=resource.get_path('img/logo.svg'),
requires_root=False, requires_root=False,
refresh=False)] refresh=False)]
self.dynamic_extra_actions = {CustomSoftwareAction(i18_label_key='action.backups',
i18n_status_key='action.backups.status',
manager_method='launch_timeshift',
manager=self,
icon_path='timeshift',
requires_root=False,
refresh=False): self._is_timeshift_launcher_available}
def _is_timeshift_launcher_available(self) -> bool:
return bool(run_cmd('which timeshift-launcher', print_error=False))
def reset_cache(self): def reset_cache(self):
if self._available_cache is not None: if self._available_cache is not None:
self._available_cache = {} self._available_cache = {}
self.working_managers.clear() self.working_managers.clear()
def launch_timeshift(self, root_password: str, watcher: ProcessWatcher):
try:
Popen(['timeshift-launcher'], stderr=STDOUT)
return True
except:
traceback.print_exc()
return False
def _sort(self, apps: List[SoftwarePackage], word: str) -> List[SoftwarePackage]: def _sort(self, apps: List[SoftwarePackage], word: str) -> List[SoftwarePackage]:
exact_name_matches, contains_name_matches, others = [], [], [] exact_name_matches, contains_name_matches, others = [], [], []
@@ -526,7 +546,12 @@ class GenericSoftwareManager(SoftwareManager):
if man_actions: if man_actions:
actions.extend(man_actions) actions.extend(man_actions)
for action, available in self.dynamic_extra_actions.items():
if available():
actions.append(action)
actions.extend(self.extra_actions) actions.extend(self.extra_actions)
return actions return actions
def _fill_sizes(self, man: SoftwareManager, pkgs: List[SoftwarePackage]): def _fill_sizes(self, man: SoftwareManager, pkgs: List[SoftwarePackage]):

View File

@@ -1252,7 +1252,19 @@ class ManageWindow(QWidget):
def _map_custom_action(self, action: CustomSoftwareAction) -> QAction: def _map_custom_action(self, action: CustomSoftwareAction) -> QAction:
custom_action = QAction(self.i18n[action.i18_label_key]) custom_action = QAction(self.i18n[action.i18_label_key])
custom_action.setIcon(QIcon(action.icon_path))
if action.icon_path:
try:
if action.icon_path.startswith('/'):
icon = QIcon(action.icon_path)
else:
icon = QIcon.fromTheme(action.icon_path)
custom_action.setIcon(icon)
except:
pass
custom_action.triggered.connect(lambda: self.execute_custom_action(None, action)) custom_action.triggered.connect(lambda: self.execute_custom_action(None, action))
return custom_action return custom_action

View File

@@ -51,6 +51,8 @@ action.backup.invalid_mode=Invalid backup mode
action.backup.msg=Do you want to generate a system copy before proceeding ? action.backup.msg=Do you want to generate a system copy before proceeding ?
action.backup.substatus.create=Generating a new system backup action.backup.substatus.create=Generating a new system backup
action.backup.substatus.delete=Removing old system backups action.backup.substatus.delete=Removing old system backups
action.backups=Backups
action.backups.status=Opening backups tool
action.cancelled=lusuari ha cancel·lat loperació action.cancelled=lusuari ha cancel·lat loperació
action.disk_trim=Optimizing disc ( TRIM ) action.disk_trim=Optimizing disc ( TRIM )
action.disk_trim.error=There was a problem while optimizing the disk action.disk_trim.error=There was a problem while optimizing the disk

View File

@@ -51,6 +51,8 @@ action.backup.invalid_mode=Invalid backup mode
action.backup.msg=Do you want to generate a system copy before proceeding ? action.backup.msg=Do you want to generate a system copy before proceeding ?
action.backup.substatus.create=Generating a new system backup action.backup.substatus.create=Generating a new system backup
action.backup.substatus.delete=Removing old system backups action.backup.substatus.delete=Removing old system backups
action.backups=Backups
action.backups.status=Opening backups tool
action.cancelled=Aktion vom Nutzer abgebrochen action.cancelled=Aktion vom Nutzer abgebrochen
action.disk_trim=Optimizing disc ( TRIM ) action.disk_trim=Optimizing disc ( TRIM )
action.disk_trim.error=There was a problem while optimizing the disk action.disk_trim.error=There was a problem while optimizing the disk

View File

@@ -51,6 +51,8 @@ action.backup.invalid_mode=Invalid backup mode
action.backup.msg=Do you want to generate a system copy before proceeding ? action.backup.msg=Do you want to generate a system copy before proceeding ?
action.backup.substatus.create=Generating a new system backup action.backup.substatus.create=Generating a new system backup
action.backup.substatus.delete=Removing old system backups action.backup.substatus.delete=Removing old system backups
action.backups=Backups
action.backups.status=Opening backups tool
action.cancelled=operation cancelled by the user action.cancelled=operation cancelled by the user
action.disk_trim.error=There was a problem while optimizing the disk action.disk_trim.error=There was a problem while optimizing the disk
action.disk_trim=Optimizing disc ( TRIM ) action.disk_trim=Optimizing disc ( TRIM )

View File

@@ -51,6 +51,8 @@ action.backup.invalid_mode=Modo de copia de seguridad inválido
action.backup.msg=¿Desea generar una copia de seguridad del sistema antes de continuar? action.backup.msg=¿Desea generar una copia de seguridad del sistema antes de continuar?
action.backup.substatus.create=Generando una nueva copia de seguridad action.backup.substatus.create=Generando una nueva copia de seguridad
action.backup.substatus.delete=Eliminando copias de seguridad antiguas action.backup.substatus.delete=Eliminando copias de seguridad antiguas
action.backups=Copias de seguridad
action.backups.status=Abriendo herramienta de copias de seguridad
action.cancelled=operación cancelada por el usuario action.cancelled=operación cancelada por el usuario
action.disk_trim=Optimizando el disco ( TRIM ) action.disk_trim=Optimizando el disco ( TRIM )
action.disk_trim.error=Hubo un problema al optimizar el disco action.disk_trim.error=Hubo un problema al optimizar el disco

View File

@@ -51,6 +51,8 @@ action.backup.invalid_mode=Invalid backup mode
action.backup.msg=Do you want to generate a system copy before proceeding ? action.backup.msg=Do you want to generate a system copy before proceeding ?
action.backup.substatus.create=Generating a new system backup action.backup.substatus.create=Generating a new system backup
action.backup.substatus.delete=Removing old system backups action.backup.substatus.delete=Removing old system backups
action.backups=Backups
action.backups.status=Opening backups tool
action.cancelled=operazione annullata dall'utente action.cancelled=operazione annullata dall'utente
action.disk_trim=Optimizing disc ( TRIM ) action.disk_trim=Optimizing disc ( TRIM )
action.disk_trim.error=There was a problem while optimizing the disk action.disk_trim.error=There was a problem while optimizing the disk

View File

@@ -51,6 +51,8 @@ action.backup.invalid_mode=Modo de cópia de segurança inválido
action.backup.msg=Você deseja gerar uma cópia de segurança do sistema antes de proceder ? action.backup.msg=Você deseja gerar uma cópia de segurança do sistema antes de proceder ?
action.backup.substatus.create=Gerando uma nova cópia de segurança action.backup.substatus.create=Gerando uma nova cópia de segurança
action.backup.substatus.delete=Removendo cópias de segurança antigas action.backup.substatus.delete=Removendo cópias de segurança antigas
action.backups=Cópias de segurança
action.backups.status=Abrindo ferramenta de cópias de segurança
action.cancelled=operação cancelada pelo usuário action.cancelled=operação cancelada pelo usuário
action.disk_trim.error=Ocorreu um problema ao otimizar o disco action.disk_trim.error=Ocorreu um problema ao otimizar o disco
action.disk_trim=Otimizando disco ( TRIM ) action.disk_trim=Otimizando disco ( TRIM )

View File

@@ -51,6 +51,8 @@ action.backup.invalid_mode=Invalid backup mode
action.backup.msg=Do you want to generate a system copy before proceeding ? action.backup.msg=Do you want to generate a system copy before proceeding ?
action.backup.substatus.create=Generating a new system backup action.backup.substatus.create=Generating a new system backup
action.backup.substatus.delete=Removing old system backups action.backup.substatus.delete=Removing old system backups
action.backups=Backups
action.backups.status=Opening backups tool
action.cancelled=Операция отменена пользователем action.cancelled=Операция отменена пользователем
action.disk_trim=Optimizing disc ( TRIM ) action.disk_trim=Optimizing disc ( TRIM )
action.disk_trim.error=There was a problem while optimizing the disk action.disk_trim.error=There was a problem while optimizing the disk

View File

@@ -51,6 +51,8 @@ action.backup.invalid_mode=Geçersiz yedekleme modu
action.backup.msg=Devam etmeden önce bir sistem kopyası oluşturmak istiyor musunuz? action.backup.msg=Devam etmeden önce bir sistem kopyası oluşturmak istiyor musunuz?
action.backup.substatus.create=Yeni bir sistem yedeklemesi oluştur action.backup.substatus.create=Yeni bir sistem yedeklemesi oluştur
action.backup.substatus.delete=Eski sistem yedeklemelerini kaldır action.backup.substatus.delete=Eski sistem yedeklemelerini kaldır
action.backups=Backups
action.backups.status=Opening backups tool
action.cancelled=işlem kullanıcı tarafından iptal edildi action.cancelled=işlem kullanıcı tarafından iptal edildi
action.disk_trim.error=Diski optimize ederken bir sorun oluştu action.disk_trim.error=Diski optimize ederken bir sorun oluştu
action.disk_trim=Diski optimize etme ( TRIM ) action.disk_trim=Diski optimize etme ( TRIM )

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB