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
|
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
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.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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user