diff --git a/aiserver.py b/aiserver.py index a1daef90..70020614 100644 --- a/aiserver.py +++ b/aiserver.py @@ -2291,8 +2291,12 @@ def loadsettings(): # Allow the models to override some settings #==================================================================# def loadmodelsettings(): - model_js_config = str(model_config).partition(' ')[2] - js = json.loads(model_js_config) + try: + model_js_config = str(model_config).partition(' ')[2] + js = json.loads(model_js_config) + except Exception as e: + model_js_config = open(vars.custmodpth.replace('/', '_') + "/config.json", "r") + js = json.load(model_js_config) if("badwordsids" in js): vars.badwordsids = js["badwordsids"] if("temp" in js): @@ -3340,6 +3344,7 @@ def update_story_chunk(idx: Union[int, str]): # prompt might not have been shown yet (with a "Generating story..." # message instead). refresh_story() + setgamesaved(False) return idx = (vars.actions.get_last_key() if len(vars.actions) else 0) + 1 @@ -3349,6 +3354,8 @@ def update_story_chunk(idx: Union[int, str]): else: # Actions are 0 based, but in chunks 0 is the prompt. # So the chunk index is one more than the corresponding action index. + if(idx - 1 not in vars.actions): + return text = vars.actions[idx - 1] item = html.escape(text) @@ -3357,7 +3364,9 @@ def update_story_chunk(idx: Union[int, str]): chunk_text = f'{formatforhtml(item)}' emit('from_server', {'cmd': 'updatechunk', 'data': {'index': idx, 'html': chunk_text}}, broadcast=True) - + + setgamesaved(False) + #If we've set the auto save flag, we'll now save the file if vars.autosave and (".json" in vars.savedir): save() @@ -3368,6 +3377,7 @@ def update_story_chunk(idx: Union[int, str]): #==================================================================# def remove_story_chunk(idx: int): emit('from_server', {'cmd': 'removechunk', 'data': idx}, broadcast=True) + setgamesaved(False) #==================================================================# @@ -3488,7 +3498,9 @@ def inlineedit(chunk, data): "Edited": True}] vars.actions_metadata[chunk-1]['Selected Text'] = data vars.actions[chunk-1] = data - + else: + print(f"WARNING: Attempted to edit non-existent chunk {chunk}") + setgamesaved(False) update_story_chunk(chunk) emit('from_server', {'cmd': 'texteffect', 'data': chunk}, broadcast=True) @@ -3513,6 +3525,8 @@ def inlinedelete(chunk): "Edited": False}] + vars.actions_metadata[chunk-1]['Alternative Text'] vars.actions_metadata[chunk-1]['Selected Text'] = '' vars.actions[chunk-1] = '' + else: + print(f"WARNING: Attempted to delete non-existent chunk {chunk}") setgamesaved(False) remove_story_chunk(chunk) emit('from_server', {'cmd': 'editmode', 'data': 'false'}, broadcast=True) diff --git a/bridge.lua b/bridge.lua index b2f1bd14..da63d63f 100644 --- a/bridge.lua +++ b/bridge.lua @@ -1614,7 +1614,12 @@ return function(_python, _bridged) error("module '" .. modname .. "' not found:" .. table.concat(errors)) return end - local retval = old_loadfile(path, "t", env)() + local f, err = old_loadfile(path, "t", env) + if err ~= nil then + error(err) + return + end + local retval = (f()) package_loaded[env][modname] = retval == nil or retval return package_loaded[env][modname], path end @@ -1664,12 +1669,33 @@ return function(_python, _bridged) bridged.print(table.concat(args, "\t")) end - local function redirected_warn(...) - local args = table.pack(...) - for i = 1, args.n do - args[i] = tostring(args[i]) + local function _redirected_warn() + local do_warning = true + local control_table = { + ["@on"] = function() + do_warning = true + end, + ["@off"] = function() + do_warning = false + end, + } + return function(...) + local args = table.pack(...) + if args.n == 1 and type(args[1]) == "string" and args[1]:sub(1, 1) == "@" then + local f = control_table[args[1]] + if f ~= nil then + f() + end + return + end + if not do_warning then + return + end + for i = 1, args.n do + args[i] = tostring(args[i]) + end + bridged.warn(table.concat(args, "\t")) end - bridged.warn(table.concat(args, "\t")) end local sandbox_template_env = { @@ -1829,7 +1855,7 @@ return function(_python, _bridged) envs[universe].load = _safe_load(env) envs[universe].require = _safe_require(env) envs[universe].print = redirected_print - envs[universe].warn = redirected_warn + envs[universe].warn = _redirected_warn() env._G = env end return env diff --git a/static/custom.css b/static/custom.css index da30c6ed..aa7e7b36 100644 --- a/static/custom.css +++ b/static/custom.css @@ -1243,6 +1243,7 @@ body.connected .popupfooter, .popupfooter.always-available { -o-transition: all 0.15s ease-in; -webkit-transition: all 0.15s ease-in; transition: all 0.15s ease-in; + white-space: pre-wrap; } .seqselitem:hover {