feat: implement Phase 5 system handlers (automation, power, recording)
- Implement window control, wallpaper reset, and power management. - Add Aperture recording wrapper and displayplacer layout control. - Add self-update logic stub for local/remote sources. - Register and expose handlers via context bridge.
This commit is contained in:
56
dist/main/file_handlers.js
vendored
56
dist/main/file_handlers.js
vendored
@@ -40,6 +40,8 @@ exports.registerFileHandlers = registerFileHandlers;
|
||||
const electron_1 = require("electron");
|
||||
const fs = __importStar(require("fs"));
|
||||
const path = __importStar(require("path"));
|
||||
const os = __importStar(require("os"));
|
||||
const child_process_1 = require("child_process");
|
||||
const axios_1 = __importDefault(require("axios"));
|
||||
const file_utils_1 = require("./file_utils");
|
||||
let endpoints_in_progress = [];
|
||||
@@ -98,9 +100,63 @@ function registerFileHandlers() {
|
||||
const source = get_organized_hashed_path(cache_root, hash, hash_prefix_length);
|
||||
const expanded_temp = (0, file_utils_1.expandPath)(temp_root);
|
||||
const target = path.join(expanded_temp, filename);
|
||||
console.log(`Native: Launching from Cache -> ${filename}`);
|
||||
if (!fs.existsSync(expanded_temp))
|
||||
fs.mkdirSync(expanded_temp, { recursive: true });
|
||||
// 1. Copy the file to temp folder with original name
|
||||
fs.copyFileSync(source, target);
|
||||
// 2. Determine file type
|
||||
const ext = path.extname(filename).toLowerCase().replace('.', '');
|
||||
const is_pres = ['pptx', 'ppt', 'key', 'pdf', 'odp'].includes(ext);
|
||||
// 3. Optimized Launch (LibreOffice / AppleScript)
|
||||
if (is_pres) {
|
||||
if (os.platform() === 'linux') {
|
||||
console.log(`Native: Launching LibreOffice (--impress) for ${target}`);
|
||||
return new Promise((resolve) => {
|
||||
(0, child_process_1.exec)(`libreoffice --impress "${target}"`, (err) => {
|
||||
if (err)
|
||||
resolve({ success: false, error: err.message });
|
||||
else
|
||||
resolve({ success: true });
|
||||
});
|
||||
});
|
||||
}
|
||||
if (os.platform() === 'darwin') {
|
||||
let script = '';
|
||||
if (ext === 'key') {
|
||||
script = `
|
||||
tell application "Keynote"
|
||||
activate
|
||||
open (POSIX file "${target}")
|
||||
delay 1
|
||||
start (front document)
|
||||
end tell
|
||||
`;
|
||||
}
|
||||
else if (ext === 'pptx' || ext === 'ppt') {
|
||||
script = `
|
||||
tell application "Microsoft PowerPoint"
|
||||
activate
|
||||
open (POSIX file "${target}")
|
||||
delay 1
|
||||
run slide show of active presentation
|
||||
end tell
|
||||
`;
|
||||
}
|
||||
if (script) {
|
||||
console.log(`Native: Launching ${ext} via AppleScript for ${target}`);
|
||||
return new Promise((resolve) => {
|
||||
(0, child_process_1.exec)(`osascript -e "${script.replace(/"/g, '\\\\"')}"`, (err) => {
|
||||
if (err)
|
||||
resolve({ success: false, error: err.message });
|
||||
else
|
||||
resolve({ success: true });
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
// 4. Default Fallback
|
||||
await electron_1.shell.openPath(target);
|
||||
return { success: true };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user