You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
5.9 KiB
200 lines
5.9 KiB
const { app, BrowserWindow, ipcMain } = require('electron');
|
|
const path = require('path');
|
|
const sqlite3 = require('sqlite3').verbose();
|
|
|
|
app.commandLine.appendSwitch('remote-debugging-port', '9222');
|
|
|
|
let mainWindow;
|
|
let db;
|
|
|
|
function createWindow() {
|
|
mainWindow = new BrowserWindow({
|
|
width: 1200,
|
|
height: 800,
|
|
webPreferences: {
|
|
nodeIntegration: true,
|
|
contextIsolation: false
|
|
}
|
|
});
|
|
|
|
mainWindow.loadFile('index.html');
|
|
|
|
db = new sqlite3.Database('../pokemon_forms.db', (err) => {
|
|
if (err) {
|
|
console.error('Database opening error: ', err);
|
|
}
|
|
});
|
|
}
|
|
|
|
app.whenReady().then(createWindow);
|
|
|
|
app.on('window-all-closed', () => {
|
|
if (process.platform !== 'darwin') {
|
|
app.quit();
|
|
}
|
|
});
|
|
|
|
app.on('activate', () => {
|
|
if (BrowserWindow.getAllWindows().length === 0) {
|
|
createWindow();
|
|
}
|
|
});
|
|
|
|
ipcMain.on('load-forms-data', (event) => {
|
|
db.all(`
|
|
SELECT pf.PFIC, pf.name, pf.form_name, pf.national_dex, pf.generation, ps.storable_in_home
|
|
FROM pokemon_forms pf
|
|
LEFT JOIN pokemon_storage ps ON pf.PFIC = ps.PFIC
|
|
`, (err, rows) => {
|
|
if (err) {
|
|
console.error('Error fetching data: ', err);
|
|
event.reply('forms-data-response', { error: err.message });
|
|
} else {
|
|
event.reply('forms-data-response', { data: rows });
|
|
}
|
|
});
|
|
});
|
|
|
|
ipcMain.on('search-evolution', (event, searchTerm) => {
|
|
db.all(`
|
|
SELECT DISTINCT name, PFIC
|
|
FROM pokemon_forms
|
|
WHERE LOWER(name) LIKE ?
|
|
`, [`%${searchTerm.toLowerCase()}%`], (err, rows) => {
|
|
if (err) {
|
|
console.error('Error searching evolution: ', err);
|
|
event.reply('evolution-search-response', { error: err.message });
|
|
} else {
|
|
event.reply('evolution-search-response', { data: rows });
|
|
}
|
|
});
|
|
});
|
|
|
|
ipcMain.on('get-evolution-chain', (event, pfic) => {
|
|
function getEvolutions(currentPfic) {
|
|
return new Promise((resolve, reject) => {
|
|
db.all(`
|
|
SELECT ec.to_pfic as pfic, pf.name, pf.form_name, ec.method, ec.from_pfic
|
|
FROM evolution_chains ec
|
|
JOIN pokemon_forms pf ON ec.to_pfic = pf.PFIC
|
|
WHERE ec.from_pfic = ?
|
|
`, [currentPfic], (err, rows) => {
|
|
if (err) {
|
|
reject(err);
|
|
} else {
|
|
resolve(rows);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
async function buildChain(pfic) {
|
|
const pokemon = await new Promise((resolve, reject) => {
|
|
db.get(`SELECT PFIC as pfic, name, form_name FROM pokemon_forms WHERE PFIC = ?`, [pfic], (err, row) => {
|
|
if (err) reject(err);
|
|
else resolve(row);
|
|
});
|
|
});
|
|
|
|
if (!pokemon) return null;
|
|
|
|
const evolutions = await getEvolutions(pfic);
|
|
pokemon.evolutions = await Promise.all(evolutions.map(evo => buildChain(evo.pfic)));
|
|
|
|
return pokemon;
|
|
}
|
|
|
|
buildChain(pfic)
|
|
.then(chain => {
|
|
event.reply('evolution-chain-response', { data: chain });
|
|
})
|
|
.catch(err => {
|
|
console.error('Error building evolution chain:', err);
|
|
event.reply('evolution-chain-response', { error: err.message });
|
|
});
|
|
});
|
|
|
|
ipcMain.on('edit-pokemon', (event, data) => {
|
|
// Implement the logic to update the Pokémon in the database
|
|
console.log('Editing Pokémon:', data);
|
|
// Update the database and send a response back to the renderer
|
|
});
|
|
|
|
ipcMain.on('remove-pokemon', (event, data) => {
|
|
// Implement the logic to remove the Pokémon from the evolution chain in the database
|
|
console.log('Removing Pokémon:', data);
|
|
// Update the database and send a response back to the renderer
|
|
});
|
|
|
|
ipcMain.on('add-stage', (event, data) => {
|
|
// Implement the logic to add a new stage to the evolution chain in the database
|
|
console.log('Adding new stage:', data);
|
|
// Update the database and send a response back to the renderer
|
|
});
|
|
|
|
ipcMain.on('save-evolution-changes', (event, data) => {
|
|
// Implement the logic to save all changes to the evolution chain in the database
|
|
console.log('Saving evolution changes:', data);
|
|
|
|
// Here you would update the database with the new evolution chain data
|
|
// This is a placeholder implementation
|
|
setTimeout(() => {
|
|
event.reply('save-evolution-changes-response', { success: true });
|
|
}, 1000);
|
|
|
|
// If there's an error, you would reply with:
|
|
// event.reply('save-evolution-changes-response', { error: 'Error message' });
|
|
});
|
|
|
|
// Add more IPC handlers for other database operations
|
|
|
|
// Add this IPC handler
|
|
ipcMain.on('load-all-pokemon', (event) => {
|
|
db.all(`
|
|
SELECT PFIC, name, form_name
|
|
FROM pokemon_forms
|
|
ORDER BY
|
|
CAST(SUBSTR(PFIC, 1, 4) AS INTEGER), -- National Dex number
|
|
CAST(SUBSTR(PFIC, 6, 2) AS INTEGER), -- Region code
|
|
CAST(SUBSTR(PFIC, 9, 3) AS INTEGER), -- Form index
|
|
CAST(SUBSTR(PFIC, 13, 1) AS INTEGER) -- Gender code
|
|
`, (err, rows) => {
|
|
if (err) {
|
|
console.error('Error fetching all Pokémon:', err);
|
|
event.reply('all-pokemon-response', { error: err.message });
|
|
} else {
|
|
event.reply('all-pokemon-response', { data: rows });
|
|
}
|
|
});
|
|
});
|
|
|
|
ipcMain.on('get-pokemon-details', (event, pfic) => {
|
|
db.get(`
|
|
SELECT pf.PFIC, pf.name, pf.form_name, pf.national_dex, pf.generation, ps.storable_in_home
|
|
FROM pokemon_forms pf
|
|
LEFT JOIN pokemon_storage ps ON pf.PFIC = ps.PFIC
|
|
WHERE pf.PFIC = ?
|
|
`, [pfic], (err, row) => {
|
|
if (err) {
|
|
console.error('Error fetching Pokémon details:', err);
|
|
event.reply('pokemon-details-response', { error: err.message });
|
|
} else {
|
|
event.reply('pokemon-details-response', { data: row });
|
|
}
|
|
});
|
|
});
|
|
|
|
ipcMain.on('update-storable-in-home', (event, data) => {
|
|
db.run(`
|
|
UPDATE pokemon_storage
|
|
SET storable_in_home = ?
|
|
WHERE PFIC = ?
|
|
`, [data.storable ? 1 : 0, data.pfic], (err) => {
|
|
if (err) {
|
|
console.error('Error updating storable in home:', err);
|
|
event.reply('update-storable-in-home-response', { error: err.message });
|
|
} else {
|
|
event.reply('update-storable-in-home-response', { success: true });
|
|
}
|
|
});
|
|
});
|