r2drive
Version:
A modern desktop file manager for Cloudflare R2 storage with intuitive drag & drop interface
131 lines (109 loc) ⢠4.35 kB
JavaScript
const { execSync, spawn } = require('child_process');
const fs = require('fs');
const path = require('path');
const os = require('os');
console.log('š R2Drive - Modern File Manager for Cloudflare R2');
console.log('================================================\n');
const platform = os.platform();
const arch = os.arch();
function detectPlatform() {
if (platform === 'darwin') {
return arch === 'arm64' ? 'macos-aarch64' : 'macos-x64';
} else if (platform === 'win32') {
return 'windows-x64';
} else if (platform === 'linux') {
return 'linux-x64';
} else {
throw new Error(`Unsupported platform: ${platform}-${arch}`);
}
}
function getDownloadUrl(version = '0.1.0') {
const platformKey = detectPlatform();
const baseUrl = 'https://github.com/falgom4/R2Drive/releases/download';
const urls = {
'macos-aarch64': `${baseUrl}/v${version}/R2Drive_${version}_aarch64.dmg`,
'macos-x64': `${baseUrl}/v${version}/R2Drive_${version}_x86_64.dmg`,
'windows-x64': `${baseUrl}/v${version}/R2Drive_${version}_x64_en-US.msi`,
'linux-x64': `${baseUrl}/v${version}/r2drive_${version}_amd64.AppImage`
};
return urls[platformKey];
}
function openBrowser(url) {
const command = platform === 'darwin' ? 'open' :
platform === 'win32' ? 'start' : 'xdg-open';
try {
execSync(`${command} "${url}"`, { stdio: 'ignore' });
} catch (error) {
console.log(`Please open this URL manually: ${url}`);
}
}
async function main() {
try {
const platformKey = detectPlatform();
console.log(`ā
Platform detected: ${platformKey}`);
// Check if running in development mode
if (process.argv.includes('--dev')) {
console.log('š§ Starting development server...');
const devProcess = spawn('npm', ['run', 'dev'], {
stdio: 'inherit',
cwd: path.join(__dirname, '..')
});
devProcess.on('exit', (code) => {
process.exit(code);
});
return;
}
// Check if running as web server
if (process.argv.includes('--web')) {
console.log('š Starting web server...');
const webProcess = spawn('npm', ['run', 'start'], {
stdio: 'inherit',
cwd: path.join(__dirname, '..')
});
webProcess.on('exit', (code) => {
process.exit(code);
});
return;
}
console.log('š¦ R2Drive needs to be downloaded for your platform.');
console.log('This is a one-time setup process.\n');
const downloadUrl = getDownloadUrl();
console.log(`š Download URL: ${downloadUrl}`);
console.log('\nš± Opening download page in your browser...');
// Open GitHub releases page
const releasesUrl = 'https://github.com/falgom4/R2Drive/releases/latest';
openBrowser(releasesUrl);
console.log('\nš Installation Instructions:');
console.log('===============================');
if (platformKey.startsWith('macos')) {
console.log('š macOS:');
console.log('1. Download the .dmg file');
console.log('2. Open the .dmg file');
console.log('3. Drag R2Drive to Applications folder');
console.log('4. Run R2Drive from Applications');
} else if (platformKey.startsWith('windows')) {
console.log('šŖ Windows:');
console.log('1. Download the .msi file');
console.log('2. Run the installer');
console.log('3. Follow installation wizard');
console.log('4. Launch R2Drive from Start Menu');
} else if (platformKey.startsWith('linux')) {
console.log('š§ Linux:');
console.log('1. Download the .AppImage file');
console.log('2. Make it executable: chmod +x r2drive_*.AppImage');
console.log('3. Run: ./r2drive_*.AppImage');
}
console.log('\nš” Alternative: Run as web app');
console.log('===============================');
console.log('If you prefer to run R2Drive as a web application:');
console.log('⢠npx r2drive --web (production)');
console.log('⢠npx r2drive --dev (development)');
console.log('\nš Then open: http://localhost:3000');
} catch (error) {
console.error('ā Error:', error.message);
console.log('\nš Need help? Visit: https://github.com/falgom4/R2Drive/issues');
process.exit(1);
}
}
main();