From bb775e4b208f68768b3bb42804f462101053cf27 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Tue, 11 Aug 2020 13:08:20 +0800 Subject: [PATCH] finish database query. but some codec is wrong --- SuperScriptMaterializer/database.cpp | 2 +- SuperScriptViewer/ServerCore.py | 67 +++++++++++++++++++++-- SuperScriptViewer/ServerStruct.py | 58 +++++++++++++++++++- SuperScriptViewer/static/env.js | 44 ++++++++++++++- SuperScriptViewer/templates/help/env.html | 10 +++- 5 files changed, 171 insertions(+), 10 deletions(-) diff --git a/SuperScriptMaterializer/database.cpp b/SuperScriptMaterializer/database.cpp index 879ec86..881be2e 100644 --- a/SuperScriptMaterializer/database.cpp +++ b/SuperScriptMaterializer/database.cpp @@ -218,7 +218,7 @@ BOOL envDatabase::init() { if (result != SQLITE_OK) return FALSE; result = sqlite3_exec(db, - "CREATE TABLE op([funcptr] INTEGER, [in1_guid] TEXT, [in2_guid] TEXT, [out_guid] TEXT, [op_guid] INTEGER, [op_name] TEXT, [op_code] INTEGER);", + "CREATE TABLE op([funcptr] INTEGER, [in1_guid] TEXT, [in2_guid] TEXT, [out_guid] TEXT, [op_guid] TEXT, [op_name] TEXT, [op_code] INTEGER);", NULL, NULL, NULL); if (result != SQLITE_OK) return FALSE; result = sqlite3_exec(db, diff --git a/SuperScriptViewer/ServerCore.py b/SuperScriptViewer/ServerCore.py index a03defa..e28fa88 100644 --- a/SuperScriptViewer/ServerCore.py +++ b/SuperScriptViewer/ServerCore.py @@ -22,6 +22,13 @@ def get_db(): db = g._database = sqlite3.connect(CustomConfig.decorated_db) return db +def get_env(): + env = getattr(g, '_envDatabase', None) + if env is None: + env = g._envDatabase = sqlite3.connect(CustomConfig.env_db) + env.text_factory = lambda x: x.decode(CustomConfig.database_encoding) + return env + @app.teardown_appcontext def close_connection(exception): db = getattr(g, '_database', None) @@ -39,14 +46,25 @@ def block_pin_decoder2(target): return [vab['name'], vab['type']] # =============================================route + +# =========== default + @app.route('/', methods=['GET']) def nospecHandle(): return redirect(url_for('indexHandle')) +# =========== misc page + @app.route('/help', methods=['GET']) def helpMainHandle(): return render_template("help.html") +@app.route('/about', methods=['GET']) +def aboutHandle(): + return render_template("about.html", static_icon = url_for('static', filename='icon.png')) + +# =========== help page + @app.route('/help/', methods=['GET']) def helpHandle(scriptPath): if scriptPath == 'converter': @@ -64,9 +82,47 @@ def helpHandle(scriptPath): else: abort(404) -@app.route('/about', methods=['GET']) -def aboutHandle(): - return render_template("about.html", static_icon = url_for('static', filename='icon.png')) +@app.route('/help/env', methods=['POST']) +def envQueryHandle(): + basicReturn = { + "status": False, + "overflow": False, + "data": [] + } + + # check tag + queryTag = request.form['tag']; + if queryTag not in ss.legalEnvQueryKey: + return basicReturn + + cur = get_env().cursor() + #try: + readyData = json.loads(request.form['data']) + fieldLength = len(readyData.keys()) + if fieldLength == 0: + cur.execute("SELECT * FROM {}".format(queryTag)) + else: + whereStatement = '&&'.join(map(lambda x: "([" + x + "] = ?)", readyData.keys())) + cur.execute("SELECT * FROM {} WHERE ({})".format(queryTag, whereStatement), list(readyData.values())) + + # iterate + counter = 0 + for i in cur.fetchall(): + if counter == 100: + basicReturn['overflow'] = True + break + basicReturn['data'].append(i) + counter+=1 + + basicReturn['status'] = True + #except Exception as ex: + # basicReturn['status'] = False + # basicReturn['overflow'] = False + # basicReturn['data'] = [] + + return basicReturn + +# =========== index @app.route('/index', methods=['GET']) def indexHandle(): @@ -81,6 +137,8 @@ def indexHandle(): return render_template('index.html', scripts = data) +# =========== viewer + @app.route('/viewer/', methods=['GET']) def viewerHandle(scriptPath): @@ -154,5 +212,4 @@ def moveHandle(target): def run(): app.run() - - + \ No newline at end of file diff --git a/SuperScriptViewer/ServerStruct.py b/SuperScriptViewer/ServerStruct.py index d43b586..37b5caa 100644 --- a/SuperScriptViewer/ServerStruct.py +++ b/SuperScriptViewer/ServerStruct.py @@ -22,5 +22,61 @@ envDatabaseList = ( {"name": "Message", "queryKey": "msg", "data": (("index", "0", "(Integer) Message index"), - ("name", "OnClick", "(String) Message name"))} + ("name", "OnClick", "(String) Message name"))}, + {"name": "Operation", + "queryKey": "op", + "data": (("funcptr", "615841344", "(Integer) Operation function memory location"), + ("in1_guid", "1910468930,-1003023558", "(String) Input parameter 1 guid"), + ("in2_guid", "-1411304621,-1568456412", "(String) Input parameter 2 guid"), + ("out_guid", "450177678,1584666912", "(String) Output parameter guid"), + ("op_guid", "869034825,898181163", "(String) Operation guid"), + ("op_name", "Addition", "(String) Operation name"), + ("op_code", "51", "(Integer) Operation code"))}, + {"name": "Parameter", + "queryKey": "param", + "data": (("index", "0", "(Integer) Parameter index"), + ("guid", "481363808,1100959941", "(String) Parameter guid"), + ("derived_from", "0,0", "(String) The parameter guid deriving this parameter"), + ("type_name", "None", "(String) Parameter name"), + ("default_size", "4", "(Integer) Default size"), + ("func_CreateDefault", "604002966", "(Integer) CreateDefault function memory location"), + ("func_Delete", "604003366", "(Integer) Delete function memory location"), + ("func_SaveLoad", "603996047", "(Integer) SaveLoad function memory location"), + ("func_Check", "0", "(Integer) Check function memory location"), + ("func_Copy", "604002468", "(Integer) Copy function memory location"), + ("func_String", "0", "(Integer) String function memory location"), + ("func_UICreator", "619055248", "(Integer) UICreator function memory location"), + ("creator_dll_index", "-1", "(Integer) The id of the dll defining this parameter"), + ("creator_plugin_index", "-1", "(Integer) The id of the plugin defining this parameter"), + ("dw_param", "0", "(Integer) An application reserved DWORD for placing parameter type specific data"), + ("dw_flags", "133", "(Integer) Flags specifying special settings for this parameter type"), + ("cid", "0", "(Integer) Special case for parameter types that refer to CKObjects => corresponding class ID of the object"), + ("saver_manager", "1181355948,0", "(String) Int Manager guid"))}, + {"name": "Plugin", + "queryKey": "plugin", + "data": (("dll_index", "18", "(Integer) Dll index"), + ("dll_name", "E:\\Virtools\\Plugins\\ImageReader.dll", "(String) Dll name"), + ("plugin_index", "2", "(Integer) Plugin index"), + ("category", "Bitmap Readers", "(String) Plugin category"), + ("active", "1", "(Integer) For manager and Render engines TRUE if a manager was created, for other plugins this value is not used"), + ("needed_by_file", "0", "(Integer) When saving a file TRUE if at least one object needs this plugin"), + ("guid", "1632248895,1132147523", "(String) Plugin guid"), + ("desc", "Windows Bitmap", "(String) Plugin description"), + ("author", "Virtools", "(String) Plugin author"), + ("summary", "Windows Bitmap", "(String) Plugin summary"), + ("version", "1", "(Integer) Plugin version"), + ("func_init", "103354496", "(Integer) Init function memory location"), + ("func_exit", "624432336", "(Integer) Exit function memory location"))}, + {"name": "Variable", + "queryKey": "variable", + "data": (("name", "3D XML/ExportVersion", "(String) Variable name"), + ("description", "Version of exported 3DXML", "(String) Variable description"), + ("flags", "4", "(Integer) Variable flags"), + ("type", "1", "(Integer) Variable type"), + ("representation", "enum:0= 3DXML 3.0; 1= 3DXML 4.0", "(String) The representation (ie the input format) of a variable type"), + ("data", " 3DXML 3.0", "(String) Variable data"))} ) + +legalEnvQueryKey = list(map(lambda x: x['queryKey'], envDatabaseList)) + + diff --git a/SuperScriptViewer/static/env.js b/SuperScriptViewer/static/env.js index bceda30..ffbfd23 100644 --- a/SuperScriptViewer/static/env.js +++ b/SuperScriptViewer/static/env.js @@ -1,3 +1,45 @@ function doQuery(fieldIndex, queryTag) { - ; + // collect data + var readyData = {}; + $("#queryTable_" + fieldIndex + " tr:not(:first-child)").each(function() { + var isEnabled = $(this).find(":nth-child(1) input").prop("checked"); + if (!isEnabled) return; + + var fieldName = $(this).find(":nth-child(2)").attr("queryName"); + var fieldValue = $(this).find(":nth-child(3) input").val(); + + readyData[fieldName] = fieldValue; + }); + + var jsonData = JSON.stringify(readyData); + + // raise post + $.post(window.location, + { + tag: queryTag, + data: jsonData + }, + function (data, status) { + // remove data + $("#resultTable_" + fieldIndex + " tr:not(:first-child)").remove(); + + // check + if (!data['status']) { + alert("Fail to query!"); + return; + } + + // check overflow + if (data['overflow']) $("#resultTableOverflow_" + fieldIndex).show(); + else $("#resultTableOverflow_" + fieldIndex).hide(); + + // insert data + for(var i = 0; i < data['data'].length; i++) { + $("#resultTable_" + fieldIndex).append(""); + for(var j = 0; j < data['data'][i].length; j++) { + $("#resultTable_" + fieldIndex + " tr:last-child").append(""); + $("#resultTable_" + fieldIndex + " tr:last-child td:last-child").text(data['data'][i][j]); + } + } + }); } \ No newline at end of file diff --git a/SuperScriptViewer/templates/help/env.html b/SuperScriptViewer/templates/help/env.html index 85cc078..54e9cce 100644 --- a/SuperScriptViewer/templates/help/env.html +++ b/SuperScriptViewer/templates/help/env.html @@ -38,7 +38,7 @@ {% for innerItem in item.data %} - {{ innerItem[0]|e }} + {{ innerItem[0]|e }} {{ innerItem[1]|e }} {{ innerItem[2]|e }} @@ -48,8 +48,14 @@

Query result:

+ - +
+ + {% for innerItem in item.data %} + + {% endfor %} +
{{ innerItem[0]|e }}
{% endfor %}