[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 import os
from pathlib import Path 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__)) ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
WEB_PATH = '{}/.local/share/bauh/web'.format(Path.home()) 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' TEMP_PATH = '/tmp/bauh/web'
SEARCH_INDEX_FILE = '{}/index.yaml'.format(TEMP_PATH) SEARCH_INDEX_FILE = '{}/index.yaml'.format(TEMP_PATH)
SUGGESTIONS_CACHE_FILE = '{}/suggestions.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.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, \ 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 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.environment import EnvironmentUpdater
from bauh.gems.web.model import WebApplication from bauh.gems.web.model import WebApplication
from bauh.gems.web.worker import SuggestionsDownloader, SearchIndexGenerator from bauh.gems.web.worker import SuggestionsDownloader, SearchIndexGenerator
@@ -62,7 +63,6 @@ class WebApplicationManager(SoftwareManager):
self.env_thread = None self.env_thread = None
self.suggestions_downloader = suggestions_downloader self.suggestions_downloader = suggestions_downloader
self.suggestions = {} self.suggestions = {}
self.config = {}
def _get_lang_header(self) -> str: def _get_lang_header(self) -> str:
try: try:
@@ -143,9 +143,8 @@ class WebApplicationManager(SoftwareManager):
super(WebApplicationManager, self).serialize_to_disk(pkg=pkg, icon_bytes=None, only_icon=False) super(WebApplicationManager, self).serialize_to_disk(pkg=pkg, icon_bytes=None, only_icon=False)
def _map_url(self, url: str) -> "BeautifulSoup": 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}
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)
ignore_ssl=True, single_call=True)
if url_res: if url_res:
return BeautifulSoup(url_res.text, 'lxml', parse_only=SoupStrainer('head')) 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)) watcher.print('Fix found for {}'.format(pkg.url))
install_options.append('--inject={}'.format(fix_path)) install_options.append('--inject={}'.format(fix_path))
config = read_config()
watcher.change_substatus(self.i18n['web.install.substatus.call_nativefier'].format(bold('nativefier'))) 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, installed = handler.handle_simple(nativefier.install(url=pkg.url, name=app_id, output_dir=app_dir,
electron_version=self.env_settings['electron']['version'], electron_version=self.env_settings['electron']['version'],
system=system_env,
cwd=INSTALLED_PATH, cwd=INSTALLED_PATH,
extra_options=install_options)) extra_options=install_options))
@@ -565,7 +573,16 @@ class WebApplicationManager(SoftwareManager):
self.enabled = enabled self.enabled = enabled
def can_work(self) -> bool: 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): def requires_root(self, action: str, pkg: SoftwarePackage):
return False return False

View File

@@ -12,9 +12,11 @@ from bauh.api.abstract.handler import ProcessWatcher
from bauh.api.http import HttpClient from bauh.api.http import HttpClient
from bauh.commons import system from bauh.commons import system
from bauh.commons.html import bold 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, \ 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 from bauh.view.util.translation import I18n
@@ -134,7 +136,7 @@ class EnvironmentUpdater:
if not self._is_nativefier_installed(): if not self._is_nativefier_installed():
return self._install_nativefier(version=version, handler=handler) 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: if installed_version:
installed_version = installed_version.strip() installed_version = installed_version.strip()
@@ -215,19 +217,22 @@ class EnvironmentUpdater:
except requests.exceptions.ConnectionError: except requests.exceptions.ConnectionError:
return 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() settings = self.read_settings()
if settings is None: if settings is None:
return return
if not self.update_node(version=settings['nodejs']['version'], version_url=settings['nodejs']['url'], current_config = config if config else read_config()
watcher=handler.watcher if handler else None): 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') self.logger.warning('Could not install / update NodeJS')
return 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') self.logger.warning('Could not install / update nativefier')
return return

View File

@@ -1,13 +1,24 @@
from typing import List 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 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: 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, url, '--name', name, '-e', electron_version, output_dir] cmd = [NATIVEFIER_BIN_PATH if not system else 'nativefier', url, '--name', name, '-e', electron_version, output_dir]
if extra_options: if extra_options:
cmd.extend(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)