Add missing checkScriptExists method to scriptDownloader.js

- Add checkScriptExists method that was missing from JavaScript implementation
- This method is required by the checkScriptFiles API endpoint
- Method checks if CT script and install script files exist locally
- Returns ctExists, installExists, and files array
- Fixes issue where UI shows 'Load Script' instead of 'Install' button for downloaded scripts
This commit is contained in:
Michel Roegl-Brunner
2025-10-24 22:06:34 +02:00
parent e40bd1f6a3
commit 9a8cff3227

View File

@@ -227,6 +227,71 @@ export class ScriptDownloaderService {
// All files exist, script is downloaded // All files exist, script is downloaded
return true; return true;
} }
async checkScriptExists(script) {
this.initializeConfig();
const files = [];
let ctExists = false;
let installExists = false;
try {
// Check scripts based on their install methods
if (script.install_methods?.length) {
for (const method of script.install_methods) {
if (method.script) {
const scriptPath = method.script;
const fileName = scriptPath.split('/').pop();
if (fileName) {
let targetDir;
if (scriptPath.startsWith('ct/')) {
targetDir = 'ct';
} else if (scriptPath.startsWith('tools/')) {
targetDir = 'tools';
} else if (scriptPath.startsWith('vm/')) {
targetDir = 'vm';
} else {
targetDir = 'ct'; // Default fallback
}
const filePath = join(this.scriptsDirectory, targetDir, fileName);
try {
await access(filePath);
files.push(`${targetDir}/${fileName}`);
if (scriptPath.startsWith('ct/')) {
ctExists = true;
}
} catch {
// File doesn't exist
}
}
}
}
}
// Check for install script for CT scripts
const hasCtScript = script.install_methods?.some(method => method.script?.startsWith('ct/'));
if (hasCtScript) {
const installScriptName = `${script.slug}-install.sh`;
const installPath = join(this.scriptsDirectory, 'install', installScriptName);
try {
await access(installPath);
files.push(`install/${installScriptName}`);
installExists = true;
} catch {
// Install script doesn't exist
}
}
return { ctExists, installExists, files };
} catch (error) {
console.error('Error checking script existence:', error);
return { ctExists: false, installExists: false, files: [] };
}
}
} }
export const scriptDownloaderService = new ScriptDownloaderService(); export const scriptDownloaderService = new ScriptDownloaderService();