const {app, dialog, ipcMain} = require('electron'); const storage = require('electron-storage'); const datastore = require('nedb'); const moment = require('moment'); const path = require('path'); const fs = require('fs'); const dbPath = path.join(app.getPath('userData'), 'storage.db'); const db = new datastore({ filename: dbPath }); db.loadDatabase(function (err) { // Now commands will be executed }); // index the block field db.ensureIndex({ fieldName: 'block' }, function (err) { // If there was an error, err is not null }); // index the txhash field db.ensureIndex({ fieldName: 'txhash', unique: true }, function (err) { // If there was an error, err is not null }); ipcMain.on('storeTransaction', (event, arg) => { db.update({ txhash: arg.txhash }, arg, { upsert: true }, function (err, numReplaced, upsert) { // do nothing for now }); }); ipcMain.on('getTransactions', (event, arg) => { db.find({}).exec(function (err, docs) { ResultData = []; // sort the data docs.sort((a, b)=>{ if ((!b.block) && (a.block)) { return 1; } else if ((b.block) && (!a.block)) { return -1; } else if ((!b.block) && (!a.block)) { return moment(b.timestamp, "YYYY-MM-DD HH:mm:ss").toDate() - moment(a.timestamp, "YYYY-MM-DD HH:mm:ss").toDate(); } else { return b.block - a.block; } }); for (i = 0; i < Math.min(docs.length, 500); i++) { ResultData.push([ docs[i].block, docs[i].timestamp, docs[i].fromaddr, docs[i].toaddr, docs[i].value ]); } // return the transactions data event.returnValue = ResultData; }); }); ipcMain.on('getJSONFile', (event, arg) => { storage.get(arg, (err, data) => { if (err) { event.returnValue = null; } else { event.returnValue = data; } }); }); ipcMain.on('setJSONFile', (event, arg) => { storage.set(arg.file, arg.data, (err) => { if (err) { event.returnValue = { success: false, error: err }; } else { event.returnValue = { success: true, error: null }; } }); }); ipcMain.on('deleteTransactions', (event, arg) => { fs.unlink(dbPath, (err) => { if (err) { event.returnValue = { success: false, error: err }; dialog.showErrorBox("Error deleting the file", err.message); } else { event.returnValue = { success: true, error: null }; } }); });