Files
paperclip-wallet/modules/database.js
Taegus 69ffad124d + clean blockchain data
* show sender wallet name and only show address in the main field
2019-02-03 12:51:00 +01:00

132 lines
3.5 KiB
JavaScript

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 os = require('os');
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 };
} else {
event.returnValue = { success: true, error: null };
}
});
});
ipcMain.on('deleteWalletData', (event, arg) => {
fs.unlink(path.join(app.getPath('userData'), 'wallets.json'), (err) => {
if (err) {
event.returnValue = { success: false, error: err };
} else {
event.returnValue = { success: true, error: null };
}
});
});
ipcMain.on('deleteBlockchainData', (event, arg) => {
var deleteFolderRecursive = function(path) {
if( fs.existsSync(path) ) {
fs.readdirSync(path).forEach(function(file,index){
var curPath = path + "/" + file;
if(fs.lstatSync(curPath).isDirectory()) { // recurse
deleteFolderRecursive(curPath);
} else { // delete file
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(path);
}
};
function getBlockchainDataLocation() {
switch(os.type()) {
case "Darwin":
return path.join(os.homedir(), 'Library', 'Ether1', 'geth');
break;
default:
return path.join(process.env.APPDATA, 'Ether1', 'geth');
}
}
// delete folder in a synchronous recursive maner
deleteFolderRecursive(getBlockchainDataLocation());
event.returnValue = true;
});