[wgem] config | allowing to use system nativefier

This commit is contained in:
Vinícius Moreira
2019-12-17 15:23:40 -03:00
parent f12b653393
commit e87c95ea9e
5 changed files with 73 additions and 18 deletions

View File

@@ -1,7 +1,7 @@
import os
from pathlib import Path
from bauh.api.constants import HOME_PATH, DESKTOP_ENTRIES_DIR
from bauh.api.constants import HOME_PATH, DESKTOP_ENTRIES_DIR, CONFIG_PATH
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
WEB_PATH = '{}/.local/share/bauh/web'.format(Path.home())
@@ -24,4 +24,4 @@ UA_CHROME = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gec
TEMP_PATH = '/tmp/bauh/web'
SEARCH_INDEX_FILE = '{}/index.yaml'.format(TEMP_PATH)
SUGGESTIONS_CACHE_FILE = '{}/suggestions.yaml'.format(TEMP_PATH)
CONFIG_FILE = '{}/.config/bauh/web/config.yaml'.format(Path.home())
CONFIG_FILE = '{}/web.yaml'.format(CONFIG_PATH)

22
bauh/gems/web/config.py Normal file
View File

@@ -0,0 +1,22 @@
import os
from pathlib import Path
import yaml
from bauh.api.constants import CONFIG_PATH
from bauh.gems.web import CONFIG_FILE
def read_config() -> dict:
if not os.path.exists(CONFIG_FILE):
config = {'environment': {'system': False}}
Path(CONFIG_PATH).mkdir(parents=True, exist_ok=True)
with open(CONFIG_FILE, 'w+') as f:
f.write(yaml.dump(config))
else:
with open(CONFIG_FILE) as f:
config = yaml.safe_load(f.read())
return config

View File

@@ -26,6 +26,7 @@ from bauh.commons.html import bold
from bauh.commons.system import ProcessHandler, get_dir_size, get_human_size_str
from bauh.gems.web import INSTALLED_PATH, nativefier, DESKTOP_ENTRY_PATH_PATTERN, URL_FIX_PATTERN, ENV_PATH, UA_CHROME, \
SEARCH_INDEX_FILE, SUGGESTIONS_CACHE_FILE
from bauh.gems.web.config import read_config
from bauh.gems.web.environment import EnvironmentUpdater
from bauh.gems.web.model import WebApplication
from bauh.gems.web.worker import SuggestionsDownloader, SearchIndexGenerator
@@ -62,7 +63,6 @@ class WebApplicationManager(SoftwareManager):
self.env_thread = None
self.suggestions_downloader = suggestions_downloader
self.suggestions = {}
self.config = {}
def _get_lang_header(self) -> str:
try:
@@ -143,9 +143,8 @@ class WebApplicationManager(SoftwareManager):
super(WebApplicationManager, self).serialize_to_disk(pkg=pkg, icon_bytes=None, only_icon=False)
def _map_url(self, url: str) -> "BeautifulSoup":
url_res = self.http_client.get(url,
headers={'Accept-language': self._get_lang_header(), 'User-Agent': UA_CHROME},
ignore_ssl=True, single_call=True)
headers = {'Accept-language': self._get_lang_header(), 'User-Agent': UA_CHROME}
url_res = self.http_client.get(url, headers=headers, ignore_ssl=True, single_call=True)
if url_res:
return BeautifulSoup(url_res.text, 'lxml', parse_only=SoupStrainer('head'))
@@ -481,9 +480,18 @@ class WebApplicationManager(SoftwareManager):
watcher.print('Fix found for {}'.format(pkg.url))
install_options.append('--inject={}'.format(fix_path))
config = read_config()
watcher.change_substatus(self.i18n['web.install.substatus.call_nativefier'].format(bold('nativefier')))
system_env = config['environment'].get('system', False)
if system_env:
self.logger.warning("Using system's nativefier to install {}".format(pkg.url))
installed = handler.handle_simple(nativefier.install(url=pkg.url, name=app_id, output_dir=app_dir,
electron_version=self.env_settings['electron']['version'],
system=system_env,
cwd=INSTALLED_PATH,
extra_options=install_options))
@@ -565,7 +573,16 @@ class WebApplicationManager(SoftwareManager):
self.enabled = enabled
def can_work(self) -> bool:
return BS4_AVAILABLE and LXML_AVAILABLE
if BS4_AVAILABLE and LXML_AVAILABLE:
config = read_config()
use_system_env = config['environment']['system']
if not use_system_env:
return True
return nativefier.is_available()
return False
def requires_root(self, action: str, pkg: SoftwarePackage):
return False

View File

@@ -12,9 +12,11 @@ from bauh.api.abstract.handler import ProcessWatcher
from bauh.api.http import HttpClient
from bauh.commons import system
from bauh.commons.html import bold
from bauh.commons.system import SimpleProcess, ProcessHandler, run_cmd
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_PATH, ELECTRON_DOWNLOAD_URL, ELECTRON_SHA256_URL, URL_ENVIRONMENT_SETTINGS, NPM_BIN_PATH, NODE_PATHS
ELECTRON_PATH, ELECTRON_DOWNLOAD_URL, ELECTRON_SHA256_URL, URL_ENVIRONMENT_SETTINGS, NPM_BIN_PATH, NODE_PATHS, \
nativefier
from bauh.gems.web.config import read_config
from bauh.view.util.translation import I18n
@@ -134,7 +136,7 @@ class EnvironmentUpdater:
if not self._is_nativefier_installed():
return self._install_nativefier(version=version, handler=handler)
installed_version = run_cmd('{} --version'.format(NATIVEFIER_BIN_PATH), print_error=False, extra_paths=NODE_PATHS)
installed_version = nativefier.get_version()
if installed_version:
installed_version = installed_version.strip()
@@ -215,19 +217,22 @@ class EnvironmentUpdater:
except requests.exceptions.ConnectionError:
return
def update_environment(self, is_x86_x64_arch: bool, handler: ProcessHandler = None) -> dict:
def update_environment(self, is_x86_x64_arch: bool, config: dict = None, handler: ProcessHandler = None) -> dict:
settings = self.read_settings()
if settings is None:
return
if not self.update_node(version=settings['nodejs']['version'], version_url=settings['nodejs']['url'],
watcher=handler.watcher if handler else None):
current_config = config if config else read_config()
system_env = current_config['environment']['system']
if not system_env and not self.update_node(version=settings['nodejs']['version'], version_url=settings['nodejs']['url'],
watcher=handler.watcher if handler else None):
self.logger.warning('Could not install / update NodeJS')
return
if not self.install_nativefier(version=settings['nativefier']['version'], handler=handler):
if not system_env and not self.install_nativefier(version=settings['nativefier']['version'], handler=handler):
self.logger.warning('Could not install / update nativefier')
return

View File

@@ -1,13 +1,24 @@
from typing import List
from bauh.commons.system import SimpleProcess
from bauh.commons.system import SimpleProcess, run_cmd
from bauh.gems.web import NATIVEFIER_BIN_PATH, NODE_PATHS
def install(url: str, name: str, output_dir: str, electron_version: str, cwd: str, extra_options: List[str] = None) -> SimpleProcess:
cmd = [NATIVEFIER_BIN_PATH, url, '--name', name, '-e', electron_version, output_dir]
def install(url: str, name: str, output_dir: str, electron_version: str, cwd: str, system: bool, extra_options: List[str] = None) -> SimpleProcess:
cmd = [NATIVEFIER_BIN_PATH if not system else 'nativefier', url, '--name', name, '-e', electron_version, output_dir]
if extra_options:
cmd.extend(extra_options)
return SimpleProcess(cmd, cwd=cwd, extra_paths=NODE_PATHS)
return SimpleProcess(cmd, cwd=cwd, extra_paths=NODE_PATHS if not system else None)
def is_available() -> bool:
res = run_cmd('which nativefier', print_error=False)
return res and not res.strip().startswith('which ')
def get_version() -> str:
return run_cmd('{} --version'.format(NATIVEFIER_BIN_PATH), print_error=False, extra_paths=NODE_PATHS)