mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Export chat to downloadable file
This commit is contained in:
@ -119,6 +119,7 @@ import {
|
|||||||
isElementInViewport,
|
isElementInViewport,
|
||||||
sortMoments,
|
sortMoments,
|
||||||
timestampToMoment,
|
timestampToMoment,
|
||||||
|
download,
|
||||||
} from "./scripts/utils.js";
|
} from "./scripts/utils.js";
|
||||||
|
|
||||||
import { extension_settings, loadExtensionSettings, runGenerationInterceptors } from "./scripts/extensions.js";
|
import { extension_settings, loadExtensionSettings, runGenerationInterceptors } from "./scripts/extensions.js";
|
||||||
@ -5890,6 +5891,7 @@ $(document).ready(function () {
|
|||||||
console.log(data);
|
console.log(data);
|
||||||
await delay(250);
|
await delay(250);
|
||||||
toastr.success(data.message);
|
toastr.success(data.message);
|
||||||
|
download(data.result, body.exportfilename, 'text/plain');
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// display error message
|
// display error message
|
||||||
|
31
server.js
31
server.js
@ -1603,48 +1603,39 @@ app.post("/exportchat", jsonParser, async function (request, response) {
|
|||||||
const pathToFolder = request.body.is_group
|
const pathToFolder = request.body.is_group
|
||||||
? directories.groupChats
|
? directories.groupChats
|
||||||
: path.join(directories.chats, String(request.body.avatar_url).replace('.png', ''));
|
: 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 filename = path.join(pathToFolder, request.body.file);
|
||||||
let exportfilename = path.join(pathToFolder, request.body.exportfilename)
|
let exportfilename = request.body.exportfilename
|
||||||
if (!fs.existsSync(filename)) {
|
if (!fs.existsSync(filename)) {
|
||||||
const errorMessage = {
|
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);
|
console.log(errorMessage.message);
|
||||||
return response.status(404).json(errorMessage);
|
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 {
|
try {
|
||||||
const readline = require('readline');
|
const readline = require('readline');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const readStream = fs.createReadStream(filename);
|
const readStream = fs.createReadStream(filename);
|
||||||
const writeStream = fs.createWriteStream(exportfilename);
|
|
||||||
const rl = readline.createInterface({
|
const rl = readline.createInterface({
|
||||||
input: readStream,
|
input: readStream,
|
||||||
});
|
});
|
||||||
|
let buffer = '';
|
||||||
rl.on('line', (line) => {
|
rl.on('line', (line) => {
|
||||||
const data = JSON.parse(line);
|
const data = JSON.parse(line);
|
||||||
if (data.mes) {
|
if (data.mes) {
|
||||||
const name = data.name;
|
const name = data.name;
|
||||||
const message = data.mes.replace(/\r?\n/g, '\n');
|
const message = (data?.extra?.display_text || data?.mes || '').replace(/\r?\n/g, '\n');
|
||||||
writeStream.write(`${name}: ${message}\n\n`);
|
buffer += (`${name}: ${message}\n\n`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
rl.on('close', () => {
|
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) {
|
catch (err) {
|
||||||
console.log("chat export failed.")
|
console.log("chat export failed.")
|
||||||
|
Reference in New Issue
Block a user