Files

60 lines
1.9 KiB
JavaScript

const path = require('path');
const fs = require('fs');
function getBaseDataDir() {
// 1. Portable Electron executable environment (next to Breakallery-Portable.exe)
if (process.env.PORTABLE_EXECUTABLE_DIR) {
const dir = path.join(process.env.PORTABLE_EXECUTABLE_DIR, '.breakallery_data');
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
return dir;
}
// 2. Electron packaged application
if (process.versions && process.versions.electron) {
try {
const { app } = require('electron');
if (app && app.getPath) {
const dir = path.join(app.getPath('userData'), 'data');
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
return dir;
}
} catch (e) {
// Ignore if called outside electron
}
}
// 3. Development / Standard Node.js environment
return path.join(__dirname, '..');
}
const BASE_DIR = getBaseDataDir();
const CACHE_DIR = path.join(BASE_DIR, '.cache');
const THUMBNAILS_DIR = path.join(CACHE_DIR, 'thumbnails');
const VIDEOS_CACHE = path.join(CACHE_DIR, 'videos');
const CONFIG_PATH = path.join(BASE_DIR, 'config.json');
const ROOT_APP_DIR = process.env.PORTABLE_EXECUTABLE_DIR || path.resolve(__dirname, '..');
const CAPTURES_DIR = path.join(ROOT_APP_DIR, 'Captures');
// Ensure directories exist
if (!fs.existsSync(CACHE_DIR)) fs.mkdirSync(CACHE_DIR, { recursive: true });
if (!fs.existsSync(THUMBNAILS_DIR)) fs.mkdirSync(THUMBNAILS_DIR, { recursive: true });
if (!fs.existsSync(VIDEOS_CACHE)) fs.mkdirSync(VIDEOS_CACHE, { recursive: true });
if (!fs.existsSync(CAPTURES_DIR)) fs.mkdirSync(CAPTURES_DIR, { recursive: true });
function sanitizeFolderName(name) {
if (!name) return 'Unknown Game';
return name.replace(/[<>:"/\\|?*]/g, '_').trim() || 'Unknown Game';
}
module.exports = {
BASE_DIR,
ROOT_APP_DIR,
CACHE_DIR,
THUMBNAILS_DIR,
VIDEOS_CACHE,
CONFIG_PATH,
CAPTURES_DIR,
sanitizeFolderName,
};