From 3b5b478815b7a13d1d1237fca12761da9d5d66a1 Mon Sep 17 00:00:00 2001 From: aronwk-aaron Date: Sat, 17 Dec 2022 01:15:27 -0600 Subject: [PATCH] configurable client and sqlite --- app/luclient.py | 29 +++++++++++++++-------------- app/mail.py | 3 +-- app/properties.py | 16 +++++++++++----- app/pylddlib.py | 5 +++-- 4 files changed, 30 insertions(+), 23 deletions(-) diff --git a/app/luclient.py b/app/luclient.py index 3bbeaa7..416d6f6 100644 --- a/app/luclient.py +++ b/app/luclient.py @@ -5,7 +5,8 @@ from flask import ( redirect, url_for, make_response, - abort + abort, + current_app ) from flask_user import login_required from app.models import CharacterInfo @@ -32,7 +33,7 @@ def get_dds_as_png(filename): cache = f'cache/{filename.split(".")[0]}.png' if not os.path.exists(cache): - root = 'app/luclient/res/' + root = f"{current_app.config['CLIENT_LOCATION']}res/" path = glob.glob( root + f'**/{filename}', @@ -52,7 +53,7 @@ def get_dds(filename): if filename.split('.')[-1] != 'dds': return 404 - root = 'app/luclient/res/' + root = f"{current_app.config['CLIENT_LOCATION']}res/" dds = glob.glob( root + f'**/{filename}', @@ -92,7 +93,7 @@ def get_icon_lot(id): cache = f'app/cache/{filename.split(".")[0]}.png' if not os.path.exists(cache): - root = 'app/luclient/res/' + root = f"{current_app.config['CLIENT_LOCATION']}res/" try: pathlib.Path(os.path.dirname(cache)).resolve().mkdir(parents=True, exist_ok=True) with image.Image(filename=f'{root}{filename}'.lower()) as img: @@ -119,7 +120,7 @@ def get_icon_iconid(id): cache = f'app/cache/{filename.split(".")[0]}.png' if not os.path.exists(cache): - root = 'app/luclient/res/' + root = f"{current_app.config['CLIENT_LOCATION']}res/" try: pathlib.Path(os.path.dirname(cache)).resolve().mkdir(parents=True, exist_ok=True) with image.Image(filename=f'{root}{filename}'.lower()) as img: @@ -137,14 +138,14 @@ def brick_list(): brick_list = [] if len(brick_list) == 0: suffixes = [".g", ".g1", ".g2", ".g3", ".xml"] - res = pathlib.Path('app/luclient/res/') + res = pathlib.Path(f"{current_app.config['CLIENT_LOCATION']}res/") # Load g files for path in res.rglob("*.*"): if str(path.suffix) in suffixes: brick_list.append( { "type": "file", - "name": str(path.as_posix()).replace("app/luclient/res/", "") + "name": str(path.as_posix()).replace("{current_app.config['CLIENT_LOCATION']}res/", "") } ) response = make_response(json.dumps(brick_list)) @@ -156,7 +157,7 @@ def brick_list(): @luclient_blueprint.route('/ldddb/') def dir_listing(req_path): # Joining the base and the requested path - rel_path = pathlib.Path(str(pathlib.Path(f'app/luclient/res/{req_path}').resolve())) + rel_path = pathlib.Path(str(pathlib.Path(f"{current_app.config['CLIENT_LOCATION']}res/{req_path}").resolve())) # Return 404 if path doesn't exist if not rel_path.exists(): return abort(404) @@ -176,7 +177,7 @@ def unknown(): cache = f'app/cache/{filename.split(".")[0]}.png' if not os.path.exists(cache): - root = 'app/luclient/res/' + root = f"{current_app.config['CLIENT_LOCATION']}res/" try: pathlib.Path(os.path.dirname(cache)).resolve().mkdir(parents=True, exist_ok=True) with image.Image(filename=f'{root}{filename}'.lower()) as img: @@ -196,14 +197,14 @@ def get_cdclient(): """ cdclient = getattr(g, '_cdclient', None) if cdclient is None: - path = pathlib.Path('app/luclient/res/cdclient.sqlite') + path = pathlib.Path(f"{current_app.config['CD_SQLITE_LOCATION']}cdclient.sqlite") if path.is_file(): - cdclient = g._database = sqlite3.connect('app/luclient/res/cdclient.sqlite') + cdclient = g._database = sqlite3.connect(f"{current_app.config['CD_SQLITE_LOCATION']}cdclient.sqlite") return cdclient - path = pathlib.Path('app/luclient/res/CDServer.sqlite') + path = pathlib.Path(f"{current_app.config['CD_SQLITE_LOCATION']}CDServer.sqlite") if path.is_file(): - cdclient = g._database = sqlite3.connect('app/luclient/res/CDServer.sqlite') + cdclient = g._database = sqlite3.connect(f"{current_app.config['CD_SQLITE_LOCATION']}CDServer.sqlite") return cdclient return cdclient @@ -237,7 +238,7 @@ def translate_from_locale(trans_string): locale_data = "" if not locale: - locale_path = "app/luclient/locale/locale.xml" + locale_path = f"{current_app.config['CLIENT_LOCATION']}locale/locale.xml" with open(locale_path, 'r') as file: locale_data = file.read() diff --git a/app/mail.py b/app/mail.py index 7844c0b..261afeb 100644 --- a/app/mail.py +++ b/app/mail.py @@ -69,8 +69,7 @@ def send(): form.recipient.choices.append((character.id, character.name)) items = query_cdclient( - 'Select id, name, displayName from Objects where type = ?', - ["Loot"] + 'Select id, name, displayName from Objects where type = "Loot"' ) for item in items: diff --git a/app/properties.py b/app/properties.py index b101d40..531d85c 100644 --- a/app/properties.py +++ b/app/properties.py @@ -428,18 +428,20 @@ def decompress(data): def prebuilt(content, file_format, lod): # translate LOT to component id - # we need to get a type of 2 because reasons + # we need to get a type of 2 for the render component to find the filename render_component_id = query_cdclient( 'select component_id from ComponentsRegistry where component_type = 2 and id = ?', [content.lot], one=True )[0] - # find the asset from rendercomponent given the component id + # find the asset from rendercomponent given the component id filename = query_cdclient( 'select render_asset from RenderComponent where id = ?', [render_component_id], one=True ) + + # if we have a valie filename, coerce it if filename: filename = filename[0].split("\\\\")[-1].lower().split(".")[0] if "/" in filename: @@ -447,25 +449,29 @@ def prebuilt(content, file_format, lod): else: return f"No filename for LOT {content.lot}" - lxfml = pathlib.Path(f'app/luclient/res/BrickModels/{filename.split(".")[0]}.lxfml') + # if we just want the lxfml, fine t and return it + lxfml = pathlib.Path(f'{current_app.config["CLIENT_LOCATION"]}res/BrickModels/{filename.split(".")[0]}.lxfml') if file_format == "lxfml": with open(lxfml, 'r') as file: lxfml_data = file.read() response = make_response(lxfml_data) + # else we handle getting the files for lddviewer elif file_format in ["obj", "mtl"]: + # check to see if the file exists cache = pathlib.Path(f'app/cache/BrickModels/{filename}.lod{lod}.{file_format}') if not cache.is_file(): + # if not make it an store it for later cache.parent.mkdir(parents=True, exist_ok=True) try: ldd.main(str(lxfml.as_posix()), str(cache.with_suffix("").as_posix()), lod) # convert to OBJ except Exception as e: current_app.logger.error(f"ERROR on {cache}:\n {e}") - + # then just read it with open(str(cache.as_posix()), 'r') as file: cache_data = file.read() - + # and serve it response = make_response(cache_data) else: diff --git a/app/pylddlib.py b/app/pylddlib.py index 09641e0..b46618a 100644 --- a/app/pylddlib.py +++ b/app/pylddlib.py @@ -7,6 +7,7 @@ import math import struct import zipfile from xml.dom import minidom +from flask import current_app PRIMITIVEPATH = '/Primitives/' GEOMETRIEPATH = PRIMITIVEPATH @@ -968,8 +969,8 @@ def main(lxf_filename, obj_filename, lod="2"): GEOMETRIEPATH = GEOMETRIEPATH + f"LOD{lod}/" converter = Converter() # print("Found DB folder. Will use this instead of db.lif!") - setDBFolderVars(dbfolderlocation="app/luclient/res/", lod=lod) - converter.LoadDBFolder(dbfolderlocation="app/luclient/res/") + setDBFolderVars(dbfolderlocation=f"{current_app.config['CLIENT_LOCATION']}res/", lod=lod) + converter.LoadDBFolder(dbfolderlocation=f"{current_app.config['CLIENT_LOCATION']}res/") converter.LoadScene(filename=lxf_filename) converter.Export(filename=obj_filename)