#!/usr/bin/env node const { spawn } = require('child_process'); const fs = require('fs'); const path = require('path'); console.log('šŸ” Checking rclone installation...'); function checkRclone() { return new Promise((resolve) => { const rclone = spawn('rclone', ['version'], { stdio: 'pipe' }); let output = ''; let error = ''; rclone.stdout.on('data', (data) => { output += data.toString(); }); rclone.stderr.on('data', (data) => { error += data.toString(); }); rclone.on('close', (code) => { if (code === 0) { const versionMatch = output.match(/rclone v(\d+\.\d+\.\d+)/); if (versionMatch) { console.log(`āœ… Rclone is installed: ${versionMatch[1]}`); resolve(true); } else { console.log('āœ… Rclone is installed (version unknown)'); resolve(true); } } else { console.log('āŒ Rclone is not installed or not in PATH'); resolve(false); } }); rclone.on('error', () => { console.log('āŒ Rclone is not installed or not in PATH'); resolve(false); }); }); } function showInstallInstructions() { console.log('\nšŸ“„ Rclone Installation Instructions:'); console.log('====================================='); if (process.platform === 'darwin') { console.log('\nšŸŽ macOS:'); console.log(' brew install rclone'); console.log(' # Or download from: https://rclone.org/downloads/'); } else if (process.platform === 'win32') { console.log('\n🪟 Windows:'); console.log(' # Download from: https://rclone.org/downloads/'); console.log(' # Extract and add to PATH'); } else if (process.platform === 'linux') { console.log('\n🐧 Linux:'); console.log(' # Ubuntu/Debian:'); console.log(' curl https://rclone.org/install.sh | sudo bash'); console.log(' # Or: sudo apt install rclone'); console.log(' # CentOS/RHEL:'); console.log(' sudo yum install rclone'); } console.log('\nšŸ“š After installation:'); console.log(' 1. Run: rclone config'); console.log(' 2. Create a new remote named "music"'); console.log(' 3. Choose S3 provider'); console.log(' 4. Enter your Garage S3 credentials'); console.log('\nšŸ”— Documentation: https://rclone.org/s3/'); } async function main() { const isInstalled = await checkRclone(); if (!isInstalled) { showInstallInstructions(); process.exit(1); } else { console.log('\nšŸŽ‰ Rclone is ready to use!'); console.log('šŸ’” You can now run: npm start'); } } main().catch(console.error);