mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-06 22:54:16 +02:00
Locale support for en, pt and es
This commit is contained in:
@@ -16,5 +16,5 @@ Type in the terminal: sudo python3 sandbox_installer.py. If you want to uninstal
|
||||
|
||||
### Roadmap
|
||||
- Test installer for Ubuntu
|
||||
- Locales
|
||||
- Show update commands
|
||||
- Search and install applications.
|
||||
10
app.py
10
app.py
@@ -8,18 +8,24 @@ from PyQt5.QtWidgets import QApplication, QWidget
|
||||
from core.controller import FlatpakController
|
||||
from core.model import FlatpakManager
|
||||
from view.qt.systray import TrayIcon
|
||||
from core import __version__
|
||||
from core import __version__, resource, util
|
||||
|
||||
parser = argparse.ArgumentParser(prog='fpakman', description="GUI for Flatpak applications management")
|
||||
parser.add_argument('-v', '--version', action='version', version='%(prog)s {}'.format(__version__))
|
||||
args = parser.parse_args()
|
||||
|
||||
locale_keys = util.get_locale_keys()
|
||||
|
||||
app = QApplication(sys.argv)
|
||||
manager = FlatpakManager()
|
||||
manager.load_database_async()
|
||||
controller = FlatpakController(manager)
|
||||
hidden_widget = QWidget()
|
||||
trayIcon = TrayIcon(parent=hidden_widget, controller=controller, check_interval=int(os.getenv('FPAKMAN_CHECK_INTERVAL', 30)))
|
||||
|
||||
trayIcon = TrayIcon(locale_keys=locale_keys,
|
||||
parent=hidden_widget,
|
||||
controller=controller,
|
||||
check_interval=int(os.getenv('FPAKMAN_CHECK_INTERVAL', 30)))
|
||||
trayIcon.show()
|
||||
|
||||
sys.exit(app.exec_())
|
||||
|
||||
@@ -2,5 +2,9 @@ import os
|
||||
|
||||
|
||||
def get_path(resource_path):
|
||||
cur_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
return cur_dir + '/resources/' + resource_path
|
||||
app_dir = get_app_dir()
|
||||
return app_dir + '/resources/' + resource_path
|
||||
|
||||
|
||||
def get_app_dir():
|
||||
return os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
35
core/util.py
Normal file
35
core/util.py
Normal file
@@ -0,0 +1,35 @@
|
||||
import locale
|
||||
|
||||
from core import resource
|
||||
import glob
|
||||
|
||||
|
||||
def get_locale_keys():
|
||||
|
||||
current_locale = locale.getdefaultlocale()
|
||||
locale_path = None
|
||||
if current_locale:
|
||||
current_locale = current_locale[0]
|
||||
|
||||
locale_dir = '{}/resources/locale'.format(resource.get_app_dir())
|
||||
|
||||
for locale_file in glob.glob(locale_dir + '/*'):
|
||||
name = locale_file.split('/')[-1]
|
||||
|
||||
if current_locale == name or current_locale.startswith(name + '_'):
|
||||
locale_path = locale_file
|
||||
break
|
||||
|
||||
if not locale_path:
|
||||
locale_path = '{}/resources/locale/en'.format(resource.get_app_dir())
|
||||
|
||||
with open(locale_path, 'r') as f:
|
||||
locale_keys = f.readlines()
|
||||
|
||||
locale_obj = {}
|
||||
for line in locale_keys:
|
||||
if line:
|
||||
keyval = line.strip().split('=')
|
||||
locale_obj[keyval[0].strip()] = keyval[1].strip()
|
||||
|
||||
return locale_obj
|
||||
17
resources/locale/en
Normal file
17
resources/locale/en
Normal file
@@ -0,0 +1,17 @@
|
||||
manage_window.columns.name=Name
|
||||
manage_window.columns.version=Version
|
||||
manage_window.columns.latest_version=Latest Version
|
||||
manage_window.columns.branch=Branch
|
||||
manage_window.columns.arch=Arch
|
||||
manage_window.columns.ref=Ref
|
||||
manage_window.columns.origin=Origin
|
||||
manage_window.columns.update=Update ?
|
||||
manage_window.checkbox.only_apps=Apps
|
||||
manage_window.label.updates=Updates
|
||||
manage_window.status.refreshing=Refreshing
|
||||
manage_window.status.updating=Updating
|
||||
popup.flatpak_not_installed.title=Error
|
||||
popup.flatpak_not_installed.msg=flatpak seems not to be installed. Exiting
|
||||
tray.action.manage=Manage applications
|
||||
tray.action.exit=Exit
|
||||
notification.new_updates=Updates found
|
||||
17
resources/locale/es
Normal file
17
resources/locale/es
Normal file
@@ -0,0 +1,17 @@
|
||||
manage_window.columns.name=Nombre
|
||||
manage_window.columns.version=Versión
|
||||
manage_window.columns.latest_version=Ultima Versión
|
||||
manage_window.columns.branch=Branch
|
||||
manage_window.columns.arch=Arch
|
||||
manage_window.columns.ref=Ref
|
||||
manage_window.columns.origin=Origen
|
||||
manage_window.columns.update=¿Actualizar?
|
||||
manage_window.checkbox.only_apps=Apps
|
||||
manage_window.label.updates=Actualizaciones
|
||||
manage_window.status.refreshing=Recargando
|
||||
manage_window.status.updating=Actualizando
|
||||
popup.flatpak_not_installed.title=Error
|
||||
popup.flatpak_not_installed.msg=flatpak no parece estar instalado. Saliendo
|
||||
tray.action.manage=Administrar aplicativos
|
||||
tray.action.exit=Salir
|
||||
notification.new_updates=Actualizaciones encontradas
|
||||
17
resources/locale/pt
Normal file
17
resources/locale/pt
Normal file
@@ -0,0 +1,17 @@
|
||||
manage_window.columns.name=Nome
|
||||
manage_window.columns.version=Versão
|
||||
manage_window.columns.latest_version=Última Versão
|
||||
manage_window.columns.branch=Branch
|
||||
manage_window.columns.arch=Arch
|
||||
manage_window.columns.ref=Ref
|
||||
manage_window.columns.origin=Origem
|
||||
manage_window.columns.update=Atualizar ?
|
||||
manage_window.checkbox.only_apps=Apps
|
||||
manage_window.label.updates=Actualizaciones
|
||||
manage_window.status.refreshing=Recarregando
|
||||
manage_window.status.updating=Atualizando
|
||||
popup.flatpak_not_installed.title=Erro
|
||||
popup.flatpak_not_installed.msg=flatpak não parece estar instalado. Saindo
|
||||
tray.action.manage=Gerenciar aplicativos
|
||||
tray.action.exit=Sair
|
||||
notification.new_updates=Atualizações encontradas
|
||||
@@ -36,7 +36,8 @@ class UpdateCheck(QThread):
|
||||
|
||||
class TrayIcon(QSystemTrayIcon):
|
||||
|
||||
def __init__(self, controller: FlatpakController, check_interval: int = 60, parent=None):
|
||||
def __init__(self, locale_keys: dict, controller: FlatpakController, check_interval: int = 60, parent=None):
|
||||
self.locale_keys = locale_keys
|
||||
self.controller = controller
|
||||
|
||||
self.icon_default = QIcon(resource.get_path('img/flathub_45.svg'))
|
||||
@@ -44,13 +45,13 @@ class TrayIcon(QSystemTrayIcon):
|
||||
QSystemTrayIcon.__init__(self, self.icon_default, parent)
|
||||
|
||||
self.menu = QMenu(parent)
|
||||
self.action_manage = self.menu.addAction("Manage applications")
|
||||
self.action_manage = self.menu.addAction(self.locale_keys['tray.action.manage'])
|
||||
self.action_manage.triggered.connect(self.show_manage_window)
|
||||
self.action_exit = self.menu.addAction("Exit")
|
||||
self.action_exit = self.menu.addAction(self.locale_keys['tray.action.exit'])
|
||||
self.action_exit.triggered.connect(lambda: QCoreApplication.exit())
|
||||
self.setContextMenu(self.menu)
|
||||
|
||||
self.manage_window = ManageWindow(controller=controller, tray_icon=self)
|
||||
self.manage_window = ManageWindow(locale_keys=self.locale_keys, controller=controller, tray_icon=self)
|
||||
self.check_thread = UpdateCheck(check_interval=check_interval, controller=self.controller)
|
||||
self.check_thread.signal.connect(self.notify_updates)
|
||||
self.check_thread.start()
|
||||
@@ -60,7 +61,7 @@ class TrayIcon(QSystemTrayIcon):
|
||||
if self.icon().cacheKey() != self.icon_update.cacheKey():
|
||||
self.setIcon(self.icon_update)
|
||||
|
||||
msg = 'Updates found: {}'.format(updates)
|
||||
msg = '{}: {}'.format(self.locale_keys['notification.new_updates'], updates)
|
||||
self.setToolTip(msg)
|
||||
|
||||
if bool(os.getenv('FPAKMAN_UPDATE_NOTIFICATION', 1)):
|
||||
|
||||
@@ -38,11 +38,19 @@ class UpdateToggleButton(QToolButton):
|
||||
|
||||
class ManageWindow(QWidget):
|
||||
|
||||
__COLUMNS__ = ['Name', 'Version', 'Latest Version', 'Branch', 'Arch', 'Ref', 'Origin', 'Update ?']
|
||||
__BASE_HEIGHT__ = 400
|
||||
|
||||
def __init__(self, controller: FlatpakController, tray_icon = None):
|
||||
def __init__(self, locale_keys: dict, controller: FlatpakController, tray_icon = None):
|
||||
super(ManageWindow, self).__init__()
|
||||
self.locale_keys = locale_keys
|
||||
self.column_names = [locale_keys['manage_window.columns.name'],
|
||||
locale_keys['manage_window.columns.version'],
|
||||
locale_keys['manage_window.columns.latest_version'],
|
||||
locale_keys['manage_window.columns.branch'],
|
||||
locale_keys['manage_window.columns.arch'],
|
||||
locale_keys['manage_window.columns.ref'],
|
||||
locale_keys['manage_window.columns.origin'],
|
||||
locale_keys['manage_window.columns.update']]
|
||||
self.controller = controller
|
||||
self.icon_cache = {}
|
||||
self.tray_icon = tray_icon
|
||||
@@ -64,7 +72,7 @@ class ManageWindow(QWidget):
|
||||
self.setLayout(self.layout)
|
||||
|
||||
self.checkbox_only_apps = QCheckBox()
|
||||
self.checkbox_only_apps.setText('Only apps')
|
||||
self.checkbox_only_apps.setText(self.locale_keys['manage_window.checkbox.only_apps'])
|
||||
self.checkbox_only_apps.setChecked(True)
|
||||
self.checkbox_only_apps.stateChanged.connect(self.filter_only_apps)
|
||||
|
||||
@@ -97,12 +105,12 @@ class ManageWindow(QWidget):
|
||||
self.layout.addWidget(toolbar)
|
||||
|
||||
self.table_apps = QTableWidget()
|
||||
self.table_apps.setColumnCount(len(ManageWindow.__COLUMNS__))
|
||||
self.table_apps.setColumnCount(len(self.column_names))
|
||||
self.table_apps.setFocusPolicy(Qt.NoFocus)
|
||||
self.table_apps.setShowGrid(False)
|
||||
self.table_apps.verticalHeader().setVisible(False)
|
||||
self.table_apps.setSelectionBehavior(QTableView.SelectRows)
|
||||
self.table_apps.setHorizontalHeaderLabels(ManageWindow.__COLUMNS__)
|
||||
self.table_apps.setHorizontalHeaderLabels(self.column_names)
|
||||
self.table_apps.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||
|
||||
self._change_table_headers_policy()
|
||||
@@ -130,7 +138,7 @@ class ManageWindow(QWidget):
|
||||
|
||||
def _change_table_headers_policy(self, policy: QHeaderView = QHeaderView.ResizeToContents):
|
||||
header_horizontal = self.table_apps.horizontalHeader()
|
||||
for i in range(0, len(ManageWindow.__COLUMNS__)):
|
||||
for i in range(0, len(self.column_names)):
|
||||
header_horizontal.setSectionResizeMode(i, policy)
|
||||
|
||||
def changeEvent(self, e: QEvent):
|
||||
@@ -162,8 +170,8 @@ class ManageWindow(QWidget):
|
||||
if not self.controller.check_installed():
|
||||
error_msg = QMessageBox()
|
||||
error_msg.setIcon(QMessageBox.Critical)
|
||||
error_msg.setText('flatpak seems not to be installed. Exiting...')
|
||||
error_msg.setWindowTitle('Error')
|
||||
error_msg.setWindowTitle(self.locale_keys['popup.flatpak_not_installed.title'])
|
||||
error_msg.setText(self.locale_keys['popup.flatpak_not_installed.msg'] + '...')
|
||||
error_msg.setWindowIcon(self.icon_flathub)
|
||||
error_msg.exec_()
|
||||
exit(1)
|
||||
@@ -197,7 +205,7 @@ class ManageWindow(QWidget):
|
||||
|
||||
if self._acquire_lock():
|
||||
self._check_flatpak_installed()
|
||||
self._begin_action('Refreshing...')
|
||||
self._begin_action(self.locale_keys['manage_window.status.refreshing'] + '...')
|
||||
self.thread_refresh.start()
|
||||
|
||||
def _finish_refresh(self):
|
||||
@@ -225,7 +233,7 @@ class ManageWindow(QWidget):
|
||||
updates = len([app for app in self.apps if app['model']['update']])
|
||||
|
||||
if updates > 0:
|
||||
self.label_updates.setText('Updates: {}'.format(updates))
|
||||
self.label_updates.setText('{}: {}'.format(self.locale_keys['manage_window.label.updates'], updates))
|
||||
else:
|
||||
self.label_updates.setText('')
|
||||
|
||||
@@ -318,7 +326,7 @@ class ManageWindow(QWidget):
|
||||
self.resize_and_center()
|
||||
|
||||
def resize_and_center(self):
|
||||
new_width = reduce(operator.add, [self.table_apps.columnWidth(i) for i in range(len(ManageWindow.__COLUMNS__))]) * 1.05
|
||||
new_width = reduce(operator.add, [self.table_apps.columnWidth(i) for i in range(len(self.column_names))]) * 1.05
|
||||
self.resize(new_width, self.height())
|
||||
self.centralize()
|
||||
|
||||
@@ -329,7 +337,7 @@ class ManageWindow(QWidget):
|
||||
to_update = [pak['model']['ref'] for pak in self.apps if pak['visible'] and pak['update_checked']]
|
||||
|
||||
if to_update:
|
||||
self._begin_action('Updating...')
|
||||
self._begin_action(self.locale_keys['manage_window.status.updating'] + '...')
|
||||
self.thread_update.refs_to_update = to_update
|
||||
self.thread_update.start()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user