mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-07 01:14:15 +02:00
[wgem] config | allowing to use system nativefier
This commit is contained in:
@@ -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
22
bauh/gems/web/config.py
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user