From 1fb88a4fd1cf02d41d18bfdf94ad5756641732b0 Mon Sep 17 00:00:00 2001 From: Dev-JamesR Date: Fri, 25 Oct 2019 23:03:45 -0700 Subject: [PATCH] ethoFS Upload Reset Bug Fix --- renderer/maingui.js | 30 +- renderer/uploads.js | 785 +++++++++++++++++++++++--------------------- 2 files changed, 423 insertions(+), 392 deletions(-) diff --git a/renderer/maingui.js b/renderer/maingui.js index d476cb1..4ff542b 100755 --- a/renderer/maingui.js +++ b/renderer/maingui.js @@ -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,49 +112,49 @@ 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(); }); -EthoMainGUI = new MainGUI(); +EthoMainGUI = new MainGUI(); \ No newline at end of file diff --git a/renderer/uploads.js b/renderer/uploads.js index 7d1a615..fb89780 100644 --- a/renderer/uploads.js +++ b/renderer/uploads.js @@ -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,188 +1463,6 @@ $(document).on("render_uploads", function() { EthoUploads.beforeLoginState(); EthoUploads.checkExistingLogin(GlobalPrivateKey); - - $(document).on("dragenter", "#drag-container", function(event) { - EthoUploads.onDragEnter(event); - }); - - $(document).on("dragover", "#drag-container", function(event) { - EthoUploads.onDragEnter(event); - }); - - $(document).on("drop", "#drag-container", function(event) { - EthoUploads.onDrop(event.originalEvent); - }); - - $(document).on("dragleave", "#drag-container", function(event) { - EthoUploads.onDragLeave(event); - }); - - $(document).on("change", "#fileUploadButton", function(event) { - EthoUploads.onFileUpload(event); - }); - - $(document).on("click", "#main-login-button", function(event) { - GlobalPrivateKey = switchFlag; - EthoUploads.checkLogin(); - - $('#ethofsLoginModal').iziModal({ - onOpened: function() { - console.log("Login Setup Opened .."); - var addressBook = EthoDatatabse.getWallets(); - console.log("Getting Address List..."); - - $('#sendFromAddress').empty(); - $('#sendFromAddress').append(new Option('Login With Private Key', 'privatekey')) - $('#privatekeytable').show(); - var option = $(this).find("option:selected").text(); - $("#sendFromAddressName").html(option.trim()); - - for (var key in addressBook.names) { - if (addressBook.names.hasOwnProperty(key)) { - $('#sendFromAddress').append(new Option(addressBook.names[key], key)) - } - } - - $("#sendFromAddress").on("change", function() { - var optionText = $(this).find("option:selected").text(); - var optionTextValue = $(this).find("option:selected").val(); - $("#sendFromAddressName").html(optionText.trim()); - console.log("Address Name: " + optionText) - console.log("Address: " + optionText) - if (optionTextValue == 'privatekey') { - privateKeyLogin = true; - $("#sendFromAddressValue").hide(); - $('#walletpasswordtable').hide(); - $('#privatekeytable').show(); - } else { - privateKeyLogin = false; - $("#sendFromAddressValue").show(); - $('#privatekeytable').hide(); - $('#walletpasswordtable').show(); - $("#sendFromAddressValue").html(optionTextValue.trim()); - loginAddress = optionTextValue.trim(); - } - }); - }, - onOpening: function(modal) { - console.log("Opening Login Setup.."); - $("#sendFromAddressValue").hide(); - $('#walletpasswordtable').hide(); - $('#privatekeytable').hide(); - (function($, _M) { - M.toast({ - html: 'warning If your wallet has a default name e.g: Account 1, you will not be able to select it.', - displayLength: 10000, - classes: 'warning' - }); - }(jQuery, M)); - } - }); - $('#ethofsLoginModal').iziModal('open'); - }); - - $(document).on("click", "#ethofs-login-button", function(event) { - if (privateKeyLogin == true) { - GlobalPrivateKey = document.getElementById('privatekey').value; - console.log("Global Private Key: " + GlobalPrivateKey); - EthoUploads.ethofsLogin(GlobalPrivateKey); - } else { - loginPassword = document.getElementById('walletpassword').value; - loginAddress = $("#sendFromAddress").find("option:selected").val().trim(); - var accountsPath = getKeyStoreLocation(); - var keyObject = keythereum.importFromFile(loginAddress, accountsPath); - var privateKey = keythereum.recover(loginPassword, keyObject); - var key = privateKey.toString('hex'); - GlobalPrivateKey = key; - console.log("Global Private Key: " + GlobalPrivateKey); - EthoUploads.ethofsLogin(GlobalPrivateKey); - } - - }); - - $(document).on("click", "#main-upload-button", function(event) { - $('#defaultModal').iziModal(); - $('#defaultModal').iziModal('open'); - EthoUploads.resetUploadProcess(); - }); - - $(document).on("click", "#defaultModal-close", function(event) { - $('#defaultModal').iziModal('close'); - EthoUploads.resetUploadSystem(); - EthoUploads.resetUploadModal(); - }); - - $(document).on("click", "#defaultModal-next", function(event) { - $('#defaultModal2').iziModal({ - onOpening: function() { - EthoUploads.resetFileTable(); - } - }); - - $('#defaultModal2').iziModal('open'); - $('#defaultModal').iziModal('close'); - EthoUploads.resetUploadProcess(); - }); - - $(document).on("click", "#defaultModal2-close", function(event) { - $('#defaultModal2').iziModal('close'); - EthoUploads.resetUploadSystem(); - EthoUploads.resetUploadModal(); - }); - - $(document).on("click", "#ethofs-registration-button", function(event) { - EthoUploads.AddNewUser(document.getElementById('username').value); - }); - - $(document).on("click", "#confirm-files-button", function(event) { - $('#defaultModal3').iziModal(); - $('#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) { - $('#defaultModal3').iziModal('close'); - EthoUploads.resetUploadSystem(); - EthoUploads.resetUploadModal(); - }); - - $(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 => { @@ -1649,3 +1480,203 @@ function getKeyStoreLocation() { return path.join(process.env.APPDATA, "Ether1"); } } + +$(document).on("dragenter", "#drag-container", function (event) { + EthoUploads.onDragEnter(event); +}); + +$(document).on("dragover", "#drag-container", function (event) { + EthoUploads.onDragEnter(event); +}); + +$(document).on("drop", "#drag-container", function (event) { + onDrop(event.originalEvent); +}); + +$(document).on("dragleave", "#drag-container", function (event) { + EthoUploads.onDragLeave(event); +}); + +$(document).on("change", "#fileUploadButton", function (event) { + onFileUpload(event); +}); + +$(document).on("click", "#main-login-button", function (event) { + GlobalPrivateKey = switchFlag; + EthoUploads.checkLogin(); + + $('#ethofsLoginModal').iziModal({ + onOpened: function () { + console.log("Login Setup Opened .."); + var addressBook = EthoDatatabse.getWallets(); + console.log("Getting Address List..."); + + $('#sendFromAddress').empty(); + $('#sendFromAddress').append(new Option('Login With Private Key', 'privatekey')) + $('#privatekeytable').show(); + var option = $(this).find("option:selected").text(); + $("#sendFromAddressName").html(option.trim()); + + for (var key in addressBook.names) { + if (addressBook.names.hasOwnProperty(key)) { + $('#sendFromAddress').append(new Option(addressBook.names[key], key)) + } + } + + $("#sendFromAddress").on("change", function () { + var optionText = $(this).find("option:selected").text(); + var optionTextValue = $(this).find("option:selected").val(); + $("#sendFromAddressName").html(optionText.trim()); + console.log("Address Name: " + optionText) + console.log("Address: " + optionText) + if (optionTextValue == 'privatekey') { + privateKeyLogin = true; + $("#sendFromAddressValue").hide(); + $('#walletpasswordtable').hide(); + $('#privatekeytable').show(); + } else { + privateKeyLogin = false; + $("#sendFromAddressValue").show(); + $('#privatekeytable').hide(); + $('#walletpasswordtable').show(); + $("#sendFromAddressValue").html(optionTextValue.trim()); + loginAddress = optionTextValue.trim(); + } + }); + }, + onOpening: function (modal) { + console.log("Opening Login Setup.."); + $("#sendFromAddressValue").hide(); + $('#walletpasswordtable').hide(); + $('#privatekeytable').hide(); + (function ($, _M) { + M.toast({ + html: 'warning If your wallet has a default name e.g: Account 1, you will not be able to select it.', + displayLength: 10000, + classes: 'warning' + }); + }(jQuery, M)); + } + }); + $('#ethofsLoginModal').iziModal('open'); +}); + +$(document).on("click", "#ethofs-login-button", function (event) { + if (privateKeyLogin == true) { + GlobalPrivateKey = document.getElementById('privatekey').value; + console.log("Global Private Key: " + GlobalPrivateKey); + EthoUploads.ethofsLogin(GlobalPrivateKey); + } else { + loginPassword = document.getElementById('walletpassword').value; + loginAddress = $("#sendFromAddress").find("option:selected").val().trim(); + var accountsPath = getKeyStoreLocation(); + var keyObject = keythereum.importFromFile(loginAddress, accountsPath); + var privateKey = keythereum.recover(loginPassword, keyObject); + var key = privateKey.toString('hex'); + GlobalPrivateKey = key; + console.log("Global Private Key: " + GlobalPrivateKey); + EthoUploads.ethofsLogin(GlobalPrivateKey); + } + +}); + +$(document).on("click", "#main-upload-button", function (event) { + $('#defaultModal').iziModal(); + $('#defaultModal').iziModal('open'); + EthoUploads.resetUploadProcess(); +}); + +$(document).on("click", "#defaultModal-close", function (event) { + $('#defaultModal').iziModal('close'); + EthoUploads.resetUploadSystem(); + EthoUploads.resetUploadProcess(); + EthoUploads.resetUploadModal(); +}); + +$(document).on("click", "#defaultModal-next", function (event) { + $('#defaultModal2').iziModal({ + 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) { + $('#defaultModal2').iziModal('close'); + EthoUploads.resetUploadSystem(); + EthoUploads.resetUploadProcess(); + EthoUploads.resetUploadModal(); +}); + +$(document).on("click", "#ethofs-registration-button", function (event) { + EthoUploads.AddNewUser(document.getElementById('username').value); +}); + +$(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) { + $('#defaultModal3').iziModal('close'); + EthoUploads.resetUploadSystem(); + EthoUploads.resetUploadProcess(); + EthoUploads.resetUploadModal(); +}); + +$(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')); +}); \ No newline at end of file