installing nativefier

This commit is contained in:
Vinícius Moreira
2019-12-10 14:44:30 -03:00
parent 354af8b041
commit 7a97ef8531
3 changed files with 58 additions and 3 deletions

View File

@@ -7,3 +7,6 @@ BIN_PATH = '{}/.local/share/bauh/web'.format(HOME_PATH)
NODE_DIR_PATH = '{}/node'.format(BIN_PATH) NODE_DIR_PATH = '{}/node'.format(BIN_PATH)
NODE_BIN_PATH = '{}/bin/node'.format(NODE_DIR_PATH) NODE_BIN_PATH = '{}/bin/node'.format(NODE_DIR_PATH)
NPM_BIN_PATH = '{}/bin/npm'.format(NODE_DIR_PATH) NPM_BIN_PATH = '{}/bin/npm'.format(NODE_DIR_PATH)
NODE_MODULES_PATH = '{}/node_modules'.format(BIN_PATH)
NATIVEFIER_BIN_PATH = '{}/.bin/nativefier'.format(NODE_MODULES_PATH)

View File

@@ -98,7 +98,7 @@ class WebApplicationManager(SoftwareManager):
def prepare(self): def prepare(self):
if bool(int(os.getenv('BAUH_WEB_UPDATE_NODE', 1))): if bool(int(os.getenv('BAUH_WEB_UPDATE_NODE', 1))):
Thread(daemon=True, target=self.node_updater.update_node).start() Thread(daemon=True, target=self.node_updater.update_environment).start()
def list_updates(self, internet_available: bool) -> List[PackageUpdate]: def list_updates(self, internet_available: bool) -> List[PackageUpdate]:
pass pass

View File

@@ -2,13 +2,15 @@ import logging
import os import os
import shutil import shutil
import tarfile import tarfile
import traceback
from pathlib import Path from pathlib import Path
from bauh.api.abstract.download import FileDownloader from bauh.api.abstract.download import FileDownloader
from bauh.api.abstract.handler import ProcessWatcher from bauh.api.abstract.handler import ProcessWatcher
from bauh.api.exception import NoInternetException from bauh.api.exception import NoInternetException
from bauh.commons import system from bauh.commons import system
from bauh.gems.web import BIN_PATH, NODE_DIR_PATH, NODE_BIN_PATH from bauh.commons.system import new_subprocess, SimpleProcess, ProcessHandler
from bauh.gems.web import BIN_PATH, NODE_DIR_PATH, NODE_BIN_PATH, NPM_BIN_PATH, NODE_MODULES_PATH, NATIVEFIER_BIN_PATH
from bauh.view.util.translation import I18n from bauh.view.util.translation import I18n
@@ -42,7 +44,7 @@ class NodeUpdater:
extracted_file = '{}/{}'.format(BIN_PATH, tf.getnames()[0]) extracted_file = '{}/{}'.format(BIN_PATH, tf.getnames()[0])
os.rename(extracted_file, NODE_DIR_PATH) os.rename(extracted_file, NODE_DIR_PATH)
return True
except: except:
self.logger.error('Could not extract {}'.format(tarf_path)) self.logger.error('Could not extract {}'.format(tarf_path))
return False return False
@@ -88,3 +90,53 @@ class NodeUpdater:
except: except:
self.logger.error('Could not delete the dir {}'.format(NODE_DIR_PATH)) self.logger.error('Could not delete the dir {}'.format(NODE_DIR_PATH))
return False return False
def _install_nativefier(self, handler: ProcessHandler) -> bool:
self.logger.info("Installing nativefier")
# TODO freeze specific version
proc = SimpleProcess([NPM_BIN_PATH, 'install', 'nativefier'], cwd=BIN_PATH)
if handler:
return handler.handle_simple(proc)[0]
else:
proc.instance.wait()
if self._is_nativefier_installed():
self.logger.info("nativefier installed")
return True
else:
self.logger.error("Could not install nativefier")
return False
def _is_nativefier_installed(self) -> bool:
try:
return bool(system.run_cmd('{} --version'.format(NATIVEFIER_BIN_PATH)))
except:
self.logger.error("Could not determine the installed nativefier version")
traceback.print_exc()
return False
def install_nativefier(self, remove_modules: bool = False, handler: ProcessHandler = None) -> bool:
self.logger.info("Preparing to install nativefier")
if remove_modules and os.path.exists(NODE_MODULES_PATH):
self.logger.info('Removing old dir {}'.format(NODE_MODULES_PATH))
try:
shutil.rmtree(NODE_MODULES_PATH)
except:
self.logger.error('Could not remove dir {}. Aborting...'.format(NODE_MODULES_PATH))
return False
return self._install_nativefier(handler)
else:
if not self._is_nativefier_installed():
return self._install_nativefier(handler)
self.logger.info("Nativefier is already installed")
return True
def update_environment(self, handler: ProcessHandler = None):
if not self.update_node(handler.watcher if handler else None):
return False
return self.install_nativefier(handler=handler)