mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-09 05:14:16 +02:00
[web] improvement: using custom installation properties by Electron version if required
This commit is contained in:
@@ -10,7 +10,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
- handling http redirect errors
|
- handling http redirect errors
|
||||||
|
|
||||||
- Web
|
- Web
|
||||||
- able to specify a custom User-Agent when installing apps that demand specific settings to work properly on Electron 13.X (e.g: WhatsApp Web)
|
- using custom installation properties by Electron version if required (available on **bauh-files**). e.g: custom User-Agent for WhatsApp Web on Electron 13.6.X.
|
||||||
- checking for javascript fixes based on the Electron version (saved on disk as `~/.local/share/bauh/web/fixes/electron_{branch}/{app_name}.js`)
|
- checking for javascript fixes based on the Electron version (saved on disk as `~/.local/share/bauh/web/fixes/electron_{branch}/{app_name}.js`)
|
||||||
- handling http redirect errors
|
- handling http redirect errors
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ ELECTRON_CACHE_DIR = f'{ENV_PATH}/electron'
|
|||||||
URL_ENVIRONMENT_SETTINGS = f'https://raw.githubusercontent.com/vinifmor/bauh-files/master/web/env/v2/environment.yml'
|
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'
|
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_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"
|
||||||
URL_SUGGESTIONS = "https://raw.githubusercontent.com/vinifmor/bauh-files/master/web/env/v2/suggestions.yml"
|
URL_SUGGESTIONS = "https://raw.githubusercontent.com/vinifmor/bauh-files/master/web/env/v2/suggestions.yml"
|
||||||
UA_CHROME = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'
|
UA_CHROME = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'
|
||||||
TEMP_PATH = f'{TEMP_DIR}/web'
|
TEMP_PATH = f'{TEMP_DIR}/web'
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import traceback
|
|||||||
from math import floor
|
from math import floor
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
from typing import List, Type, Set, Tuple, Optional
|
from typing import List, Type, Set, Tuple, Optional, Dict
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
import yaml
|
import yaml
|
||||||
@@ -33,7 +33,7 @@ from bauh.commons.html import bold
|
|||||||
from bauh.commons.system import ProcessHandler, get_dir_size, get_human_size_str, SimpleProcess
|
from bauh.commons.system import ProcessHandler, get_dir_size, get_human_size_str, SimpleProcess
|
||||||
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, \
|
||||||
SUGGESTIONS_CACHE_FILE, ROOT_DIR, TEMP_PATH, FIX_FILE_PATH, ELECTRON_CACHE_DIR, \
|
SUGGESTIONS_CACHE_FILE, ROOT_DIR, TEMP_PATH, FIX_FILE_PATH, ELECTRON_CACHE_DIR, \
|
||||||
get_icon_path
|
get_icon_path, URL_PROPS_PATTERN
|
||||||
from bauh.gems.web.config import WebConfigManager
|
from bauh.gems.web.config import WebConfigManager
|
||||||
from bauh.gems.web.environment import EnvironmentUpdater, EnvironmentComponent
|
from bauh.gems.web.environment import EnvironmentUpdater, EnvironmentComponent
|
||||||
from bauh.gems.web.model import WebApplication
|
from bauh.gems.web.model import WebApplication
|
||||||
@@ -192,6 +192,30 @@ class WebApplicationManager(SoftwareManager):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.warning("Error when trying to retrieve a fix for {}: {}".format(fix_url, e.__class__.__name__))
|
self.logger.warning("Error when trying to retrieve a fix for {}: {}".format(fix_url, e.__class__.__name__))
|
||||||
|
|
||||||
|
def _get_custom_properties(self, url_domain: str, electron_version: str) -> Optional[Dict[str, object]]:
|
||||||
|
props_url = URL_PROPS_PATTERN.format(domain=url_domain,
|
||||||
|
electron_branch=self._map_electron_branch(electron_version))
|
||||||
|
|
||||||
|
try:
|
||||||
|
res = self.http_client.get(props_url, session=False)
|
||||||
|
if res:
|
||||||
|
props = {}
|
||||||
|
for line in res.text.split('\n'):
|
||||||
|
line_strip = line.strip()
|
||||||
|
if line_strip:
|
||||||
|
line_split = line_strip.split('=', 1)
|
||||||
|
|
||||||
|
if len(line_split) == 2:
|
||||||
|
key, val = line_split[0].strip(), line_split[1].strip()
|
||||||
|
|
||||||
|
if key:
|
||||||
|
props[key] = val
|
||||||
|
|
||||||
|
return props
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
self.logger.warning(f"Error when trying to retrieve custom installation properties for {props_url}: {e.__class__.__name__}")
|
||||||
|
|
||||||
def _map_electron_branch(self, version: str) -> str:
|
def _map_electron_branch(self, version: str) -> str:
|
||||||
return f"electron_{'_'.join(version.split('.')[0:-1])}_X"
|
return f"electron_{'_'.join(version.split('.')[0:-1])}_X"
|
||||||
|
|
||||||
@@ -667,7 +691,8 @@ class WebApplicationManager(SoftwareManager):
|
|||||||
|
|
||||||
electron_version = str(next((c for c in env_components if c.id == 'electron')).version)
|
electron_version = str(next((c for c in env_components if c.id == 'electron')).version)
|
||||||
|
|
||||||
fix = self._get_fix_for(url_domain=self._strip_url_protocol(pkg.url), electron_version=electron_version)
|
url_domain = self._strip_url_protocol(pkg.url)
|
||||||
|
fix = self._get_fix_for(url_domain=url_domain, electron_version=electron_version)
|
||||||
|
|
||||||
if fix:
|
if fix:
|
||||||
# just adding the fix as an installation option. The file will be written later
|
# just adding the fix as an installation option. The file will be written later
|
||||||
@@ -705,6 +730,20 @@ class WebApplicationManager(SoftwareManager):
|
|||||||
with open(temp_icon_path, 'wb+') as f:
|
with open(temp_icon_path, 'wb+') as f:
|
||||||
f.write(icon_bytes)
|
f.write(icon_bytes)
|
||||||
|
|
||||||
|
custom_props = self._get_custom_properties(url_domain=url_domain, electron_version=electron_version)
|
||||||
|
|
||||||
|
if custom_props:
|
||||||
|
# self.logger.info(f"Custom installation properties found for '{url_domain}' (Electron {electron_version}. Widevine: {widevine_support})")
|
||||||
|
for prop, val in custom_props.items():
|
||||||
|
if hasattr(pkg, prop):
|
||||||
|
try:
|
||||||
|
setattr(pkg, prop, val)
|
||||||
|
self.logger.info(f"Using custom installation property '{prop}' ({val if val else '<null>'}) for '{url_domain}' "
|
||||||
|
f"(Electron: {electron_version})")
|
||||||
|
except:
|
||||||
|
self.logger.error(f"Could not set the custom installation property '{prop}' ({val if val else '<null>'}) "
|
||||||
|
f"for '{url_domain}' (Electron: {electron_version})")
|
||||||
|
|
||||||
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')))
|
||||||
|
|
||||||
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,
|
||||||
|
|||||||
Reference in New Issue
Block a user