Upload files to "/"
This commit is contained in:
139
main.js
Normal file
139
main.js
Normal file
@@ -0,0 +1,139 @@
|
||||
const { app, BrowserWindow, Menu, dialog, ipcMain } = require('electron');
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
|
||||
let mainWindow;
|
||||
|
||||
// Disable GPU acceleration to prevent crashes
|
||||
app.disableHardwareAcceleration();
|
||||
|
||||
function createWindow() {
|
||||
mainWindow = new BrowserWindow({
|
||||
width: 1200,
|
||||
height: 800,
|
||||
minWidth: 800,
|
||||
minHeight: 600,
|
||||
webPreferences: {
|
||||
nodeIntegration: true,
|
||||
contextIsolation: false
|
||||
},
|
||||
show: false,
|
||||
backgroundColor: '#1a1a2e'
|
||||
});
|
||||
|
||||
mainWindow.loadFile('index.html');
|
||||
|
||||
mainWindow.once('ready-to-show', () => {
|
||||
mainWindow.show();
|
||||
});
|
||||
|
||||
if (process.argv.includes('--dev')) {
|
||||
mainWindow.webContents.openDevTools();
|
||||
}
|
||||
|
||||
mainWindow.on('closed', () => {
|
||||
mainWindow = null;
|
||||
});
|
||||
|
||||
createMenu();
|
||||
}
|
||||
|
||||
function createMenu() {
|
||||
const template = [
|
||||
{
|
||||
label: 'File',
|
||||
submenu: [
|
||||
{
|
||||
label: 'Open Save File',
|
||||
accelerator: 'CmdOrCtrl+O',
|
||||
click: () => openSaveFile()
|
||||
},
|
||||
{
|
||||
label: 'Save',
|
||||
accelerator: 'CmdOrCtrl+S',
|
||||
click: () => mainWindow.webContents.send('menu-save')
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
label: 'Exit',
|
||||
click: () => app.quit()
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
const menu = Menu.buildFromTemplate(template);
|
||||
Menu.setApplicationMenu(menu);
|
||||
}
|
||||
|
||||
async function openSaveFile() {
|
||||
try {
|
||||
const result = await dialog.showOpenDialog(mainWindow, {
|
||||
title: 'Open Fallout Shelter Save File',
|
||||
filters: [
|
||||
{ name: 'Save Files', extensions: ['sav'] },
|
||||
{ name: 'All Files', extensions: ['*'] }
|
||||
],
|
||||
properties: ['openFile']
|
||||
});
|
||||
|
||||
if (!result.canceled && result.filePaths.length > 0) {
|
||||
const filePath = result.filePaths[0];
|
||||
const fileData = fs.readFileSync(filePath, 'utf8');
|
||||
mainWindow.webContents.send('file-opened', {
|
||||
path: filePath,
|
||||
data: fileData,
|
||||
name: path.basename(filePath)
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error:', error);
|
||||
}
|
||||
}
|
||||
|
||||
// IPC handlers
|
||||
ipcMain.on('open-file-dialog', () => {
|
||||
openSaveFile();
|
||||
});
|
||||
|
||||
ipcMain.handle('save-file', async (event, filePath, data) => {
|
||||
try {
|
||||
console.log('Main process: Saving file to:', filePath);
|
||||
console.log('Main process: Data length:', data.length);
|
||||
|
||||
fs.writeFileSync(filePath, data, 'utf8');
|
||||
console.log('Main process: File saved successfully');
|
||||
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
console.error('Main process: Save error:', error);
|
||||
return { success: false, error: error.message };
|
||||
}
|
||||
});
|
||||
|
||||
ipcMain.handle('create-backup', async (event, originalPath) => {
|
||||
try {
|
||||
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
||||
const backupPath = `${originalPath}.backup_${timestamp}`;
|
||||
fs.copyFileSync(originalPath, backupPath);
|
||||
return { success: true, backupPath };
|
||||
} catch (error) {
|
||||
return { success: false, error: error.message };
|
||||
}
|
||||
});
|
||||
|
||||
app.whenReady().then(() => {
|
||||
createWindow();
|
||||
});
|
||||
|
||||
app.on('window-all-closed', () => {
|
||||
if (process.platform !== 'darwin') {
|
||||
app.quit();
|
||||
}
|
||||
});
|
||||
|
||||
app.on('activate', () => {
|
||||
if (BrowserWindow.getAllWindows().length === 0) {
|
||||
createWindow();
|
||||
}
|
||||
});
|
Reference in New Issue
Block a user