ethoFS Upload Reset Bug Fix

This commit is contained in:
Dev-JamesR
2019-10-25 23:03:45 -07:00
parent ab82145a26
commit 1fb88a4fd1
2 changed files with 423 additions and 392 deletions

View File

@@ -52,7 +52,7 @@ class MainGUI {
$("#dlgGeneralError").iziModal();
$("#dlgGeneralError").iziModal("open");
$("#btnGeneralErrorOK").click(function() {
$("#btnGeneralErrorOK").click(function () {
$("#dlgGeneralError").iziModal("close");
});
}
@@ -64,12 +64,12 @@ class MainGUI {
$("#dlgGeneralConfirm").iziModal();
$("#dlgGeneralConfirm").iziModal("open");
$("#btnGeneralConfirmYes").click(function() {
$("#btnGeneralConfirmYes").click(function () {
$("#dlgGeneralConfirm").iziModal("close");
callback(true);
});
$("#btnGeneralConfirmNo").click(function() {
$("#btnGeneralConfirmNo").click(function () {
$("#dlgGeneralConfirm").iziModal("close");
callback(false);
});
@@ -82,12 +82,12 @@ class MainGUI {
$("#dlgAboutInfo").iziModal();
$("#dlgAboutInfo").iziModal("open");
$("#urlOpenLicence, #urlOpenGitHub").off("click").on("click", function(even) {
$("#urlOpenLicence, #urlOpenGitHub").off("click").on("click", function (even) {
event.preventDefault();
ipcRenderer.send("openURL", $(this).attr("href"));
});
$("#btnAboutInfoClose").off("click").on("click", function(even) {
$("#btnAboutInfoClose").off("click").on("click", function (even) {
$("#dlgAboutInfo").iziModal("close");
});
}
@@ -112,47 +112,47 @@ class MainGUI {
}
}
ipcRenderer.on("showAboutDialog", function(event, message) {
ipcRenderer.on("showAboutDialog", function (event, message) {
EthoMainGUI.showAboutDialog(message);
});
$("#mainNavBtnTransactions").click(function() {
$("#mainNavBtnTransactions").click(function () {
EthoTransactions.clearFilter();
EthoMainGUI.changeAppState("transactions");
EthoTransactions.renderTransactions();
});
$("#mainNavBtnAddressBoook").click(function() {
$("#mainNavBtnAddressBoook").click(function () {
EthoMainGUI.changeAppState("addressBook");
EthoAddressBook.renderAddressBook();
});
$("#mainNavBtnSend").click(function() {
$("#mainNavBtnSend").click(function () {
EthoMainGUI.changeAppState("send");
EthoSend.renderSendState();
});
$("#mainNavBtnWallets").click(function() {
$("#mainNavBtnWallets").click(function () {
EthoMainGUI.changeAppState("account");
EthoWallets.renderWalletsState();
});
$("#mainNavBtnMarkets").click(function() {
$("#mainNavBtnMarkets").click(function () {
EthoMainGUI.changeAppState("markets");
EthoMarkets.renderMarkets();
});
$("#mainNavBtnUploads").click(function() {
$("#mainNavBtnUploads").click(function () {
EthoMainGUI.changeAppState("uploads");
EthoUploads.renderUploads();
});
$("#mainNavBtnSettings").click(function() {
$("#mainNavBtnSettings").click(function () {
EthoMainGUI.changeAppState("settings");
EthoSettings.renderSettingsState();
});
$("#mainNavBtnAbout").click(function() {
$("#mainNavBtnAbout").click(function () {
EthoMainGUI.changeAppState("about");
EthoAbout.renderAbout();
});

View File

@@ -7,7 +7,7 @@ const path = require("path");
const Buf = require('buffer').Buffer;
const Common = require('ethereumjs-common');
const fetch = require("node-fetch");
const fs = require('fs');
const fs = require("fs");
const fileReaderPullStream = require('pull-file-reader')
const request = require('request');
const keythereum = require("keythereum");
@@ -147,12 +147,15 @@ class Uploads {
$('#ethofsLoginModal').iziModal();
$('#ethofsLoginModal').iziModal('close');
$('#ethofsRegistrationModal').iziModal('close');
EthoUploads.resetUploadSystem();
EthoUploads.resetUploadProcess();
EthoUploads.resetUploadModal();
//CREATE ETHER-1 CHAIN CONNECTION AND LOOK FOR EXISTING USER ACCOUNT
if (privateKey != "") {
GlobalPrivateKey = privateKey;
privateKeyLogin = true;
web3.eth.net.isListening()
.then(function() {
.then(function () {
console.log('ethoFS is connected')
var account = web3.eth.accounts.privateKeyToAccount('0x' + privateKey);
console.log(account);
@@ -163,7 +166,7 @@ class Uploads {
} else {
privateKeyLogin = false;
web3 = new Web3(web3.currentProvider);
web3.eth.getAccounts(function(err, accounts) {
web3.eth.getAccounts(function (err, accounts) {
if (err != null) {
console.error("An error occurred: " + err);
EthoUploads.outputNoAddressContractTable();
@@ -188,11 +191,11 @@ class Uploads {
console.log("Starting ethoFS");
GlobalUserAddress = web3.eth.defaultAccount;
var ethoFSAccounts = new web3.eth.Contract(GlobalControllerABI, GlobalControllerContractAddress);
ethoFSAccounts.methods.CheckAccountExistence(GlobalUserAddress).call(function(error, result) {
ethoFSAccounts.methods.CheckAccountExistence(GlobalUserAddress).call(function (error, result) {
if (!error) {
if (result) {
document.getElementById("accountaddress").textContent = web3.eth.defaultAccount;
ethoFSAccounts.methods.GetUserAccountName(GlobalUserAddress).call(function(error, result) {
ethoFSAccounts.methods.GetUserAccountName(GlobalUserAddress).call(function (error, result) {
if (!error) {
if (result) {
EthoUploads.getBlockHeight(web3);
@@ -233,14 +236,14 @@ class Uploads {
};
var privateKey = '0x' + GlobalPrivateKey;
web3.eth.accounts.signTransaction(tx, privateKey)
.then(function(signedTransactionData) {
web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function(error, result) {
.then(function (signedTransactionData) {
web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function (error, result) {
if (!error) {
if (result) {
$('#minedBlockTrackerModal').iziModal();
$('#minedBlockTrackerModal').iziModal('open');
$miningMessage = document.querySelector('.mining-message')
EthoUploads.waitForReceipt(result, function(receipt) {
EthoUploads.waitForReceipt(result, function (receipt) {
console.log("Transaction Has Been Mined: " + receipt);
$('#minedBlockTrackerModal').iziModal('close');
EthoUploads.ethofsLogin(GlobalPrivateKey);
@@ -254,14 +257,14 @@ class Uploads {
});
});
} else {
controller.methods.AddNewUserPublic(userName).send(function(error, result) {
controller.methods.AddNewUserPublic(userName).send(function (error, result) {
if (!error) {
if (result) {
document.getElementById("wait").innerHTML = 'Waiting For Add User Confirmation.';
$('#minedBlockTrackerModal').iziModal();
$('#minedBlockTrackerModal').iziModal('open');
$miningMessage = document.querySelector('.mining-message')
EthoUploads.waitForReceipt(result, function(receipt) {
EthoUploads.waitForReceipt(result, function (receipt) {
console.log("Transaction Has Been Mined: " + receipt);
$('#minedBlockTrackerModal').iziModal('close');
ethofsLogin("");
@@ -281,14 +284,14 @@ class Uploads {
}
getBlockHeight(web3) {
console.log("Starting Block Height Detection..");
web3.eth.getBlockNumber(function(err, data) {
web3.eth.getBlockNumber(function (err, data) {
document.getElementById("blocknumber").textContent = data;
console.log("ETHO Block Number: " + data);
});
}
getBalance(web3) {
console.log("Starting Balance Detection..");
web3.eth.getBalance(web3.eth.defaultAccount, function(err, data) {
web3.eth.getBalance(web3.eth.defaultAccount, function (err, data) {
var balance = "ETHO Balance: " + Number(web3.utils.fromWei(data, "ether")).toFixed(2);
document.getElementById("ethobalance").textContent = balance;
console.log("ETHO Balance: " + data);
@@ -304,10 +307,10 @@ class Uploads {
}
//CHECK FOR TX - BLOCK TO BE MINED
waitForReceipt(hash, cb) {
web3.eth.getTransactionReceipt(hash, function(err, receipt) {
web3.eth.getTransactionReceipt(hash, function (err, receipt) {
//document.getElementById("mining-status-message").textContent = "In Progress";
$miningMessage.innerText = "Waiting For Transaction Confirmation";
web3.eth.getBlock('latest', function(e, res) {
web3.eth.getBlock('latest', function (e, res) {
if (!e) {
document.getElementById("block-height").textContent = res.number;
}
@@ -323,7 +326,7 @@ class Uploads {
cb(receipt);
}
} else {
setTimeout(function() {
setTimeout(function () {
EthoUploads.waitForReceipt(hash, cb);
}, 10000);
}
@@ -344,15 +347,15 @@ class Uploads {
console.log("Private Key: " + privateKey);
console.log("Hosting Address: " + hostingAddress + " Removal Hash: " + contentHash);
web3.eth.accounts.signTransaction(tx, privateKey)
.then(function(signedTransactionData) {
.then(function (signedTransactionData) {
console.log("Signed TX Data: " + signedTransactionData.rawTransaction);
web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function(error, result) {
web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function (error, result) {
if (!error) {
if (result) {
$('#minedBlockTrackerModal').iziModal();
$('#minedBlockTrackerModal').iziModal('open');
$miningMessage = document.querySelector('.mining-message')
EthoUploads.waitForReceipt(result, function(receipt) {
EthoUploads.waitForReceipt(result, function (receipt) {
console.log("Transaction Has Been Mined: " + receipt);
$('#minedBlockTrackerModal').iziModal('close');
EthoUploads.updateContractTable();
@@ -370,10 +373,10 @@ class Uploads {
to: GlobalControllerContractAddress,
from: GlobalUserAddress,
};
pinRemoving.methods.RemoveHostingContract(hostingAddress, contentHash).send(tx, function(error, result) {
pinRemoving.methods.RemoveHostingContract(hostingAddress, contentHash).send(tx, function (error, result) {
if (!error) {
if (result) {
EthoUploads.waitForReceipt(result, function(receipt) {
EthoUploads.waitForReceipt(result, function (receipt) {
console.log("Transaction Has Been Mined: " + receipt);
$('#minedBlockTrackerModal').iziModal('close');
EthoUploads.updateContractTable();
@@ -394,14 +397,14 @@ class Uploads {
var hostingContracts = "";
var TotalContractCount = 0;
var blockHeight = 0;
web3.eth.getBlockNumber(function(error, result) {
web3.eth.getBlockNumber(function (error, result) {
if (!error) {
blockHeight = result;
} else
console.error(error);
});
var ethoFSAccounts = new web3.eth.Contract(GlobalControllerABI, GlobalControllerContractAddress);
ethoFSAccounts.methods.GetUserAccountTotalContractCount(web3.eth.defaultAccount).call(function(error, result) {
ethoFSAccounts.methods.GetUserAccountTotalContractCount(web3.eth.defaultAccount).call(function (error, result) {
TotalContractCount = result;
GlobalTotalContractCount = result;
const getContractData = async (ethoFSAccounts, account, TotalContractCount) => {
@@ -528,7 +531,6 @@ class Uploads {
document.getElementById("contract-cost").innerHTML = EthoUploads.round(GlobalContractCost, 2);
document.getElementById("upload-hash").innerHTML = GlobalUploadHash;
document.getElementById("upload-size").innerHTML = GlobalUploadSizeMB;
GlobalContractCost = 0;
return;
}
//CHECK FOR PROPAGATED & AVAILABLE DATA ON NETWORK - FINAL VERIFICATION FOR UPLOADED CONTENT
@@ -724,15 +726,15 @@ class Uploads {
var privateKey = '0x' + GlobalPrivateKey;
console.log("Private Key: " + privateKey);
web3.eth.accounts.signTransaction(tx, privateKey)
.then(function(signedTransactionData) {
.then(function (signedTransactionData) {
console.log("Signed TX Data: " + signedTransactionData.rawTransaction);
web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function(error, result) {
web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function (error, result) {
if (!error) {
if (result) {
$("#contractDetailModal").iziModal("close");
$("#minedBlockTrackerModal").iziModal();
$("#minedBlockTrackerModal").iziModal("open");
EthoUploads.waitForReceipt(result, function(receipt) {
EthoUploads.waitForReceipt(result, function (receipt) {
console.log("Transaction Has Been Mined: " + receipt);
$("#minedBlockTrackerModal").iziModal("close");
EthoUploads.updateContractTable();
@@ -747,13 +749,13 @@ class Uploads {
});
} else {
ethoFSController.methods.ExtendContract(GlobalHostingContractDetailArray['address'], extensionDuration).send(transactionObject, function(error, result) {
ethoFSController.methods.ExtendContract(GlobalHostingContractDetailArray['address'], extensionDuration).send(transactionObject, function (error, result) {
if (!error) {
if (result) {
$('#contractDetailModal').iziModal('close');
$("#minedBlockTrackerModal").iziModal();
$('#minedBlockTrackerModal').iziodal('open');
EthoUploads.waitForReceipt(result, function(receipt) {
EthoUploads.waitForReceipt(result, function (receipt) {
console.log("Transaction Has Been Mined: " + receipt);
$('#minedBlockTrackerModal').iziModal('close');
EthoUploads.updateContractTable();
@@ -783,7 +785,7 @@ class Uploads {
var availableStorageTotal = 0;
var activeHistory = 0;
var nodeCounter = 0;
splitMessage.forEach(function(nodeMessage, index) {
splitMessage.forEach(function (nodeMessage, index) {
var nodeSplitMessage = nodeMessage.split(":");
activeHistory = Number(nodeSplitMessage[5]);
if (activeHistory >= 5) {
@@ -818,23 +820,23 @@ class Uploads {
function calculateStorageAverages(usedStorageArray, availableStorageArray, nodeCountArray) {
var sumAvailableStorage = 0;
availableStorageArray.forEach(function(value, index) {
availableStorageArray.forEach(function (value, index) {
sumAvailableStorage += value;
if (index == (availableStorageArray.length - 1)) {
averageAvailableStorageTotal = (sumAvailableStorage / availableStorageArray.length);
var element = document.getElementById("nodestorage");
if (typeof(element) != 'undefined' && element != null) {
if (typeof (element) != 'undefined' && element != null) {
element.textContent = (EthoUploads.round(2 + ((averageAvailableStorageTotal) / 1000000), 1)) + "TB";
}
}
});
var sumNodeCount = 0;
nodeCountArray.forEach(function(value, index) {
nodeCountArray.forEach(function (value, index) {
sumNodeCount += value;
if (index == (nodeCountArray.length - 1)) {
var averageNodeCount = (sumNodeCount / nodeCountArray.length) + 19;
var element = document.getElementById("nodecount");
if (typeof(element) != 'undefined' && element != null) {
if (typeof (element) != 'undefined' && element != null) {
element.textContent = (EthoUploads.round(averageNodeCount, 0));
}
}
@@ -912,7 +914,8 @@ class Uploads {
}
resetFileTable() {
if (typeof($fileHistory) != 'undefined' && $fileHistory != null) {
document.getElementById("fileUploadButton").value = null;
if (typeof ($fileHistory) != 'undefined' && $fileHistory != null) {
while ($fileHistory.hasChildNodes()) {
$fileHistory.removeChild($fileHistory.firstChild);
}
@@ -936,7 +939,7 @@ class Uploads {
for (var i = 0; i < MainFileArray.length; i++) {
const streamFiles = (files) => {
const stream = node.addReadableStream()
stream.on('data', function(data) {
stream.on('data', function (data) {
GlobalHashArray.push(`${data.hash}`);
GlobalSizeArray.push(`${data.size}`);
GlobalPathArray.push(`${data.path}`);
@@ -975,8 +978,8 @@ class Uploads {
console.log("Sending Immediate Pin Request: " + MainHashArray[i]);
EthoUploads.publishImmediatePin(MainHashArray[i]);
}
setTimeout(function() {
hashVerificationArray.forEach(function(hash) {
setTimeout(function () {
hashVerificationArray.forEach(function (hash) {
verifyDataUpload(hash);
});
}, 5000);
@@ -1006,7 +1009,7 @@ class Uploads {
} else {
var confirmationPercentage = Math.ceil((hashConfirmationCount / hashVerificationArray.length) * 100);
if (confirmationPercentage < 99) {
setTimeout(function() {
setTimeout(function () {
verifyDataUpload(hash)
}, 2000);
} else {
@@ -1018,7 +1021,7 @@ class Uploads {
console.log("Data Confirmation Error: " + error.status);
var confirmationPercentage = Math.ceil((hashConfirmationCount / hashVerificationArray.length) * 100);
if (confirmationPercentage < 99) {
setTimeout(function() {
setTimeout(function () {
verifyDataUpload(hash)
}, 2000);
} else {
@@ -1073,9 +1076,9 @@ class Uploads {
var privateKey = '0x' + GlobalPrivateKey;
console.log("Private Key: " + privateKey);
web3.eth.accounts.signTransaction(tx, privateKey)
.then(function(signedTransactionData) {
.then(function (signedTransactionData) {
console.log("Signed TX Data: " + signedTransactionData.rawTransaction);
web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function(error, result) {
web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function (error, result) {
if (!error) {
if (result) {
console.log("Result: " + result);
@@ -1083,7 +1086,7 @@ class Uploads {
$('#minedBlockTrackerModal').iziModal('open');
$miningMessage = document.querySelector('.mining-message')
$('#preparingUploadModal').iziModal('close');
EthoUploads.waitForReceipt(result, function(receipt) {
EthoUploads.waitForReceipt(result, function (receipt) {
console.log("Transaction Has Been Mined: " + receipt);
$('#minedBlockTrackerModal').iziModal('close');
$('#nodeModal').iziModal('close');
@@ -1100,14 +1103,14 @@ class Uploads {
});
});
} else {
pinAdding.methods.AddNewContract(GlobalMainContentHash, HostingContractName, HostingContractDuration, pinSize, pinSize, contentHashString, contentPathString).send(transactionObject, function(error, result) {
pinAdding.methods.AddNewContract(GlobalMainContentHash, HostingContractName, HostingContractDuration, pinSize, pinSize, contentHashString, contentPathString).send(transactionObject, function (error, result) {
if (!error) {
if (result) {
$('#minedBlockTrackerModal').iziModal();
$('#minedBlockTrackerModal').iziModal('open');
$miningMessage = document.querySelector('.mining-message')
$('#preparingUploadModal').iziModal('close');
EthoUploads.waitForReceipt(result, function(receipt) {
EthoUploads.waitForReceipt(result, function (receipt) {
console.log("Transaction Has Been Mined: " + receipt);
$('#minedBlockTrackerModal').iziModal('close');
$('#nodeModal').iziModal('close');
@@ -1145,6 +1148,13 @@ class Uploads {
MainFileArray = new Array();
GlobalUploadSize = 0;
GlobalUploadSizeMB = 0;
GlobalMainHashArray = new Array();
GlobalMainPathArray = new Array();
GlobalHashArray = new Array();
GlobalPathArray = new Array();
GlobalUploadHash = "";
GlobalUploadPath = "";
GlobalContractCost = 0;
}
updateAnalyzeProgress(width) {
@@ -1159,153 +1169,6 @@ class Uploads {
elem.innerHTML = width * 1 + '%';
}
onFileUpload(event) {
event.preventDefault()
document.getElementById("upload-hash").textContent = "ANALYZING UPLOAD DATA";
document.getElementById("upload-confirm-button").style.visibility = "hidden";
MainFileArray.push([]);
let dirSelected = event.target.files;
let dirName = dirSelected[0].name;
let dirPath = dirSelected[0].path;
var streamCompareCount = 0;
var totalUploadItems = 0;
readDirectoryContents(dirPath);
function readDirectoryContents(directory) {
console.log("Directory Path: " + directory);
fs.readdir(directory, function(err, filesUploaded) {
if (!err) {
for (let i = 0; filesUploaded.length > i; i++) {
handleItem(filesUploaded[i], directory);
}
} else {
console.log("File Upload Error: " + err);
}
});
}
function handleItem(filename, relativePath) {
var filepath = relativePath.concat(pathSymbol, filename);
fs.stat(filepath, function(err, stats) {
if (!err) {
if (stats.isDirectory()) {
readDirectoryContents(filepath)
} else {
streamCompareCount++;
totalUploadItems++;
console.log("File Path: " + filepath);
fs.readFile(filepath, function(err, file) {
var updatedPath = filepath.replace(dirPath, dirName);
var filetowrite = {
path: updatedPath,
content: file
};
var filename = updatedPath;
MainFileArray[MainFileArray.length - 1].push(filetowrite);
GlobalUploadSize += Number(stats.size);
GlobalUploadSizeMB += Number(stats.size) / 1000000;
fileSize += Number(stats.size) / 1000000;
var totalUploadSizeMB = GlobalUploadSizeMB;
EthoUploads.appendFile(updatedPath, filename, stats.size, null);
console.log("Path: " + filepath + " Size: " + stats.size + " Total Size: " + GlobalUploadSize);
document.getElementById("upload-size").textContent = totalUploadSizeMB;
EthoUploads.contractDurationChange(document.getElementById('contract-duration'));
EthoUploads.updateAnalyzeProgress(((totalUploadItems - streamCompareCount) / totalUploadItems));
if (streamCompareCount == 0) {
document.getElementById("upload-hash").textContent = "READY FOR UPLOAD";
document.getElementById("upload-confirm-button").style.visibility = "visible";
}
});
}
} else {
console.log("File Stats Error: " + err);
}
});
}
}
onDrop(event) {
console.log(event);
MainFileArray.push([]);
document.getElementById("upload-hash").textContent = "ANALYZING UPLOAD DATA";
document.getElementById("upload-confirm-button").style.visibility = "hidden";
fileSize = 0;
EthoUploads.resetProgress();
EthoUploads.onDragLeave()
event.preventDefault()
if (GlobalUploadHash != "" && GlobalUploadPath != "") {
GlobalMainHashArray.push(GlobalUploadHash);
GlobalMainPathArray.push(GlobalUploadPath);
}
const dt = event.dataTransfer
//const filesDropped = dt.files
const itemsDropped = dt.items
function readFileContents(file) {
return new Promise((resolve) => {
const reader = new window.FileReader()
reader.onload = (event) => resolve(event.target.result)
reader.readAsArrayBuffer(file)
})
}
var totalItemCount = 0;
var streamCompareCount = 0;
function initialHandleItems(items) {
const files = [];
totalItemCount = items.length;
streamCompareCount = items.length;
for (var item of items) {
var awaitHandleEntry = handleEntry(item.webkitGetAsEntry());
}
function handleEntry(entry) {
if (entry.isFile) {
getFile(entry);
function getFile(entry) {
document.getElementById("upload-hash").textContent = "ANALYZING UPLOAD DATA";
document.getElementById("upload-confirm-button").style.visibility = "hidden";
entry.file(function(file) {
readFileContents(file)
.then((buffer) => {
var filePath = entry.fullPath;
var filetowrite = {
path: entry.fullPath,
content: Buffer.from(buffer)
};
MainFileArray[MainFileArray.length - 1].push(filetowrite);
GlobalUploadSize += Number(file.size);
fileSize += Number(file.size);
var totalUploadSizeMB = GlobalUploadSize / 1000000;
EthoUploads.appendFile(entry.fullPath, entry.name, file.size, null);
document.getElementById("upload-size").textContent = totalUploadSizeMB;
EthoUploads.contractDurationChange(document.getElementById('contract-duration'));
streamCompareCount--;
EthoUploads.updateAnalyzeProgress(((totalItemCount - streamCompareCount) / totalItemCount));
if (streamCompareCount == 0) {
document.getElementById("upload-hash").textContent = "READY FOR UPLOAD";
document.getElementById("upload-confirm-button").style.visibility = "visible";
}
});
});
}
} else if (entry.isDirectory) {
let directoryReader = entry.createReader();
directoryReader.readEntries(function(entries) {
streamCompareCount += entries.length - 1;
totalItemCount += entries.length - 1;
entries.forEach(function(newEntry) {
handleEntry(newEntry);
});
});
}
}
}
initialHandleItems(event.dataTransfer.items);
}
connectToPeer(event) {
const multiaddr = $multiaddrInput.value
@@ -1409,7 +1272,7 @@ class Uploads {
}
renderUploads() {
renderUploads(ethofsRenderFlag) {
EthoMainGUI.renderTemplate("uploads.html", {});
$(document).trigger("render_uploads");
}
@@ -1419,19 +1282,169 @@ class Uploads {
EthoUploads = new Uploads();
$(document).on("render_uploads", function() {
function onFileUpload(event) {
event.preventDefault()
GlobalUploadSize = 0;
GlobalUploadSizeMB = 0;
document.getElementById("upload-hash").textContent = "ANALYZING UPLOAD DATA";
document.getElementById("upload-confirm-button").style.visibility = "hidden";
MainFileArray.push([]);
let dirSelected = event.target.files;
let dirName = dirSelected[0].name;
let dirPath = dirSelected[0].path;
var streamCompareCount = 0;
var totalUploadItems = 0;
readDirectoryContents(dirPath);
function readDirectoryContents(directory) {
console.log("Directory Path: " + directory);
fs.readdir(directory, function (err, filesUploaded) {
if (!err) {
for (let i = 0; filesUploaded.length > i; i++) {
handleItem(filesUploaded[i], directory);
}
} else {
console.log("File Upload Error: " + err);
}
});
}
function handleItem(filename, relativePath) {
var filepath = relativePath.concat(pathSymbol, filename);
fs.stat(filepath, function (err, stats) {
if (!err) {
if (stats.isDirectory()) {
readDirectoryContents(filepath)
} else {
streamCompareCount++;
totalUploadItems++;
console.log("File Path: " + filepath);
fs.readFile(filepath, function (err, file) {
var updatedPath = filepath.replace(dirPath, dirName);
var filetowrite = {
path: updatedPath,
content: file
};
var filename = updatedPath;
MainFileArray[MainFileArray.length - 1].push(filetowrite);
GlobalUploadSize += Number(stats.size);
GlobalUploadSizeMB += Number(stats.size) / 1000000;
fileSize += Number(stats.size) / 1000000;
var totalUploadSizeMB = GlobalUploadSizeMB;
EthoUploads.appendFile(updatedPath, filename, stats.size, null);
console.log("Path: " + filepath + " Size: " + stats.size + " Total Size: " + GlobalUploadSize);
document.getElementById("upload-size").textContent = totalUploadSizeMB;
EthoUploads.contractDurationChange(document.getElementById('contract-duration'));
EthoUploads.updateAnalyzeProgress(((totalUploadItems - streamCompareCount) / totalUploadItems));
if (streamCompareCount == 0) {
document.getElementById("upload-hash").textContent = "READY FOR UPLOAD";
document.getElementById("upload-confirm-button").style.visibility = "visible";
}
});
}
} else {
console.log("File Stats Error: " + err);
}
});
}
}
function onDrop(event) {
console.log(event);
MainFileArray.push([]);
document.getElementById("upload-hash").textContent = "ANALYZING UPLOAD DATA";
document.getElementById("upload-confirm-button").style.visibility = "hidden";
fileSize = 0;
EthoUploads.resetProgress();
EthoUploads.onDragLeave()
event.preventDefault()
if (GlobalUploadHash != "" && GlobalUploadPath != "") {
GlobalMainHashArray.push(GlobalUploadHash);
GlobalMainPathArray.push(GlobalUploadPath);
}
const dt = event.dataTransfer
//const filesDropped = dt.files
const itemsDropped = dt.items
function readFileContents(file) {
return new Promise((resolve) => {
const reader = new window.FileReader()
reader.onload = (event) => resolve(event.target.result)
reader.readAsArrayBuffer(file)
})
}
var totalItemCount = 0;
var streamCompareCount = 0;
function initialHandleItems(items) {
const files = [];
totalItemCount = items.length;
streamCompareCount = items.length;
for (var item of items) {
var awaitHandleEntry = handleEntry(item.webkitGetAsEntry());
}
function handleEntry(entry) {
if (entry.isFile) {
getFile(entry);
function getFile(entry) {
document.getElementById("upload-hash").textContent = "ANALYZING UPLOAD DATA";
document.getElementById("upload-confirm-button").style.visibility = "hidden";
entry.file(function (file) {
readFileContents(file)
.then((buffer) => {
var filePath = entry.fullPath;
var filetowrite = {
path: entry.fullPath,
content: Buffer.from(buffer)
};
MainFileArray[MainFileArray.length - 1].push(filetowrite);
GlobalUploadSize += Number(file.size);
fileSize += Number(file.size);
var totalUploadSizeMB = GlobalUploadSize / 1000000;
EthoUploads.appendFile(entry.fullPath, entry.name, file.size, null);
document.getElementById("upload-size").textContent = totalUploadSizeMB;
EthoUploads.contractDurationChange(document.getElementById('contract-duration'));
streamCompareCount--;
EthoUploads.updateAnalyzeProgress(((totalItemCount - streamCompareCount) / totalItemCount));
if (streamCompareCount == 0) {
document.getElementById("upload-hash").textContent = "READY FOR UPLOAD";
document.getElementById("upload-confirm-button").style.visibility = "visible";
}
});
});
}
} else if (entry.isDirectory) {
let directoryReader = entry.createReader();
directoryReader.readEntries(function (entries) {
streamCompareCount += entries.length - 1;
totalItemCount += entries.length - 1;
entries.forEach(function (newEntry) {
handleEntry(newEntry);
});
});
}
}
}
initialHandleItems(event.dataTransfer.items);
}
$(document).on("render_uploads", function () {
$('#privatekeytable').hide();
$('#walletpasswordtable').hide();
if (isFullySynced) {
(function($, _M) {
(function ($, _M) {
M.toast({
html: 'Node is fully synced and operational.',
displayLength: 10000
});
}(jQuery, M));
} else {
(function($, _M) {
(function ($, _M) {
M.toast({
html: 'Node is still syncing. Please do not attempt to use the wallet or ethoFS upload system.',
displayLength: 10000
@@ -1450,33 +1463,50 @@ $(document).on("render_uploads", function() {
EthoUploads.beforeLoginState();
EthoUploads.checkExistingLogin(GlobalPrivateKey);
fetch('https://api.coinmarketcap.com/v2/ticker/3452/').then(response => {
return response.json();
}).then(data => {
var ethoPriceUSD = data.data.quotes.USD.price;
document.getElementById("ethoprice").textContent = EthoUploads.round(ethoPriceUSD, 4);
}).catch(err => {});
});
$(document).on("dragenter", "#drag-container", function(event) {
function getKeyStoreLocation() {
switch (os.type()) {
case "Darwin":
return path.join(os.homedir(), "Library", "Ether1");
break;
default:
return path.join(process.env.APPDATA, "Ether1");
}
}
$(document).on("dragenter", "#drag-container", function (event) {
EthoUploads.onDragEnter(event);
});
});
$(document).on("dragover", "#drag-container", function(event) {
$(document).on("dragover", "#drag-container", function (event) {
EthoUploads.onDragEnter(event);
});
});
$(document).on("drop", "#drag-container", function(event) {
EthoUploads.onDrop(event.originalEvent);
});
$(document).on("drop", "#drag-container", function (event) {
onDrop(event.originalEvent);
});
$(document).on("dragleave", "#drag-container", function(event) {
$(document).on("dragleave", "#drag-container", function (event) {
EthoUploads.onDragLeave(event);
});
});
$(document).on("change", "#fileUploadButton", function(event) {
EthoUploads.onFileUpload(event);
});
$(document).on("change", "#fileUploadButton", function (event) {
onFileUpload(event);
});
$(document).on("click", "#main-login-button", function(event) {
$(document).on("click", "#main-login-button", function (event) {
GlobalPrivateKey = switchFlag;
EthoUploads.checkLogin();
$('#ethofsLoginModal').iziModal({
onOpened: function() {
onOpened: function () {
console.log("Login Setup Opened ..");
var addressBook = EthoDatatabse.getWallets();
console.log("Getting Address List...");
@@ -1493,7 +1523,7 @@ $(document).on("render_uploads", function() {
}
}
$("#sendFromAddress").on("change", function() {
$("#sendFromAddress").on("change", function () {
var optionText = $(this).find("option:selected").text();
var optionTextValue = $(this).find("option:selected").val();
$("#sendFromAddressName").html(optionText.trim());
@@ -1514,12 +1544,12 @@ $(document).on("render_uploads", function() {
}
});
},
onOpening: function(modal) {
onOpening: function (modal) {
console.log("Opening Login Setup..");
$("#sendFromAddressValue").hide();
$('#walletpasswordtable').hide();
$('#privatekeytable').hide();
(function($, _M) {
(function ($, _M) {
M.toast({
html: '<i class="small material-icons">warning </i> If your wallet has a default name e.g: Account 1, you will not be able to select it.',
displayLength: 10000,
@@ -1529,9 +1559,9 @@ $(document).on("render_uploads", function() {
}
});
$('#ethofsLoginModal').iziModal('open');
});
});
$(document).on("click", "#ethofs-login-button", function(event) {
$(document).on("click", "#ethofs-login-button", function (event) {
if (privateKeyLogin == true) {
GlobalPrivateKey = document.getElementById('privatekey').value;
console.log("Global Private Key: " + GlobalPrivateKey);
@@ -1548,104 +1578,105 @@ $(document).on("render_uploads", function() {
EthoUploads.ethofsLogin(GlobalPrivateKey);
}
});
});
$(document).on("click", "#main-upload-button", function(event) {
$(document).on("click", "#main-upload-button", function (event) {
$('#defaultModal').iziModal();
$('#defaultModal').iziModal('open');
EthoUploads.resetUploadProcess();
});
});
$(document).on("click", "#defaultModal-close", function(event) {
$(document).on("click", "#defaultModal-close", function (event) {
$('#defaultModal').iziModal('close');
EthoUploads.resetUploadSystem();
EthoUploads.resetUploadProcess();
EthoUploads.resetUploadModal();
});
});
$(document).on("click", "#defaultModal-next", function(event) {
$(document).on("click", "#defaultModal-next", function (event) {
$('#defaultModal2').iziModal({
onOpening: function() {
onOpened: function () {
//EthoUploads.resetFileTable();
},
onOpening: function () {
EthoUploads.resetFileTable();
},
onClosed: function () {
//document.getElementById("fileUploadButton").value = "";
},
onHide: function () {
//document.getElementById("fileUploadButton").value = "";
}
});
$('#defaultModal2').iziModal('open');
$('#defaultModal').iziModal('close');
EthoUploads.resetUploadProcess();
});
});
$(document).on("click", "#defaultModal2-close", function(event) {
$(document).on("click", "#defaultModal2-close", function (event) {
$('#defaultModal2').iziModal('close');
EthoUploads.resetUploadSystem();
EthoUploads.resetUploadProcess();
EthoUploads.resetUploadModal();
});
});
$(document).on("click", "#ethofs-registration-button", function(event) {
$(document).on("click", "#ethofs-registration-button", function (event) {
EthoUploads.AddNewUser(document.getElementById('username').value);
});
});
$(document).on("click", "#confirm-files-button", function(event) {
$('#defaultModal3').iziModal();
$(document).on("click", "#confirm-files-button", function (event) {
$('#defaultModal3').iziModal({
onClosed: function () {
document.getElementById("fileUploadButton").value = null;
},
onHidden: function () {
document.getElementById("fileUploadButton").value = null;
}
});
$('#defaultModal3').iziModal('open');
document.getElementById("contract-cost").innerHTML = EthoUploads.round(GlobalContractCost, 2);
$('#defaultModal2').iziModal('close');
document.getElementById("upload-hash").textContent = "READY FOR UPLOAD";
document.getElementById("upload-confirm-button").style.visibility = "visible";
EthoUploads.resetUploadModal();
});
});
$(document).on("click", "#defaultModal3-close", function(event) {
$(document).on("click", "#defaultModal3-close", function (event) {
$('#defaultModal3').iziModal('close');
EthoUploads.resetUploadSystem();
EthoUploads.resetUploadProcess();
EthoUploads.resetUploadModal();
});
});
$(document).on("click", "#upload-confirm-button", function(event) {
$(document).on("click", "#upload-confirm-button", function (event) {
$('#preparingUploadModal').iziModal();
$('#preparingUploadModal').iziModal('open');
$('#defaultModal3').iziModal('close');
EthoUploads.startUploadProcess();
});
$(document).on("click", "#tracker-close-button", function(event) {
EthoUploads.updateContractTable();
});
$(document).on("click", "#upload-check-button", function(event) {
EthoUploads.finishUploadModal();
});
$(document).on("click", "#contract-extension-button", function(event) {
EthoUploads.contractExtensionConfirmation();
});
$(document).on("click", "#reset-table-button", function(event) {
$("#contractDetailModal").iziModal("close");
EthoUploads.resetContractDetailTableRows();
});
$(document).on("change", "#contract-duration", function(event) {
EthoUploads.contractDurationChange(document.getElementById('contract-duration'));
});
$(document).on("change", "#extend-contract", function(event) {
EthoUploads.contractExtensionChange(document.getElementById('extend-contract'));
});
fetch('https://api.coinmarketcap.com/v2/ticker/3452/').then(response => {
return response.json();
}).then(data => {
var ethoPriceUSD = data.data.quotes.USD.price;
document.getElementById("ethoprice").textContent = EthoUploads.round(ethoPriceUSD, 4);
}).catch(err => {});
});
function getKeyStoreLocation() {
switch (os.type()) {
case "Darwin":
return path.join(os.homedir(), "Library", "Ether1");
break;
default:
return path.join(process.env.APPDATA, "Ether1");
}
}
$(document).on("click", "#tracker-close-button", function (event) {
EthoUploads.updateContractTable();
});
$(document).on("click", "#upload-check-button", function (event) {
EthoUploads.finishUploadModal();
});
$(document).on("click", "#contract-extension-button", function (event) {
EthoUploads.contractExtensionConfirmation();
});
$(document).on("click", "#reset-table-button", function (event) {
$("#contractDetailModal").iziModal("close");
EthoUploads.resetContractDetailTableRows();
});
$(document).on("change", "#contract-duration", function (event) {
EthoUploads.contractDurationChange(document.getElementById('contract-duration'));
});
$(document).on("change", "#extend-contract", function (event) {
EthoUploads.contractExtensionChange(document.getElementById('extend-contract'));
});