AUR bearhub: fix stale source cache collision (pkgrel=10)

Use tag-specific tarball name bearhub-0.10.7-bearhub.6.tar.gz so makepkg
and AUR helpers do not reuse an outdated bearhub-0.10.7.tar.gz from cache.
Ignore makepkg artifacts under packaging/aur/.
This commit is contained in:
Sebastian Palencsar
2026-06-27 10:02:45 +02:00
parent c56b8a2473
commit da377aecdc
198 changed files with 4543 additions and 4644 deletions

View File

@@ -1,34 +0,0 @@
import os
from bauh import __app_name__
from bauh.api.paths import DESKTOP_ENTRIES_DIR, CONFIG_DIR, TEMP_DIR, CACHE_DIR, SHARED_FILES_DIR
from bauh.commons import resource
from bauh.commons.util import map_timestamp_file
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
WEB_SHARED_DIR = f'{SHARED_FILES_DIR}/web'
WEB_CACHE_DIR = f'{CACHE_DIR}/web'
INSTALLED_PATH = f'{WEB_SHARED_DIR}/installed'
ENV_PATH = f'{WEB_SHARED_DIR}/env'
FIX_FILE_PATH = WEB_SHARED_DIR + '/fixes/{electron_branch}/{app_id}.js'
NODE_DIR_PATH = f'{ENV_PATH}/node'
NODE_PATHS = {f'{NODE_DIR_PATH}/bin'}
NODE_BIN_PATH = f'{NODE_DIR_PATH}/bin/node'
NPM_BIN_PATH = f'{NODE_DIR_PATH}/bin/npm'
NODE_MODULES_PATH = f'{ENV_PATH}/node_modules'
NATIVEFIER_BIN_PATH = f'{NODE_MODULES_PATH}/.bin/nativefier'
ELECTRON_CACHE_DIR = f'{ENV_PATH}/electron'
URL_ENVIRONMENT_SETTINGS = f'https://raw.githubusercontent.com/vinifmor/bauh-files/master/web/env/v2/environment.yml'
DESKTOP_ENTRY_PATH_PATTERN = f'{DESKTOP_ENTRIES_DIR}/{__app_name__}.web.' + '{name}.desktop'
URL_FIX_PATTERN = "https://raw.githubusercontent.com/vinifmor/bauh-files/master/web/env/v2/fix/{domain}/{electron_branch}/fix.js"
URL_PROPS_PATTERN = "https://raw.githubusercontent.com/vinifmor/bauh-files/master/web/env/v2/fix/{domain}/{electron_branch}/properties"
UA_CHROME = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
TEMP_PATH = f'{TEMP_DIR}/web'
SEARCH_INDEX_FILE = f'{WEB_CACHE_DIR}/index.yml'
CONFIG_FILE = f'{CONFIG_DIR}/web.yml'
ENVIRONMENT_SETTINGS_CACHED_FILE = f'{WEB_CACHE_DIR}/environment.yml'
ENVIRONMENT_SETTINGS_TS_FILE = f'{WEB_CACHE_DIR}/environment.ts'
def get_icon_path() -> str:
return resource.get_path('img/web.svg', ROOT_DIR)

View File

@@ -1,20 +0,0 @@
from bauh.commons.config import YAMLConfigManager
from bauh.gems.web import CONFIG_FILE
class WebConfigManager(YAMLConfigManager):
def __init__(self):
super(WebConfigManager, self).__init__(config_file_path=CONFIG_FILE)
def get_default_config(self) -> dict:
return {
'environment': {
'system': False,
'electron': {'version': None},
'cache_exp': 24
},
'suggestions': {
'cache_exp': 24
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,459 +0,0 @@
import glob
import logging
import os
import shutil
import tarfile
import traceback
from datetime import datetime, timedelta, timezone
from pathlib import Path
from threading import Thread
from typing import Dict, List, Optional
import requests
import yaml
from bauh.api.abstract.download import FileDownloader
from bauh.api.abstract.handler import ProcessWatcher, TaskManager
from bauh.api.abstract.view import MessageType
from bauh.api.http import HttpClient
from bauh.commons import system
from bauh.commons.html import bold
from bauh.commons.system import SimpleProcess, ProcessHandler
from bauh.gems.web import ENV_PATH, NODE_DIR_PATH, NODE_BIN_PATH, NODE_MODULES_PATH, NATIVEFIER_BIN_PATH, \
ELECTRON_CACHE_DIR, URL_ENVIRONMENT_SETTINGS, NPM_BIN_PATH, NODE_PATHS, \
nativefier, ENVIRONMENT_SETTINGS_CACHED_FILE, ENVIRONMENT_SETTINGS_TS_FILE, get_icon_path
from bauh.gems.web.model import WebApplication
from bauh.view.util.translation import I18n
class EnvironmentComponent:
def __init__(self, id: str, name: str, size: str, version: str, url: str, update: bool = False, properties: Optional[dict] = None):
self.id = id
self.name = name
self.size = size
self.version = version
self.url = url
self.update = update
self.properties = properties
class EnvironmentUpdater:
def __init__(self, logger: logging.Logger, http_client: HttpClient, file_downloader: FileDownloader, i18n: I18n, taskman: Optional[TaskManager] = None):
self.logger = logger
self.file_downloader = file_downloader
self.i18n = i18n
self.http_client = http_client
self.task_read_settings_id = 'web_read_settings'
self.taskman = taskman
def _install_nodejs(self, version: str, version_url: str, watcher: ProcessWatcher) -> bool:
self.logger.info(f"Downloading NodeJS {version}: {version_url}")
tarf_path = f"{ENV_PATH}/{version_url.split('/')[-1]}"
downloaded = self.file_downloader.download(version_url, watcher=watcher, output_path=tarf_path, cwd=ENV_PATH)
if not downloaded:
self.logger.error(f"Could not download '{version_url}'. Aborting...")
return False
else:
try:
tf = tarfile.open(tarf_path)
tf.extractall(path=ENV_PATH)
extracted_file = f'{ENV_PATH}/{tf.getnames()[0]}'
if os.path.exists(NODE_DIR_PATH):
self.logger.info(f"Removing old NodeJS version installation dir -> {NODE_DIR_PATH}")
try:
shutil.rmtree(NODE_DIR_PATH)
except Exception:
self.logger.error(f"Could not delete old NodeJS version dir -> {NODE_DIR_PATH}")
traceback.print_exc()
return False
try:
os.rename(extracted_file, NODE_DIR_PATH)
except Exception:
self.logger.error(f"Could not rename the NodeJS version file {extracted_file} as {NODE_DIR_PATH}")
traceback.print_exc()
return False
if os.path.exists(NODE_MODULES_PATH):
self.logger.info(f'Deleting {NODE_MODULES_PATH}')
try:
shutil.rmtree(NODE_MODULES_PATH)
except Exception:
self.logger.error(f"Could not delete the directory {NODE_MODULES_PATH}")
return False
return True
except Exception:
self.logger.error(f'Could not extract {tarf_path}')
traceback.print_exc()
return False
finally:
if os.path.exists(tarf_path):
try:
os.remove(tarf_path)
except Exception:
self.logger.error(f'Could not delete file {tarf_path}')
def check_node_installed(self, version: str) -> bool:
if not os.path.exists(NODE_DIR_PATH):
return False
else:
installed_version = system.run_cmd(f'{NODE_BIN_PATH} --version', print_error=False)
if installed_version:
installed_version = installed_version.strip()
if installed_version.startswith('v'):
installed_version = installed_version[1:]
self.logger.info(f'Node versions: installed ({installed_version}), cloud ({version})')
if version != installed_version:
self.logger.info("The NodeJs installed version is different from the Cloud.")
return False
else:
self.logger.info("Node is already up to date")
return True
else:
self.logger.warning("Could not determine the current NodeJS installed version")
return False
def update_node(self, version: str, version_url: str, watcher: ProcessWatcher = None) -> bool:
Path(ENV_PATH).mkdir(parents=True, exist_ok=True)
if not os.path.exists(NODE_DIR_PATH):
return self._install_nodejs(version=version, version_url=version_url, watcher=watcher)
else:
installed_version = system.run_cmd('{} --version'.format(NODE_BIN_PATH), print_error=False)
if installed_version:
installed_version = installed_version.strip()
if installed_version.startswith('v'):
installed_version = installed_version[1:]
self.logger.info(f'Node versions: installed ({installed_version}), cloud ({version})')
if version != installed_version:
self.logger.info("The NodeJs installed version is different from the Cloud.")
return self._install_nodejs(version=version, version_url=version_url, watcher=watcher)
else:
self.logger.info("Node is already up to date")
return True
else:
self.logger.warning("Could not determine the current NodeJS installed version")
self.logger.info(f"Removing {NODE_DIR_PATH}")
try:
shutil.rmtree(NODE_DIR_PATH)
return self._install_nodejs(version=version, version_url=version_url, watcher=watcher)
except Exception:
self.logger.error(f'Could not delete the dir {NODE_DIR_PATH}')
return False
def _install_node_lib(self, name: str, version: str, handler: ProcessHandler):
lib_repr = f"{name}{'@{}'.format(version) if version else ''}"
self.logger.info(f"Installing {lib_repr}")
if handler and handler.watcher:
handler.watcher.change_substatus(self.i18n['web.environment.install'].format(bold(lib_repr)))
proc = SimpleProcess([NPM_BIN_PATH, 'install', lib_repr], cwd=ENV_PATH, extra_paths=NODE_PATHS)
installed = handler.handle_simple(proc)[0]
if installed:
self.logger.info(f"{lib_repr} successfully installed")
return installed
def _install_nativefier(self, version: str, url: str, handler: ProcessHandler) -> bool:
self.logger.info(f"Checking if nativefier@{version} exists")
if not url or not self.http_client.exists(url):
self.logger.warning(f"The file {url} seems not to exist")
handler.watcher.show_message(title=self.i18n['message.file.not_exist'],
body=self.i18n['message.file.not_exist.body'].format(bold(url)),
type_=MessageType.ERROR)
return False
success = self._install_node_lib('nativefier', version, handler)
if success:
return self._is_nativefier_installed()
def _is_nativefier_installed(self) -> bool:
return os.path.exists(NATIVEFIER_BIN_PATH)
def _get_electron_url(self, version: str, base_url: str, is_x86_x64_arch: bool) -> str:
return base_url.format(version=version, arch='x64' if is_x86_x64_arch else 'ia32')
def check_electron_installed(self, version: str, base_url: str, is_x86_x64_arch: bool, widevine: bool) -> Dict[str, bool]:
self.logger.info(f"Checking if Electron {version} (widevine={widevine}) is installed")
res = {'electron': False, 'sha256': False}
if not os.path.exists(ELECTRON_CACHE_DIR):
self.logger.info(f"Electron cache directory {ELECTRON_CACHE_DIR} not found")
else:
files = {os.path.basename(f) for f in glob.glob(f'{ELECTRON_CACHE_DIR}/**', recursive=True) if os.path.isfile(f)}
if files:
electron_url = self._get_electron_url(version=version, base_url=base_url, is_x86_x64_arch=is_x86_x64_arch)
res['electron'] = os.path.basename(electron_url) in files
res['sha256'] = res['electron']
else:
self.logger.info(f"No Electron file found in '{ELECTRON_CACHE_DIR}'")
for att in ('electron', 'sha256'):
if res[att]:
self.logger.info(f'{att} ({version}) already downloaded')
return res
def _finish_task_download_settings(self):
if self.taskman:
self.taskman.update_progress(self.task_read_settings_id, 100, None)
self.taskman.finish_task(self.task_read_settings_id)
def should_download_settings(self, web_config: dict) -> bool:
try:
settings_exp = int(web_config['environment']['cache_exp'])
except ValueError:
self.logger.error(f"Could not parse settings property 'environment.cache_exp': {web_config['environment']['cache_exp']}")
return True
if settings_exp <= 0:
self.logger.info("No expiration time configured for the environment settings cache file.")
return True
self.logger.info("Checking cached environment settings file")
if not os.path.exists(ENVIRONMENT_SETTINGS_CACHED_FILE):
self.logger.warning("Environment settings file not cached.")
return True
if not os.path.exists(ENVIRONMENT_SETTINGS_TS_FILE):
self.logger.warning("Environment settings file has no timestamp associated with it.")
return True
with open(ENVIRONMENT_SETTINGS_TS_FILE) as f:
env_ts_str = f.read()
try:
env_timestamp = datetime.fromtimestamp(float(env_ts_str), tz=timezone.utc)
except Exception:
self.logger.error(f"Could not parse environment settings file timestamp: {env_ts_str}")
return True
expired = env_timestamp + timedelta(hours=settings_exp) <= datetime.now(timezone.utc)
if expired:
self.logger.info("Environment settings file has expired. It should be re-downloaded")
return True
else:
self.logger.info("Cached environment settings file is up to date")
return False
def read_cached_settings(self, web_config: dict) -> Optional[dict]:
if not self.should_download_settings(web_config):
with open(ENVIRONMENT_SETTINGS_CACHED_FILE) as f:
cached_settings_str = f.read()
try:
return yaml.safe_load(cached_settings_str)
except yaml.YAMLError:
self.logger.error(f'Could not parse the cache environment settings file: {cached_settings_str}')
def read_settings(self, web_config: dict, cache: bool = True) -> Optional[dict]:
if self.taskman:
self.taskman.register_task(self.task_read_settings_id, self.i18n['web.task.download_settings'], get_icon_path())
self.taskman.update_progress(self.task_read_settings_id, 1, None)
cached_settings = self.read_cached_settings(web_config) if cache else None
if cached_settings:
return cached_settings
try:
if self.taskman:
self.taskman.update_progress(self.task_read_settings_id, 10, None)
self.logger.info("Downloading environment settings")
res = self.http_client.get(URL_ENVIRONMENT_SETTINGS)
if not res:
self.logger.warning('Could not retrieve the environments settings from the cloud')
self._finish_task_download_settings()
return
try:
settings = yaml.safe_load(res.content)
nodejs_settings = settings.get('nodejs')
if nodejs_settings:
nodejs_settings['url'] = nodejs_settings['url'].format(version=nodejs_settings['version'])
except yaml.YAMLError:
self.logger.error(f'Could not parse environment settings: {res.text}')
self._finish_task_download_settings()
return
self.logger.info("Caching environment settings to disk")
cache_dir = os.path.dirname(ENVIRONMENT_SETTINGS_CACHED_FILE)
try:
Path(cache_dir).mkdir(parents=True, exist_ok=True)
except OSError:
self.logger.error(f"Could not create Web cache directory: {cache_dir}")
self.logger.info('Finished')
self._finish_task_download_settings()
return
cache_timestamp = datetime.now(timezone.utc).timestamp()
with open(ENVIRONMENT_SETTINGS_CACHED_FILE, 'w+') as f:
f.write(yaml.safe_dump(settings))
with open(ENVIRONMENT_SETTINGS_TS_FILE, 'w+') as f:
f.write(str(cache_timestamp))
self._finish_task_download_settings()
self.logger.info("Finished")
return settings
except requests.exceptions.ConnectionError:
self._finish_task_download_settings()
return
def _check_and_fill_electron(self, pkg: WebApplication, env: dict, local_config: dict, x86_x64: bool, widevine: bool, output: List[EnvironmentComponent]):
electron_settings = env['electron-wvvmp' if widevine else 'electron']
electron_version = electron_settings['version']
if not widevine and pkg.version and pkg.version != electron_version: # this feature does not support custom widevine electron at the moment
self.logger.info(f'A preset Electron version is defined for {pkg.url}: {pkg.version}')
electron_version = pkg.version
if not widevine and local_config['environment']['electron']['version']:
self.logger.warning(f"A custom Electron version will be used {electron_version} to install {pkg.url}")
electron_version = local_config['environment']['electron']['version']
electron_status = self.check_electron_installed(version=electron_version, base_url=electron_settings['url'],
is_x86_x64_arch=x86_x64, widevine=widevine)
electron_url = self._get_electron_url(version=electron_version, base_url=electron_settings['url'], is_x86_x64_arch=x86_x64)
output.append(EnvironmentComponent(name=electron_url.split('/')[-1],
version=electron_version,
url=electron_url,
size=self.http_client.get_content_length(electron_url),
id='electron',
update=not electron_status['electron'],
properties={'widevine': widevine}))
sha_url = electron_settings['sha_url'].format(version=electron_version)
output.append(EnvironmentComponent(name=sha_url.split('/')[-1],
version=electron_version,
url=sha_url,
size=self.http_client.get_content_length(sha_url),
id='electron_sha256',
update=not electron_status['electron'] or not electron_status['sha256'],
properties={'widevine': widevine}))
def _check_and_fill_node(self, env: dict, output: List[EnvironmentComponent]):
node = EnvironmentComponent(name=env['nodejs']['url'].split('/')[-1],
url=env['nodejs']['url'],
size=self.http_client.get_content_length(env['nodejs']['url']),
version=env['nodejs']['version'],
id='nodejs')
output.append(node)
native = self._map_nativefier_file(env['nativefier'])
output.append(native)
if not self.check_node_installed(env['nodejs']['version']):
node.update, native.update = True, True
else:
if not self._check_nativefier_installed(env['nativefier']):
native.update = True
def _check_nativefier_installed(self, nativefier_settings: dict) -> bool:
if not os.path.exists(NODE_MODULES_PATH):
self.logger.info(f'Node modules path {NODE_MODULES_PATH} not found')
return False
else:
if not self._is_nativefier_installed():
return False
installed_version = nativefier.get_version()
if installed_version:
installed_version = installed_version.strip()
self.logger.info(f"Nativefier versions: installed ({installed_version}), cloud ({nativefier_settings['version']})")
if nativefier_settings['version'] != installed_version:
self.logger.info("Installed nativefier version is different from cloud's. Changing version.")
return False
self.logger.info("Nativefier is already installed and up to date")
return True
def _map_nativefier_file(self, nativefier_settings: dict) -> EnvironmentComponent:
url = nativefier_settings['url'].format(version=nativefier_settings['version'])
return EnvironmentComponent(name=f"nativefier@{nativefier_settings['version']}",
url=url,
size=self.http_client.get_content_length(url),
version=nativefier_settings['version'],
id='nativefier')
def check_environment(self, env: dict, local_config: dict, app: WebApplication,
is_x86_x64_arch: bool, widevine: bool) -> List[EnvironmentComponent]:
components, check_threads = [], []
system_env = local_config['environment'].get('system', False)
if system_env:
self.logger.warning(f"Using system's nativefier to install {app.url}")
else:
node_check = Thread(target=self._check_and_fill_node, args=(env, components), daemon=True)
node_check.start()
check_threads.append(node_check)
elec_check = Thread(target=self._check_and_fill_electron,
args=(app, env, local_config, is_x86_x64_arch, widevine, components),
daemon=True)
elec_check.start()
check_threads.append(elec_check)
for t in check_threads:
t.join()
return components
def update(self, components: List[EnvironmentComponent], handler: ProcessHandler) -> bool:
self.logger.info('Updating environment')
Path(ENV_PATH).mkdir(parents=True, exist_ok=True)
comp_map = {c.id: c for c in components}
node_data = comp_map.get('nodejs')
nativefier_data = comp_map.get('nativefier')
if node_data:
if not self._install_nodejs(version=node_data.version, version_url=node_data.url, watcher=handler.watcher):
return False
if not self._install_nativefier(version=nativefier_data.version, url=nativefier_data.url, handler=handler):
return False
else:
if nativefier_data and not self._install_nativefier(version=nativefier_data.version, url=nativefier_data.url, handler=handler):
return False
self.logger.info('Environment successfully updated')
return True

View File

@@ -1,162 +0,0 @@
import glob
import os
from pathlib import Path
from typing import List, Optional
from bauh import __app_name__
from bauh.api import user
from bauh.api.abstract.model import SoftwarePackage
from bauh.api.paths import AUTOSTART_DIR
from bauh.commons import resource
from bauh.gems.web import ROOT_DIR
class WebApplication(SoftwarePackage):
def __init__(self, id: Optional[str] = None, url: Optional[str] = None, name: Optional[str] = None, description: Optional[str] = None,
icon_url: Optional[str] = None, installation_dir: Optional[str] = None, desktop_entry: Optional[str] = None,
installed: bool = False, version: Optional[str] = None, categories: Optional[List[str]] = None,
custom_icon: Optional[str] = None, preset_options: Optional[List[str]] = None, save_icon: bool = True,
options_set: Optional[List[str]] = None, package_name: Optional[str] = None, source_url: Optional[str] = None,
user_agent: Optional[str] = None):
super(WebApplication, self).__init__(id=id if id else url, name=name, description=description,
icon_url=icon_url, installed=installed, version=version,
categories=categories)
self.url = url
self.source_url = source_url if source_url else url
self.installation_dir = installation_dir
self.desktop_entry = desktop_entry
self.preset_options = preset_options
self.save_icon = save_icon # if the icon_url should be used instead of the one retrieved by nativefier
self.options_set = options_set
self.package_name = package_name
self.custom_icon = custom_icon
self.set_custom_icon(custom_icon)
self.user_agent = user_agent
def get_source_url(self):
if self.source_url:
return self.source_url
return self.url
def set_version(self, version: str):
self.version = str(version) if version else None
self.latest_version = version
def has_history(self):
return False
def has_info(self):
return True
@staticmethod
def _get_cached_attrs() -> tuple:
return 'id', 'name', 'version', 'url', 'description', 'icon_url', 'installation_dir', \
'desktop_entry', 'categories', 'custom_icon', 'options_set', 'save_icon', 'package_name', 'source_url', \
'user_agent'
def can_be_downgraded(self):
return False
def get_exec_path(self) -> str:
if self.installation_dir:
return f'{self.installation_dir}/{self.id}'
def get_command(self) -> str:
if self.installation_dir:
return f"{self.get_exec_path()}{' --no-sandbox' if user.is_root() else ''}"
def get_type(self):
return 'web'
def get_type_icon_path(self) -> str:
return self.get_default_icon_path()
def get_default_icon_path(self) -> str:
return resource.get_path('img/web.svg', ROOT_DIR)
def get_disk_data_path(self) -> str:
return f'{self.get_disk_cache_path()}/data.yml'
def get_disk_icon_path(self) -> str:
if self.custom_icon:
return self.custom_icon
if self.installation_dir:
return f'{self.installation_dir}/resources/app/icon.png'
def is_application(self):
return True
def supports_disk_cache(self):
return self.installed
def get_disk_cache_path(self):
return self.installation_dir
def get_data_to_cache(self) -> dict:
data = {}
for attr in self._get_cached_attrs():
if hasattr(self, attr):
val = getattr(self, attr)
if val is not None:
data[attr] = val
return data
def fill_cached_data(self, data: dict):
for attr in self._get_cached_attrs():
val = data.get(attr)
if val and hasattr(self, attr):
setattr(self, attr, val)
self.set_custom_icon(self.custom_icon)
def can_be_run(self) -> bool:
return self.installed and bool(self.installation_dir)
def is_trustable(self) -> bool:
return False
def get_publisher(self) -> str:
return __app_name__
def has_screenshots(self) -> bool:
return False
def get_autostart_path(self) -> str:
if self.desktop_entry:
return f"{AUTOSTART_DIR}/{self.desktop_entry.split('/')[-1]}"
def set_custom_icon(self, custom_icon: str):
self.custom_icon = custom_icon
if custom_icon:
self.icon_url = custom_icon
def get_config_dir(self) -> str:
if self.package_name:
config_dir = f'{Path.home()}/.config/{self.package_name}'
if os.path.exists(config_dir):
return config_dir
else:
if self.installation_dir:
config_path = f'{Path.home()}/.config'
if os.path.exists(config_path):
config_dirs = glob.glob(f"{config_path}/{self.installation_dir.split('/')[-1]}-nativefier-*")
if config_dirs:
return config_dirs[0]
def supports_backup(self) -> bool:
return False
def __eq__(self, other):
if isinstance(other, WebApplication):
return self.name == other.name and self.url == other.url

View File

@@ -1,33 +0,0 @@
import os
import shutil
from typing import List, Optional
from bauh.commons.system import SimpleProcess, run_cmd
from bauh.gems.web import NATIVEFIER_BIN_PATH, NODE_PATHS, ELECTRON_CACHE_DIR
def install(url: str, name: str, output_dir: str, electron_version: Optional[str], cwd: str, system: bool,
user_agent: Optional[str] = None, extra_options: List[str] = None) -> SimpleProcess:
cmd = [NATIVEFIER_BIN_PATH if not system else 'nativefier', url, '--name', name, output_dir]
if electron_version:
cmd.append('-e')
cmd.append(electron_version)
if user_agent:
cmd.extend(('--user-agent', user_agent))
if extra_options:
cmd.extend(extra_options)
extra_env = {'XDG_CACHE_HOME': os.path.dirname(ELECTRON_CACHE_DIR)} if not os.getenv('XDG_CACHE_HOME') else None
return SimpleProcess(cmd, cwd=cwd, extra_paths=NODE_PATHS if not system else None,
extra_env=extra_env)
def is_available() -> bool:
return bool(shutil.which('nativefier'))
def get_version() -> str:
return run_cmd('{} --version'.format(NATIVEFIER_BIN_PATH), print_error=False, extra_paths=NODE_PATHS)

View File

@@ -1,112 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
version="1.1"
viewBox="0 0 512 512"
id="svg2382"
sodipodi:docname="web.svg"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
<metadata
id="metadata2388">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs2386" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="731"
id="namedview2384"
showgrid="false"
showborder="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="0.23046875"
inkscape:cx="-206.58349"
inkscape:cy="27.685718"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2382" />
<g
id="g2943"
transform="matrix(18.983042,0,0,18.80225,-47.728672,-665.31025)">
<path
inkscape:connector-curvature="0"
id="path2362"
d="M 16,37.421053 A 12,11.789474 0 0 0 4,49.210526 12,11.789474 0 0 0 16,61 12,11.789474 0 0 0 28,49.210526 12,11.789474 0 0 0 16,37.421053 Z"
style="opacity:0.2;stroke-width:0.42479539" />
<path
inkscape:connector-curvature="0"
id="path2364"
d="M 16,37 A 12,11.789474 0 0 0 4,48.789474 12,11.789474 0 0 0 16,60.578947 12,11.789474 0 0 0 28,48.789474 12,11.789474 0 0 0 16,37 Z"
style="fill:#74bfcc;stroke-width:0.42479539" />
<path
inkscape:connector-curvature="0"
id="path2366"
d="m 22.437143,48.435789 c 0,0 1.616426,-2.123624 0.618857,-4.169263 -0.997569,-2.045638 -5.839234,-0.583175 -9.561408,1.970905 -2.679624,1.838702 -3.9702527,5.080054 -3.9231634,7.183622"
style="fill:none;stroke:#3f3f3f;stroke-width:0.84959078;stroke-linecap:round" />
<path
inkscape:connector-curvature="0"
id="path2368"
d="m 13,54.263158 c 0,0 0.61247,2.449842 3.33041,2.555789 2.71794,0.105947 3.869899,-4.414886 3.47959,-8.85887 -0.280985,-3.199262 -1.503611,-6.158885 -3.381429,-7.170603"
style="fill:none;stroke:#3f3f3f;stroke-width:0.84959078;stroke-linecap:round" />
<path
inkscape:connector-curvature="0"
id="path2370"
d="m 13.857143,43.4 c 0,0 -3.778942,-2.241926 -4.883143,0.349694 -1.104201,2.591621 2.556418,7.331573 6.938268,8.499148 3.058605,0.814988 6.490017,-0.158277 7.373446,-0.512"
style="fill:none;stroke:#3f3f3f;stroke-width:0.84959078;stroke-linecap:round" />
<ellipse
id="ellipse2372"
ry="0.89515787"
rx="0.91114283"
cy="48.36842"
cx="16.428572"
style="fill:#3f3f3f;stroke:#3f3f3f;stroke-width:0.74296564" />
<path
inkscape:connector-curvature="0"
id="path2374"
d="M 16,37 A 12,11.789474 0 0 0 4,48.789474 12,11.789474 0 0 0 4.0092076,48.960526 12,11.789474 0 0 1 16,37.421053 12,11.789474 0 0 1 27.990793,49.032895 12,11.789474 0 0 0 28,48.789474 12,11.789474 0 0 0 16,37 Z"
style="opacity:0.2;fill:#ffffff;stroke-width:0.42479539" />
<path
inkscape:connector-curvature="0"
id="path2376"
d="m 16.368304,39.52796 a 1.2857143,1.2631579 0 0 0 -1.053014,0.629935 1.2857143,1.2631579 0 0 0 0.470424,1.725329 1.2857143,1.2631579 0 0 0 1.756139,-0.462171 1.2857143,1.2631579 0 0 0 -0.470424,-1.725329 1.2857143,1.2631579 0 0 0 -0.703125,-0.167764 z m 6.887277,10.945724 a 1.2857143,1.2631579 0 0 0 -0.612724,0.169408 1.2857143,1.2631579 0 0 0 -0.470424,1.725329 1.2857143,1.2631579 0 0 0 1.756138,0.462171 1.2857143,1.2631579 0 0 0 0.470424,-1.725329 1.2857143,1.2631579 0 0 0 -1.143414,-0.631579 z M 9.5714286,52.157895 a 1.2857143,1.2631579 0 0 0 -1.2857143,1.263158 1.2857143,1.2631579 0 0 0 1.2857143,1.263158 1.2857143,1.2631579 0 0 0 1.2857144,-1.263158 1.2857143,1.2631579 0 0 0 -1.2857144,-1.263158 z"
style="fill:#3f3f3f;stroke-width:0.42479539" />
<path
inkscape:connector-curvature="0"
id="path2378"
d="M 16.428571,40.789474 A 0.42857143,0.42105263 0 0 0 16,41.210526 a 0.42857143,0.42105263 0 0 0 0.428571,0.421053 0.42857143,0.42105263 0 0 0 0.428572,-0.421053 0.42857143,0.42105263 0 0 0 -0.428572,-0.421052 z m 6.857143,10.947368 a 0.42857143,0.42105263 0 0 0 -0.428571,0.421053 0.42857143,0.42105263 0 0 0 0.428571,0.421052 0.42857143,0.42105263 0 0 0 0.428572,-0.421052 0.42857143,0.42105263 0 0 0 -0.428572,-0.421053 z M 9.5714286,53.421053 A 0.42857143,0.42105263 0 0 0 9.1428571,53.842105 0.42857143,0.42105263 0 0 0 9.5714286,54.263158 0.42857143,0.42105263 0 0 0 10,53.842105 0.42857143,0.42105263 0 0 0 9.5714286,53.421053 Z"
style="opacity:0.2;stroke-width:0.42479539" />
<path
inkscape:connector-curvature="0"
id="path2380"
d="M 16.428571,40.368421 A 0.42857143,0.42105263 0 0 0 16,40.789474 a 0.42857143,0.42105263 0 0 0 0.428571,0.421052 0.42857143,0.42105263 0 0 0 0.428572,-0.421052 0.42857143,0.42105263 0 0 0 -0.428572,-0.421053 z m 6.857143,10.947368 a 0.42857143,0.42105263 0 0 0 -0.428571,0.421053 0.42857143,0.42105263 0 0 0 0.428571,0.421053 0.42857143,0.42105263 0 0 0 0.428572,-0.421053 0.42857143,0.42105263 0 0 0 -0.428572,-0.421053 z M 9.5714286,53 A 0.42857143,0.42105263 0 0 0 9.1428571,53.421053 0.42857143,0.42105263 0 0 0 9.5714286,53.842105 0.42857143,0.42105263 0 0 0 10,53.421053 0.42857143,0.42105263 0 0 0 9.5714286,53 Z"
style="fill:#74bfcc;stroke-width:0.42479539" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -1,87 +0,0 @@
gem.web.info=It allows to install Web applications on the system through their addresses (URL)
gem.web.install.warning=This app it is not officially distributed by its domain owner
web.custom_action.clean_env.failed=An error occurred during the installation environment cleaning
web.custom_action.clean_env.status=Cleaning the installation environment
web.custom_action.clean_env.success=Installation environment cleaned
web.custom_action.clean_env=Clean installation environment
web.custom_action.clean_env.desc=Removes all software and configuration files from the installation environment
web.custom_action.install_app=Install Web application
web.custom_action.install_app.desc=Allows to install a Web site as an application
web.custom_action.install_app.invalid_url=The address {URL} {url} could not be found. It is not possible to finish the installation.
web.custom_action.install_app.status=Installing Web application
web.env.checking=Checking the Web installation environment
web.env.error=It seems there are issues with the Web installation environment. It will not be possible to install {}.
web.environment.install=Installing {}
web.info.01_url=URL
web.info.02_description=description
web.info.03_version=version
web.info.04_categories=categories
web.info.05_installation_dir=installation dir
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.install.env_update.body=The following files must be downloaded and installed
web.install.env_update.title=Environment update
web.install.error=An error has happened during the {} installation
web.install.global_nativefier.unavailable={n} seems not to be installed on your system. It will not be possible to install {app}
web.install.nativefier.error.inner_dir=The app installation directory was not found in {}
web.install.nativefier.error.unknown=Have a look at the {} to identify the reason
web.install.option.allow_urls.label=Allow internal URLs
web.install.option.allow_urls.tip=It allows the application to internally open addresses / URLs outside its domain. e.g: outlook.live.com would be able to open account.microsoft.com
web.install.option.category.none=none
web.install.option.fullscreen.label=Open in fullscreen
web.install.option.fullscreen.tip=If the app should always be opened in fullscreen ( the Alt key opens the upper menu )
web.install.option.icon.label=Custom icon
web.install.option.ignore_certificate.label=Ignore certificate errors
web.install.option.ignore_certificate.tip=Certificate related errors will be ignored by the app
web.install.option.insecure.label=Allow insecure content
web.install.option.insecure.tip=It allows the execution of insecure content within the application
web.install.option.max.label=Open maximized
web.install.option.max.tip=If the app should always be opened maximized
web.install.option.nocache.label=No cache
web.install.option.nocache.tip=Session data will not be stored after the app is closed
web.install.option.noframe.label=No frame
web.install.option.noframe.tip=If the app should not have a frame
web.install.option.single.label=Single run
web.install.option.single.tip=It will not allow the app to be opened again if it is already opened
web.install.option.tray.default.label=Open and attach
web.install.option.tray.default.tip=The app icon will be attached to the system tray after being opened
web.install.option.tray.label=Tray mode
web.install.option.tray.min.label=Start minimized
web.install.option.tray.min.tip=The app will be started minimized as an icon in the system tray
web.install.option.tray.off.label=Off
web.install.option.tray.off.tip=Off
web.install.option.wicon.deducted.label=Deducted
web.install.option.wicon.deducted.tip=The icon will be deducted by {} during the installation
web.install.option.wicon.displayed.label=Displayed
web.install.option.wicon.displayed.tip=The icon displayed on the table will be used for the installation
web.install.option.wicon.label=Icon
web.install.option.widevine.label=Allow protected content
web.install.option.widevine.tip=It allows the interaction with protected/encrypted content commonly used by streaming services (like videos, music, ...). It uses and alternative Electron version developed by castLabs.
web.install.options.advanced=advanced
web.install.options.basic=basic
web.install.options_dialog.title=Web installation options
web.install.substatus.call_nativefier=Running {}
web.install.substatus.checking_fixes=Checking if there are published fixes
web.install.substatus.options=Waiting for the installation options
web.install.substatus.shortcut=Generating a menu shortcut
web.settings.cache_exp=Environment settings expiration
web.settings.cache_exp.tip=It defines the period (in HOURS) in which the stored environment settings are considered valid. Use 0 so that they are always updated.
web.settings.electron.version.label=Electron version
web.settings.electron.version.tooltip=Defines an alternative Electron version to render the new installed apps
web.settings.env.nativefier.system.not_installed={} seems not to be installed on your system
web.settings.nativefier.env.tooltip=The Nativefier version installed on the isolated {app} environment will be used to install applications
web.settings.nativefier.env=environment
web.settings.nativefier.system.tooltip=The Nativefier version installed on your system will be used to install applications
web.settings.nativefier.system=system
web.settings.nativefier.tip=Defines which Nativefier version should be used to generate the Web applications
web.settings.suggestions.cache_exp=Suggestions expiration
web.settings.suggestions.cache_exp.tip=It defines the period (in HOURS) in which suggestions stored on the disk are considered up to date during the initialization process. Use 0 so that they are always updated
web.task.download_settings=Updating environment settings
web.task.search_index=Indexing suggestions
web.task.suggestions.saving=Saving to disk
web.uninstall.error.install_dir.not_found=The installation directory {} was not found
web.uninstall.error.remove_dir=It was not possible to remove {}
web.waiting.env_updater=Updating environment

View File

@@ -1,87 +0,0 @@
gem.web.info=Es ermöglicht die Installation von Webanwendungen auf dem System über deren Adressen (URL)
gem.web.install.warning=Diese Anwendung wird nicht offiziell vom Eigentümer der Domain vertrieben.
web.custom_action.clean_env.failed=Bei der Bereinigung der Installationsumgebung ist ein Fehler aufgetreten
web.custom_action.clean_env.status=Bereinigung der Installationsumgebung
web.custom_action.clean_env.success=Installationsumgebung bereinigt
web.custom_action.clean_env=Installationsumgebung bereinigen
web.custom_action.clean_env.desc=Entfernt alle Software- und Konfigurationsdateien aus der Installationsumgebung
web.custom_action.install_app=Webanwendung installieren
web.custom_action.install_app.desc=Ermöglicht die Installation einer Website als Anwendung
web.custom_action.install_app.invalid_url=Die Adresse {URL} {url} konnte nicht gefunden werden. Es ist nicht möglich, die Installation abzuschließen.
web.custom_action.install_app.status=Installation der Webanwendung
web.env.checking=Überprüfung der Web-Installationsumgebung
web.env.error=Es scheint Probleme mit der Web-Installationsumgebung zu geben. Es ist nicht möglich, {} zu installieren.
web.environment.install=Installation von {}
web.info.01_url=URL
web.info.02_description=Beschreibung
web.info.03_version=Version
web.info.04_categories=Kategorien
web.info.05_installation_dir=Installationsverzeichnis
web.info.06_desktop_entry=Verknüpfung
web.info.07_exec_file=Ausführbare Datei
web.info.08_icon_path=Symbol
web.info.09_size=Größe
web.info.10_config_dir=Konfigurationsverzeichnis
web.install.env_update.body=Die folgenden Dateien müssen heruntergeladen und installiert werden
web.install.env_update.title=Aktualisierung der Umgebung
web.install.error=Während der Installation von {} ist ein Fehler aufgetreten
web.install.global_nativefier.unavailable={n} scheint nicht auf Ihrem System installiert zu sein. Es ist nicht möglich, {app} zu installieren
web.install.nativefier.error.inner_dir=Das App-Installationsverzeichnis wurde nicht in {} gefunden
web.install.nativefier.error.unknown=Schauen Sie sich {} an, um die Ursache zu ermitteln
web.install.option.allow_urls.label=Interne URLs zulassen
web.install.option.allow_urls.tip=Erlaubt der Anwendung, intern Adressen / URLs außerhalb ihrer Domäne zu öffnen. z.B.: outlook.live.com kann account.microsoft.com öffnen
web.install.option.category.none=keine
web.install.option.fullscreen.label=Im Vollbildmodus öffnen
web.install.option.fullscreen.tip=Ob die Anwendung immer im Vollbildmodus geöffnet werden soll (die Alt-Taste öffnet das obere Menü)
web.install.option.icon.label=Benutzerdefiniertes Symbol
web.install.option.ignore_certificate.label=Zertifikatsfehler ignorieren
web.install.option.ignore_certificate.tip=Zertifikatsbezogene Fehler werden von der App ignoriert
web.install.option.insecure.label=Unsichere Inhalte zulassen
web.install.option.insecure.tip=Erlaubt die Ausführung von unsicheren Inhalten innerhalb der Anwendung
web.install.option.max.label=Maximiert öffnen
web.install.option.max.tip=Ob die Anwendung immer maximiert geöffnet werden soll
web.install.option.nocache.label=Kein Cache
web.install.option.nocache.tip=Sitzungsdaten werden nicht gespeichert, nachdem die Anwendung geschlossen wurde
web.install.option.noframe.label=Kein Rahmen
web.install.option.noframe.tip=Ob die App keinen Rahmen haben soll
web.install.option.single.label=Eine Instanz
web.install.option.single.tip=Die Anwendung kann nicht erneut geöffnet werden, wenn sie bereits geöffnet ist.
web.install.option.tray.default.label=Öffnen und anhängen
web.install.option.tray.default.tip=Das Symbol der Anwendung wird nach dem Öffnen in der Taskleiste angezeigt.
web.install.option.tray.label=Tray-Modus
web.install.option.tray.min.label=Minimiert starten
web.install.option.tray.min.tip=Die Anwendung wird minimiert als Symbol in der Taskleiste gestartet
web.install.option.tray.off.label=Aus
web.install.option.tray.off.tip=Aus
web.install.option.wicon.deducted.label=Abgeleitet
web.install.option.wicon.deducted.tip=Das Symbol wird bei der Installation um {} abgeleitet
web.install.option.wicon.displayed.label=Angezeigt
web.install.option.wicon.displayed.tip=Das in der Tabelle angezeigte Symbol wird für die Installation verwendet.
web.install.option.wicon.label=Symbol
web.install.option.widevine.label=Geschützte Inhalte zulassen
web.install.option.widevine.tip=Erlaubt die Interaktion mit geschützten/verschlüsselten Inhalten, die häufig von Streaming-Diensten verwendet werden (wie Videos, Musik, ...). Es wird eine alternative Electron-Version verwendet, die von castLabs entwickelt wurde.
web.install.options.advanced=erweitert
web.install.options.basic=einfach
web.install.options_dialog.title=Optionen für die Web-Installation
web.install.substatus.call_nativefier=Ausführen {}
web.install.substatus.checking_fixes=Prüfen, ob es veröffentlichte Fehlerbehebungen gibt
web.install.substatus.options=Warten auf die Installationsoptionen
web.install.substatus.shortcut=Erzeugen einer Menüverknüpfung
web.settings.cache_exp=Gültigkeitszeitraum der Umgebungseinstellungen
web.settings.cache_exp.tip=Legt den Gültigkeitszeitraum (in Stunden) fest, in dem die gespeicherten Umgebungseinstellungen als gültig angesehen werden. Verwenden Sie 0, damit sie immer aktualisiert werden.
web.settings.electron.version.label=Electron-Version
web.settings.electron.version.tooltip=Definiert eine alternative Electron-Version zum Rendern der neu installierten Anwendungen
web.settings.env.nativefier.system.not_installed={} scheint nicht auf Ihrem System installiert zu sein
web.settings.nativefier.env.tooltip=Die Nativefier-Version, die in der isolierten {app}-Umgebung installiert ist, wird für die Installation von Anwendungen verwendet
web.settings.nativefier.env=Umgebung
web.settings.nativefier.system.tooltip=Die auf Ihrem System installierte Nativefier-Version wird für die Installation von Anwendungen verwendet
web.settings.nativefier.system=System
web.settings.nativefier.tip=Legt fest, welche Nativefier-Version für die Erstellung der Webanwendungen verwendet werden soll
web.settings.suggestions.cache_exp=Gültigkeitszeitraum der Vorschläge
web.settings.suggestions.cache_exp.tip=Legt den Gültigkeitszeitraum (in Stunden) fest, in dem die, auf dem Datenträger gespeicherten, Vorschläge als aktuell angesehen werden. Verwenden Sie 0, wenn Sie sie immer aktualisieren wollen.
web.task.download_settings=Aktualisierung der Umgebungseinstellungen
web.task.search_index=Indizierung von Vorschlägen
web.task.suggestions.saving=Speichern auf der Festplatte
web.uninstall.error.install_dir.not_found=Das Installationsverzeichnis {} wurde nicht gefunden
web.uninstall.error.remove_dir=Es war nicht möglich, {} zu entfernen
web.waiting.env_updater=Aktualisierung der Umgebung

View File

@@ -1,87 +0,0 @@
gem.web.info=It allows to install Web applications on the system through their addresses (URL)
gem.web.install.warning=This app it is not officially distributed by its domain owner
web.custom_action.clean_env.failed=An error occurred during the installation environment cleaning
web.custom_action.clean_env.status=Cleaning the installation environment
web.custom_action.clean_env.success=Installation environment cleaned
web.custom_action.clean_env=Clean installation environment
web.custom_action.clean_env.desc=Removes all software and configuration files from the installation environment
web.custom_action.install_app=Install Web application
web.custom_action.install_app.desc=Allows to install a Web site as an application
web.custom_action.install_app.invalid_url=The address {URL} {url} could not be found. It is not possible to finish the installation.
web.custom_action.install_app.status=Installing Web application
web.env.checking=Checking the Web installation environment
web.env.error=It seems there are issues with the Web installation environment. It will not be possible to install {}.
web.environment.install=Installing {}
web.info.01_url=URL
web.info.02_description=description
web.info.03_version=version
web.info.04_categories=categories
web.info.05_installation_dir=installation dir
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.install.env_update.body=The following files must be downloaded and installed
web.install.env_update.title=Environment update
web.install.error=An error has happened during the {} installation
web.install.global_nativefier.unavailable={n} seems not to be installed on your system. It will not be possible to install {app}
web.install.nativefier.error.inner_dir=The app installation directory was not found in {}
web.install.nativefier.error.unknown=Have a look at the {} to identify the reason
web.install.option.allow_urls.label=Allow internal URLs
web.install.option.allow_urls.tip=It allows the application to internally open addresses / URLs outside its domain. e.g: outlook.live.com would be able to open account.microsoft.com
web.install.option.category.none=none
web.install.option.fullscreen.label=Open in fullscreen
web.install.option.fullscreen.tip=If the app should always be opened in fullscreen (the Alt key opens the upper menu)
web.install.option.icon.label=Custom icon
web.install.option.ignore_certificate.label=Ignore certificate errors
web.install.option.ignore_certificate.tip=Certificate related errors will be ignored by the app
web.install.option.insecure.label=Allow insecure content
web.install.option.insecure.tip=It allows the execution of insecure content within the application
web.install.option.max.label=Open maximized
web.install.option.max.tip=If the app should always be opened maximized
web.install.option.nocache.label=No cache
web.install.option.nocache.tip=Session data will not be stored after the app is closed
web.install.option.noframe.label=No frame
web.install.option.noframe.tip=If the app should not have a frame
web.install.option.single.label=Single run
web.install.option.single.tip=It will not allow the app to be opened again if it is already opened
web.install.option.tray.default.label=Open and attach
web.install.option.tray.default.tip=The app icon will be attached to the system tray after being opened
web.install.option.tray.label=Tray mode
web.install.option.tray.min.label=Start minimized
web.install.option.tray.min.tip=The app will be started minimized as an icon in the system tray
web.install.option.tray.off.label=Off
web.install.option.tray.off.tip=Off
web.install.option.wicon.deducted.label=Deducted
web.install.option.wicon.deducted.tip=The icon will be deducted by {} during the installation
web.install.option.wicon.displayed.label=Displayed
web.install.option.wicon.displayed.tip=The icon displayed on the table will be used for the installation
web.install.option.wicon.label=Icon
web.install.option.widevine.label=Allow protected content
web.install.option.widevine.tip=It allows the interaction with protected/encrypted content commonly used by streaming services (like videos, music, ...). It uses and alternative Electron version developed by castLabs.
web.install.options.advanced=advanced
web.install.options.basic=basic
web.install.options_dialog.title=Web installation options
web.install.substatus.call_nativefier=Running {}
web.install.substatus.checking_fixes=Checking if there are published fixes
web.install.substatus.options=Waiting for the installation options
web.install.substatus.shortcut=Generating a menu shortcut
web.settings.cache_exp=Environment settings expiration
web.settings.cache_exp.tip=It defines the period (in HOURS) in which the stored environment settings are considered valid. Use 0 so that they are always updated.
web.settings.electron.version.label=Electron version
web.settings.electron.version.tooltip=Defines an alternative Electron version to render the new installed apps
web.settings.env.nativefier.system.not_installed={} seems not to be installed on your system
web.settings.nativefier.env.tooltip=The Nativefier version installed on the isolated {app} environment will be used to install applications
web.settings.nativefier.env=environment
web.settings.nativefier.system.tooltip=The Nativefier version installed on your system will be used to install applications
web.settings.nativefier.system=system
web.settings.nativefier.tip=Defines which Nativefier version should be used to generate the Web applications
web.settings.suggestions.cache_exp=Suggestions expiration
web.settings.suggestions.cache_exp.tip=It defines the period (in HOURS) in which suggestions stored on the disk are considered up to date during the initialization process. Use 0 so that they are always updated.
web.task.download_settings=Updating environment settings
web.task.search_index=Indexing suggestions
web.task.suggestions.saving=Saving to disk
web.uninstall.error.install_dir.not_found=The installation directory {} was not found
web.uninstall.error.remove_dir=It was not possible to remove {}
web.waiting.env_updater=Updating environment

View File

@@ -1,87 +0,0 @@
gem.web.info=Le permite instalar aplicaciones web a través de sus direcciones (URL)
gem.web.install.warning=Esta aplicación no es distribuida oficialmente por el propietario del dominio
web.custom_action.clean_env.failed=Se produjo un error durante la limpieza del ambiente de instalación
web.custom_action.clean_env.status=Limpiando el ambiente de instalación
web.custom_action.clean_env.success=Ambiente de instalación limpio
web.custom_action.clean_env=Limpiar ambiente de instalación
web.custom_action.clean_env.desc=Elimina todo los softwares y archivos de configuración del ambiente de instalación
web.custom_action.install_app=Instalar aplicación Web
web.custom_action.install_app.desc=Permite instalar un Web site como una aplicación
web.custom_action.install_app.invalid_url=No se pudo encontrar la dirección {URL} {url}. No es posible finalizar la instalación.
web.custom_action.install_app.status=Instalando aplicación Web
web.env.checking=Verificando el ambiente de instalación web
web.env.error=Parece que hay problemas con el ambiente de instalación web. No será posible instalar {}.
web.environment.install=Instalando {}
web.info.01_url=URL
web.info.02_description=descripción
web.info.03_version=versión
web.info.04_categories=categorías
web.info.05_installation_dir=directorio de instalación
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.install.env_update.body=Los siguientes archivos deben descargarse e instalarse
web.install.env_update.title=Actualización del ambiente
web.install.error=Ha ocurrido un error durante la instalación de {}
web.install.global_nativefier.unavailable={n} parece no estar instalado en su sistema. No será posible instalar {app}
web.install.nativefier.error.inner_dir=El directorio de instalación de la aplicación no se encontró en {}
web.install.nativefier.error.unknown=Mire el {} para identificar la razón
web.install.option.allow_urls.label=Permitir URL internas
web.install.option.allow_urls.tip=Permite que la aplicación abra internamente direcciones / URLs fuera de su dominio. Por ejemplo: outlook.live.com podría abrir account.microsoft.com
web.install.option.category.none=ninguna
web.install.option.fullscreen.label=Abrir en pantalla completa
web.install.option.fullscreen.tip=Si la aplicación siempre debe abrirse en pantalla completa ( la tecla Alt abre el menú superior )
web.install.option.icon.label=Icono personalizado
web.install.option.ignore_certificate.label=Ignorar errores de certificado
web.install.option.ignore_certificate.tip=Los errores relacionados con certificados serán ignorados por la aplicación
web.install.option.insecure.label=Permitir contenido inseguro
web.install.option.insecure.tip=Permite la ejecución de contenido inseguro dentro de la aplicación
web.install.option.max.label=Abrir maximizado
web.install.option.max.tip=Si la aplicación siempre debe abrirse maximizada
web.install.option.nocache.label=Sin cache
web.install.option.nocache.tip=Los datos de la sesión no se almacenarán después de cerrar la aplicación
web.install.option.noframe.label=Sin marco
web.install.option.noframe.tip=Si la aplicación no debe tener un marco
web.install.option.single.label=Ejecución única
web.install.option.single.tip=No permitirá que la aplicación se abra nuevamente si ya está abierta
web.install.option.tray.default.label=Abrir y adjuntar
web.install.option.tray.default.tip=El icono de la aplicación se adjuntará a la bandeja del sistema después de abrirlo
web.install.option.tray.label=Modo bandeja
web.install.option.tray.min.label=Iniciar minimizado
web.install.option.tray.min.tip=La aplicación se iniciará minimizada como un ícono en la bandeja del sistema
web.install.option.tray.off.label=Apagado
web.install.option.tray.off.tip=Apagado
web.install.option.wicon.deducted.label=Deducido
web.install.option.wicon.deducted.tip=El {} deducirá el icono durante la instalación
web.install.option.wicon.displayed.label=Mostrado
web.install.option.wicon.displayed.tip=El icono mostrado en la tabla será utilizado para la instalación
web.install.option.wicon.label=Icono
web.install.option.widevine.label=Permitir contenido protegido
web.install.option.widevine.tip=Permite la interacción con contenido protegido/encriptado comúnmente utilizado por los servicios de transmisión (como videos, música, ...). Utiliza una versión alternativa de Electron desarrollada por castLabs.
web.install.options.advanced=avanzadas
web.install.options.basic=básicas
web.install.options_dialog.title=Opciones de instalación Web
web.install.substatus.call_nativefier=Ejecutando {}
web.install.substatus.checking_fixes=Verificando si hay correcciones publicadas
web.install.substatus.options=Esperando las opciones de instalación
web.install.substatus.shortcut=Generando un atajo de menú
web.settings.cache_exp=Expiración de configuraciones de ambiente
web.settings.cache_exp.tip=Define el período (en HORAS) en el que las configuraciones del ambiente almacenadas son consideradas válidas. Utilice 0 para que siempre sean actualizadas.
web.settings.electron.version.label=Versión del Electron
web.settings.electron.version.tooltip=Define una versión alternativa del Electron para renderizar las nuevas aplicaciones instaladas
web.settings.env.nativefier.system.not_installed={} parece no estar instalado en su 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.env=ambiente
web.settings.nativefier.system.tooltip=Se utilizará la versión de Nativefier instalada en su sistema para instalar aplicaciones
web.settings.nativefier.system=sistema
web.settings.nativefier.tip=Define qué versión de Nativefier debe usarse para generar las aplicaciones Web
web.settings.suggestions.cache_exp=Expiración de sugerencias
web.settings.suggestions.cache_exp.tip=Define el período (en HORAS) en el que las sugerencias almacenadas en el disco son consideradas actualizadas durante el proceso de inicialización. Utilice 0 para que siempre sean actualizadas.
web.task.download_settings=Actualizando configuraciones de ambiente
web.task.search_index=Indexando sugerencias
web.task.suggestions.saving=Guardando en disco
web.uninstall.error.install_dir.not_found=No se encontró el directorio de instalación {}
web.uninstall.error.remove_dir=No fue posible eliminar {}
web.waiting.env_updater=Actualizando el ambiente

View File

@@ -1,87 +0,0 @@
gem.web.info=Permet d'installer des applications Web sur le système depuis leur adresses (URL)
gem.web.install.warning=Cette application n'est pas officiellement distribué par le propiétaire de son domaine
web.custom_action.clean_env.failed=Une erreur est survenue lors du nettoyage de l'environnement d'installation
web.custom_action.clean_env.status=Nettoyage de l'environnement d'installation
web.custom_action.clean_env.success=Environnement d'installation nettoyé
web.custom_action.clean_env=Nettoyage de l'environnement d'installation Web
web.custom_action.clean_env.desc=Removes all software and configuration files from the installation environment
web.custom_action.install_app=Install Web application
web.custom_action.install_app.desc=Allows to install a Web site as an application
web.custom_action.install_app.invalid_url=The address {URL} {url} could not be found. It is not possible to finish the installation.
web.custom_action.install_app.status=Installing Web application
web.env.checking=Verification de l'environnement d'installation Web.
web.env.error=Il y a des problèmes avec l'environnement d'installation Web. {} ne pourra pas être installé.
web.environment.install=Intallation de {}
web.info.01_url=URL
web.info.02_description=description
web.info.03_version=version
web.info.04_categories=catégories
web.info.05_installation_dir=dossier d'installation
web.info.06_desktop_entry=raccourci
web.info.07_exec_file=éxecutable
web.info.08_icon_path=icône
web.info.09_size=taille
web.info.10_config_dir=dossier de configuration
web.install.env_update.body=Ces fichiers doivent être téléchargés et installés
web.install.env_update.title=Mise à jour d'environnement
web.install.error=Une erreur est survenue durant l'installation de {}
web.install.global_nativefier.unavailable={n} n'est pas intallé sur votre système. {app} ne pourra être installé
web.install.nativefier.error.inner_dir=Le dossier d'installation de l'application n'a pas été trouvé à {}
web.install.nativefier.error.unknown=Regardez {} pour trouver la raison
web.install.option.allow_urls.label=Autorise les URLs internes
web.install.option.allow_urls.tip=Permet à l'application d'ouvrir des adresses en interne / les URLs hors de son domaine. i.e: outlook.live.com pourront ouvrir account.microsoft.com
web.install.option.category.none=aucun
web.install.option.fullscreen.label=Ouvrir en plein écran
web.install.option.fullscreen.tip=Si l'application doit toujours être ouverte en plein écran ( Alt ouvre le menu )
web.install.option.icon.label=Icône personnalisée
web.install.option.ignore_certificate.label=Ignorer les erreurs de certificats
web.install.option.ignore_certificate.tip=Les erreurs liées aux certificats seront ignorées par l'application
web.install.option.insecure.label=Autoriser le contenu non sécurisé
web.install.option.insecure.tip=Autorise l'éxécution de contenu non sécurisé dans l'application
web.install.option.max.label=Ouvrir aggrandi
web.install.option.max.tip=Si l'application doit toujours être ouverte fenêtre aggrandi
web.install.option.nocache.label=Pas de cache
web.install.option.nocache.tip=Les données de session ne seront pas stockées après fermeture de l'application
web.install.option.noframe.label=Sans bords
web.install.option.noframe.tip=Pour une application sans bords
web.install.option.single.label=Éxecution unique
web.install.option.single.tip=Empêchera l'application de s'ouvrir si elle l'est déjà
web.install.option.tray.default.label=Ouvrir et attacher
web.install.option.tray.default.tip=L'icône sera attachée à la barre système après ouverture de l'application
web.install.option.tray.label=Mode barre système
web.install.option.tray.min.label=Démarrer minimizé
web.install.option.tray.min.tip=L'application va démarrer minimisée dans la barre système
web.install.option.tray.off.label=Off
web.install.option.tray.off.tip=Off
web.install.option.wicon.deducted.label=Déduite
web.install.option.wicon.deducted.tip=L'icône sera déduite par {} durant l'installation
web.install.option.wicon.displayed.label=Affichée
web.install.option.wicon.displayed.tip=L'icône affichée sur la table sera utilisée pour l'installation
web.install.option.wicon.label=Icône
web.install.option.widevine.label=Allow protected content
web.install.option.widevine.tip=It allows the interaction with protected/encrypted content commonly used by streaming services (like videos, music, ...). It uses and alternative Electron version developed by castLabs.
web.install.options.advanced=avancée
web.install.options.basic=basique
web.install.options_dialog.title=Options d'installation Web
web.install.substatus.call_nativefier=Lancement {}
web.install.substatus.checking_fixes=Verification de nouveaux correctifs disponibles
web.install.substatus.options=En attente des options d'installation
web.install.substatus.shortcut=Génération d'un raccourci menu
web.settings.cache_exp=Environment settings expiration
web.settings.cache_exp.tip=It defines the period (in HOURS) in which the stored environment settings are considered valid. Use 0 so that they are always updated.
web.settings.electron.version.label=Version d'Electron
web.settings.electron.version.tooltip=Definit une version alternativde d'Electron pour le rendu des dernières apps installées
web.settings.env.nativefier.system.not_installed={} n'a pas l'air d'être installé sur votre système
web.settings.nativefier.env.tooltip=La version de Nativefier installée dans l'environnement isolé {app} va être utilisée pour installer des applications
web.settings.nativefier.env=environnement
web.settings.nativefier.system.tooltip=La version de Nativefier installée sur votre système va être utilisée pour installer des applications
web.settings.nativefier.system=système
web.settings.nativefier.tip=Definit quelle version de Nativefier doit être utilisée pour géner les applications Web
web.settings.suggestions.cache_exp=Suggestions expiration
web.settings.suggestions.cache_exp.tip=It defines the period (in HOURS) in which suggestions stored on the disk are considered up to date during the initialization process. Use 0 so that they are always updated
web.task.download_settings=Mise à jour des paramètres d'environnement
web.task.search_index=Indexing suggestions
web.task.suggestions.saving=Saving to disk
web.uninstall.error.install_dir.not_found=Impossible de trouver le dossier d'installation {}
web.uninstall.error.remove_dir=Impossible d'enlever {}
web.waiting.env_updater=Mise à jour de l'environnement

View File

@@ -1,87 +0,0 @@
gem.web.info=Permette di installare applicazioni Web sul sistema attraverso i loro indirizzi (URL)
gem.web.install.warning=Questa app non è distribuita ufficialmente dal proprietario del dominio
web.custom_action.clean_env.failed=Si è verificato un errore durante la pulizia dell'ambiente di installazione
web.custom_action.clean_env.status=Pulizia dell'ambiente di installazione
web.custom_action.clean_env.success=Ambiente di installazione pulito
web.custom_action.clean_env=Ambiente di installazione pulito
web.custom_action.clean_env.desc=Rimuove tutto il software e i file di configurazione dall'ambiente di installazione
web.custom_action.install_app=Installa applicazione Web
web.custom_action.install_app.desc=Consente di installare un sito Web come applicazione
web.custom_action.install_app.invalid_url=Impossibile trovare l'indirizzo {URL} {url}. Non è possibile completare l'installazione.
web.custom_action.install_app.status=Installazione dell'applicazione Web
web.env.checking=Verifica dell'ambiente di installazione Web
web.env.error=Sembra che ci siano problemi con l'ambiente di installazione Web. Non sarà possibile installare {}.
web.environment.install=Installazione {}
web.info.01_url=URL
web.info.02_description=descrizione
web.info.03_version=versione
web.info.04_categories=categorie
web.info.05_installation_dir=installazione dir
web.info.06_desktop_entry=scorciatoia
web.info.07_exec_file=eseguibile
web.info.08_icon_path=icona
web.info.09_size=dimensione
web.info.10_config_dir=configurazione dir
web.install.env_update.body=È necessario scaricare e installare i seguenti file
web.install.env_update.title=Aggiornamento dell'ambiente
web.install.error=Si è verificato un errore durante l'installazione di {}
web.install.global_nativefier.unavailable={n} sembra non essere installato sul tuo sistema. Non sarà possibile installare {app}
web.install.nativefier.error.inner_dir=La directory di installazione dell'app non è stata trovata in {}
web.install.nativefier.error.unknown=Dai un'occhiata a {} per identificare il motivo
web.install.option.allow_urls.label=Consenti URL interni
web.install.option.allow_urls.tip=Consente all'applicazione di aprire internamente indirizzi/URL esterni al proprio dominio. ad esempio: outlook.live.com sarebbe in grado di aprire account.microsoft.com
web.install.option.category.none=nessuna
web.install.option.fullscreen.label=Apri a schermo intero
web.install.option.fullscreen.tip=Se l'app deve essere sempre aperta a schermo intero (il tasto Alt apre il menu superiore)
web.install.option.icon.label=Icona personalizzata
web.install.option.ignore_certificate.label=Ignora gli errori del certificato
web.install.option.ignore_certificate.tip=Gli errori relativi al certificato verranno ignorati dall'app
web.install.option.insecure.label=Consenti contenuti non sicuri
web.install.option.insecure.tip=Consente l'esecuzione di contenuti non sicuri all'interno dell'applicazione
web.install.option.max.label=Aprire ingrandito
web.install.option.max.tip=Se l'app dovrebbe essere sempre aperta ingrandita
web.install.option.nocache.label=Nessuna cache
web.install.option.nocache.tip=I dati della sessione non verranno archiviati dopo la chiusura dell'app
web.install.option.noframe.label=Senza bordi
web.install.option.noframe.tip=Se l'app non deve avere un bordo
web.install.option.single.label=Esecuzione singola
web.install.option.single.tip=Non consentirà di riaprire l'app se è già aperta
web.install.option.tray.default.label=Aprire e allegare
web.install.option.tray.default.tip=L'icona dell'app verrà allegata alla barra delle applicazioni dopo essere stata aperta
web.install.option.tray.label=Modalità barra di sistema
web.install.option.tray.min.label=Inizia minimizzato
web.install.option.tray.min.tip=L'app verrà avviata ridotta a icona nella barra delle applicazioni
web.install.option.tray.off.label=Off
web.install.option.tray.off.tip=Off
web.install.option.wicon.deducted.label=Detratto
web.install.option.wicon.deducted.tip=L'icona verrà detratta da {} durante l'installazione
web.install.option.wicon.displayed.label=Visualizzata
web.install.option.wicon.displayed.tip=L'icona visualizzata sulla tabella verrà utilizzata per l'installazione
web.install.option.wicon.label=Icona
web.install.option.widevine.label=Consenti contenuto protetto
web.install.option.widevine.tip=Consente l'interazione con contenuti protetti/crittografati comunemente utilizzati dai servizi di streaming (come video, musica, ...). Utilizza una versione alternativa di Electron sviluppata da castLabs.
web.install.options.advanced=avanzato
web.install.options.basic=basico
web.install.options_dialog.title=Opzioni di installazione Web
web.install.substatus.call_nativefier=In esecuzione {}
web.install.substatus.checking_fixes=Verifica se sono presenti correzioni pubblicate
web.install.substatus.options=In attesa delle opzioni di installazione
web.install.substatus.shortcut=Generazione di un collegamento al menu
web.settings.cache_exp=Scadenza delle impostazioni dell'ambiente
web.settings.cache_exp.tip=Definisce il periodo (in ORE) in cui le impostazioni dell'ambiente memorizzate sono considerate valide. Utilizzare 0 in modo che siano sempre aggiornate.
web.settings.electron.version.label=Versione di electron
web.settings.electron.version.tooltip=Definisce una versione Electron alternativa per eseguire il rendering delle nuove app installate
web.settings.env.nativefier.system.not_installed={} sembra non essere installato sul tuo sistema
web.settings.nativefier.env.tooltip=La versione di Nativefier installata nell'ambiente {app} isolato verrà utilizzata per installare le applicazioni
web.settings.nativefier.env=ambiente
web.settings.nativefier.system.tooltip=La versione di Nativefier installata sul tuo sistema verrà utilizzata per installare le applicazioni
web.settings.nativefier.system=sistema
web.settings.nativefier.tip=Definisce quale versione di Nativefier deve essere utilizzata per generare le applicazioni Web
web.settings.suggestions.cache_exp=Scadenza dei suggerimenti
web.settings.suggestions.cache_exp.tip=Definisce il periodo (in ORE) in cui i suggerimenti memorizzati sul disco vengono considerati aggiornati durante il processo di inizializzazione. Utilizzare 0 in modo che siano sempre aggiornati
web.task.download_settings=Aggiornamento delle impostazioni dell'ambiente
web.task.search_index=Suggerimenti per l'indicizzazione
web.task.suggestions.saving=Salvataggio su disco
web.uninstall.error.install_dir.not_found=La directory di installazione {} non è stata trovata
web.uninstall.error.remove_dir=Non è stato possibile rimuovere {}
web.waiting.env_updater=Aggiornamento dell'ambiente

View File

@@ -1,87 +0,0 @@
gem.web.info=Permite instalar aplicações Web através dos seus endereços (URL)
gem.web.install.warning=Esse aplicativo não é oficialmente distribuído pelo proprietário do domínio
web.custom_action.clean_env.failed=Ocorreu um problema durante a limpeza do ambiente de instalação
web.custom_action.clean_env.status=Limpando ambiente de instalação
web.custom_action.clean_env.success=Ambiente de instalação limpo
web.custom_action.clean_env=Limpar ambiente de instalação
web.custom_action.clean_env.desc=Remove todos os softwares e arquivos de configuração do ambiente instalação
web.custom_action.install_app=Instalar aplicação Web
web.custom_action.install_app.desc=Permite instalar um Web site como uma aplicação
web.custom_action.install_app.invalid_url=O endereço {URL} {url} não foi encontrado. Não é possível finalizar a instalação.
web.custom_action.install_app.status=Instalando aplicação Web
web.env.checking=Verificando o ambiente de instalação Web
web.env.error=Parce que existem problemas com o ambiente de instalação Web. Não será possível instalar {}.
web.environment.nativefier=Instalando {}
web.info.01_url=URL
web.info.02_description=descrição
web.info.03_version=versão
web.info.04_categories=categorias
web.info.05_installation_dir=diretório de instalação
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.install.env_update.body=Os seguintes arquivo precisam ser baixados e instalados
web.install.env_update.title=Atualização de ambiente
web.install.global_nativefier.unavailable={n} não parece estar instalado no seu sistema. Não será possível instalar {app}
web.install.nativefier.error.inner_dir=O diretório de instalação do aplicativo não foi encontrado em {}
web.install.nativefier.error.unknown=Dê uma olhada em {} para identificar o motivo
web.install.option.allow_urls.label=Permitir URLs internas
web.install.option.allow_urls.tip=Permite que o aplicativo abra internamente endereços / URLs fora do seu domínio. Exemplo: outlook.live.com conseguiria abrir account.microsoft.com
web.install.option.category.none=nenhuma
web.install.option.fullscreen.label=Abrir em tela cheia
web.install.option.fullscreen.tip=Se o aplicativo sempre deve ser aberto em tela cheia ( a tecla Alt abre o menu superior )
web.install.option.icon.label=Ícone alternativo
web.install.option.ignore_certificate.label=Ignorar erros de certificado
web.install.option.ignore_certificate.tip=Erros associados a certificados serão ignorados pelo aplicativo
web.install.option.insecure.label=Permitir conteúdo não confiável
web.install.option.insecure.tip=Permite a execução de conteúdo não confiável dentro do aplicativo
web.install.option.max.label=Abrir maximizado
web.install.option.max.tip=Se o aplicativo deve sempre ser aberto maximizado
web.install.option.nocache.label=Sem cache
web.install.option.nocache.tip=Dados de sessão não serão armazenados após o aplicativo ser fechado
web.install.option.noframe.label=Sem moldura
web.install.option.noframe.tip=Se o aplicativo não deve ter uma moldura
web.install.option.single.label=Execução única
web.install.option.single.tip=Não permitirá que o aplicativo seja aberto novamente caso o mesmo já esteja
web.install.option.tray.default.label=Abrir e anexar
web.install.option.tray.default.tip=O ícone do aplicativo será anexado a bandeja do sistema após aberto
web.install.option.tray.label=Modo bandeja
web.install.option.tray.min.label=Iniciar minimizado
web.install.option.tray.min.tip=O aplicativo será iniciado minimizado como um ícone da bandeja do sistema
web.install.option.tray.off.label=Desligado
web.install.option.tray.off.tip=Desligado
web.install.option.wicon.deducted.label=Deduzido
web.install.option.wicon.deducted.tip=O ícone será deduzido pelo {} durante a instalação
web.install.option.wicon.displayed.label=Exibido
web.install.option.wicon.displayed.tip=O ícone exibido na tabela será utilizado para a instalação
web.install.option.wicon.label=Ícone
web.install.option.widevine.label=Permitir conteúdo protegido
web.install.option.widevine.tip=Permite a interação com conteúdo protegido/criptografado comumente utilizados por serviços de streaming (como videos, música, ...). Utiliza uma versão alternativa do Electron desenvolvida pela castLabs.
web.install.options.advanced=avançadas
web.install.options.basic=básicas
web.install.options_dialog.title=Opções de instalação Web
web.install.substatus.call_nativefier=Executando {}
web.install.substatus.checking_fixes=Verificando se há correções publicadas
web.install.substatus.options=Aguardando as opções de instalação
web.install.substatus.shortcut=Criando um atalho no menu
web.settings.cache_exp=Expiração das configurações de ambiente
web.settings.cache_exp.tip=Define o período (em HORAS) em que as configurações do ambiente de instalação armazenadas são consideradas válidas. Utilize 0 para que elas sejam sempre atualizadas.
web.settings.electron.version.label=Versão do Electron
web.settings.electron.version.tooltip=Define uma versão alternativa do Electron para renderizar os novos aplicativos instalados
web.settings.env.nativefier.system.not_installed={} não parece estar instalado no seu 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.env=ambiente
web.settings.nativefier.system.tooltip=A versão do Nativefier instalada no seu sistema será utilizada para instalar aplicativos
web.settings.nativefier.system=sistema
web.settings.nativefier.tip=Define qual versão do Nativefier será utilizada para gerar os aplicativos Web
web.settings.suggestions.cache_exp=Expiração de sugestões
web.settings.suggestions.cache_exp.tip=Define o período (em HORAS) em que as sugestões armazenadas em disco são consideradas atualizadas durante a inicialização. Use 0 para que elas sejam sempre atualizadas.
web.task.download_settings=Atualizando configurações de ambiente
web.task.search_index=Indexando sugestões
web.task.suggestions.saving=Salvando em disco
web.uninstall.error.install_dir.not_found=O diretório de instalação {} não foi encontrado
web.uninstall.error.remove=Não foi possível remover {}
web.waiting.env_updater=Atualizando ambiente
wen.install.error=Ocorreu um erro durante a instalação de {}

View File

@@ -1,87 +0,0 @@
gem.web.info=Позволяет устанавливать веб-приложения
gem.web.install.warning=Это приложение официально не поддерживается владельцем домена
web.custom_action.clean_env=Очистка среды установки
web.custom_action.clean_env.failed=Произошла ошибка при очистке среды установки
web.custom_action.clean_env.status=Среда установки будет очищена
web.custom_action.clean_env.success=Среда установки очищена!
web.custom_action.clean_env.desc=Удаление всех программных и конфигурационных файлов из среды установки
web.custom_action.install_app=Установить веб-приложение
web.custom_action.install_app.desc=Позволяет установить Web-сайт в качестве приложения
web.custom_action.install_app.invalid_url=Адрес {URL} {url} не может быть найден. Невозможно завершить установку.
web.custom_action.install_app.status=Установка веб-приложения
web.env.checking=Проверка Веб-среды
web.env.error=Проблемы с Веб-средой. Невозможно установить {}.
web.environment.install=Устанавливается {}
web.info.01_url=URL
web.info.02_description=описание
web.info.03_version=версия
web.info.04_categories=категории
web.info.05_installation_dir=каталог установки
web.info.06_desktop_entry=ярлык
web.info.07_exec_file=исполняемый
web.info.08_icon_path=значок
web.info.09_size=размер
web.info.10_config_dir=каталог конфигурационных файлов
web.install.env_update.body=Следующие файлы должны быть загружены и установлены
web.install.env_update.title=Обновление Веб-среды
web.install.error=Произошла ошибка во время установки {}
web.install.global_nativefier.unavailable={n} не установлен в вашей системе, что не позволит установить {app}
web.install.nativefier.error.inner_dir=Каталог установки приложения не был найден в {}
web.install.nativefier.error.unknown=Проверьте {} что-бы определить причину
web.install.option.allow_urls.label=Разрешить внутренние URL-адреса
web.install.option.allow_urls.tip=Позволяет приложению открывать внешние адреса / URL-адреса за пределами своей области. например: outlook.live.com сможет открыть account.microsoft.com
web.install.option.category.none=нет
web.install.option.fullscreen.label=Запускать во весь экран
web.install.option.fullscreen.tip=Приложение будет запущено во весь экран ( клавиша Alt открывает верхнее меню )
web.install.option.icon.label=Пользовательский значок
web.install.option.ignore_certificate.label=Игнорировать ошибки сертификата
web.install.option.ignore_certificate.tip=Ошибки, связанные с сертификатами, будут игнорироваться
web.install.option.insecure.label=Разрешить небезопасное содержимое
web.install.option.insecure.tip=Позволяет выполнять незащищенное содержимое внутри приложения
web.install.option.max.label=Запускать развернутым
web.install.option.max.tip=Окно приложения запустится развернутым
web.install.option.nocache.label=без кэша
web.install.option.nocache.tip=Данные сессии не будут сохранены после того, как приложение будет закрыто
web.install.option.noframe.label=Без рамки
web.install.option.noframe.tip=Приложение будет запущено без рамки окна
web.install.option.single.label=Не запускать повтороно
web.install.option.single.tip=Эта опция не позволит приложению запуститься, если оно уже работает
web.install.option.tray.default.label=Запустить и прикрепить
web.install.option.tray.default.tip=Значок приложения будет прикреплен к панели задач после запуска
web.install.option.tray.label=Режим лотка
web.install.option.tray.min.label=Запускать свернутым
web.install.option.tray.min.tip=Приложение будет запущено свернутым в значок системного лотка
web.install.option.tray.off.label=Выкл
web.install.option.tray.off.tip=Выкл
web.install.option.wicon.deducted.label=Значок приложения
web.install.option.wicon.deducted.tip=Значок будет взят из {} в процессе установки
web.install.option.wicon.displayed.label=Отображать
web.install.option.wicon.displayed.tip=Значок, отображаемый на столе, будет использоваться для установки
web.install.option.wicon.label=Значок
web.install.option.widevine.label=Разрешить защищенный контент
web.install.option.widevine.tip=Позволяет взаимодействовать с защищенным/зашифрованным контентом, обычно используемым в потоковых сервисах (видео, музыка, ...). Используется альтернативная версия Electron, разработанная компанией castLabs.
web.install.options.advanced=расширенные
web.install.options.basic=базовые
web.install.options_dialog.title=опции установки
web.install.substatus.call_nativefier=Работает {}
web.install.substatus.checking_fixes=Проверка опубликованных исправлений
web.install.substatus.options=Ожидание опций установки
web.install.substatus.shortcut=Создается ярлык в меню
web.settings.cache_exp=Срок действия настроек среды
web.settings.cache_exp.tip=Определяет период (в часах), в течение которого сохраненные настройки среды считаются действительными. Используйте 0, чтобы они всегда обновлялись.
web.settings.electron.version.label=Версия Electron
web.settings.electron.version.tooltip=Указывает альтернативный вариант Electron для визуализации устанавливаемых приложений
web.settings.env.nativefier.system.not_installed={} не установлен в Вашей системе
web.settings.nativefier.env=Из Веб-среды
web.settings.nativefier.env.tooltip=Будет использоваться версия Nativefier установленная в изолированную Веб-среду {app}
web.settings.nativefier.system=Из системы
web.settings.nativefier.system.tooltip=Будет использоваться версия Nativefier установленная в Вашей системе
web.settings.nativefier.tip=Определяет, какие Nativefier версии должны быдут использованы для установки веб-приложений
web.settings.suggestions.cache_exp=Срок действия предложений
web.settings.suggestions.cache_exp.tip=Определяет период (в часах), в течение которого предложения, хранящиеся на диске, считаются актуальными в процессе инициализации. Используйте 0, чтобы предложения всегда обновлялись
web.task.download_settings=Обновление настроек среды
web.task.search_index=Рекомендации для индексации
web.task.suggestions.saving=Сохранение на диск
web.uninstall.error.install_dir.not_found=Каталог установки {} не найден
web.uninstall.error.remove_dir=Не удалось удалить {}
web.waiting.env_updater=Обнавляется Веб-среда

View File

@@ -1,87 +0,0 @@
gem.web.info=Web uygulamalarını adresleri (URL'ler) aracılığıyla sisteme yüklemeye izin verir
gem.web.install.warning=Bu uygulama resmi olarak alan adı sahibi tarafından dağıtılmamış
web.custom_action.clean_env.failed=Kurulum ortamı temizliği sırasında bir hata oluştu
web.custom_action.clean_env.status=Kurulum ortamını temizleme
web.custom_action.clean_env.success=Kurulum ortamı temizlendi
web.custom_action.clean_env=Temiz kurulum ortamı
web.custom_action.clean_env.desc=Removes all software and configuration files from the installation environment
web.custom_action.install_app=Install Web application
web.custom_action.install_app.desc=Allows to install a Web site as an application
web.custom_action.install_app.invalid_url=The address {URL} {url} could not be found. It is not possible to finish the installation.
web.custom_action.install_app.status=Installing Web application
web.env.checking=Web kurulum ortamını kontrol et
web.env.error=Görünüşe göre Web kurulum ortamıyla ilgili sorunlar var. {} kurmak mümkün olmayacak.
web.environment.install={} yükleniyor
web.info.01_url=URL
web.info.02_description=açıklama
web.info.03_version=sürüm
web.info.04_categories=kategoriler
web.info.05_installation_dir=kurulum dizini
web.info.06_desktop_entry=kısayol
web.info.07_exec_file=çalıştırılabilir
web.info.08_icon_path=simge
web.info.09_size=boyut
web.info.10_config_dir=yapılandırma dizini
web.install.env_update.body=Aşağıdaki dosyalar indirilmeli ve kurulmalıdır
web.install.env_update.title=Ortam güncellemesi
web.install.error={} kurulumu sırasında bir hata oluştu
web.install.global_nativefier.unavailable={n} sisteminize kurulmamış gibi görünüyor. {app} yüklemek mümkün olmayacak
web.install.nativefier.error.inner_dir=Uygulama yükleme dizini {} içinde bulunamadı
web.install.nativefier.error.unknown=Nedeni belirlemek için {}
web.install.option.allow_urls.label=Dahili bağlantılara izin ver
web.install.option.allow_urls.tip=Uygulamanın kendi etki alanı dışındaki adresleri / bağlantıları dahili olarak açmasına izin verir. örneğin: outlook.live.com account.microsoft.com'u açabilir
web.install.option.category.none=hiçbiri
web.install.option.fullscreen.label=Tam ekranda aç
web.install.option.fullscreen.tip=Uygulamanın her zaman tam ekran açılması gerekiyorsa (Alt tuşu üst menüyü açar)
web.install.option.icon.label=Özel simge
web.install.option.ignore_certificate.label=Sertifika hatalarını yoksay
web.install.option.ignore_certificate.tip=Sertifika ile ilgili hatalar uygulama tarafından yok sayılır
web.install.option.insecure.label=Güvenli olmayan içeriğe izin ver
web.install.option.insecure.tip=Uygulama içinde güvenli olmayan içeriğin yürütülmesine izin verir
web.install.option.max.label= Maksimize açık
web.install.option.max.tip=Uygulamanın her zaman maximize düzeye açılması gerekiyorsa
web.install.option.nocache.label=Önbellek yok
web.install.option.nocache.tip=Oturum verileri uygulama kapatıldıktan sonra saklanmayacak
web.install.option.noframe.label=Çerçeve yok
web.install.option.noframe.tip=Uygulamanın bir çerçevesi olmamalı
web.install.option.single.label=Tek çalıştırma
web.install.option.single.tip=Zaten açıksa, uygulamanın tekrar açılmasına izin vermez
web.install.option.tray.default.label=Aç ve ekle
web.install.option.tray.default.tip=Uygulama simgesi açıldıktan sonra sistem tepsisine eklenecek
web.install.option.tray.label=Sistem tepsi modu
web.install.option.tray.min.label=Simge durumuna küçült
web.install.option.tray.min.tip=Uygulama, sistem tepsisinde bir simge simge durumuna küçültülecek
web.install.option.tray.off.label=Kapalı
web.install.option.tray.off.tip=Kapalı
web.install.option.wicon.deducted.label=Mahsup
web.install.option.wicon.deducted.tip=Kurulum sırasında simge {} tarafından kesilecek
web.install.option.wicon.displayed.label=Görüntülenen
web.install.option.wicon.displayed.tip=Tabloda görüntülenen simge kurulum için kullanılacaktır
web.install.option.wicon.label=Simge
web.install.option.widevine.label=Allow protected content
web.install.option.widevine.tip=It allows the interaction with protected/encrypted content commonly used by streaming services (like videos, music, ...). It uses and alternative Electron version developed by castLabs.
web.install.options.advanced=gelişmiş
web.install.options.basic=basit
web.install.options_dialog.title=Kurulum seçenekleri
web.install.substatus.call_nativefier={} çalışıyor
web.install.substatus.checking_fixes=Yayınlanmış düzeltmeler olup olmadığını kontrol et
web.install.substatus.options=Kurulum seçenekleri bekleniyor
web.install.substatus.shortcut=Bir menü kısayolu oluşturuluyor
web.settings.cache_exp=Environment settings expiration
web.settings.cache_exp.tip=It defines the period (in HOURS) in which the stored environment settings are considered valid. Use 0 so that they are always updated.
web.settings.electron.version.label=Electron sürümü
web.settings.electron.version.tooltip=Yeni yüklenen uygulamaları oluşturmak için alternatif bir Elektron sürümü tanımlar
web.settings.env.nativefier.system.not_installed={} sisteminize kurulu değil gibi görünüyor
web.settings.nativefier.env.tooltip=İzole {app} ortamına yüklenen Nativefier sürümü, uygulamaları yüklemek için kullanılacaktır
web.settings.nativefier.env=çevre
web.settings.nativefier.system.tooltip=Sisteminizde yüklü olan Nativefier sürümü uygulamaları yüklemek için kullanılacaktır
web.settings.nativefier.system=sistem
web.settings.nativefier.tip=Web uygulamalarını oluşturmak için hangi Nativefier sürümünün kullanılması gerektiğini tanımlar
web.settings.suggestions.cache_exp=Suggestions expiration
web.settings.suggestions.cache_exp.tip=It defines the period (in HOURS) in which suggestions stored on the disk are considered up to date during the initialization process. Use 0 so that they are always updated
web.task.download_settings=Ortam ayarları güncelleniyor
web.task.search_index=Indexing suggestions
web.task.suggestions.saving=Saving to disk
web.uninstall.error.install_dir.not_found={} kurulum dizini bulunamadı
web.uninstall.error.remove_dir={} kaldırmak mümkün olmadı
web.waiting.env_updater=Ortam güncelleniyor

View File

@@ -1,81 +0,0 @@
gem.web.info=允许通过其地址(URL)在系统上安装 Web 应用程序
gem.web.install.warning=此应用程序未由其域所有者官方分发
web.custom_action.clean_env.failed=在安装环境清理期间发生错误
web.custom_action.clean_env.status=清理安装环境
web.custom_action.clean_env.success=安装环境已清理
web.custom_action.clean_env=清理安装环境
web.custom_action.clean_env.desc=从安装环境中删除所有软件和配置文件
web.custom_action.install_app=安装 Web 应用程序
web.custom_action.install_app.desc=允许将 Web 站点安装为应用程序
web.custom_action.install_app.invalid_url=找不到地址 {URL} {url}。无法完成安装。
web.custom_action.install_app.status=安装 Web 应用程序
web.env.checking=检查 Web 安装环境
web.env.error=似乎存在 Web 安装环境问题。将无法安装 {}。
web.environment.install=安装 {}
web.info.01_url=URL
web.info.02_description=描述
web.info.03_version=版本
web.info.04_categories=类别
web.info.05_installation_dir=安装目录
web.info.06_desktop_entry=快捷方式
web.info.07_exec_file=可执行文件
web.info.08_icon_path=图标
web.info.09_size=大小
web.info.10_config_dir=配置目录
web.install.env_update.body=必须下载并安装以下文件
web.install.env_update.title=环境更新
web.install.error=在 {} 安装期间发生错误
web.install.global_nativefier.unavailable={} 似乎未安装在您的系统上。将无法安装 {app}
web.install.nativefier.error.inner_dir=在 {} 中未找到应用程序安装目录
web.install.nativefier.error.unknown=查看 {} 以查明原因
web.install.option.allow_urls.label=允许内部 URL
web.install.option.allow_urls.tip=允许应用程序在其域之外内部打开地址 / URL。例如outlook.live.com 将能够打开 account.microsoft.com
web.install.option.category.none=无
web.install.option.fullscreen.label=全屏打开
web.install.option.fullscreen.tip=如果应用程序应始终以全屏打开(Alt 键打开上方菜单)
web.install.option.icon.label=自定义图标
web.install.option.ignore_certificate.label=忽略证书错误
web.install.option.ignore_certificate.tip=应用程序将忽略与证书相关的错误
web.install.option.insecure.label=允许不安全内容
web.install.option.insecure.tip=允许在应用程序中执行不安全内容
web.install.option.max.label=最大化打开
web.install.option.max.tip=如果应用程序应始终以最大化打开
web.install.option.nocache.label=无缓存
web.install.option.nocache.tip=会话数据将在应用程序关闭后不会被存储
web.install.option.noframe.label=无框架
web.install.option.noframe.tip=应用程序是否应该没有框架
web.install.option.single.label=单次运行
web.install.option.single.tip=如果已经打开,则不允许再次打开应用程序
web.install.option.tray.default.label=打开并附加
web.install.option.tray.default.tip=应用程序图标将在打开后附加到系统托盘
web.install.option.tray.label=托盘模式
web.install.option.tray.min.label=启动时最小化
web.install.option.tray.min.tip=应用程序将以最小化的方式作为系统托盘中的图标启动
web.install.option.tray.off.label=关闭
web.install.option.tray.off.tip=关闭
web.install.option.wicon.deducted.label=扣除
web.install.option.wicon.deducted.tip=在安装期间将由 {} 扣除图标
web.install.option.wicon.displayed.label=显示
web.install.option.wicon.displayed.tip=在表上显示的图标将用于安装
web.install.option.wicon.label=图标
web.install.option.widevine.label=允许受保护的内容
web.install.option.widevine.tip=允许与流媒体服务(如视频、音乐等)中常用的受保护 / 加密内容进行交互。它使用 castLabs 开发的替代 Electron 版本。
web.install.options.advanced=高级
web.install.options.basic=基本
web.install.options_dialog.title=Web 安装选项
web.install.substatus.call_nativefier=运行 {}
web.install.substatus.checking_fixes=检查是否有发布的修复
web.install.substatus.options=等待安装选项
web.install.substatus.shortcut=生成菜单快捷方式
web.settings.cache_exp=环境设置过期时间
web.settings.cache_exp.tip=它定义了存储的环境设置在初始化过程中被视为有效的时间段(以小时为单位)。使用 0 使其始终更新。
web.settings.electron.version.label=Electron 版本
web.settings.electron.version.tooltip=定义用于呈现新安装应用程序的替代 Electron 版本
web.settings.env.nativefier.system.not_installed={} 似乎未安装在您的系统上
web.settings.nativefier.env.tooltip=将在隔离的 {app} 环境中安装的 Nativefier 版本用于安装应用程序
web.settings.nativefier.env=环境
web.settings.nativefier.system.tooltip=将在您的系统上安装的 Nativefier 版本用于安装应用程序
web.settings.nativefier.system=系统
web.settings.nativefier.tip=定义应该用于生成 Web 应用程序的 Nativefier 版本
web.settings.suggestions.cache_exp=建议过期时间
web.settings.suggestions.cache_exp.tip=它定义了在初始化过程中磁盘上存储的建议被视

View File

@@ -1,67 +0,0 @@
import os
import time
import traceback
from logging import Logger
from typing import Optional
import yaml
from bauh.gems.web import SEARCH_INDEX_FILE
class SearchIndexManager:
def __init__(self, logger: Logger):
self.logger = logger
def generate(self, suggestions: dict) -> Optional[dict]:
if suggestions:
ti = time.time()
index = {}
for key, sug in suggestions.items():
name = sug.get('name')
if name:
split_name = name.lower().strip().split(' ')
single_name = ''.join(split_name)
for word in (*split_name, single_name):
mapped = index.get(word)
if not mapped:
mapped = set()
index[word] = mapped
mapped.add(key)
tf = time.time()
self.logger.info("Took {0:.4f} seconds to generate the index".format(tf - ti))
return index
def read(self) -> Optional[dict]:
if os.path.exists(SEARCH_INDEX_FILE):
with open(SEARCH_INDEX_FILE) as f:
return yaml.safe_load(f.read())
else:
self.logger.warning("No search index found at {}".format(SEARCH_INDEX_FILE))
def write(self, index: dict) -> bool:
if index:
self.logger.info('Preparing search index for writing') # YAML does not work with 'sets'
for key in index.keys():
index[key] = list(index[key])
try:
self.logger.info('Writing {} indexed keys as {}'.format(len(index), SEARCH_INDEX_FILE))
with open(SEARCH_INDEX_FILE, 'w+') as f:
f.write(yaml.safe_dump(index))
self.logger.info("Search index successfully written at {}".format(SEARCH_INDEX_FILE))
return True
except Exception:
self.logger.error("Could not write the search index to {}".format(SEARCH_INDEX_FILE))
traceback.print_exc()
return False

View File

@@ -1,166 +0,0 @@
import os
import traceback
from datetime import datetime, timedelta, timezone
from logging import Logger
from pathlib import Path
from typing import Optional
import requests
import yaml
from bauh.api.http import HttpClient
from bauh.commons.util import map_timestamp_file
from bauh.gems.web import WEB_CACHE_DIR
from bauh.view.util.translation import I18n
class SuggestionsManager:
def __init__(self, http_client: HttpClient, logger: Logger, i18n: I18n, file_url: Optional[str]):
self.http_client = http_client
self.logger = logger
self.i18n = i18n
if file_url:
self._file_url = file_url
else:
self._file_url = "https://raw.githubusercontent.com/vinifmor/bauh-files/master/web/env/v2/suggestions.yml"
self._cached_file_path = f'{WEB_CACHE_DIR}/suggestions.yml'
self._cached_file_ts_path = map_timestamp_file(self._cached_file_path)
@property
def file_url(self) -> Optional[str]:
return self._file_url
def is_custom_local_file_mapped(self) -> bool:
return self._file_url and self._file_url.startswith('/')
def should_download(self, web_config: dict) -> bool:
if not self._file_url:
return False
if self.is_custom_local_file_mapped():
return False
exp = web_config['suggestions']['cache_exp']
if web_config['suggestions']['cache_exp'] is None:
self.logger.info("No cache expiration defined for suggestions")
return True
try:
exp = int(exp)
except ValueError:
self.logger.error(f"Error while parsing the 'suggestions.cache_exp' ({exp}) settings property")
return True
if exp <= 0:
self.logger.info(f"No cache expiration defined for suggestions ({exp})")
return True
if not os.path.exists(self._cached_file_path):
self.logger.info(f"No suggestions cached file found '{self._cached_file_path}'")
return True
if not os.path.exists(self._cached_file_ts_path):
self.logger.info(f"No suggestions cache file timestamp found '{self._cached_file_ts_path}'")
return True
with open(self._cached_file_ts_path) as f:
timestamp_str = f.read()
try:
sugs_timestamp = datetime.fromtimestamp(float(timestamp_str), tz=timezone.utc)
except Exception:
self.logger.error(f"Could not parse the cached suggestions file timestamp: {timestamp_str}")
return True
expired = sugs_timestamp + timedelta(days=exp) <= datetime.now(timezone.utc)
if expired:
self.logger.info("Cached suggestions file has expired.")
return True
else:
self.logger.info("Cached suggestions file is up to date")
return False
def get_cached_file_path(self) -> str:
return self._file_url if self.is_custom_local_file_mapped() else self._cached_file_path
def read_cached(self, check_file: bool = True) -> dict:
if self.is_custom_local_file_mapped():
file_path, log_ref = self._file_url, 'local'
else:
file_path, log_ref = self._cached_file_path, 'cached'
if check_file and not os.path.exists(file_path):
self.logger.warning(f"{log_ref.capitalize()} suggestions file does not exist ({file_path})")
return {}
self.logger.info(f"Reading {log_ref} suggestions file '{file_path}'")
with open(file_path) as f:
sugs_str = f.read()
if not sugs_str:
self.logger.warning(f"{log_ref.capitalize()} suggestions file '{file_path}' is empty")
return {}
try:
return yaml.safe_load(sugs_str)
except Exception:
self.logger.error("An unexpected exception happened")
traceback.print_exc()
return {}
def download(self) -> dict:
self.logger.info(f"Reading suggestions from {self._file_url}")
try:
suggestions = self.http_client.get_yaml(self._file_url, session=False)
if suggestions:
self.logger.info(f"{len(suggestions)} suggestions successfully read")
else:
self.logger.warning(f"Could not read suggestions from {self._file_url}")
except (requests.exceptions.ConnectionError, requests.exceptions.ConnectTimeout):
self.logger.warning("Internet seems to be off: it was not possible to retrieve the suggestions")
suggestions = {}
self.logger.info("Finished")
return suggestions
def save_to_disk(self, suggestions: dict, timestamp: float):
if not suggestions:
return
if self.is_custom_local_file_mapped():
return
self.logger.info(f'Caching {len(suggestions)} suggestions to the disk')
suggestions_file_dir = os.path.dirname(self._cached_file_path)
try:
Path(suggestions_file_dir).mkdir(parents=True, exist_ok=True)
except OSError:
self.logger.error(f"Could not generate the directory {suggestions_file_dir}")
traceback.print_exc()
return
try:
with open(self._cached_file_path, 'w+') as f:
f.write(yaml.safe_dump(suggestions))
except Exception:
self.logger.error(f"Could write to {self._cached_file_path}")
traceback.print_exc()
return
self.logger.info(f"{len(suggestions)} suggestions successfully cached to file '{self._cached_file_path}'")
try:
with open(self._cached_file_ts_path, 'w+') as f:
f.write(str(timestamp))
except Exception:
self.logger.error(f"Could not write to {self._cached_file_ts_path}")
traceback.print_exc()
return
self.logger.info(f"Suggestions cached file timestamp ({timestamp}) "
f"successfully saved at '{self._cached_file_ts_path}'")

View File

@@ -1,136 +0,0 @@
import logging
import time
import traceback
from datetime import datetime, timezone
from threading import Thread
from typing import Optional
from bauh.api.abstract.handler import TaskManager
from bauh.commons.boot import CreateConfigFile
from bauh.commons.html import bold
from bauh.gems.web import get_icon_path
from bauh.gems.web.environment import EnvironmentUpdater
from bauh.gems.web.search import SearchIndexManager
from bauh.gems.web.suggestions import SuggestionsManager
from bauh.view.util.translation import I18n
class SuggestionsLoader(Thread):
def __init__(self, taskman: TaskManager, manager: SuggestionsManager,
i18n: I18n, logger: logging.Logger, suggestions_callback, create_config: CreateConfigFile,
internet_connection: bool, suggestions: Optional[dict] = None):
super(SuggestionsLoader, self).__init__(daemon=True)
self.taskman = taskman
self.task_id = 'web_sugs'
self.manager = manager
self.suggestions_callback = suggestions_callback
self.i18n = i18n
self.logger = logger
self.suggestions = suggestions
self.create_config = create_config
self.internet_connection = internet_connection
self.task_name = self.i18n['task.download_suggestions']
self.taskman.register_task(self.task_id, self.task_name, get_icon_path())
def run(self):
ti = time.time()
if self.manager.is_custom_local_file_mapped():
self.taskman.update_progress(self.task_id, 50, None)
self.logger.info(f"Local Web suggestions file mapped: {self.manager.file_url}")
self.suggestions = self.manager.read_cached()
else:
wait_msg = self.i18n['task.waiting_task'].format(bold(self.create_config.task_name))
self.taskman.update_progress(self.task_id, 0, wait_msg)
self.create_config.join()
self.taskman.update_progress(self.task_id, 10, None)
if not self.internet_connection:
self.logger.warning("No internet connection. Only cached suggestions can be loaded")
self.suggestions = self.manager.read_cached()
elif not self.manager.should_download(self.create_config.config):
self.suggestions = self.manager.read_cached(check_file=False)
else:
try:
timestamp = datetime.now(timezone.utc).timestamp()
self.suggestions = self.manager.download()
if self.suggestions:
self.taskman.update_progress(self.task_id, 50, self.i18n['web.task.suggestions.saving'])
self.manager.save_to_disk(self.suggestions, timestamp)
except Exception:
self.logger.error("Unexpected exception")
traceback.print_exc()
if self.suggestions_callback:
self.taskman.update_progress(self.task_id, 75, None)
try:
self.suggestions_callback(self.suggestions)
except Exception:
self.logger.error("Unexpected exception")
traceback.print_exc()
self.taskman.update_progress(self.task_id, 100, None)
self.taskman.finish_task(self.task_id)
tf = time.time()
self.logger.info("Finished. Took {0:.4f} seconds".format(tf - ti))
class SearchIndexGenerator(Thread):
def __init__(self, taskman: TaskManager, idxman: SearchIndexManager, suggestions_loader: SuggestionsLoader,
i18n: I18n, logger: logging.Logger):
super(SearchIndexGenerator, self).__init__(daemon=True)
self.taskman = taskman
self.idxman = idxman
self.i18n = i18n
self.logger = logger
self.suggestions_loader = suggestions_loader
self.task_id = 'web_idx_gen'
self.taskman.register_task(self.task_id, self.i18n['web.task.search_index'], get_icon_path())
def run(self):
ti = time.time()
if self.suggestions_loader.is_alive():
wait_msg = self.i18n['task.waiting_task'].format(bold(self.suggestions_loader.task_name))
self.taskman.update_progress(self.task_id, 0, wait_msg)
self.suggestions_loader.join()
if self.suggestions_loader.suggestions:
self.taskman.update_progress(self.task_id, 1, None)
self.logger.info('Indexing suggestions')
index = self.idxman.generate(self.suggestions_loader.suggestions)
if index:
self.taskman.update_progress(self.task_id, 50, self.i18n['web.task.suggestions.saving'])
self.idxman.write(index)
self.taskman.update_progress(self.task_id, 100, None)
self.taskman.finish_task(self.task_id)
tf = time.time()
self.logger.info("Finished. Took {0:.4f} seconds".format(tf - ti))
class UpdateEnvironmentSettings(Thread):
def __init__(self, env_updater: EnvironmentUpdater, taskman: TaskManager, i18n: I18n, create_config: CreateConfigFile):
super(UpdateEnvironmentSettings, self).__init__(daemon=True)
self.env_updater = env_updater
self.taskman = taskman
self.create_config = create_config
self.task_id = env_updater.task_read_settings_id
self.i18n = i18n
def run(self):
self.taskman.register_task(self.task_id, self.i18n['web.task.download_settings'], get_icon_path())
self.taskman.update_progress(self.task_id, 1, self.i18n['task.waiting_task'].format(bold(self.create_config.task_name)))
self.create_config.join()
web_config = self.create_config.config
if self.env_updater.should_download_settings(web_config):
self.env_updater.read_settings(web_config=web_config, cache=False)
else:
self.taskman.update_progress(self.task_id, 100, None)
self.taskman.finish_task(self.task_id)