mirror of
				https://github.com/KoboldAI/KoboldAI-Client.git
				synced 2025-06-05 21:59:24 +02:00 
			
		
		
		
	Merge pull request #22 from VE-FORBRYDERNE/filereader
Allow remote mode to load from client-side story files
This commit is contained in:
		
							
								
								
									
										25
									
								
								aiserver.py
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								aiserver.py
									
									
									
									
									
								
							@@ -747,6 +747,8 @@ def get_message(msg):
 | 
			
		||||
        savetofile()
 | 
			
		||||
    elif(not vars.remote and msg['cmd'] == 'loadfromfile'):
 | 
			
		||||
        loadfromfile()
 | 
			
		||||
    elif(msg['cmd'] == 'loadfromstring'):
 | 
			
		||||
        loadRequest(json.loads(msg['data']), filename=msg['filename'])
 | 
			
		||||
    elif(not vars.remote and msg['cmd'] == 'import'):
 | 
			
		||||
        importRequest()
 | 
			
		||||
    elif(msg['cmd'] == 'newgame'):
 | 
			
		||||
@@ -2230,14 +2232,21 @@ def loadfromfile():
 | 
			
		||||
#==================================================================#
 | 
			
		||||
#  Load a stored story from a file
 | 
			
		||||
#==================================================================#
 | 
			
		||||
def loadRequest(loadpath):
 | 
			
		||||
def loadRequest(loadpath, filename=None):
 | 
			
		||||
    if(loadpath):
 | 
			
		||||
        # Leave Edit/Memory mode before continuing
 | 
			
		||||
        exitModes()
 | 
			
		||||
        
 | 
			
		||||
        # Read file contents into JSON object
 | 
			
		||||
        file = open(loadpath, "r")
 | 
			
		||||
        js   = json.load(file)
 | 
			
		||||
        if(isinstance(loadpath, str)):
 | 
			
		||||
            with open(loadpath, "r") as file:
 | 
			
		||||
                js = json.load(file)
 | 
			
		||||
            if(filename is None):
 | 
			
		||||
                filename = path.basename(loadpath)
 | 
			
		||||
        else:
 | 
			
		||||
            js = loadpath
 | 
			
		||||
            if(filename is None):
 | 
			
		||||
                filename = "untitled.json"
 | 
			
		||||
        
 | 
			
		||||
        # Copy file contents to vars
 | 
			
		||||
        vars.gamestarted = js["gamestarted"]
 | 
			
		||||
@@ -2283,8 +2292,6 @@ def loadRequest(loadpath):
 | 
			
		||||
                })
 | 
			
		||||
                num += 1
 | 
			
		||||
        
 | 
			
		||||
        file.close()
 | 
			
		||||
        
 | 
			
		||||
        # Save path for save button
 | 
			
		||||
        vars.savedir = loadpath
 | 
			
		||||
        
 | 
			
		||||
@@ -2292,10 +2299,10 @@ def loadRequest(loadpath):
 | 
			
		||||
        vars.loadselect = ""
 | 
			
		||||
        
 | 
			
		||||
        # Refresh game screen
 | 
			
		||||
        filename = path.basename(loadpath)
 | 
			
		||||
        _filename = filename
 | 
			
		||||
        if(filename.endswith('.json')):
 | 
			
		||||
            filename = filename[:-5]
 | 
			
		||||
        vars.laststory = filename
 | 
			
		||||
            _filename = filename[:-5]
 | 
			
		||||
        vars.laststory = _filename
 | 
			
		||||
        emit('from_server', {'cmd': 'setstoryname', 'data': vars.laststory}, broadcast=True)
 | 
			
		||||
        sendwi()
 | 
			
		||||
        emit('from_server', {'cmd': 'setmemory', 'data': vars.memory}, broadcast=True)
 | 
			
		||||
@@ -2303,7 +2310,7 @@ def loadRequest(loadpath):
 | 
			
		||||
        refresh_story()
 | 
			
		||||
        emit('from_server', {'cmd': 'setgamestate', 'data': 'ready'}, broadcast=True)
 | 
			
		||||
        emit('from_server', {'cmd': 'hidegenseqs', 'data': ''}, broadcast=True)
 | 
			
		||||
        print("{0}Story loaded from {1}!{2}".format(colors.GREEN, path.basename(loadpath), colors.END))
 | 
			
		||||
        print("{0}Story loaded from {1}!{2}".format(colors.GREEN, filename, colors.END))
 | 
			
		||||
 | 
			
		||||
#==================================================================#
 | 
			
		||||
#  Load a soft prompt from a file
 | 
			
		||||
 
 | 
			
		||||
@@ -83,6 +83,7 @@ var override_focusout = false;
 | 
			
		||||
var sman_allow_delete = false;
 | 
			
		||||
var sman_allow_rename = false;
 | 
			
		||||
var allowsp = false;
 | 
			
		||||
var remote = false;
 | 
			
		||||
 | 
			
		||||
// This is true iff [we're in macOS and the browser is Safari] or [we're in iOS]
 | 
			
		||||
var using_webkit_patch = true;
 | 
			
		||||
@@ -1593,7 +1594,8 @@ $(document).ready(function(){
 | 
			
		||||
			// Update adventure state
 | 
			
		||||
			setadventure(msg.data);
 | 
			
		||||
		} else if(msg.cmd == "runs_remotely") {
 | 
			
		||||
			hide([button_loadfrfile, button_savetofile, button_import, button_importwi]);
 | 
			
		||||
			remote = true;
 | 
			
		||||
			hide([button_savetofile, button_import, button_importwi]);
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
	
 | 
			
		||||
@@ -1660,7 +1662,20 @@ $(document).ready(function(){
 | 
			
		||||
	});
 | 
			
		||||
	
 | 
			
		||||
	button_loadfrfile.on("click", function(ev) {
 | 
			
		||||
		socket.send({'cmd': 'loadfromfile', 'data': ''});
 | 
			
		||||
		if(remote) {
 | 
			
		||||
			$("#remote-save-select").click();
 | 
			
		||||
		} else {
 | 
			
		||||
			socket.send({'cmd': 'loadfromfile', 'data': ''});
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	$("#remote-save-select").on("change", function() {
 | 
			
		||||
		var reader = new FileReader();
 | 
			
		||||
		var file = $("#remote-save-select")[0].files[0];
 | 
			
		||||
		reader.addEventListener("load", function(response) {
 | 
			
		||||
			socket.send({'cmd': 'loadfromstring', 'filename': file.name, 'data': response.target.result});
 | 
			
		||||
		}, false);
 | 
			
		||||
		reader.readAsText(file);
 | 
			
		||||
	});
 | 
			
		||||
	
 | 
			
		||||
	button_import.on("click", function(ev) {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
	<meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
	<script src="static/jquery-3.6.0.min.js"></script>
 | 
			
		||||
	<script src="static/socket.io.min.js"></script>
 | 
			
		||||
	<script src="static/application.js?ver=1.16.3ua"></script>
 | 
			
		||||
	<script src="static/application.js?ver=1.16.3uc"></script>
 | 
			
		||||
	<script src="static/bootstrap.min.js"></script>
 | 
			
		||||
	<script src="static/bootstrap-toggle.min.js"></script>
 | 
			
		||||
	<script src="static/rangy-core.min.js"></script>
 | 
			
		||||
@@ -17,6 +17,7 @@
 | 
			
		||||
	<link rel="stylesheet" href="static/open-iconic-bootstrap.min.css">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
	<input type="file" id="remote-save-select" accept="application/json" style="display:none">
 | 
			
		||||
	<div class="container">
 | 
			
		||||
		<div class="row" id="topmenu">
 | 
			
		||||
			<div id="menuitems">
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user