117 lines
3.9 KiB
Python
117 lines
3.9 KiB
Python
import os, sys
|
|
import time
|
|
import logging
|
|
import traceback
|
|
import webbrowser
|
|
import webview
|
|
import threading
|
|
|
|
from common.paths import ROOT_DIR
|
|
sys.path.insert(0, str(ROOT_DIR))
|
|
|
|
from libs.app.common.logging import get_logger, get_logger_buffer, list_loggers
|
|
from libs.app.common.args import read_kargs, kargs_to_array
|
|
from libs.app.common.config import Config
|
|
from libs.app.common.network_utils import check_url
|
|
from libs.app.updater import Updater
|
|
from libs.app.ui.ui_server import UIServer
|
|
|
|
logger = get_logger(buffer=True)
|
|
logging.getLogger("urllib3.connectionpool").setLevel(logging.WARNING)
|
|
|
|
|
|
class App:
|
|
def __init__(self):
|
|
self.config = Config()
|
|
|
|
self.nosys_api_host = self.config.get("api", "server", "host")
|
|
self.nosys_api_port = self.config.get("api", "server", "port")
|
|
|
|
self.ui_server = UIServer()
|
|
self.ui_server.start()
|
|
|
|
self.updater = Updater(self.config)
|
|
self.updater.register_listener(self.on_updater_event)
|
|
|
|
get_logger_buffer("app").register_listener(self.on_log)
|
|
get_logger_buffer("app.updater").register_listener(self.on_log)
|
|
|
|
def start_frontend(self):
|
|
url = "http://127.0.0.1:5000/"
|
|
logger.debug("Opening browser...")
|
|
webbrowser.open(url)
|
|
|
|
# logger.debug("Starting webview ...")
|
|
# webview.create_window(
|
|
# "NoSys",
|
|
# url,
|
|
# width=800,
|
|
# height=800,
|
|
# resizable=True,
|
|
# confirm_close=False,
|
|
# text_select=True,
|
|
# frameless=False,
|
|
# background_color="#000000",
|
|
# )
|
|
|
|
# webview.start(debug=True)
|
|
|
|
def update_libraries(self):
|
|
"""Update libs and restart if app itself was updated."""
|
|
updated = self.updater.update_libs()
|
|
if updated.get("app") == "Success updated":
|
|
logger.warning("App updated, restarting...")
|
|
self.ui_server.emit_event("restarting")
|
|
self.ui_server.stop()
|
|
os.execv(sys.executable, [sys.executable] + sys.argv)
|
|
|
|
def start_nosys(self):
|
|
url = f"https://{self.nosys_api_host}:{self.nosys_api_port}/api/api/health"
|
|
|
|
logger.debug(f"Checking NoSys Server {url} ...")
|
|
if check_url(url, 3, 1, verify_ssl=True):
|
|
logger.debug("NoSys already running")
|
|
self.ui_server.emit_event("redirect", {"url": f"https://{self.nosys_api_host}:{self.nosys_api_port}"})
|
|
return
|
|
|
|
logger.debug("Starting NoSys")
|
|
self.ui_server.emit_event("nosys_starting")
|
|
from libs.noSys.noSysCore import NoSysCore
|
|
from libs.noSys.events import Events
|
|
|
|
self.nosys_core = NoSysCore()
|
|
get_logger_buffer("noSys").register_listener(self.on_log)
|
|
get_logger_buffer("noSys").register_listener(self.on_log)
|
|
get_logger_buffer("noSys.moduleManager").register_listener(self.on_log)
|
|
self.nosys_core.subscribe_event(Events.READY, self.on_nosys_ready)
|
|
self.nosys_core.start()
|
|
|
|
def start(self):
|
|
self.start_frontend()
|
|
self.update_libraries()
|
|
self.config.load_libs_config()
|
|
self.start_nosys()
|
|
|
|
def on_updater_event(self, event):
|
|
if event.name == "status_lib":
|
|
self.ui_server.emit_event(event.name, {"lib":event.lib, "status": event.status})
|
|
|
|
def on_log(self, record):
|
|
self.ui_server.emit_event("log", {"levelname":record.levelname, "message":record.message})
|
|
|
|
def on_nosys_ready(self, event):
|
|
logger.debug(f"Stoping startup frontend server and redirecting to nosys server {self.nosys_api_host}:{self.nosys_api_port} ...")
|
|
self.ui_server.emit_event("redirect", {"url": f"https://{self.nosys_api_host}:{self.nosys_api_port}"})
|
|
self.ui_server.stop()
|
|
|
|
def main():
|
|
try:
|
|
app = App()
|
|
app.start()
|
|
input("Done\nPress any key to close\n")
|
|
except Exception:
|
|
logger.exception("Error")
|
|
input("Error\nPress any key to close\n")
|
|
|
|
if __name__ == '__main__':
|
|
main() |