diff --git a/public/script.js b/public/script.js index 85126fa2b..6ba1ebf89 100644 --- a/public/script.js +++ b/public/script.js @@ -119,6 +119,7 @@ import { isElementInViewport, sortMoments, timestampToMoment, + download, } from "./scripts/utils.js"; import { extension_settings, loadExtensionSettings, runGenerationInterceptors } from "./scripts/extensions.js"; @@ -5890,6 +5891,7 @@ $(document).ready(function () { console.log(data); await delay(250); toastr.success(data.message); + download(data.result, body.exportfilename, 'text/plain'); } } catch (error) { // display error message diff --git a/server.js b/server.js index 0cee005e5..2c26b059d 100644 --- a/server.js +++ b/server.js @@ -1603,48 +1603,39 @@ app.post("/exportchat", jsonParser, async function (request, response) { const pathToFolder = request.body.is_group ? directories.groupChats : path.join(directories.chats, String(request.body.avatar_url).replace('.png', '')); - //let charname = String(sanitize(request.body.avatar_url)).replace('.png', ''); let filename = path.join(pathToFolder, request.body.file); - let exportfilename = path.join(pathToFolder, request.body.exportfilename) + let exportfilename = request.body.exportfilename if (!fs.existsSync(filename)) { const errorMessage = { - message: `Could not find JSONL file to export. Source chat file: ${filename}. Intended destination file: ${exportfilename}.` + message: `Could not find JSONL file to export. Source chat file: ${filename}.` } console.log(errorMessage.message); return response.status(404).json(errorMessage); } - if (fs.existsSync(exportfilename)) { - const errorMessage = { - message: `File by that name already exists. Export chat aborted.` - } - console.log(errorMessage.message); - return response.status(400).json(errorMessage); - } try { const readline = require('readline'); const fs = require('fs'); const readStream = fs.createReadStream(filename); - const writeStream = fs.createWriteStream(exportfilename); const rl = readline.createInterface({ input: readStream, }); + let buffer = ''; rl.on('line', (line) => { const data = JSON.parse(line); if (data.mes) { const name = data.name; - const message = data.mes.replace(/\r?\n/g, '\n'); - writeStream.write(`${name}: ${message}\n\n`); + const message = (data?.extra?.display_text || data?.mes || '').replace(/\r?\n/g, '\n'); + buffer += (`${name}: ${message}\n\n`); } }); rl.on('close', () => { - writeStream.end(); + const successMessage = { + message: `Chat saved to ${exportfilename}`, + result: buffer, + } + console.log(`Chat exported as ${exportfilename}`); + return response.status(200).json(successMessage); }); - //fs.promises.copyFile(filename, exportfilename) - const successMessage = { - message: `Chat exported as ${exportfilename}` - } - console.log(`Chat exported as ${exportfilename}`); - return response.status(200).json(successMessage); } catch (err) { console.log("chat export failed.")