mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-06 21:44:16 +02:00
[ui][settings] supported types working
This commit is contained in:
@@ -12,7 +12,7 @@ class ApplicationContext:
|
||||
|
||||
def __init__(self, disk_cache: bool, download_icons: bool, http_client: HttpClient, app_root_dir: str, i18n: I18n,
|
||||
cache_factory: MemoryCacheFactory, disk_loader_factory: DiskCacheLoaderFactory,
|
||||
logger: logging.Logger, file_downloader: FileDownloader, distro: str):
|
||||
logger: logging.Logger, file_downloader: FileDownloader, distro: str, app_name: str):
|
||||
"""
|
||||
:param disk_cache: if package data should be cached to disk
|
||||
:param download_icons: if packages icons should be downloaded
|
||||
@@ -24,6 +24,7 @@ class ApplicationContext:
|
||||
:param logger: a logger instance
|
||||
:param file_downloader
|
||||
:param distro
|
||||
:param app_name
|
||||
"""
|
||||
self.disk_cache = disk_cache
|
||||
self.download_icons = download_icons
|
||||
@@ -38,6 +39,7 @@ class ApplicationContext:
|
||||
self.distro = distro
|
||||
self.default_categories = ('AudioVideo', 'Audio', 'Video', 'Development', 'Education', 'Game',
|
||||
'Graphics', 'Network', 'Office', 'Science', 'Settings', 'System', 'Utility')
|
||||
self.app_name = app_name
|
||||
|
||||
def is_system_x86_64(self):
|
||||
return self.arch_x86_64
|
||||
|
||||
@@ -54,7 +54,8 @@ def main():
|
||||
logger=logger,
|
||||
distro=util.get_distro(),
|
||||
file_downloader=AdaptableFileDownloader(logger, bool(local_config['download']['multithreaded']),
|
||||
i18n, http_client))
|
||||
i18n, http_client),
|
||||
app_name=__app_name__)
|
||||
|
||||
managers = gems.load_managers(context=context, locale=i18n_key, config=local_config, default_locale=DEFAULT_I18N_KEY)
|
||||
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
from bauh.api.constants import CONFIG_PATH
|
||||
|
||||
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
LOCAL_PATH = '{}/.local/share/bauh/appimage'.format(Path.home())
|
||||
INSTALLATION_PATH = LOCAL_PATH + '/installed/'
|
||||
SUGGESTIONS_FILE = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/appimage/suggestions.txt'
|
||||
SUGGESTIONS_FILE = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/appimage/suggestions.txt'
|
||||
CONFIG_FILE = '{}/appimage.yml'.format(CONFIG_PATH)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from bauh.api.constants import CONFIG_PATH
|
||||
from bauh.commons.config import read_config as read
|
||||
from bauh.gems.appimage import CONFIG_FILE
|
||||
|
||||
|
||||
def read_config(update_file: bool = False) -> dict:
|
||||
@@ -9,4 +9,4 @@ def read_config(update_file: bool = False) -> dict:
|
||||
'enabled': True
|
||||
}
|
||||
}
|
||||
return read('{}/appimage.yml'.format(CONFIG_PATH), default, update_file=update_file)
|
||||
return read(CONFIG_FILE, default, update_file=update_file)
|
||||
|
||||
@@ -9,7 +9,7 @@ import traceback
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from threading import Lock, Thread
|
||||
from typing import Set, Type, List
|
||||
from typing import Set, Type, List, Tuple
|
||||
|
||||
from colorama import Fore
|
||||
|
||||
@@ -21,9 +21,10 @@ from bauh.api.abstract.model import SoftwarePackage, PackageHistory, PackageUpda
|
||||
SuggestionPriority
|
||||
from bauh.api.abstract.view import MessageType, ViewComponent, FormComponent, InputOption, SingleSelectComponent, \
|
||||
SelectViewType, TextInputComponent, PanelComponent
|
||||
from bauh.commons.config import save_config
|
||||
from bauh.commons.html import bold
|
||||
from bauh.commons.system import SystemProcess, new_subprocess, ProcessHandler, run_cmd, SimpleProcess
|
||||
from bauh.gems.appimage import query, INSTALLATION_PATH, LOCAL_PATH, SUGGESTIONS_FILE
|
||||
from bauh.gems.appimage import query, INSTALLATION_PATH, LOCAL_PATH, SUGGESTIONS_FILE, CONFIG_FILE
|
||||
from bauh.gems.appimage.config import read_config
|
||||
from bauh.gems.appimage.model import AppImage
|
||||
from bauh.gems.appimage.worker import DatabaseUpdater
|
||||
@@ -506,12 +507,30 @@ class AppImageManager(SoftwareManager):
|
||||
InputOption(label=self.i18n['no'].capitalize(), value=False)]
|
||||
|
||||
updater_opts = [
|
||||
SingleSelectComponent(label='Enabled',
|
||||
SingleSelectComponent(label=self.i18n['appimage.config.db_updates.activated'],
|
||||
options=enabled_opts,
|
||||
default_option=[o for o in enabled_opts if o.value == config['db_updater']['enabled']][0],
|
||||
max_per_line=len(enabled_opts),
|
||||
type_=SelectViewType.RADIO),
|
||||
TextInputComponent(label='Interval', value=str(config['db_updater']['interval']), tooltip="Update interval in SECONDS", only_int=True)
|
||||
type_=SelectViewType.RADIO,
|
||||
id_='up_enabled'),
|
||||
TextInputComponent(label=self.i18n['interval'],
|
||||
value=str(config['db_updater']['interval']),
|
||||
tooltip=self.i18n['appimage.config.db_updates.interval.tip'],
|
||||
only_int=True,
|
||||
id_='up_int')
|
||||
]
|
||||
|
||||
return PanelComponent([FormComponent(updater_opts, 'Database updates')])
|
||||
return PanelComponent([FormComponent(updater_opts, self.i18n['appimage.config.db_updates'])])
|
||||
|
||||
def save_settings(self, component: PanelComponent) -> Tuple[bool, List[str]]:
|
||||
config = read_config()
|
||||
|
||||
panel = component.components[0]
|
||||
config['db_updater']['enabled'] = panel.get_component('up_enabled').get_selected()
|
||||
config['db_updater']['interval'] = panel.get_component('up_int').get_int_value()
|
||||
|
||||
try:
|
||||
save_config(config, CONFIG_FILE)
|
||||
return True, None
|
||||
except:
|
||||
return False, [traceback.format_exc()]
|
||||
|
||||
@@ -17,3 +17,6 @@ appimage.downgrade.uninstall_current_version=No s’ha pogut desinstal·lar la v
|
||||
appimage.downgrade.install_version=No s’ha pogut instal·lar la versió {} ({})
|
||||
appimage.install.download.error=No s’ha pogut baixar el fitxer {}. El servidor del fitxer pot estar inactiu.
|
||||
appimage.install.appimagelauncher.error = {appimgl} no permet la instal·lació de {app}. Desinstal·leu {appimgl}, reinicieu el sistema i torneu a provar d’instal·lar {app}.
|
||||
appimage.config.db_updates=Actualització de la base de dades
|
||||
appimage.config.db_updates.activated=activada
|
||||
appimage.config.db_updates.interval.tip=Interval d'actualització a SECONDS
|
||||
@@ -16,4 +16,7 @@ appimage.downgrade.first_version={} ist in der ersten veröffentlichten Version
|
||||
appimage.error.uninstall_current_version=Deinstallation der aktuellen Version von {} war nicht möglich
|
||||
appimage.downgrade.install_version=Die Installation der Version {} ({}) war nicht möglich
|
||||
appimage.install.download.error=Das Herunterladen der Datei {} ist fehlgeschlagen. Eventuell ist der Server nicht verfügbar
|
||||
appimage.install.appimagelauncher.error={appimgl} verhindert die installation von {app}. Deinstalliere {appimgl}, starte deinen Computer neu und versuche die installation von {app} erneut.
|
||||
appimage.install.appimagelauncher.error={appimgl} verhindert die installation von {app}. Deinstalliere {appimgl}, starte deinen Computer neu und versuche die installation von {app} erneut.
|
||||
appimage.config.db_updates=Datenbankaktualisierung
|
||||
appimage.config.db_updates.activated=aktiviert
|
||||
appimage.config.db_updates.interval.tip=Aktualisierungsintervall in SEKUNDEN
|
||||
@@ -16,4 +16,7 @@ appimage.downgrade.first_version={} is in its first published version
|
||||
appimage.error.uninstall_current_version=It was not possible to uninstall the current version of {}
|
||||
appimage.downgrade.install_version=It was not possible to install the version {} ({})
|
||||
appimage.install.download.error=It was not possible to download the file {}. The file server can be down.
|
||||
appimage.install.appimagelauncher.error={appimgl} is not allowing {app} to be installed. Uninstall {appimgl}, reboot your system and try to install {app} again.
|
||||
appimage.install.appimagelauncher.error={appimgl} is not allowing {app} to be installed. Uninstall {appimgl}, reboot your system and try to install {app} again.
|
||||
appimage.config.db_updates=Database update
|
||||
appimage.config.db_updates.activated=activated
|
||||
appimage.config.db_updates.interval.tip=Update interval in SECONDS
|
||||
@@ -16,4 +16,7 @@ appimage.downgrade.first_version={} está en su primera versión publicada
|
||||
appimage.downgrade.uninstall_current_version=No fue posible desinstalar la versión actual de {}
|
||||
appimage.downgrade.install_version=No fue posible instalar la versión {} ({})
|
||||
appimage.install.download.error=No fue posible descargar el archivo {}. El servidor del archivo puede estar inactivo.
|
||||
appimage.install.appimagelauncher.error = {appimgl} no permite la instalación de {app}. Desinstale {appimgl}, reinicie su sistema e intente instalar {app} nuevamente.
|
||||
appimage.install.appimagelauncher.error={appimgl} no permite la instalación de {app}. Desinstale {appimgl}, reinicie su sistema e intente instalar {app} nuevamente.
|
||||
appimage.config.db_updates=Actualización de la base de datos
|
||||
appimage.config.db_updates.activated=activada
|
||||
appimage.config.db_updates.interval.tip=Intervalo de actualización en SEGUNDOS
|
||||
@@ -17,3 +17,7 @@ appimage.error.uninstall_current_version = Non è stato possibile disinstallare
|
||||
appimage.downgrade.install_version=Non è stato possibile installare la versione {} ({})
|
||||
appimage.install.download.error=Non è stato possibile scaricare il file {}. Il file server può essere inattivo.
|
||||
appimage.install.appimagelauncher.error={appimgl} non consente l'installazione di {app}. Disinstallare {appimgl}, riavviare il sistema e provare a installare nuovamente {app}.
|
||||
appimage.config.db_updates=Aggiornamento della banca dati
|
||||
appimage.config.db_updates.activated=attivata
|
||||
appimage.config.db_updates.interval.tip=Intervallo di aggiornamento in SECONDI
|
||||
|
||||
|
||||
@@ -16,4 +16,7 @@ appimage.downgrade.first_version={} se encontra em sua primeira versão publicad
|
||||
appimage.downgrade.uninstall_current_version=Não foi possível desinstalar a versão atual de {}
|
||||
appimage.downgrade.install_version=Não foi possivel instalar a versão {} ({})
|
||||
appimage.install.download.error=Não foi possível baixar o arquivo {}. O servidor do arquivo pode estar fora do ar.
|
||||
appimage.install.appimagelauncher.error={appimgl} não está permitindo que o {app} seja instalado. Desinstale o {appimgl}, reinicie o sistema e tente instalar o {app} novamente.
|
||||
appimage.install.appimagelauncher.error={appimgl} não está permitindo que o {app} seja instalado. Desinstale o {appimgl}, reinicie o sistema e tente instalar o {app} novamente.
|
||||
appimage.config.db_updates=Atualização da base de dados
|
||||
appimage.config.db_updates.activated=ativada
|
||||
appimage.config.db_updates.interval.tip=Intervalo de atualização em SEGUNDOS
|
||||
@@ -4,6 +4,7 @@ import re
|
||||
import shutil
|
||||
import subprocess
|
||||
import time
|
||||
import traceback
|
||||
from pathlib import Path
|
||||
from threading import Thread
|
||||
from typing import List, Set, Type, Tuple, Dict
|
||||
@@ -18,11 +19,13 @@ from bauh.api.abstract.model import PackageUpdate, PackageHistory, SoftwarePacka
|
||||
from bauh.api.abstract.view import MessageType, FormComponent, InputOption, SingleSelectComponent, SelectViewType, \
|
||||
ViewComponent, PanelComponent
|
||||
from bauh.commons.category import CategoriesDownloader
|
||||
from bauh.commons.config import save_config
|
||||
from bauh.commons.html import bold
|
||||
from bauh.commons.system import SystemProcess, ProcessHandler, new_subprocess, run_cmd, new_root_subprocess, \
|
||||
SimpleProcess
|
||||
from bauh.gems.arch import BUILD_DIR, aur, pacman, makepkg, pkgbuild, message, confirmation, disk, git, \
|
||||
gpg, URL_CATEGORIES_FILE, CATEGORIES_CACHE_DIR, CATEGORIES_FILE_PATH, CUSTOM_MAKEPKG_FILE, SUGGESTIONS_FILE
|
||||
gpg, URL_CATEGORIES_FILE, CATEGORIES_CACHE_DIR, CATEGORIES_FILE_PATH, CUSTOM_MAKEPKG_FILE, SUGGESTIONS_FILE, \
|
||||
CONFIG_FILE
|
||||
from bauh.gems.arch.aur import AURClient
|
||||
from bauh.gems.arch.config import read_config
|
||||
from bauh.gems.arch.depedencies import DependenciesAnalyser
|
||||
@@ -888,22 +891,37 @@ class ArchManager(SoftwareManager):
|
||||
def get_settings(self) -> ViewComponent:
|
||||
config = read_config()
|
||||
|
||||
optz_opts = [InputOption(label='on'.capitalize(), value=True),
|
||||
InputOption(label='off'.capitalize(), value=False)]
|
||||
optz_opts = [InputOption(label=self.i18n['yes'].capitalize(), value=True, tooltip=self.i18n['arch.config.optimize.true.tip']),
|
||||
InputOption(label=self.i18n['no'].capitalize(), value=False, tooltip=self.i18n['arch.config.optimize.false.tip'])]
|
||||
|
||||
trans_check_opts = [InputOption(label='on'.capitalize(), value=True),
|
||||
InputOption(label='off'.capitalize(), value=False)]
|
||||
trans_check_opts = [InputOption(label=self.i18n['yes'].capitalize(), value=True, tooltip=self.i18n['arch.config.trans_dep_check.true.tip']),
|
||||
InputOption(label=self.i18n['no'].capitalize(), value=False, tooltip=self.i18n['arch.config.trans_dep_check.false.tip'])]
|
||||
|
||||
fields = [
|
||||
SingleSelectComponent(label='Optimizations',
|
||||
SingleSelectComponent(label=self.i18n['arch.config.optimize'].capitalize(),
|
||||
options=optz_opts,
|
||||
default_option=[o for o in optz_opts if o.value == config['optimize']][0],
|
||||
max_per_line=len(optz_opts),
|
||||
type_=SelectViewType.RADIO),
|
||||
SingleSelectComponent(label='Transitive dependency checking',
|
||||
type_=SelectViewType.RADIO,
|
||||
id_='opts'),
|
||||
SingleSelectComponent(label=self.i18n['arch.config.trans_dep_check'].capitalize(),
|
||||
options=trans_check_opts,
|
||||
default_option=[o for o in trans_check_opts if o.value == config['optimize']][0],
|
||||
default_option=[o for o in trans_check_opts if o.value == config['transitive_checking']][0],
|
||||
max_per_line=len(trans_check_opts),
|
||||
type_=SelectViewType.RADIO)]
|
||||
type_=SelectViewType.RADIO,
|
||||
id_='dep_check')]
|
||||
|
||||
return PanelComponent([FormComponent(fields, label='Installation')])
|
||||
return PanelComponent([FormComponent(fields, label=self.i18n['installation'].capitalize())])
|
||||
|
||||
def save_settings(self, component: PanelComponent) -> Tuple[bool, List[str]]:
|
||||
config = read_config()
|
||||
|
||||
form_install = component.components[0]
|
||||
config['optimize'] = form_install.get_component('opts').get_selected()
|
||||
config['transitive_checking'] = form_install.get_component('dep_check').get_selected()
|
||||
|
||||
try:
|
||||
save_config(config, CONFIG_FILE)
|
||||
return True, None
|
||||
except:
|
||||
return False, [traceback.format_exc()]
|
||||
|
||||
@@ -101,4 +101,10 @@ arch.aur.install.unknown_key.receive_error=No s’ha pogut rebre la clau públic
|
||||
arch.install.aur.unknown_key.body=Per a continuar amb la instal·lació de {} cal confiar en la clau pública següent {}
|
||||
arch.aur.install.validity_check.title=Problemes d’integritat
|
||||
arch.aur.install.validity_check.body=Alguns dels fitxers font necessaris per a la instal·lació de {} són malmesos. La instal·lació es cancel·larà per a evitar danys al vostre sistema.
|
||||
arch.makepkg.optimizing=Optimitzant la recopilació
|
||||
arch.makepkg.optimizing=Optimitzant la recopilació
|
||||
arch.config.optimize=optimitzar
|
||||
arch.config.trans_dep_check=verificar dependències
|
||||
arch.config.optimize.true.tip=La configuració optimitzada s'utilitzarà per fer més ràpida la instal·lació dels paquets
|
||||
arch.config.optimize.false.tip=La configuració predeterminada del sistema s'utilitzarà per realitzar la instal·lació dels paquets
|
||||
arch.config.trans_dep_check.true.tip=Si totes les dependències del paquet s’han de verificar abans de la instal·lació.
|
||||
arch.config.trans_dep_check.false.tip=Si s'han de destapar les dependències del paquet durant la seva instal·lació
|
||||
@@ -101,4 +101,10 @@ aur.info.validpgpkeys=gültige PGP Schlüssel
|
||||
aur.info.options=Optionen
|
||||
aur.info.provides=stellt bereit
|
||||
aur.info.conflicts with=Konflikt mit
|
||||
arch.makepkg.optimizing=Optimiert die Zusammenstellung
|
||||
arch.makepkg.optimizing=Optimiert die Zusammenstellung
|
||||
arch.config.optimize=optimieren
|
||||
arch.config.trans_dep_check=Um Abhängigkeiten zu verifizieren
|
||||
arch.config.optimize.true.tip=Optimierte Einstellungen werden verwendet, um die Paketinstallation zu beschleunigen
|
||||
arch.config.optimize.false.tip=Für die Installation der Pakete werden die Standardsystemeinstellungen verwendet
|
||||
arch.config.trans_dep_check.true.tip=Wenn alle Paketabhängigkeiten überprüft werden sollen, bevor die Installation beginnt
|
||||
arch.config.trans_dep_check.false.tip=Wenn die Paketabhängigkeiten bei der Installation aufgedeckt werden sollen
|
||||
@@ -101,4 +101,10 @@ aur.info.validpgpkeys=valid PGP keys
|
||||
aur.info.options=options
|
||||
aur.info.provides=provides
|
||||
aur.info.conflicts with=conflicts with
|
||||
arch.makepkg.optimizing=Optimizing the compilation
|
||||
arch.makepkg.optimizing=Optimizing the compilation
|
||||
arch.config.optimize=optimize
|
||||
arch.config.trans_dep_check=check dependencies
|
||||
arch.config.optimize.true.tip=Optimized settings will be used in order to make the packages installation faster
|
||||
arch.config.optimize.false.tip=The default system settings will be used to perform the packages installation
|
||||
arch.config.trans_dep_check.true.tip=If all the package dependencies should be verified before the installation starts
|
||||
arch.config.trans_dep_check.false.tip=If the package dependencies should be uncovered during its installation
|
||||
@@ -101,4 +101,10 @@ arch.aur.install.unknown_key.receive_error=No fue posible recibir la clave públ
|
||||
arch.install.aur.unknown_key.body=Para continuar la instalación de {} es necesario confiar en la siguiente clave pública {}
|
||||
arch.aur.install.validity_check.title=Problemas de integridad
|
||||
arch.aur.install.validity_check.body=Algunos de los archivos fuente necesarios para la instalación de {} no están en buen estado. La instalación se cancelará para evitar daños a su sistema.
|
||||
arch.makepkg.optimizing=Optimizando la compilación
|
||||
arch.makepkg.optimizing=Optimizando la compilación
|
||||
arch.config.optimize=optimizar
|
||||
arch.config.trans_dep_check=verificar dependencias
|
||||
arch.config.optimize.true.tip=Se utilizará una configuración optimizada para acelerar la instalación de los paquetes
|
||||
arch.config.optimize.false.tip=Se utilizará la configuración predeterminada del sistema para realizar la instalación de paquetes
|
||||
arch.config.trans_dep_check.true.tip=Si todas las dependencias del paquete deben ser verificadas antes de que comience la instalación
|
||||
arch.config.trans_dep_check.false.tip=Si las dependencias del paquete deben ser descubiertas durante su instalación
|
||||
@@ -69,4 +69,10 @@ arch.aur.install.unknown_key.status=Ricezione della chiave pubblica {}
|
||||
arch.aur.install.unknown_key.receive_error=Impossibile ricevere la chiave pubblica {}
|
||||
arch.aur.install.validity_check.title=Problemi di integrità
|
||||
arch.aur.install.validity_check.body=Alcuni dei file di origine necessari per l'installazione di {} non sono integri. L'installazione verrà annullata per evitare danni al sistema.
|
||||
arch.makepkg.optimizing=Ottimizzando la compilazione
|
||||
arch.makepkg.optimizing=Ottimizzando la compilazione
|
||||
arch.config.optimize=ottimizzare
|
||||
arch.config.trans_dep_check=verificare dipendenze
|
||||
arch.config.optimize.true.tip=Le impostazioni ottimizzate verranno utilizzate per rendere l'installazione dei pacchetti più veloce
|
||||
arch.config.optimize.false.tip=Le impostazioni di sistema predefinite verranno utilizzate per eseguire l'installazione dei pacchetti
|
||||
arch.config.trans_dep_check.true.tip=Se tutte le dipendenze del pacchetto devono essere verificate prima dell'inizio dell'installazione
|
||||
arch.config.trans_dep_check.false.tip=Se le dipendenze del pacchetto devono essere scoperte durante la sua installazione
|
||||
@@ -101,4 +101,10 @@ arch.aur.install.unknown_key.status=Recebendo a chave pública {}
|
||||
arch.aur.install.unknown_key.receive_error=Não fui possível receber a chave pública {}
|
||||
arch.aur.install.validity_check.title=Problemas de integridade
|
||||
arch.aur.install.validity_check.body=Alguns dos arquivos-fonte necessários para instalação de {} não estão íntegros. A instalação será cancelada para evitar danos no seu sistema.
|
||||
arch.makepkg.optimizing=Otimizando a compilação
|
||||
arch.makepkg.optimizing=Otimizando a compilação
|
||||
arch.config.optimize=otimizar
|
||||
arch.config.trans_dep_check=verificar dependências
|
||||
arch.config.optimize.true.tip=Utilizará configurações otimizadas para que a instalação de pacotes seja mais rápida
|
||||
arch.config.optimize.false.tip=Utilizará as configurações padrões do sistema para realizar a instalação de pacotes
|
||||
arch.config.trans_dep_check.true.tip=Se todas as dependências do pacote devem ser verificadas antes da instalação começar
|
||||
arch.config.trans_dep_check.false.tip=Se as dependências do pacote devem ser descobertas durante a instalação
|
||||
@@ -1,7 +1,7 @@
|
||||
import traceback
|
||||
from datetime import datetime
|
||||
from threading import Thread
|
||||
from typing import List, Set, Type
|
||||
from typing import List, Set, Type, Tuple
|
||||
|
||||
from bauh.api.abstract.controller import SearchResult, SoftwareManager, ApplicationContext
|
||||
from bauh.api.abstract.disk import DiskCacheLoader
|
||||
@@ -11,6 +11,7 @@ from bauh.api.abstract.model import PackageHistory, PackageUpdate, SoftwarePacka
|
||||
from bauh.api.abstract.view import MessageType, FormComponent, SingleSelectComponent, InputOption, SelectViewType, \
|
||||
ViewComponent, PanelComponent
|
||||
from bauh.commons import user
|
||||
from bauh.commons.config import save_config
|
||||
from bauh.commons.html import strip_html, bold
|
||||
from bauh.commons.system import SystemProcess, ProcessHandler, SimpleProcess
|
||||
from bauh.gems.flatpak import flatpak, SUGGESTIONS_FILE, CONFIG_FILE
|
||||
@@ -422,13 +423,30 @@ class FlatpakManager(SoftwareManager):
|
||||
|
||||
config = read_config()
|
||||
|
||||
install_opts = [InputOption(label='system'.capitalize(), value='system'),
|
||||
InputOption(label='user'.capitalize(), value='user'),
|
||||
InputOption(label='ask'.capitalize(), value=None)]
|
||||
fields.append(SingleSelectComponent(label='Level',
|
||||
install_opts = [InputOption(label=self.i18n['flatpak.config.install_level.system'].capitalize(),
|
||||
value='system',
|
||||
tooltip=self.i18n['flatpak.config.install_level.system.tip']),
|
||||
InputOption(label=self.i18n['flatpak.config.install_level.user'].capitalize(),
|
||||
value='user',
|
||||
tooltip=self.i18n['flatpak.config.install_level.user.tip']),
|
||||
InputOption(label=self.i18n['flatpak.config.install_level.ask'].capitalize(),
|
||||
value=None,
|
||||
tooltip=self.i18n['flatpak.config.install_level.ask.tip'].format(app=self.context.app_name))]
|
||||
fields.append(SingleSelectComponent(label=self.i18n['flatpak.config.install_level'],
|
||||
options=install_opts,
|
||||
default_option=[o for o in install_opts if o.value == config['installation_level']][0],
|
||||
max_per_line=len(install_opts),
|
||||
type_=SelectViewType.RADIO))
|
||||
|
||||
return PanelComponent([FormComponent(fields, 'Installation')])
|
||||
return PanelComponent([FormComponent(fields, self.i18n['installation'].capitalize())])
|
||||
|
||||
def save_settings(self, component: PanelComponent) -> Tuple[bool, List[str]]:
|
||||
config = read_config()
|
||||
config['installation_level'] = component.components[0].components[0].get_selected()
|
||||
|
||||
try:
|
||||
save_config(config, CONFIG_FILE)
|
||||
return True, None
|
||||
except:
|
||||
return False, [traceback.format_exc()]
|
||||
|
||||
|
||||
@@ -45,4 +45,11 @@ flatpak.info.developername=desenvolupador
|
||||
flatpak.install.install_level.title=Tipus d'instal·lació
|
||||
flatpak.install.install_level.body=S'ha d'instal·lar {} per a tots els usuaris del dispositiu ( sistema ) ?
|
||||
flatpak.install.bad_install_level.body=Valor invàlid per a {field} al fitxer de configuració {file}
|
||||
flatpak.remotes.system_flathub.error=No s'ha pogut afegir Flathub com a dipòsit del sistema ( remote )
|
||||
flatpak.remotes.system_flathub.error=No s'ha pogut afegir Flathub com a dipòsit del sistema ( remote )
|
||||
flatpak.config.install_level.system=sistema
|
||||
flatpak.config.install_level.system.tip=Les aplicacions s’instal·laran per a tots els usuaris del dispositiu
|
||||
flatpak.config.install_level.user=usuari
|
||||
flatpak.config.install_level.user.tip=L’aplicació s’instal·larà només per a l’usuari actual
|
||||
flatpak.config.install_level.ask=preguntar
|
||||
flatpak.config.install_level.ask.tip={app} demanarà el nivell que s'ha d'aplicar durant la instal·lació de l'aplicació
|
||||
flatpak.config.install_level=nivell
|
||||
@@ -44,4 +44,11 @@ flatpak.history.commit=Commit
|
||||
flatpak.install.install_level.title=Installationstyp
|
||||
flatpak.install.install_level.body=Sollte {} für alle Gerätebenutzer installiert werden ( system ) ?
|
||||
flatpak.install.bad_install_level.body=Ungültiger Wert für {field} in der Konfigurationsdatei {file}
|
||||
flatpak.remotes.system_flathub.error=Flathub konnte nicht als System-Repository ( remote ) hinzugefügt werden
|
||||
flatpak.remotes.system_flathub.error=Flathub konnte nicht als System-Repository ( remote ) hinzugefügt werden
|
||||
flatpak.config.install_level.system=system
|
||||
flatpak.config.install_level.system.tip=Anwendungen werden für alle Gerätebenutzer installiert
|
||||
flatpak.config.install_level.user=Benutzer
|
||||
flatpak.config.install_level.user.tip=Die Anwendung wird nur für den aktuellen Benutzer installiert
|
||||
flatpak.config.install_level.ask=fragen
|
||||
flatpak.config.install_level.ask.tip={app} fragt nach der Ebene, die während der App-Installation angewendet werden soll
|
||||
flatpak.config.install_level=niveau
|
||||
@@ -44,4 +44,11 @@ flatpak.history.commit=commit
|
||||
flatpak.install.install_level.title=Installation type
|
||||
flatpak.install.install_level.body=Should {} be installed for all the device users ( system ) ?
|
||||
flatpak.install.bad_install_level.body=Invalid value for {field} in the configuration file {file}
|
||||
flatpak.remotes.system_flathub.error=It was not possible to add Flathub as a system repository ( remote )
|
||||
flatpak.remotes.system_flathub.error=It was not possible to add Flathub as a system repository ( remote )
|
||||
flatpak.config.install_level.system=system
|
||||
flatpak.config.install_level.system.tip=Applications will be installed for all the device users
|
||||
flatpak.config.install_level.user=user
|
||||
flatpak.config.install_level.user.tip=Application will be installed only for the current user
|
||||
flatpak.config.install_level.ask=ask
|
||||
flatpak.config.install_level.ask.tip={app} will ask the level that should be applied during the app installation
|
||||
flatpak.config.install_level=level
|
||||
@@ -45,4 +45,11 @@ flatpak.info.developername=desarrollador
|
||||
flatpak.install.install_level.title=Tipo de instalación
|
||||
flatpak.install.install_level.body=¿Debería {} estar instalado para todos los usuarios del dispositivo ( sistema )?
|
||||
flatpak.install.bad_install_level.body=Valor inválido para {field} en el archivo de configuración {file}
|
||||
flatpak.remotes.system_flathub.error=No fue posible agregar Flathub como repositorio del sistema ( remote )
|
||||
flatpak.remotes.system_flathub.error=No fue posible agregar Flathub como repositorio del sistema ( remote )
|
||||
flatpak.config.install_level.system=sistema
|
||||
flatpak.config.install_level.system.tip=Se instalarán aplicaciones para todos los usuarios del dispositivo
|
||||
flatpak.config.install_level.user=usuario
|
||||
flatpak.config.install_level.user.tip=La aplicación se instalará solo para el usuario actual
|
||||
flatpak.config.install_level.ask=preguntar
|
||||
flatpak.config.install_level.ask.tip={app} preguntará el nivel que debe aplicarse durante la instalación de la aplicación
|
||||
flatpak.config.install_level=nivel
|
||||
@@ -24,4 +24,11 @@ flatpak.info.installation.system=sistema
|
||||
flatpak.install.install_level.title=Tipo di installazione
|
||||
flatpak.install.install_level.body={} deve essere installato per tutti gli utenti del dispositivo ( sistema ) ?
|
||||
flatpak.install.bad_install_level.body=Valore non valido per {field} nel file di configurazione {file}
|
||||
flatpak.remotes.system_flathub.error=Non è stato possibile aggiungere Flathub come repository di sistema ( remote )
|
||||
flatpak.remotes.system_flathub.error=Non è stato possibile aggiungere Flathub come repository di sistema ( remote )
|
||||
flatpak.config.install_level.system=sistema
|
||||
flatpak.config.install_level.system.tip=Le applicazioni verranno installate per tutti gli utenti del dispositivo
|
||||
flatpak.config.install_level.user=utente
|
||||
flatpak.config.install_level.user.tip=L'applicazione verrà installata solo per l'utente corrente
|
||||
flatpak.config.install_level.ask=chiedere
|
||||
flatpak.config.install_level.ask.tip={app} chiederà il livello da applicare durante l'installazione dell'app
|
||||
flatpak.config.install_level=livello
|
||||
@@ -45,4 +45,11 @@ flatpak.info.developername=desenvolvedor
|
||||
flatpak.install.install_level.title=Tipo de instalação
|
||||
flatpak.install.install_level.body={} deve ser instalado para todos os usuários desse dispositivo ( sistema ) ?
|
||||
flatpak.install.bad_install_level.body=Valor inválido para {field} no arquivo de configuração {file}
|
||||
flatpak.remotes.system_flathub.error=Não foi possível adicionar o Flathub como um repositório do sistema ( remote )
|
||||
flatpak.remotes.system_flathub.error=Não foi possível adicionar o Flathub como um repositório do sistema ( remote )
|
||||
flatpak.config.install_level.system=sistema
|
||||
flatpak.config.install_level.system.tip=Os aplicativos serão instalados para todos os usuários do dispositivo
|
||||
flatpak.config.install_level.user=usuário
|
||||
flatpak.config.install_level.user.tip=Os aplicativos serão instalados somente para o usuário atual
|
||||
flatpak.config.install_level.ask=perguntar
|
||||
flatpak.config.install_level.ask.tip=O {app} perguntará qual o nível deverá ser aplicado durante a instalação do aplicativo
|
||||
flatpak.config.install_level=nível
|
||||
@@ -894,14 +894,15 @@ class WebApplicationManager(SoftwareManager):
|
||||
def get_settings(self) -> ViewComponent:
|
||||
config = read_config()
|
||||
|
||||
input_electron = TextInputComponent(label="Custom Electron version",
|
||||
input_electron = TextInputComponent(label=self.i18n['web.settings.electron.version.label'],
|
||||
value=config['environment']['electron']['version'],
|
||||
tooltip="Electron version to render the applications",
|
||||
tooltip=self.i18n['web.settings.electron.version.tooltip'],
|
||||
placeholder='{}: 7.1.0'.format(self.i18n['example.short']),
|
||||
id_='electron_version')
|
||||
|
||||
native_opts = [
|
||||
InputOption(label="Environment", value=False, tooltip="If a nativefier version from the isolated environment should be used to install the applications"),
|
||||
InputOption(label="System", value=True, tooltip="If a nativefier installed on your system should be used to install the applications")
|
||||
InputOption(label=self.i18n['web.settings.nativefier.env'].capitalize(), value=False, tooltip=self.i18n['web.settings.nativefier.env.tooltip'].format(app=self.context.app_name)),
|
||||
InputOption(label=self.i18n['web.settings.nativefier.system'].capitalize(), value=True, tooltip=self.i18n['web.settings.nativefier.system.tooltip'])
|
||||
]
|
||||
|
||||
select_nativefier = SingleSelectComponent(label="Nativefier",
|
||||
@@ -910,7 +911,7 @@ class WebApplicationManager(SoftwareManager):
|
||||
type_=SelectViewType.COMBO,
|
||||
id_='nativefier')
|
||||
|
||||
form_env = FormComponent(label="Environment", components=[input_electron, select_nativefier])
|
||||
form_env = FormComponent(label=self.i18n['web.settings.nativefier.env'].capitalize(), components=[input_electron, select_nativefier])
|
||||
|
||||
return PanelComponent([form_env])
|
||||
|
||||
|
||||
@@ -58,4 +58,10 @@ web.info.06_desktop_entry=shortcut
|
||||
web.info.07_exec_file=executable
|
||||
web.info.08_icon_path=icon
|
||||
web.info.09_size=size
|
||||
web.info.10_config_dir=configuration dir
|
||||
web.info.10_config_dir=configuration dir
|
||||
web.settings.electron.version.label=Electron version
|
||||
web.settings.electron.version.tooltip=An alternative Electron version to render the new installed apps
|
||||
web.settings.nativefier.env=environment
|
||||
web.settings.nativefier.system=system
|
||||
web.settings.nativefier.env.tooltip=The Nativefier version installed on the isolated {app} environment will be used to install applications
|
||||
web.settings.nativefier.system.tooltip=The Nativefier version installed on your system will be used to install applications
|
||||
@@ -58,4 +58,10 @@ web.info.06_desktop_entry=atajo
|
||||
web.info.07_exec_file=ejecutable
|
||||
web.info.08_icon_path=icono
|
||||
web.info.09_size=tamaño
|
||||
web.info.10_config_dir=directorio de configuración
|
||||
web.info.10_config_dir=directorio de configuración
|
||||
web.settings.electron.version.label=Versión del Electron
|
||||
web.settings.electron.version.tooltip=Una versión alternativa del Electron para renderizar las nuevas aplicaciones instaladas
|
||||
web.settings.nativefier.env=ambiente
|
||||
web.settings.nativefier.system=sistema
|
||||
web.settings.nativefier.env.tooltip=Se utilizará la versión de Nativefier instalada en el ambiente aislado de {app} para instalar aplicaciones
|
||||
web.settings.nativefier.system.tooltip=Se utilizará la versión de Nativefier instalada en su sistema para instalar aplicaciones
|
||||
@@ -58,4 +58,10 @@ web.info.06_desktop_entry=atalho
|
||||
web.info.07_exec_file=executável
|
||||
web.info.08_icon_path=ícone
|
||||
web.info.09_size=tamanho
|
||||
web.info.10_config_dir=diretório de configuração
|
||||
web.info.10_config_dir=diretório de configuração
|
||||
web.settings.electron.version.label=Versão do Electron
|
||||
web.settings.electron.version.tooltip=Uma versão alternativa do Electron para renderizar os novos aplicativos instalados
|
||||
web.settings.nativefier.env=ambiente
|
||||
web.settings.nativefier.system=sistema
|
||||
web.settings.nativefier.env.tooltip=A versão do Nativefier instalada no ambiente isolado do {app} será utilizada para instalar aplicativos
|
||||
web.settings.nativefier.system.tooltip=A versão do Nativefier instalada no seu sistema será utilizada para instalar aplicativos
|
||||
@@ -10,10 +10,13 @@ from bauh.api.abstract.disk import DiskCacheLoader
|
||||
from bauh.api.abstract.handler import ProcessWatcher
|
||||
from bauh.api.abstract.model import SoftwarePackage, PackageUpdate, PackageHistory, PackageSuggestion, PackageAction
|
||||
from bauh.api.abstract.view import FormComponent, ViewComponent, TabGroupComponent, TabComponent, SingleSelectComponent, \
|
||||
InputOption
|
||||
InputOption, PanelComponent, SelectViewType
|
||||
from bauh.api.exception import NoInternetException
|
||||
from bauh.commons import internet
|
||||
from bauh.commons.config import save_config
|
||||
from bauh.view.core import config
|
||||
from bauh.view.core.config import read_config
|
||||
from bauh.view.util import translation
|
||||
|
||||
RE_IS_URL = re.compile(r'^https?://.+')
|
||||
|
||||
@@ -403,8 +406,38 @@ class GenericSoftwareManager(SoftwareManager):
|
||||
def get_working_managers(self):
|
||||
return [m for m in self.managers if self._can_work(m)]
|
||||
|
||||
def _gen_settings_panel(self) -> TabComponent:
|
||||
# core_config = read_config()
|
||||
|
||||
current_locale = self.i18n.current_key
|
||||
locale_opts = [InputOption(label=self.i18n['locale.{}'.format(k)].capitalize(), value=k) for k in translation.get_available_keys()]
|
||||
select_locale = SingleSelectComponent(label=self.i18n['core.config.locale.label'],
|
||||
options=locale_opts,
|
||||
default_option=[l for l in locale_opts if l.value == current_locale][0],
|
||||
type_=SelectViewType.COMBO,
|
||||
id_='locale')
|
||||
|
||||
return TabComponent(self.i18n['core.config.tab_label'].capitalize(), PanelComponent([FormComponent([select_locale])]), None, 'core')
|
||||
|
||||
def _save_settings(self, panel: PanelComponent) -> Tuple[bool, List[str]]:
|
||||
core_config = config.read_config()
|
||||
|
||||
main_form = panel.components[0]
|
||||
locale = main_form.get_component('locale').get_selected()
|
||||
|
||||
if locale != self.i18n.current_key:
|
||||
core_config['locale'] = locale
|
||||
|
||||
try:
|
||||
config.save(core_config)
|
||||
return True, None
|
||||
except:
|
||||
return False, [traceback.format_exc()]
|
||||
|
||||
def get_settings(self) -> ViewComponent:
|
||||
settings_forms = []
|
||||
tabs = []
|
||||
|
||||
tabs.append(self._gen_settings_panel())
|
||||
|
||||
for man in self.managers:
|
||||
if self._can_work(man):
|
||||
@@ -413,14 +446,22 @@ class GenericSoftwareManager(SoftwareManager):
|
||||
if man_comp:
|
||||
modname = man.__module__.split('.')[-2]
|
||||
icon_path = "{r}/gems/{n}/resources/img/{n}.svg".format(r=ROOT_DIR, n=modname)
|
||||
settings_forms.append(TabComponent(None, man_comp, icon_path, modname))
|
||||
tabs.append(TabComponent(None, man_comp, icon_path, modname))
|
||||
|
||||
return TabGroupComponent(settings_forms)
|
||||
return TabGroupComponent(tabs)
|
||||
|
||||
def save_settings(self, component: TabGroupComponent) -> Tuple[bool, List[str]]:
|
||||
|
||||
saved, warnings = True, []
|
||||
|
||||
success, errors = self._save_settings(component.get_tab('core').content)
|
||||
|
||||
if not success:
|
||||
saved = False
|
||||
|
||||
if errors:
|
||||
warnings.extend(errors)
|
||||
|
||||
for man in self.managers:
|
||||
if man:
|
||||
modname = man.__module__.split('.')[-2]
|
||||
@@ -429,12 +470,15 @@ class GenericSoftwareManager(SoftwareManager):
|
||||
if not tab:
|
||||
self.logger.warning("Tab for {} was not found".format(man.__class__.__name__))
|
||||
else:
|
||||
success, errors = man.save_settings(tab.content)
|
||||
res = man.save_settings(tab.content)
|
||||
|
||||
if not success:
|
||||
saved = False
|
||||
if res:
|
||||
success, errors = res[0], res[1]
|
||||
|
||||
if errors:
|
||||
warnings.extend(errors)
|
||||
if not success:
|
||||
saved = False
|
||||
|
||||
if errors:
|
||||
warnings.extend(errors)
|
||||
|
||||
return saved, warnings
|
||||
|
||||
@@ -88,6 +88,7 @@ class RadioBoxQt(QWidget):
|
||||
def __init__(self, model: SingleSelectComponent, parent: QWidget = None):
|
||||
super(RadioBoxQt, self).__init__(parent=parent)
|
||||
self.model = model
|
||||
self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
|
||||
|
||||
grid = QGridLayout()
|
||||
self.setLayout(grid)
|
||||
@@ -95,6 +96,7 @@ class RadioBoxQt(QWidget):
|
||||
line, col = 0, 0
|
||||
for op in model.options:
|
||||
comp = RadioButtonQt(op, model)
|
||||
comp.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
|
||||
comp.setText(op.label)
|
||||
comp.setToolTip(op.tooltip)
|
||||
|
||||
@@ -411,7 +413,7 @@ class TabGroupQt(QTabWidget):
|
||||
self.setTabPosition(QTabWidget.North)
|
||||
|
||||
for c in model.tabs:
|
||||
icon = QIcon(c.icon_path) if c.icon_path else None
|
||||
icon = QIcon(c.icon_path) if c.icon_path else QIcon()
|
||||
self.addTab(to_widget(c.content, i18n), icon, c.label)
|
||||
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ from PyQt5.QtWidgets import QWidget, QVBoxLayout, QToolBar, QSizePolicy, QToolBu
|
||||
|
||||
from bauh.api.abstract.controller import SoftwareManager
|
||||
from bauh.api.abstract.view import MessageType
|
||||
from bauh.view.qt import dialog
|
||||
from bauh.view.qt import dialog, css
|
||||
from bauh.view.qt.components import to_widget, new_spacer
|
||||
from bauh.view.util.translation import I18n
|
||||
|
||||
@@ -13,7 +13,7 @@ class SettingsWindow(QWidget):
|
||||
|
||||
def __init__(self, manager: SoftwareManager, i18n: I18n, parent: QWidget = None):
|
||||
super(SettingsWindow, self).__init__(parent=parent)
|
||||
self.setWindowTitle('Settings')
|
||||
self.setWindowTitle(i18n['settings'].capitalize())
|
||||
self.setLayout(QVBoxLayout())
|
||||
self.manager = manager
|
||||
self.i18n = i18n
|
||||
@@ -33,10 +33,11 @@ class SettingsWindow(QWidget):
|
||||
|
||||
action_bar.addWidget(new_spacer())
|
||||
|
||||
bt_save = QPushButton()
|
||||
bt_save.setText(self.i18n['save'].capitalize())
|
||||
bt_save.clicked.connect(self._save_settings)
|
||||
action_bar.addWidget(bt_save)
|
||||
bt_change = QPushButton()
|
||||
bt_change.setStyleSheet(css.OK_BUTTON)
|
||||
bt_change.setText(self.i18n['change'].capitalize())
|
||||
bt_change.clicked.connect(self._save_settings)
|
||||
action_bar.addWidget(bt_change)
|
||||
|
||||
self.layout().addWidget(action_bar)
|
||||
|
||||
@@ -47,10 +48,10 @@ class SettingsWindow(QWidget):
|
||||
self.close()
|
||||
else:
|
||||
msg = StringIO()
|
||||
msg.write("It was not possible to properly the settings\n")
|
||||
msg.write("<p>It was not possible to properly save the settings</p>")
|
||||
|
||||
for w in warnings:
|
||||
msg.write(w + '\n')
|
||||
msg.write('<p style="font-weight: bold">* ' + w + '</p><br/>')
|
||||
|
||||
msg.seek(0)
|
||||
|
||||
|
||||
@@ -1183,7 +1183,7 @@ class ManageWindow(QWidget):
|
||||
action_gems.triggered.connect(self.show_gems_selector)
|
||||
menu_row.addAction(action_gems)
|
||||
|
||||
action_settings = QAction('Settings') # TODO
|
||||
action_settings = QAction(self.i18n['settings'].capitalize())
|
||||
action_settings.triggered.connect(self.show_settings_window)
|
||||
menu_row.addAction(action_settings)
|
||||
|
||||
|
||||
@@ -219,4 +219,15 @@ file_chooser.title=Selector de fitxers
|
||||
message.file.not_exist=Fitxer no existeix
|
||||
message.file.not_exist.body=El fitxer {} sembla no existir
|
||||
icon_button.tooltip.disabled=Aquesta acció no està disponible
|
||||
user=usuari
|
||||
user=usuari
|
||||
example.short=ex
|
||||
core.config.tab_label=general
|
||||
core.config.locale.label=idioma
|
||||
locale.en=anglès
|
||||
locale.es=castellà
|
||||
locale.pt=portuguès
|
||||
locale.ca=català
|
||||
locale.de=alemany
|
||||
locale.it=italià
|
||||
interval=interval
|
||||
installation=instal·lació
|
||||
@@ -174,4 +174,15 @@ message.file.not_exist=Datei existiert nicht
|
||||
message.file.not_exist.body=Die Datei {} scheint nicht zu existieren
|
||||
development=Entwicklung
|
||||
icon_button.tooltip.disabled=Diese Aktion ist nicht verfügbar
|
||||
user=Benutzer
|
||||
user=Benutzer
|
||||
example.short=z.B
|
||||
core.config.tab_label=Allgemeines
|
||||
core.config.locale.label=Sprache
|
||||
locale.en=englisch
|
||||
locale.es=spanisch
|
||||
locale.pt=portugiesisch
|
||||
locale.ca=Katalanisch
|
||||
locale.de=deutsch
|
||||
locale.it=italienisch
|
||||
interval=intervall
|
||||
installation=Installation
|
||||
@@ -178,4 +178,15 @@ message.file.not_exist=File does not exist
|
||||
message.file.not_exist.body=The file {} seems not to exist
|
||||
development=development
|
||||
icon_button.tooltip.disabled=This action is unavailable
|
||||
user=user
|
||||
user=user
|
||||
example.short=e.g
|
||||
core.config.tab_label=general
|
||||
core.config.locale.label=language
|
||||
locale.en=english
|
||||
locale.es=spanish
|
||||
locale.pt=portuguese
|
||||
locale.ca=catalan
|
||||
locale.de=german
|
||||
locale.it=italian
|
||||
interval=interval
|
||||
installation=installation
|
||||
@@ -218,4 +218,15 @@ file_chooser.title=Selector de archivos
|
||||
message.file.not_exist=Archivo no existe
|
||||
message.file.not_exist.body=El archivo {} parece no existir
|
||||
icon_button.tooltip.disabled=This action is unavailable
|
||||
user=usuario
|
||||
user=usuario
|
||||
example.short=p.ej
|
||||
core.config.tab_label=general
|
||||
core.config.locale.label=idioma
|
||||
locale.es=inglés
|
||||
locale.es=español
|
||||
locale.pt=portugués
|
||||
locale.ca=catalán
|
||||
locale.de=alemán
|
||||
locale.it=italiano
|
||||
interval=intervalo
|
||||
installation=instalación
|
||||
@@ -175,4 +175,15 @@ message.file.not_exist=File non esiste
|
||||
message.file.not_exist.body=Il file {} sembra non esistere
|
||||
development=sviluppo
|
||||
icon_button.tooltip.disabled=Questa azione non è disponibile
|
||||
user=utente
|
||||
user=utente
|
||||
core.config.tab_label=generale
|
||||
core.config.locale.label=idioma
|
||||
example.short=es
|
||||
locale.en=inglese
|
||||
locale.es=spagnolo
|
||||
locale.pt=portoghese
|
||||
locale.ca=catalan
|
||||
locale.de=tedesco
|
||||
locale.it=italiano
|
||||
interval=intervallo
|
||||
installation=installazione
|
||||
@@ -221,4 +221,15 @@ file_chooser.title=Seletor arquivos
|
||||
message.file.not_exist=Arquivo não existe
|
||||
message.file.not_exist.body=O arquivo {} parece não existir
|
||||
icon_button.tooltip.disabled=Esta ação está indisponível
|
||||
user=usuário
|
||||
user=usuário
|
||||
example.short=ex
|
||||
core.config.tab_label=geral
|
||||
core.config.locale.label=idioma
|
||||
locale.en=inglês
|
||||
locale.es=espanhol
|
||||
locale.pt=português
|
||||
locale.ca=catalão
|
||||
locale.de=alemão
|
||||
locale.it=italiano
|
||||
interval=intervalo
|
||||
installation=instalação
|
||||
@@ -1,6 +1,9 @@
|
||||
import glob
|
||||
import locale
|
||||
from typing import Tuple
|
||||
import traceback
|
||||
from typing import Tuple, Set
|
||||
|
||||
from colorama import Fore
|
||||
|
||||
from bauh.view.util import resource
|
||||
|
||||
@@ -38,6 +41,11 @@ class I18n(dict):
|
||||
return res
|
||||
|
||||
|
||||
def get_available_keys() -> Set[str]:
|
||||
locale_dir = resource.get_path('locale')
|
||||
return {file.split('/')[-1] for file in glob.glob(locale_dir + '/*')}
|
||||
|
||||
|
||||
def get_locale_keys(key: str = None, locale_dir: str = resource.get_path('locale')) -> Tuple[str, dict]:
|
||||
|
||||
locale_path = None
|
||||
@@ -65,8 +73,9 @@ def get_locale_keys(key: str = None, locale_dir: str = resource.get_path('locale
|
||||
|
||||
locale_obj = {}
|
||||
for line in locale_keys:
|
||||
if line:
|
||||
keyval = line.strip().split('=')
|
||||
line_strip = line.strip()
|
||||
if line_strip:
|
||||
keyval = line_strip.split('=')
|
||||
locale_obj[keyval[0].strip()] = keyval[1].strip()
|
||||
|
||||
return locale_path.split('/')[-1], locale_obj
|
||||
|
||||
Reference in New Issue
Block a user