sillytavern / src /content-manager.js
teralomaniac's picture
1
70023bd
const fs = require('fs');
const path= require('path');
const config = require(path.join(process.cwd(), './config.conf'));
const contentDirectory = path.join(process.cwd(), 'default/content');
const contentLogPath = path.join(contentDirectory, 'content.log');
const contentIndexPath = path.join(contentDirectory, 'index.json');
function checkForNewContent() {
try {
if (config.skipContentCheck) {
return;
}
const contentLog = getContentLog();
const contentIndexText = fs.readFileSync(contentIndexPath, 'utf8');
const contentIndex = JSON.parse(contentIndexText);
for (const contentItem of contentIndex) {
// If the content item is already in the log, skip it
if (contentLog.includes(contentItem.filename)) {
continue;
}
contentLog.push(contentItem.filename);
const contentPath = path.join(contentDirectory, contentItem.filename);
if (!fs.existsSync(contentPath)) {
console.log(`Content file ${contentItem.filename} is missing`);
continue;
}
const contentTarget = getTargetByType(contentItem.type);
if (!contentTarget) {
console.log(`Content file ${contentItem.filename} has unknown type ${contentItem.type}`);
continue;
}
const targetPath = path.join(process.cwd(), contentTarget, contentItem.filename);
if (fs.existsSync(targetPath)) {
console.log(`Content file ${contentItem.filename} already exists in ${contentTarget}`);
continue;
}
fs.cpSync(contentPath, targetPath, { recursive: true, force: false });
console.log(`Content file ${contentItem.filename} copied to ${contentTarget}`);
}
fs.writeFileSync(contentLogPath, contentLog.join('\n'));
} catch (err) {
console.log('Content check failed', err);
}
}
function getTargetByType(type) {
switch (type) {
case 'character':
return 'public/characters';
case 'sprites':
return 'public/characters';
case 'background':
return 'public/backgrounds';
case 'world':
return 'public/worlds';
case 'sound':
return 'public/sounds';
case 'avatar':
return 'public/User Avatars';
case 'theme':
return 'public/themes';
default:
return null;
}
}
function getContentLog() {
if (!fs.existsSync(contentLogPath)) {
return [];
}
const contentLogText = fs.readFileSync(contentLogPath, 'utf8');
return contentLogText.split('\n');
}
module.exports = {
checkForNewContent,
}