diff --git a/assets/dashboard/js/app.js b/assets/dashboard/js/app.js
index 30cd730..583df33 100644
--- a/assets/dashboard/js/app.js
+++ b/assets/dashboard/js/app.js
@@ -50,6 +50,7 @@ var GlobalControllerABI = JSON.parse('[ { "constant": true, "inputs": [], "name"
const $miningMessage = document.querySelector('.mining-message')
/*START OF MISC GLOBAL VARIABLES*/
+var web3;
var privateKeyLogin = false;
var GlobalPrivateKey;
var minimumContractCost = 10000000000000000;
@@ -74,661 +75,699 @@ var GlobalHostingContractDetailArray = new Array();
var GlobalExtensionDuration;
/*END OF MISC GLOBAL VARIABLES*/
-var elem = document.querySelector('.modal');
-var instance = M.Modal.init(elem);
-instance.open();
+//var elem = document.querySelector('.modal');
+//var instance = M.Modal.init(elem);
+//instance.open();
function isWindows() {
- return navigator.platform.indexOf('Win') > -1
+ return navigator.platform.indexOf('Win') > -1
}
var pathSymbol = "/";
if (isWindows()) {
- pathSymbol = "\\";
+ pathSymbol = "\\";
}
fetch('https://api.coinmarketcap.com/v2/ticker/3452/').then(response => {
- return response.json();
+ return response.json();
}).then(data => {
- var ethoPriceUSD = data.data.quotes.USD.price;
- document.getElementById("ethoprice").textContent = round(ethoPriceUSD, 4);
+ var ethoPriceUSD = data.data.quotes.USD.price;
+ document.getElementById("ethoprice").textContent = round(ethoPriceUSD, 4);
}).catch(err => {});
-if (typeof web3 == 'undefined') {
- var web3 = new Web3()
- web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"));
- $('#ethofsLoginModal').modal({dismissible: true});
- $('#ethofsLoginModal').modal('open');
-} else {
- ethofsLogin("");
+function beforeLoginState() {
+ var statsRow = document.getElementById("stats-row");
+ statsRow.style.display = "none";
+ var uploadButton = document.getElementById("main-upload-button");
+ uploadButton.style.display = "none";
+}
+
+function afterLoginState() {
+ var statsRow = document.getElementById("stats-row");
+ statsRow.style.display = "block";
+ var uploadButton = document.getElementById("main-upload-button");
+ uploadButton.style.display = "block";
+ var loginButton = document.getElementById("main-login-button");
+ loginButton.style.display = "none";
+}
+
+function checkLogin() {
+ if (web3 == null) {
+ beforeLoginState();
+ web3 = new Web3()
+ web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"));
+ //$('#ethofsLoginModal').modal({dismissible: true});
+ //$('#ethofsLoginModal').modal('show');
+ } else {
+ ethofsLogin(GlobalPrivateKey);
+ }
}
function ethofsLogin(privateKey) {
- $('#ethofsLoginModal').modal('close');
- $('#ethofsRegistrationModal').modal({dismissible: true});
- $('#ethofsRegistrationModal').modal('close');
- //CREATE ETHER-1 CHAIN CONNECTION AND LOOK FOR EXISTING USER ACCOUNT
- if (privateKey != "") {
- GlobalPrivateKey = privateKey;
- privateKeyLogin = true;
- web3.eth.net.isListening()
- .then(function() {
- console.log('ethoFS is connected')
- let account = web3.eth.accounts.privateKeyToAccount('0x' + privateKey);
- console.log(account);
- web3.eth.accounts.wallet.add(account)
- web3.eth.defaultAccount = account.address;
- startEthofs()
- })
- } else {
- privateKeyLogin = false;
- web3 = new Web3(web3.currentProvider);
- web3.eth.getAccounts(function(err, accounts) {
- if (err != null) {
- console.error("An error occurred: " + err);
- outputNoAddressContractTable();
- } else if (accounts.length == 0) {
- $('#ethofsLoginModal').modal('open');
- console.log("User is not logged in");
- document.getElementById("welcome-name").textContent = "Access to Ether-1 Blockchain Not Found - Make Sure You Are Using Metamask or The Ether-1 Browser Extension";
- document.getElementById("accountaddress").textContent = "Address Not Found";
- outputNoAddressContractTable();
- } else {
- console.log("User is logged in");
- web3.eth.defaultAccount = accounts[0];
- startEthofs();
- }
+ afterLoginState();
+ $('#ethofsLoginModal').modal('close');
+ $('#ethofsRegistrationModal').modal({
+ dismissible: true
});
- }
+ $('#ethofsRegistrationModal').modal('close');
+ //CREATE ETHER-1 CHAIN CONNECTION AND LOOK FOR EXISTING USER ACCOUNT
+ if (privateKey != "") {
+ GlobalPrivateKey = privateKey;
+ privateKeyLogin = true;
+ web3.eth.net.isListening()
+ .then(function () {
+ console.log('ethoFS is connected')
+ let account = web3.eth.accounts.privateKeyToAccount('0x' + privateKey);
+ console.log(account);
+ web3.eth.accounts.wallet.add(account)
+ web3.eth.defaultAccount = account.address;
+ startEthofs()
+ })
+ } else {
+ privateKeyLogin = false;
+ web3 = new Web3(web3.currentProvider);
+ web3.eth.getAccounts(function (err, accounts) {
+ if (err != null) {
+ console.error("An error occurred: " + err);
+ outputNoAddressContractTable();
+ } else if (accounts.length == 0) {
+ $('#ethofsLoginModal').modal('open');
+ console.log("User is not logged in");
+ document.getElementById("welcome-name").textContent = "Access to Ether-1 Blockchain Not Found - Make Sure You Are Using Metamask or The Ether-1 Browser Extension";
+ document.getElementById("accountaddress").textContent = "Address Not Found";
+ outputNoAddressContractTable();
+ } else {
+ console.log("User is logged in");
+ web3.eth.defaultAccount = accounts[0];
+ startEthofs();
+ }
+ });
+ }
}
function startEthofs() {
- console.log("Starting ethoFS");
- GlobalUserAddress = web3.eth.defaultAccount;
- var ethoFSAccounts = new web3.eth.Contract(GlobalControllerABI, GlobalControllerContractAddress);
- 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) {
- if (!error) {
+ console.log("Starting ethoFS");
+ GlobalUserAddress = web3.eth.defaultAccount;
+ var ethoFSAccounts = new web3.eth.Contract(GlobalControllerABI, GlobalControllerContractAddress);
+ ethoFSAccounts.methods.CheckAccountExistence(GlobalUserAddress).call(function (error, result) {
+ if (!error) {
if (result) {
- getBlockHeight(web3);
- getBalance(web3);
- document.getElementById("welcome-name").textContent = "Welcome Back " + result;
- updateContractTable();
- startApplication();
+ document.getElementById("accountaddress").textContent = web3.eth.defaultAccount;
+ ethoFSAccounts.methods.GetUserAccountName(GlobalUserAddress).call(function (error, result) {
+ if (!error) {
+ if (result) {
+ getBlockHeight(web3);
+ getBalance(web3);
+ document.getElementById("welcome-name").textContent = "Welcome Back " + result;
+ updateContractTable();
+ startApplication();
+ }
+ } else {
+ console.log("Error getting user account name");
+ }
+ });
+ } else {
+ document.getElementById("welcome-name").textContent = "User Not Found";
+ document.getElementById("accountaddress").textContent = "Address Not Found";
+ console.log("User Not Found");
+ $('#ethofsRegistrationModal').modal('open');
}
- } else {
- console.log("Error getting user account name");
- }
- });
- } else {
- document.getElementById("welcome-name").textContent = "User Not Found";
- document.getElementById("accountaddress").textContent = "Address Not Found";
- console.log("User Not Found");
- $('#ethofsRegistrationModal').modal('open');
- }
- } else {
- document.getElementById("welcome-name").textContent = "Access to Ether-1 Blockchain Not Found - Make Sure You Are Using Metamask or The Ether-1 Browser Extension";
- document.getElementById("accountaddress").textContent = "Address Not Found";
- console.log("Blockchain Access Error");
- }
- });
+ } else {
+ document.getElementById("welcome-name").textContent = "Access to Ether-1 Blockchain Not Found - Make Sure You Are Using Metamask or The Ether-1 Browser Extension";
+ document.getElementById("accountaddress").textContent = "Address Not Found";
+ console.log("Blockchain Access Error");
+ }
+ });
}
/*************************************************************************************************************/
function AddNewUser(userName) {
- console.log("Initiating New User Addition... " + userName);
- var controller = new web3.eth.Contract(GlobalControllerABI, GlobalControllerContractAddress);
+ console.log("Initiating New User Addition... " + userName);
+ var controller = new web3.eth.Contract(GlobalControllerABI, GlobalControllerContractAddress);
- if (privateKeyLogin == true) {
- const tx = {
- to: GlobalControllerContractAddress,
- from: GlobalUserAddress,
- gas: 4000000,
- data: controller.methods.AddNewUserPublic(userName).encodeABI()
- };
- var privateKey = '0x' + GlobalPrivateKey;
- web3.eth.accounts.signTransaction(tx, privateKey)
- .then(function(signedTransactionData) {
- web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function(error, result) {
- if (!error) {
- if (result) {
- $('#minedBlockTrackerModal').modal({dismissible: true});
- $('#minedBlockTrackerModal').modal('open');
- waitForReceipt(result, function(receipt) {
- console.log("Transaction Has Been Mined: " + receipt);
- $('#minedBlockTrackerModal').modal('close');
- ethofsLogin(GlobalPrivateKey);
- });
+ if (privateKeyLogin == true) {
+ const tx = {
+ to: GlobalControllerContractAddress,
+ from: GlobalUserAddress,
+ gas: 4000000,
+ data: controller.methods.AddNewUserPublic(userName).encodeABI()
+ };
+ var privateKey = '0x' + GlobalPrivateKey;
+ web3.eth.accounts.signTransaction(tx, privateKey)
+ .then(function (signedTransactionData) {
+ web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function (error, result) {
+ if (!error) {
+ if (result) {
+ $('#minedBlockTrackerModal').modal({
+ dismissible: true
+ });
+ $('#minedBlockTrackerModal').modal('open');
+ waitForReceipt(result, function (receipt) {
+ console.log("Transaction Has Been Mined: " + receipt);
+ $('#minedBlockTrackerModal').modal('close');
+ ethofsLogin(GlobalPrivateKey);
+ });
+ } else {
+ console.log("There was a problem adding new contract");
+ }
+ } else {
+ console.error(error);
+ }
+ });
+ });
+ } else {
+ controller.methods.AddNewUserPublic(userName).send(function (error, result) {
+ if (!error) {
+ if (result) {
+ document.getElementById("wait").innerHTML = 'Waiting For Add User Confirmation.';
+ $('#minedBlockTrackerModal').modal('open');
+ waitForReceipt(result, function (receipt) {
+ console.log("Transaction Has Been Mined: " + receipt);
+ $('#minedBlockTrackerModal').modal('close');
+ ethofsLogin("");
+ });
+ } else {
+ console.log("There was a problem adding new user");
+ $('#ethofsLoginModal').modal('open');
+ }
} else {
- console.log("There was a problem adding new contract");
+ console.error(error);
+ $('#ethofsLoginModal').modal('open');
}
- } else {
- console.error(error);
- }
});
- });
- } else {
- controller.methods.AddNewUserPublic(userName).send(function(error, result) {
- if (!error) {
- if (result) {
- document.getElementById("wait").innerHTML = 'Waiting For Add User Confirmation.';
- $('#minedBlockTrackerModal').modal('open');
- waitForReceipt(result, function(receipt) {
- console.log("Transaction Has Been Mined: " + receipt);
- $('#minedBlockTrackerModal').modal('close');
- ethofsLogin("");
- });
- } else {
- console.log("There was a problem adding new user");
- $('#ethofsLoginModal').modal('open');
- }
- } else {
- console.error(error);
- $('#ethofsLoginModal').modal('open');
- }
- });
- }
+ }
}
/*************************************************************************************************************/
function getBlockHeight(web3) {
- console.log("Starting Block Height Detection..");
- web3.eth.getBlockNumber(function(err, data) {
- document.getElementById("blocknumber").textContent = data;
- console.log("ETHO Block Number: " + data);
- });
+ console.log("Starting Block Height Detection..");
+ web3.eth.getBlockNumber(function (err, data) {
+ document.getElementById("blocknumber").textContent = data;
+ console.log("ETHO Block Number: " + data);
+ });
}
/*************************************************************************************************************/
function getBalance(web3) {
- console.log("Starting Balance Detection..");
- 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);
- });
+ console.log("Starting Balance Detection..");
+ 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);
+ });
}
/*************************************************************************************************************/
//CALCULATE AMOUNT TO BE SENT
function calculateCost(contractSize, contractDuration, hostingCost) {
- var cost = ((((contractSize / 1048576) * hostingCost) * (contractDuration / 46522)));
- if (cost < minimumContractCost) {
- cost = minimumContractCost;
- }
- return cost;
+ var cost = ((((contractSize / 1048576) * hostingCost) * (contractDuration / 46522)));
+ if (cost < minimumContractCost) {
+ cost = minimumContractCost;
+ }
+ return cost;
}
/*************************************************************************************************************/
//CHECK FOR TX - BLOCK TO BE MINED
function waitForReceipt(hash, cb) {
- 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) {
- if (!e) {
- document.getElementById("block-height").textContent = res.number;
- }
+ 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) {
+ if (!e) {
+ document.getElementById("block-height").textContent = res.number;
+ }
+ });
+ if (err) {
+ error(err);
+ $miningMessage.innerText = "Error Conneting To Ether-1 Network";
+ }
+ if (receipt !== null) {
+ $miningMessage.innerText = "Transaction Confirmed";
+ document.getElementById("mining-status-message").textContent = "Complete";
+ if (cb) {
+ cb(receipt);
+ }
+ } else {
+ setTimeout(function () {
+ waitForReceipt(hash, cb);
+ }, 10000);
+ }
});
- if (err) {
- error(err);
- $miningMessage.innerText = "Error Conneting To Ether-1 Network";
- }
- if (receipt !== null) {
- $miningMessage.innerText = "Transaction Confirmed";
- document.getElementById("mining-status-message").textContent = "Complete";
- if (cb) {
- cb(receipt);
- }
- } else {
- setTimeout(function() {
- waitForReceipt(hash, cb);
- }, 10000);
- }
- });
}
/*************************************************************************************************************/
//CREATE ETHER-1 CHAIN CONNECTION AND REMOVE CONTRACT
function RemoveContract(hostingAddress, contentHash) {
- var pinRemoving = new web3.eth.Contract(GlobalControllerABI, GlobalControllerContractAddress);
- if (privateKeyLogin == true) {
- const tx = {
- to: GlobalControllerContractAddress,
- from: GlobalUserAddress,
- gas: 4000000,
- data: pinRemoving.methods.RemoveHostingContract(hostingAddress, contentHash).encodeABI()
- };
- var privateKey = '0x' + GlobalPrivateKey;
- console.log("Private Key: " + privateKey);
- web3.eth.accounts.signTransaction(tx, privateKey)
- .then(function(signedTransactionData) {
- console.log("Signed TX Data: " + signedTransactionData.rawTransaction);
- web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function(error, result) {
- if (!error) {
- if (result) {
- $('#minedBlockTrackerModal').modal({dismissible: true});
- $('#minedBlockTrackerModal').modal('open');
- waitForReceipt(result, function(receipt) {
- console.log("Transaction Has Been Mined: " + receipt);
- $('#minedBlockTrackerModal').modal('close');
- updateContractTable();
- });
+ var pinRemoving = new web3.eth.Contract(GlobalControllerABI, GlobalControllerContractAddress);
+ if (privateKeyLogin == true) {
+ const tx = {
+ to: GlobalControllerContractAddress,
+ from: GlobalUserAddress,
+ gas: 4000000,
+ data: pinRemoving.methods.RemoveHostingContract(hostingAddress, contentHash).encodeABI()
+ };
+ var privateKey = '0x' + GlobalPrivateKey;
+ console.log("Private Key: " + privateKey);
+ web3.eth.accounts.signTransaction(tx, privateKey)
+ .then(function (signedTransactionData) {
+ console.log("Signed TX Data: " + signedTransactionData.rawTransaction);
+ web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function (error, result) {
+ if (!error) {
+ if (result) {
+ $('#minedBlockTrackerModal').modal({
+ dismissible: true
+ });
+ $('#minedBlockTrackerModal').modal('open');
+ waitForReceipt(result, function (receipt) {
+ console.log("Transaction Has Been Mined: " + receipt);
+ $('#minedBlockTrackerModal').modal('close');
+ updateContractTable();
+ });
+ } else {
+ console.log("There was a problem adding new contract");
+ }
+ } else {
+ console.error(error);
+ }
+ });
+ });
+ } else {
+ const tx = {
+ to: GlobalControllerContractAddress,
+ from: GlobalUserAddress,
+ };
+ pinRemoving.methods.RemoveHostingContract(hostingAddress, contentHash).send(tx, function (error, result) {
+ if (!error) {
+ if (result) {
+ $('#minedBlockTrackerModal').modal({
+ dismissible: true
+ });
+ $('#minedBlockTrackerModal').modal('open');
+ waitForReceipt(result, function (receipt) {
+ console.log("Transaction Has Been Mined: " + receipt);
+ $('#minedBlockTrackerModal').modal('close');
+ updateContractTable();
+ });
+ } else {
+ console.log("There was a problem removing contract");
+ }
} else {
- console.log("There was a problem adding new contract");
+ console.error(error);
}
- } else {
- console.error(error);
- }
});
- });
- } else {
- const tx = {
- to: GlobalControllerContractAddress,
- from: GlobalUserAddress,
- };
- pinRemoving.methods.RemoveHostingContract(hostingAddress, contentHash).send(tx, function(error, result) {
- if (!error) {
- if (result) {
- $('#minedBlockTrackerModal').modal({dismissible: true});
- $('#minedBlockTrackerModal').modal('open');
- waitForReceipt(result, function(receipt) {
- console.log("Transaction Has Been Mined: " + receipt);
- $('#minedBlockTrackerModal').modal('close');
- updateContractTable();
- });
- } else {
- console.log("There was a problem removing contract");
- }
- } else {
- console.error(error);
- }
- });
- }
+ }
}
function updateContractTable() {
- /*************************************************************************************************************/
- //CREATE ETHER-1 CHAIN CONNECTION AND GET USER ACCOUNT & CONTRACTS
- var ethoFSHostingContracts = new Array();
- var hostingContracts = "";
- var TotalContractCount = 0;
- var blockHeight = 0;
- 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) {
- TotalContractCount = result;
- GlobalTotalContractCount = result;
- const getContractData = async (ethoFSAccounts, account, TotalContractCount) => {
- if (TotalContractCount == 0) {
- outputNoAddressContractTableWithButton();
- }
- for (var i = 0; i < TotalContractCount; i++) {
- const promisify = (inner) =>
- new Promise((resolve, reject) =>
- inner((err, res) => {
- if (err) {
- reject(err);
- } else {
- resolve(res);
- }
- })
- );
- var counter = i;
- GlobalHostingContractArray[counter] = new Array();
- var ethoFSHostingContractAddress = promisify(cb => ethoFSAccounts.methods.GetHostingContractAddress(account, counter).call(cb));
- await Promise.all([getAdditionalContractData(await ethoFSHostingContractAddress, counter, ethoFSAccounts)]);
-
- async function getAdditionalContractData(ethoFSHostingContractAddress, counter, ethoFSAccounts) {
- const promisify = (inner) =>
- new Promise((resolve, reject) =>
- inner((err, res) => {
- if (err) {
- reject(err);
- } else {
- resolve(res);
- }
- })
- );
- var ethoFSHostingContractCost = counter;
- var ethoFSHostingContractName = promisify(cb => ethoFSAccounts.methods.GetHostingContractName(ethoFSHostingContractAddress).call(cb));
- var ethoFSHostingContractMainHash = promisify(cb => ethoFSAccounts.methods.GetMainContentHash(ethoFSHostingContractAddress).call(cb));
- var ethoFSHostingContractHashString = promisify(cb => ethoFSAccounts.methods.GetContentHashString(ethoFSHostingContractAddress).call(cb));
- var ethoFSHostingContractPathString = promisify(cb => ethoFSAccounts.methods.GetContentPathString(ethoFSHostingContractAddress).call(cb));
-
- var ethoFSHostingContractStorage = promisify(cb => ethoFSAccounts.methods.GetHostingContractStorageUsed(ethoFSHostingContractAddress).call(cb));
- var ethoFSHostingContractStartBlock = promisify(cb => ethoFSAccounts.methods.GetHostingContractDeployedBlockHeight(ethoFSHostingContractAddress).call(cb));
- var ethoFSHostingContractEndBlock = promisify(cb => ethoFSAccounts.methods.GetHostingContractExpirationBlockHeight(ethoFSHostingContractAddress).call(cb));
-
- GlobalHostingContractArray[counter]['address'] = await ethoFSHostingContractAddress;
- GlobalHostingContractArray[counter]['name'] = await ethoFSHostingContractName;
- GlobalHostingContractArray[counter]['mainhash'] = await ethoFSHostingContractMainHash;
- GlobalHostingContractArray[counter]['hashstring'] = await ethoFSHostingContractHashString;
- GlobalHostingContractArray[counter]['pathstring'] = await ethoFSHostingContractPathString;
- GlobalHostingContractArray[counter]['storage'] = await ethoFSHostingContractStorage;
- GlobalHostingContractArray[counter]['startblock'] = await ethoFSHostingContractStartBlock;
- GlobalHostingContractArray[counter]['endblock'] = await ethoFSHostingContractEndBlock;
-
- GlobalHostingContractArray[counter]['hash'] = new Array();
- GlobalHostingContractArray[counter]['path'] = new Array();
-
- var ContractHashArray = new Array();
- var ContractPathArray = new Array();
- var splitHashArray = await Promise.all([splitString(await ethoFSHostingContractHashString, ":")]);
- var splitPathArray = await Promise.all([splitString(await ethoFSHostingContractPathString, ":")]);
-
- function splitString(stringToSplit, splitDelimeter) {
- return stringToSplit.split(splitDelimeter);
- }
- await Promise.all([loopSplitStrings(await splitHashArray[0], await splitPathArray[0], counter)]);
-
- function loopSplitStrings(splitHashArray, splitPathArray, counter) {
- for (var j = 1; j < splitHashArray.length; j++) {
- GlobalHostingContractArray[counter]['hash'][j] = splitHashArray[j];
- GlobalHostingContractArray[counter]['path'][j] = splitPathArray[j];
+ /*************************************************************************************************************/
+ //CREATE ETHER-1 CHAIN CONNECTION AND GET USER ACCOUNT & CONTRACTS
+ var ethoFSHostingContracts = new Array();
+ var hostingContracts = "";
+ var TotalContractCount = 0;
+ var blockHeight = 0;
+ 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) {
+ TotalContractCount = result;
+ GlobalTotalContractCount = result;
+ const getContractData = async (ethoFSAccounts, account, TotalContractCount) => {
+ if (TotalContractCount == 0) {
+ outputNoAddressContractTableWithButton();
}
- }
+ for (var i = 0; i < TotalContractCount; i++) {
+ const promisify = (inner) =>
+ new Promise((resolve, reject) =>
+ inner((err, res) => {
+ if (err) {
+ reject(err);
+ } else {
+ resolve(res);
+ }
+ })
+ );
+ var counter = i;
+ GlobalHostingContractArray[counter] = new Array();
+ var ethoFSHostingContractAddress = promisify(cb => ethoFSAccounts.methods.GetHostingContractAddress(account, counter).call(cb));
+ await Promise.all([getAdditionalContractData(await ethoFSHostingContractAddress, counter, ethoFSAccounts)]);
- await Promise.all([addNewTableEntry(await ethoFSHostingContractAddress, await ethoFSHostingContractMainHash, await ethoFSHostingContractName, await ethoFSHostingContractAddress, await ethoFSHostingContractStorage, await ethoFSHostingContractStartBlock, await ethoFSHostingContractEndBlock, await ethoFSHostingContractCost, await counter, await blockHeight)]);
+ async function getAdditionalContractData(ethoFSHostingContractAddress, counter, ethoFSAccounts) {
+ const promisify = (inner) =>
+ new Promise((resolve, reject) =>
+ inner((err, res) => {
+ if (err) {
+ reject(err);
+ } else {
+ resolve(res);
+ }
+ })
+ );
+ var ethoFSHostingContractCost = counter;
+ var ethoFSHostingContractName = promisify(cb => ethoFSAccounts.methods.GetHostingContractName(ethoFSHostingContractAddress).call(cb));
+ var ethoFSHostingContractMainHash = promisify(cb => ethoFSAccounts.methods.GetMainContentHash(ethoFSHostingContractAddress).call(cb));
+ var ethoFSHostingContractHashString = promisify(cb => ethoFSAccounts.methods.GetContentHashString(ethoFSHostingContractAddress).call(cb));
+ var ethoFSHostingContractPathString = promisify(cb => ethoFSAccounts.methods.GetContentPathString(ethoFSHostingContractAddress).call(cb));
+
+ var ethoFSHostingContractStorage = promisify(cb => ethoFSAccounts.methods.GetHostingContractStorageUsed(ethoFSHostingContractAddress).call(cb));
+ var ethoFSHostingContractStartBlock = promisify(cb => ethoFSAccounts.methods.GetHostingContractDeployedBlockHeight(ethoFSHostingContractAddress).call(cb));
+ var ethoFSHostingContractEndBlock = promisify(cb => ethoFSAccounts.methods.GetHostingContractExpirationBlockHeight(ethoFSHostingContractAddress).call(cb));
+
+ GlobalHostingContractArray[counter]['address'] = await ethoFSHostingContractAddress;
+ GlobalHostingContractArray[counter]['name'] = await ethoFSHostingContractName;
+ GlobalHostingContractArray[counter]['mainhash'] = await ethoFSHostingContractMainHash;
+ GlobalHostingContractArray[counter]['hashstring'] = await ethoFSHostingContractHashString;
+ GlobalHostingContractArray[counter]['pathstring'] = await ethoFSHostingContractPathString;
+ GlobalHostingContractArray[counter]['storage'] = await ethoFSHostingContractStorage;
+ GlobalHostingContractArray[counter]['startblock'] = await ethoFSHostingContractStartBlock;
+ GlobalHostingContractArray[counter]['endblock'] = await ethoFSHostingContractEndBlock;
+
+ GlobalHostingContractArray[counter]['hash'] = new Array();
+ GlobalHostingContractArray[counter]['path'] = new Array();
+
+ var ContractHashArray = new Array();
+ var ContractPathArray = new Array();
+ var splitHashArray = await Promise.all([splitString(await ethoFSHostingContractHashString, ":")]);
+ var splitPathArray = await Promise.all([splitString(await ethoFSHostingContractPathString, ":")]);
+
+ function splitString(stringToSplit, splitDelimeter) {
+ return stringToSplit.split(splitDelimeter);
+ }
+ await Promise.all([loopSplitStrings(await splitHashArray[0], await splitPathArray[0], counter)]);
+
+ function loopSplitStrings(splitHashArray, splitPathArray, counter) {
+ for (var j = 1; j < splitHashArray.length; j++) {
+ GlobalHostingContractArray[counter]['hash'][j] = splitHashArray[j];
+ GlobalHostingContractArray[counter]['path'][j] = splitPathArray[j];
+ }
+ }
+
+ await Promise.all([addNewTableEntry(await ethoFSHostingContractAddress, await ethoFSHostingContractMainHash, await ethoFSHostingContractName, await ethoFSHostingContractAddress, await ethoFSHostingContractStorage, await ethoFSHostingContractStartBlock, await ethoFSHostingContractEndBlock, await ethoFSHostingContractCost, await counter, await blockHeight)]);
+ }
+ }
+ //END GET ADDITIONAL CONTACT DATA
+ };
+ getContractData(ethoFSAccounts, web3.eth.defaultAccount, TotalContractCount);
+
+ function addNewTableEntry(ethoFSHostingContractAddress, ethoFSHostingContractMainHash, ethoFSHostingContractName, ethoFSHostingContractHash, ethoFSHostingContractStorage, ethoFSHostingContractStartBlock, ethoFSHostingContractEndBlock, ethoFSHostingContractCost, counter, blockHeight) {
+ if (blockHeight > ethoFSHostingContractEndBlock) {
+ var ethoFSHostingContractStatus = "Expired";
+ hostingContracts += '
| ' + ethoFSHostingContractName + ' | ' + ethoFSHostingContractHash + ' | ' + ethoFSHostingContractStartBlock + ' | ' + ethoFSHostingContractEndBlock + ' | ' + ethoFSHostingContractStatus + ' | |
';
+ } else {
+ var ethoFSHostingContractStatus = "Active";
+ hostingContracts += '| ' + ethoFSHostingContractName + ' | ' + ethoFSHostingContractHash + ' | ' + ethoFSHostingContractStartBlock + ' | ' + ethoFSHostingContractEndBlock + ' | ' + ethoFSHostingContractStatus + ' | |
';
+ }
+ GlobalHostingContractArray[counter]['status'] = ethoFSHostingContractStatus;
+ document.getElementById("hostingcontractstablebody").innerHTML = hostingContracts;
}
- }
- //END GET ADDITIONAL CONTACT DATA
- };
- getContractData(ethoFSAccounts, web3.eth.defaultAccount, TotalContractCount);
-
- function addNewTableEntry(ethoFSHostingContractAddress, ethoFSHostingContractMainHash, ethoFSHostingContractName, ethoFSHostingContractHash, ethoFSHostingContractStorage, ethoFSHostingContractStartBlock, ethoFSHostingContractEndBlock, ethoFSHostingContractCost, counter, blockHeight) {
- if (blockHeight > ethoFSHostingContractEndBlock) {
- var ethoFSHostingContractStatus = "Expired";
- hostingContracts += '| ' + ethoFSHostingContractName + ' | ' + ethoFSHostingContractHash + ' | ' + ethoFSHostingContractStartBlock + ' | ' + ethoFSHostingContractEndBlock + ' | ' + ethoFSHostingContractStatus + ' | |
';
- } else {
- var ethoFSHostingContractStatus = "Active";
- hostingContracts += '| ' + ethoFSHostingContractName + ' | ' + ethoFSHostingContractHash + ' | ' + ethoFSHostingContractStartBlock + ' | ' + ethoFSHostingContractEndBlock + ' | ' + ethoFSHostingContractStatus + ' | |
';
- }
- GlobalHostingContractArray[counter]['status'] = ethoFSHostingContractStatus;
- document.getElementById("hostingcontractstablebody").innerHTML = hostingContracts;
- }
- });
+ });
}
/*************************************************************************************************************/
//UPDATE CONTRACT DURATION AND CONTRACT COST
function contractDurationChange(selectObj) {
- var duration = document.getElementById('contract-duration').value;
- GlobalContractDuration = duration;
- var ContractCost = (((GlobalUploadSize / 1048576) * GlobalHostingCost) * (duration / 46522));
- document.getElementById("contract-cost").innerHTML = round(ContractCost, 2);
- return false;
+ var duration = document.getElementById('contract-duration').value;
+ GlobalContractDuration = duration;
+ var ContractCost = (((GlobalUploadSize / 1048576) * GlobalHostingCost) * (duration / 46522));
+ document.getElementById("contract-cost").innerHTML = round(ContractCost, 2);
+ return false;
}
function contractModalSetup() {
- var duration = document.getElementById('contract-duration').value;
- GlobalContractDuration = duration;
- var ContractCost = (((GlobalUploadSize / 1048576) * GlobalHostingCost) * (duration / 46522));
- document.getElementById("contract-cost").innerHTML = round(ContractCost, 2);
- return false;
+ var duration = document.getElementById('contract-duration').value;
+ GlobalContractDuration = duration;
+ var ContractCost = (((GlobalUploadSize / 1048576) * GlobalHostingCost) * (duration / 46522));
+ document.getElementById("contract-cost").innerHTML = round(ContractCost, 2);
+ return false;
}
/*************************************************************************************************************/
//MISC ROUNDING FUNCTION
function round(value, decimals) {
- return Number(Math.round(value + 'e' + decimals) + 'e-' + decimals);
+ return Number(Math.round(value + 'e' + decimals) + 'e-' + decimals);
}
/*************************************************************************************************************/
function finishUploadModal() {
- $('#uploadTrackerModal').modal({dismissible: true});
- $('#uploadTrackerModal').modal('close');
- stopApplication();
- resetUploadSystem();
- return;
+ $('#uploadTrackerModal').modal({
+ dismissible: true
+ });
+ $('#uploadTrackerModal').modal('close');
+ stopApplication();
+ resetUploadSystem();
+ return;
}
function resetUploadModal() {
- var duration = document.getElementById('contract-duration').value;
- GlobalContractDuration = duration;
- var ContractCost = ((GlobalUploadSize / 1048576) * GlobalHostingCost) * (duration / 46522);
- document.getElementById("contract-cost").innerHTML = round(ContractCost, 2);
- document.getElementById("upload-hash").innerHTML = GlobalUploadHash;
- document.getElementById("upload-size").innerHTML = GlobalUploadSize;
- return;
+ var duration = document.getElementById('contract-duration').value;
+ GlobalContractDuration = duration;
+ var ContractCost = ((GlobalUploadSize / 1048576) * GlobalHostingCost) * (duration / 46522);
+ document.getElementById("contract-cost").innerHTML = round(ContractCost, 2);
+ document.getElementById("upload-hash").innerHTML = GlobalUploadHash;
+ document.getElementById("upload-size").innerHTML = GlobalUploadSize;
+ return;
}
/*************************************************************************************************************/
//CHECK FOR PROPAGATED & AVAILABLE DATA ON NETWORK - FINAL VERIFICATION FOR UPLOADED CONTENT
function checkForUploadedContentAvailability(HostingContractName) {
- document.getElementById("upload-check-button").style.visibility = "hidden";
- $('#uploadTrackerModal').modal({dismissible: true});
- $('#uploadTrackerModal').modal('open');
- document.getElementById("upload-hash").innerHTML = HostingContractName;
- return false;
+ document.getElementById("upload-check-button").style.visibility = "hidden";
+ $('#uploadTrackerModal').modal({
+ dismissible: true
+ });
+ $('#uploadTrackerModal').modal('open');
+ document.getElementById("upload-hash").innerHTML = HostingContractName;
+ return false;
}
/*************************************************************************************************************/
/*************************************************************************************************************/
function resetUploadSystem() {
- GlobalMainHashArray = new Array();
- GlobalMainPathArray = new Array();
- GlobalHashArray = new Array();
- GlobalPathArray = new Array();
- GlobalUploadHash = "";
- GlobalUploadPath = "";
- GlobalUploadSize = 0;
- var TableBody = document.getElementById("file-history-body");
- TableBody.innerHTML = '| There are no files awaiting upload |
';
- var duration = document.getElementById('contract-duration').value;
- GlobalContractDuration = duration;
- var ContractCost = ((GlobalUploadSize / 1048576) * GlobalHostingCost) * (duration / 46522);
- document.getElementById("contract-cost").innerHTML = round(ContractCost, 2);
- document.getElementById("upload-hash").innerHTML = "";
- document.getElementById("upload-size").innerHTML = 0;
- return false;
+ GlobalMainHashArray = new Array();
+ GlobalMainPathArray = new Array();
+ GlobalHashArray = new Array();
+ GlobalPathArray = new Array();
+ GlobalUploadHash = "";
+ GlobalUploadPath = "";
+ GlobalUploadSize = 0;
+ var TableBody = document.getElementById("file-history-body");
+ TableBody.innerHTML = '| There are no files awaiting upload |
';
+ var duration = document.getElementById('contract-duration').value;
+ GlobalContractDuration = duration;
+ var ContractCost = ((GlobalUploadSize / 1048576) * GlobalHostingCost) * (duration / 46522);
+ document.getElementById("contract-cost").innerHTML = round(ContractCost, 2);
+ document.getElementById("upload-hash").innerHTML = "";
+ document.getElementById("upload-size").innerHTML = 0;
+ return false;
}
/*************************************************************************************************************/
/*************************************************************************************************************/
//CHECK FOR PROPAGATED & AVAILABLE DATA ON NETWORK - FINAL VERIFICATION FOR UPLOADED CONTENT
function sortContractTable() {
- var hostingContracts = "";
- var i;
- var localContractArray = GlobalHostingContractArray;
- var tableSortDirection = "";
- var sortSelection = document.getElementById('sort-contracts');
- var tableSorter = sortSelection.value;
- var filterSelection = document.getElementById('filter-contracts');
- var tableFilterer = filterSelection.value;
+ var hostingContracts = "";
+ var i;
+ var localContractArray = GlobalHostingContractArray;
+ var tableSortDirection = "";
+ var sortSelection = document.getElementById('sort-contracts');
+ var tableSorter = sortSelection.value;
+ var filterSelection = document.getElementById('filter-contracts');
+ var tableFilterer = filterSelection.value;
- if (tableSorter == "Ascending") {
- tableSortDirection = "asc";
- } else {
- tableSortDirection = "desc";
- }
- localContractArray = multiSort(localContractArray, {
- startblock: tableSortDirection
- });
- var filterCounter = 0;
- for (var i = 0; i < GlobalTotalContractCount; i++) {
- if ((localContractArray[i]['status'] != "Expired" && tableFilterer == "Active Contracts") || (localContractArray[i]['status'] != "Active" && tableFilterer == "Expired Contracts") || tableFilterer == "All Contracts") {
- addNewTableEntry(localContractArray[i]['address'], localContractArray[i]['name'], localContractArray[i]['hash'], localContractArray[i]['storage'], localContractArray[i]['startblock'], localContractArray[i]['endblock'], localContractArray[i]['status'], localContractArray[i]['cost'], i);
- filterCounter++;
+ if (tableSorter == "Ascending") {
+ tableSortDirection = "asc";
} else {
- document.getElementById("hostingcontractstablebody").innerHTML = hostingContracts;
+ tableSortDirection = "desc";
}
- }
- if (GlobalTotalContractCount == 0 || filterCounter == 0) {
- hostingContracts = '| No Hosting Contracts Found | | | | | |
';
- document.getElementById("hostingcontractstablebody").innerHTML = hostingContracts;
-
- }
-
- function addNewTableEntry(ethoFSHostingContractAddress, ethoFSHostingContractName, ethoFSHostingContractHash, ethoFSHostingContractStorage, ethoFSHostingContractStartBlock, ethoFSHostingContractEndBlock, ethoFSHostingContractStatus, ethoFSHostingContractCost, counter) {
- if (ethoFSHostingContractStatus == "Active") {
- hostingContracts += '| ' + ethoFSHostingContractName + ' | ' + ethoFSHostingContractHash + ' | ' + ethoFSHostingContractStartBlock + ' | ' + ethoFSHostingContractEndBlock + ' | ' + ethoFSHostingContractStatus + ' | |
';
- } else {
- hostingContracts += '| ' + ethoFSHostingContractName + ' | ' + ethoFSHostingContractHash + ' | ' + ethoFSHostingContractStartBlock + ' | ' + ethoFSHostingContractEndBlock + ' | ' + ethoFSHostingContractStatus + ' | |
';
- }
- document.getElementById("hostingcontractstablebody").innerHTML = hostingContracts;
- }
-
- function multiSort(array, sortObject = {}) {
- const sortKeys = Object.keys(sortObject);
- // Return array if no sort object is supplied.
- if (!sortKeys.length) {
- return array;
- }
- // Change the values of the sortObject keys to -1, 0, or 1.
- for (let key in sortObject) {
- sortObject[key] = sortObject[key] === 'desc' || sortObject[key] === -1 ? -1 :
- (sortObject[key] === 'skip' || sortObject[key] === 0 ? 0 : 1);
- }
- const keySort = (a, b, direction) => {
- direction = direction !== null ? direction : 1;
- if (a === b) { // If the values are the same, do not switch positions.
- return 0;
- }
- // If b > a, multiply by -1 to get the reverse direction.
- return a > b ? direction : -1 * direction;
- };
- return array.sort((a, b) => {
- let sorted = 0;
- let index = 0;
- // Loop until sorted (-1 or 1) or until the sort keys have been processed.
- while (sorted === 0 && index < sortKeys.length) {
- const key = sortKeys[index];
- if (key) {
- const direction = sortObject[key];
- sorted = keySort(a[key], b[key], direction);
- index++;
- }
- }
- return sorted;
+ localContractArray = multiSort(localContractArray, {
+ startblock: tableSortDirection
});
- }
+ var filterCounter = 0;
+ for (var i = 0; i < GlobalTotalContractCount; i++) {
+ if ((localContractArray[i]['status'] != "Expired" && tableFilterer == "Active Contracts") || (localContractArray[i]['status'] != "Active" && tableFilterer == "Expired Contracts") || tableFilterer == "All Contracts") {
+ addNewTableEntry(localContractArray[i]['address'], localContractArray[i]['name'], localContractArray[i]['hash'], localContractArray[i]['storage'], localContractArray[i]['startblock'], localContractArray[i]['endblock'], localContractArray[i]['status'], localContractArray[i]['cost'], i);
+ filterCounter++;
+ } else {
+ document.getElementById("hostingcontractstablebody").innerHTML = hostingContracts;
+ }
+ }
+ if (GlobalTotalContractCount == 0 || filterCounter == 0) {
+ hostingContracts = '| No Hosting Contracts Found | | | | | |
';
+ document.getElementById("hostingcontractstablebody").innerHTML = hostingContracts;
+
+ }
+
+ function addNewTableEntry(ethoFSHostingContractAddress, ethoFSHostingContractName, ethoFSHostingContractHash, ethoFSHostingContractStorage, ethoFSHostingContractStartBlock, ethoFSHostingContractEndBlock, ethoFSHostingContractStatus, ethoFSHostingContractCost, counter) {
+ if (ethoFSHostingContractStatus == "Active") {
+ hostingContracts += '| ' + ethoFSHostingContractName + ' | ' + ethoFSHostingContractHash + ' | ' + ethoFSHostingContractStartBlock + ' | ' + ethoFSHostingContractEndBlock + ' | ' + ethoFSHostingContractStatus + ' | |
';
+ } else {
+ hostingContracts += '| ' + ethoFSHostingContractName + ' | ' + ethoFSHostingContractHash + ' | ' + ethoFSHostingContractStartBlock + ' | ' + ethoFSHostingContractEndBlock + ' | ' + ethoFSHostingContractStatus + ' | |
';
+ }
+ document.getElementById("hostingcontractstablebody").innerHTML = hostingContracts;
+ }
+
+ function multiSort(array, sortObject = {}) {
+ const sortKeys = Object.keys(sortObject);
+ // Return array if no sort object is supplied.
+ if (!sortKeys.length) {
+ return array;
+ }
+ // Change the values of the sortObject keys to -1, 0, or 1.
+ for (let key in sortObject) {
+ sortObject[key] = sortObject[key] === 'desc' || sortObject[key] === -1 ? -1 :
+ (sortObject[key] === 'skip' || sortObject[key] === 0 ? 0 : 1);
+ }
+ const keySort = (a, b, direction) => {
+ direction = direction !== null ? direction : 1;
+ if (a === b) { // If the values are the same, do not switch positions.
+ return 0;
+ }
+ // If b > a, multiply by -1 to get the reverse direction.
+ return a > b ? direction : -1 * direction;
+ };
+ return array.sort((a, b) => {
+ let sorted = 0;
+ let index = 0;
+ // Loop until sorted (-1 or 1) or until the sort keys have been processed.
+ while (sorted === 0 && index < sortKeys.length) {
+ const key = sortKeys[index];
+ if (key) {
+ const direction = sortObject[key];
+ sorted = keySort(a[key], b[key], direction);
+ index++;
+ }
+ }
+ return sorted;
+ });
+ }
}
/*************************************************************************************************************/
//SHOW MODAL WITH HOSTING CONTRACT DETAILS
function showHostingContractDetails(counter) {
- resetContractExtensionChange();
+ resetContractExtensionChange();
- GlobalHostingContractDetailArray = GlobalHostingContractArray[counter];
- $('#contractDetailModal').modal({dismissible: true});
- $('#contractDetailModal').modal('open');
- document.getElementById("contract-detail-name").innerHTML = GlobalHostingContractDetailArray['name'];
- var hashOutputString = "";
- var hostingContractEntry = "";
- for (var i = 1; GlobalHostingContractDetailArray['hash'].length > i; i++) {
- addNewTableEntry(GlobalHostingContractDetailArray['hash'][i], GlobalHostingContractDetailArray['path'][i], i);
- }
- document.getElementById("contract-detail-startblock").innerHTML = GlobalHostingContractDetailArray['startblock'];
- document.getElementById("contract-detail-endblock").innerHTML = GlobalHostingContractDetailArray['endblock'];
- document.getElementById("contract-detail-status").innerHTML = GlobalHostingContractDetailArray['status'];
- document.getElementById("contract-detail-size").innerHTML = (GlobalHostingContractDetailArray['storage'] / 1048576);
+ GlobalHostingContractDetailArray = GlobalHostingContractArray[counter];
+ $('#contractDetailModal').modal({
+ dismissible: true
+ });
+ $('#contractDetailModal').modal('open');
+ document.getElementById("contract-detail-name").innerHTML = GlobalHostingContractDetailArray['name'];
+ var hashOutputString = "";
+ var hostingContractEntry = "";
+ for (var i = 1; GlobalHostingContractDetailArray['hash'].length > i; i++) {
+ addNewTableEntry(GlobalHostingContractDetailArray['hash'][i], GlobalHostingContractDetailArray['path'][i], i);
+ }
+ document.getElementById("contract-detail-startblock").innerHTML = GlobalHostingContractDetailArray['startblock'];
+ document.getElementById("contract-detail-endblock").innerHTML = GlobalHostingContractDetailArray['endblock'];
+ document.getElementById("contract-detail-status").innerHTML = GlobalHostingContractDetailArray['status'];
+ document.getElementById("contract-detail-size").innerHTML = (GlobalHostingContractDetailArray['storage'] / 1048576);
- function addNewTableEntry(ethoFSHostingContractHash, ethoFSHostingContractPath, count) {
- var table = document.getElementById("contract-detail-table");
- var row = table.insertRow(count + 10);
- var cell1 = row.insertCell(0);
- //var cell2 = row.insertCell(1);
- //cell1.innerHTML = ethoFSHostingContractPath;
- cell1.innerHTML = '' + ethoFSHostingContractHash + '';
- }
+ function addNewTableEntry(ethoFSHostingContractHash, ethoFSHostingContractPath, count) {
+ var table = document.getElementById("contract-detail-table");
+ var row = table.insertRow(count + 10);
+ var cell1 = row.insertCell(0);
+ //var cell2 = row.insertCell(1);
+ //cell1.innerHTML = ethoFSHostingContractPath;
+ cell1.innerHTML = '' + ethoFSHostingContractHash + '';
+ }
}
function resetContractDetailTableRows() {
- var x = document.getElementById("contract-detail-table").rows.length;
- for (var y = (x - 1); y > 10; y--) {
- document.getElementById("contract-detail-table").deleteRow(y);
- }
+ var x = document.getElementById("contract-detail-table").rows.length;
+ for (var y = (x - 1); y > 10; y--) {
+ document.getElementById("contract-detail-table").deleteRow(y);
+ }
}
/*************************************************************************************************************/
//LOCK CONTRACT TABLE DOWN - NO USER ACCOUNT
function outputNoAddressContractTable() {
- hostingContracts = '| No Hosting Contracts Found | | | | | |
';
- document.getElementById("hostingcontractstablebody").innerHTML = hostingContracts;
+ hostingContracts = '| No Hosting Contracts Found | | | | | |
';
+ document.getElementById("hostingcontractstablebody").innerHTML = hostingContracts;
}
//LOCK CONTRACT TABLE DOWN - NO USER ACCOUNT
function outputNoAddressContractTableWithButton() {
- hostingContracts = '| No Hosting Contracts Found | | | | | |
';
- document.getElementById("hostingcontractstablebody").innerHTML = hostingContracts;
+ hostingContracts = '| No Hosting Contracts Found | | | | | |
';
+ document.getElementById("hostingcontractstablebody").innerHTML = hostingContracts;
}
/*************************************************************************************************************/
function resetContractExtensionChange() {
- GlobalExtensionDuration = 0;
- document.getElementById("contract-extension-cost").innerHTML = 0;
- document.getElementById("extend-contract").selectedIndex = "0";
+ GlobalExtensionDuration = 0;
+ document.getElementById("contract-extension-cost").innerHTML = 0;
+ document.getElementById("extend-contract").selectedIndex = "0";
}
/*************************************************************************************************************/
//CONTRACT EXTENSION VALUE CHANGE
function contractExtensionChange(selectObj) {
- var index = selectObj.selectedIndex;
- var extensionDuration = selectObj.options[index].value;
- GlobalExtensionDuration = extensionDuration;
- document.getElementById("contract-extension-button").style.visibility = "visible";
- var extensionCost = ((GlobalHostingContractDetailArray['storage'] / 1048576) * GlobalHostingCost) * (extensionDuration / 46522);
- document.getElementById("contract-extension-cost").innerHTML = round(extensionCost, 2);
+ var index = selectObj.selectedIndex;
+ var extensionDuration = selectObj.options[index].value;
+ GlobalExtensionDuration = extensionDuration;
+ document.getElementById("contract-extension-button").style.visibility = "visible";
+ var extensionCost = ((GlobalHostingContractDetailArray['storage'] / 1048576) * GlobalHostingCost) * (extensionDuration / 46522);
+ document.getElementById("contract-extension-cost").innerHTML = round(extensionCost, 2);
}
/*************************************************************************************************************/
//CONTRACT EXTENSION CONFIRM
function contractExtensionConfirmation() {
- if (GlobalExtensionDuration > 0) {
- var extensionDuration = GlobalExtensionDuration;
- var ethoFSController = new web3.eth.Contract(GlobalControllerABI, GlobalControllerContractAddress);
+ if (GlobalExtensionDuration > 0) {
+ var extensionDuration = GlobalExtensionDuration;
+ var ethoFSController = new web3.eth.Contract(GlobalControllerABI, GlobalControllerContractAddress);
- var extensionCost = calculateCost(GlobalHostingContractDetailArray['storage'], extensionDuration, GlobalHostingCostWei);
- const transactionObject = {
- from: GlobalUserAddress,
- value: extensionCost
- };
- if (privateKeyLogin == true) {
- const tx = {
- to: GlobalControllerContractAddress,
- from: GlobalUserAddress,
- value: extensionCost,
- gas: 4000000,
- data: ethoFSController.methods.ExtendContract(GlobalHostingContractDetailArray['address'], extensionDuration).encodeABI()
- };
- var privateKey = '0x' + GlobalPrivateKey;
- console.log("Private Key: " + privateKey);
- web3.eth.accounts.signTransaction(tx, privateKey)
- .then(function(signedTransactionData) {
- console.log("Signed TX Data: " + signedTransactionData.rawTransaction);
- web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function(error, result) {
- if (!error) {
- if (result) {
- $('#contractDetailModal').modal({dismissible: true});
- $('#contractDetailModal').modal('close');
- $('#minedBlockTrackerModal').modal({dismissible: true});
- $('#minedBlockTrackerModal').modal('open');
- waitForReceipt(result, function(receipt) {
- console.log("Transaction Has Been Mined: " + receipt);
- $('#minedBlockTrackerModal').modal('close');
- updateContractTable();
+ var extensionCost = calculateCost(GlobalHostingContractDetailArray['storage'], extensionDuration, GlobalHostingCostWei);
+ const transactionObject = {
+ from: GlobalUserAddress,
+ value: extensionCost
+ };
+ if (privateKeyLogin == true) {
+ const tx = {
+ to: GlobalControllerContractAddress,
+ from: GlobalUserAddress,
+ value: extensionCost,
+ gas: 4000000,
+ data: ethoFSController.methods.ExtendContract(GlobalHostingContractDetailArray['address'], extensionDuration).encodeABI()
+ };
+ var privateKey = '0x' + GlobalPrivateKey;
+ console.log("Private Key: " + privateKey);
+ web3.eth.accounts.signTransaction(tx, privateKey)
+ .then(function (signedTransactionData) {
+ console.log("Signed TX Data: " + signedTransactionData.rawTransaction);
+ web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function (error, result) {
+ if (!error) {
+ if (result) {
+ $('#contractDetailModal').modal({
+ dismissible: true
+ });
+ $('#contractDetailModal').modal('close');
+ $('#minedBlockTrackerModal').modal({
+ dismissible: true
+ });
+ $('#minedBlockTrackerModal').modal('open');
+ waitForReceipt(result, function (receipt) {
+ console.log("Transaction Has Been Mined: " + receipt);
+ $('#minedBlockTrackerModal').modal('close');
+ updateContractTable();
+ });
+ } else {
+ console.log("There was a problem adding new contract");
+ }
+ } else {
+ console.error(error);
+ }
+ });
});
- } else {
- console.log("There was a problem adding new contract");
- }
- } else {
- console.error(error);
- }
- });
- });
- } else {
-
- ethoFSController.methods.ExtendContract(GlobalHostingContractDetailArray['address'], extensionDuration).send(transactionObject, function(error, result) {
- if (!error) {
- if (result) {
- $('#contractDetailModal').modal('close');
- $('#minedBlockTrackerModal').modal('open');
- waitForReceipt(result, function(receipt) {
- console.log("Transaction Has Been Mined: " + receipt);
- $('#minedBlockTrackerModal').modal('close');
- updateContractTable();
- });
- }
} else {
- console.log(error);
+
+ ethoFSController.methods.ExtendContract(GlobalHostingContractDetailArray['address'], extensionDuration).send(transactionObject, function (error, result) {
+ if (!error) {
+ if (result) {
+ $('#contractDetailModal').modal('close');
+ $('#minedBlockTrackerModal').modal('open');
+ waitForReceipt(result, function (receipt) {
+ console.log("Transaction Has Been Mined: " + receipt);
+ $('#minedBlockTrackerModal').modal('close');
+ updateContractTable();
+ });
+ }
+ } else {
+ console.log(error);
+ }
+ });
}
- });
}
- }
}
/*************************************************************************************************************/
@@ -737,146 +776,146 @@ function contractExtensionConfirmation() {
=========================================================================== */
const subscribeToHealthChannel = () => {
- window.node.pubsub.subscribe(info.id + "_alpha11", healthMessageHandler)
- .catch(() => onError('An error occurred when subscribing to the health check workspace.'))
+ window.node.pubsub.subscribe(info.id + "_alpha11", healthMessageHandler)
+ .catch(() => onError('An error occurred when subscribing to the health check workspace.'))
}
const healthMessageHandler = (message) => {
- healthMessage = message.data.toString();
- UpdateHealthCheckInfo(healthMessage);
+ healthMessage = message.data.toString();
+ UpdateHealthCheckInfo(healthMessage);
}
function UpdateHealthCheckInfo(healthMessage) {
- var mainMessage = healthMessage.split(";")[1];
- var splitMessage = mainMessage.split(",");
- var usedStorageTotal = 0;
- var availableStorageTotal = 0;
- var activeHistory = 0;
- var nodeCounter = 0;
- splitMessage.forEach(function(nodeMessage, index) {
- var nodeSplitMessage = nodeMessage.split(":");
- activeHistory = Number(nodeSplitMessage[5]);
- if (activeHistory >= 5) {
- nodeCounter++;
- usedStorageTotal += Number(nodeSplitMessage[8]);
- availableStorageTotal += Number(nodeSplitMessage[7]);
- }
- if (index == (splitMessage.length - 1)) {
- updateStorageArrays(usedStorageTotal, availableStorageTotal, nodeCounter);
- }
- });
-
- function updateStorageArrays(usedStorageTotal, availableStorageTotal, nodecount) {
-
- if (availableStorageArray.length >= 50) {
- if (availableStorageTotal > 0.75 * averageAvailableStorageTotal && availableStorageTotal < 1.25 * averageAvailableStorageTotal) {
- availableStorageArray.push(availableStorageTotal);
- availableStorageArray.shift();
- }
- } else {
- availableStorageArray.push(availableStorageTotal);
- }
- if (nodeCountArray.length >= 50) {
- nodeCountArray.push(nodecount);
- nodeCountArray.shift();
- } else {
- nodeCountArray.push(nodecount);
- }
- calculateStorageAverages(usedStorageArray, availableStorageArray, nodeCountArray);
- }
-
- function calculateStorageAverages(usedStorageArray, availableStorageArray, nodeCountArray) {
-
- var sumAvailableStorage = 0;
- availableStorageArray.forEach(function(value, index) {
- sumAvailableStorage += value;
- if (index == (availableStorageArray.length - 1)) {
- averageAvailableStorageTotal = (sumAvailableStorage / availableStorageArray.length);
- document.getElementById("nodestorage").textContent = (round(2 + ((averageAvailableStorageTotal) / 1000000), 1)) + "TB";
- }
+ var mainMessage = healthMessage.split(";")[1];
+ var splitMessage = mainMessage.split(",");
+ var usedStorageTotal = 0;
+ var availableStorageTotal = 0;
+ var activeHistory = 0;
+ var nodeCounter = 0;
+ splitMessage.forEach(function (nodeMessage, index) {
+ var nodeSplitMessage = nodeMessage.split(":");
+ activeHistory = Number(nodeSplitMessage[5]);
+ if (activeHistory >= 5) {
+ nodeCounter++;
+ usedStorageTotal += Number(nodeSplitMessage[8]);
+ availableStorageTotal += Number(nodeSplitMessage[7]);
+ }
+ if (index == (splitMessage.length - 1)) {
+ updateStorageArrays(usedStorageTotal, availableStorageTotal, nodeCounter);
+ }
});
- var sumNodeCount = 0;
- nodeCountArray.forEach(function(value, index) {
- sumNodeCount += value;
- if (index == (nodeCountArray.length - 1)) {
- var averageNodeCount = (sumNodeCount / nodeCountArray.length) + 19;
- document.getElementById("nodecount").textContent = (round(averageNodeCount, 0));
- }
- });
- }
+
+ function updateStorageArrays(usedStorageTotal, availableStorageTotal, nodecount) {
+
+ if (availableStorageArray.length >= 50) {
+ if (availableStorageTotal > 0.75 * averageAvailableStorageTotal && availableStorageTotal < 1.25 * averageAvailableStorageTotal) {
+ availableStorageArray.push(availableStorageTotal);
+ availableStorageArray.shift();
+ }
+ } else {
+ availableStorageArray.push(availableStorageTotal);
+ }
+ if (nodeCountArray.length >= 50) {
+ nodeCountArray.push(nodecount);
+ nodeCountArray.shift();
+ } else {
+ nodeCountArray.push(nodecount);
+ }
+ calculateStorageAverages(usedStorageArray, availableStorageArray, nodeCountArray);
+ }
+
+ function calculateStorageAverages(usedStorageArray, availableStorageArray, nodeCountArray) {
+
+ var sumAvailableStorage = 0;
+ availableStorageArray.forEach(function (value, index) {
+ sumAvailableStorage += value;
+ if (index == (availableStorageArray.length - 1)) {
+ averageAvailableStorageTotal = (sumAvailableStorage / availableStorageArray.length);
+ document.getElementById("nodestorage").textContent = (round(2 + ((averageAvailableStorageTotal) / 1000000), 1)) + "TB";
+ }
+ });
+ var sumNodeCount = 0;
+ nodeCountArray.forEach(function (value, index) {
+ sumNodeCount += value;
+ if (index == (nodeCountArray.length - 1)) {
+ var averageNodeCount = (sumNodeCount / nodeCountArray.length) + 19;
+ document.getElementById("nodecount").textContent = (round(averageNodeCount, 0));
+ }
+ });
+ }
}
const messageHandler = (message) => {
- messageString = message.data.toString();
+ messageString = message.data.toString();
}
const receiveExitMsg = (msg) => console.log("Content Upload Successful")
const exitMessageHandler = (message) => {
- const cancelMessageString = message.data.toString()
+ const cancelMessageString = message.data.toString()
}
const subscribeToMessaging = () => {
- for (var i = 4; i < PeersForChannel.length; i++) {
- window.node.pubsub.subscribe(PeersForChannel[i] + "PinningChannel_alpha11", messageHandler)
- .catch(() => onError('An error occurred when subscribing to the workspace.'))
- }
+ for (var i = 4; i < PeersForChannel.length; i++) {
+ window.node.pubsub.subscribe(PeersForChannel[i] + "PinningChannel_alpha11", messageHandler)
+ .catch(() => onError('An error occurred when subscribing to the workspace.'))
+ }
}
const unsubscribeToMessaging = () => {
- for (var i = 4; i < PeersForChannel.length; i++) {
- window.node.pubsub.unsubscribe(PeersForChannel[i] + "PinningChannel_alpha11", exitMessageHandler)
- .catch(() => onError('An error occurred when unsubscribing to the workspace.'))
- }
+ for (var i = 4; i < PeersForChannel.length; i++) {
+ window.node.pubsub.unsubscribe(PeersForChannel[i] + "PinningChannel_alpha11", exitMessageHandler)
+ .catch(() => onError('An error occurred when unsubscribing to the workspace.'))
+ }
}
const publishImmediatePin = (hash) => {
- const data = Buffer.from(hash)
- for (var i = 0; i < PeersForChannel.length; i++) {
- var channel = PeersForChannel[i] + "ImmediatePinningChannel_alpha11";
- window.node.pubsub.publish(channel, data)
- .catch(() => onError('An error occurred when publishing the message.'))
- }
+ const data = Buffer.from(hash)
+ for (var i = 0; i < PeersForChannel.length; i++) {
+ var channel = PeersForChannel[i] + "ImmediatePinningChannel_alpha11";
+ window.node.pubsub.publish(channel, data)
+ .catch(() => onError('An error occurred when publishing the message.'))
+ }
}
/* ===========================================================================
Files handling
=========================================================================== */
const resetProgress = () => {
- $progressBar.style.transform = 'translateX(-100%)'
+ $progressBar.style.transform = 'translateX(-100%)'
}
function appendFile(name, hash, size, data) {
- const file = new window.Blob([data], {
- type: 'application/octet-binary'
- })
- const url = window.URL.createObjectURL(file)
- const row = document.createElement('tr')
+ const file = new window.Blob([data], {
+ type: 'application/octet-binary'
+ })
+ const url = window.URL.createObjectURL(file)
+ const row = document.createElement('tr')
- const nameCell = document.createElement('td')
- nameCell.innerHTML = name
+ const nameCell = document.createElement('td')
+ nameCell.innerHTML = name
- const hashCell = document.createElement('td')
- hashCell.innerHTML = hash
+ const hashCell = document.createElement('td')
+ hashCell.innerHTML = hash
- const sizeCell = document.createElement('td')
- sizeCell.innerText = size
+ const sizeCell = document.createElement('td')
+ sizeCell.innerText = size
- const downloadCell = document.createElement('td')
- const link = document.createElement('a')
- link.setAttribute('href', url)
- link.setAttribute('download', name)
- link.innerHTML = '
'
- downloadCell.appendChild(link)
+ const downloadCell = document.createElement('td')
+ const link = document.createElement('a')
+ link.setAttribute('href', url)
+ link.setAttribute('download', name)
+ link.innerHTML = '
'
+ downloadCell.appendChild(link)
- row.appendChild(nameCell)
- row.appendChild(hashCell)
- row.appendChild(sizeCell)
- row.appendChild(downloadCell)
+ row.appendChild(nameCell)
+ row.appendChild(hashCell)
+ row.appendChild(sizeCell)
+ row.appendChild(downloadCell)
- $fileHistory.insertBefore(row, $fileHistory.firstChild)
+ $fileHistory.insertBefore(row, $fileHistory.firstChild)
}
function resetFileTable() {
- while ($fileHistory.hasChildNodes()) {
- $fileHistory.removeChild($fileHistory.firstChild);
- }
+ while ($fileHistory.hasChildNodes()) {
+ $fileHistory.removeChild($fileHistory.firstChild);
+ }
}
/* Drag & Drop
=========================================================================== */
@@ -885,385 +924,395 @@ const onDragEnter = (event) => $dragContainer.classList.add('dragging')
const onDragLeave = () => $dragContainer.classList.remove('dragging')
function startUploadProcess() {
- console.log("Starting Upload Process..");
- $('#preparingUploadModal').modal({dismissible: true});
- $('#preparingUploadModal').modal('open');
- var streamFinishCount = 0;
- for (var i = 0; i < MainFileArray.length; i++) {
- const streamFiles = (files) => {
- const stream = node.addReadableStream()
- stream.on('data', function(data) {
- //console.log("Data...");
- //console.log(data);
- GlobalHashArray.push(`${data.hash}`);
- GlobalSizeArray.push(`${data.size}`);
- GlobalPathArray.push(`${data.path}`);
- GlobalUploadHash = `${data.hash}`;
- GlobalUploadPath = `${data.path}`;
- console.log("Path: " + data.path + " Hash: " + data.hash);
- //var comparePath = data.path.replace(pathSymbol, "/");
- var comparePath = data.path.replace(/\\/g, '/');
- console.log("Compare Path: " + comparePath);
- var splitString = comparePath.split("/")
- if (splitString.length == 1 || splitString[0] == "") {
- //if (splitString.length == 1) {
- streamFinishCount++;
- GlobalMainHashArray.push(`${data.hash}`);
- GlobalMainPathArray.push(`${data.path}`);
- if (streamFinishCount == MainFileArray.length) {
- console.log("Finish Path: " + data.path + " Hash: " + data.hash);
- createMainHash();
- }
- }
- });
- files.forEach(file => stream.write(file))
- stream.end()
- }
- var filesForStream = MainFileArray[i];
- streamFiles(filesForStream);
- }
-
- const streamFilesExternally = (filesArray, MainHashArray) => {
-
- var confirmationServers = ["https://ipfsapi.ethofs.com/ipfs/", "https://ipfsapi1.ethofs.com/ipfs/", "https://ipfsapi2.ethofs.com/ipfs/", "https://ipfsapi5.ethofs.com/ipfs/", "https://ipfsapi6.ethofs.com/ipfs/", "https://ipfsapi7.ethofs.com/ipfs/"];
- let hashVerificationArray = [...GlobalHashArray, ...GlobalMainHashArray];
- hashVerificationArray.push(GlobalMainContentHash);
- var hashConfirmationCount = 0;
- var uploadCompleteFlag = false;
-
- for (var i = 0; i < MainHashArray.length; i++) {
- console.log("Sending Immediate Pin Request: " + MainHashArray[i]);
- publishImmediatePin(MainHashArray[i]);
- }
- setTimeout(function() {
- hashVerificationArray.forEach(function(hash) {
- verifyDataUpload(hash);
- });
- }, 5000);
-
- const verifyDataUpload = async hash => {
- var confirmationServer = confirmationServers[Math.floor(Math.random() * confirmationServers.length)];
- var url = confirmationServer + hash;
- try {
- const response = await fetch(url);
- console.log("Data Confirmation Status: " + response.status + " Hash: " + hash);
- if (response.status == 200) {
- hashConfirmationCount++;
- var confirmationPercentage = Math.ceil((hashConfirmationCount / hashVerificationArray.length) * 100);
- updateUploadProgress(confirmationPercentage);
- console.log("Data Upload Confirmation Received: " + hashConfirmationCount + "/" + hashVerificationArray.length);
- $uploadMessage.innerText = "Upload Confirmation Received: " + hashConfirmationCount + "/" + hashVerificationArray.length;
- if (confirmationPercentage >= 99) {
- $uploadMessage.innerText = "Upload Complete";
- document.getElementById("upload-status-message").textContent = "Complete";
- if (!uploadCompleteFlag) {
- uploadCompleteFlag = true;
- updateContractTable();
- finishUploadModal();
- }
- return;
- }
- } else {
- var confirmationPercentage = Math.ceil((hashConfirmationCount / hashVerificationArray.length) * 100);
- if (confirmationPercentage < 99) {
- setTimeout(function() {
- verifyDataUpload(hash)
- }, 2000);
- } else {
- return;
- }
- }
- } catch (error) {
- console.log(error);
- console.log("Data Confirmation Error: " + error.status);
- var confirmationPercentage = Math.ceil((hashConfirmationCount / hashVerificationArray.length) * 100);
- if (confirmationPercentage < 99) {
- setTimeout(function() {
- verifyDataUpload(hash)
- }, 2000);
- } else {
- return;
- }
- }
- };
- }
-
- function createMainHash() {
- var contentHashString = GlobalChannelString;
- for (i = 0; i < GlobalMainHashArray.length; i++) {
- contentHashString += ":" + GlobalMainHashArray[i];
- }
- window.node.add(Buffer.from(contentHashString), (err, res) => {
- if (err || !res) {
- return console.error('ipfs add error', err, res)
- }
- res.forEach((file) => {
- if (file && file.hash) {
- GlobalMainContentHash = file.hash;
- AddNewPin(GlobalUploadHash, GlobalUploadSize, document.getElementById('newcontractname').value, GlobalContractDuration);
- }
- });
+ console.log("Starting Upload Process..");
+ $('#preparingUploadModal').modal({
+ dismissible: true
});
- }
-
- /*****************************************************************************/
- function AddNewPin(pinToAdd, pinSize, HostingContractName, HostingContractDuration) {
- var contentHashString = GlobalChannelString;
- var contentPathString = GlobalChannelString;
- for (i = 0; i < GlobalMainHashArray.length; i++) {
- contentHashString += ":" + GlobalMainHashArray[i];
- contentPathString += ":" + GlobalMainPathArray[i];
- }
- var MainHashArray = GlobalMainHashArray;
- GlobalUploadName = HostingContractName;
- var contractCost = calculateCost(pinSize, HostingContractDuration, GlobalHostingCostWei);
- var pinAdding = new web3.eth.Contract(GlobalControllerABI, GlobalControllerContractAddress);
- const transactionObject = {
- from: GlobalUserAddress,
- value: contractCost
- };
- console.log("Contract Address: " + GlobalControllerContractAddress + " Value: " + contractCost);
- if (privateKeyLogin == true) {
- const tx = {
- to: GlobalControllerContractAddress,
- from: GlobalUserAddress,
- value: contractCost,
- gas: 4000000,
- data: pinAdding.methods.AddNewContract(GlobalMainContentHash, HostingContractName, HostingContractDuration, pinSize, pinSize, contentHashString, contentPathString).encodeABI()
- };
- var privateKey = '0x' + GlobalPrivateKey;
- console.log("Private Key: " + privateKey);
- web3.eth.accounts.signTransaction(tx, privateKey)
- .then(function(signedTransactionData) {
- console.log("Signed TX Data: " + signedTransactionData.rawTransaction);
- web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function(error, result) {
- if (!error) {
- if (result) {
- console.log("Result: " + result);
- $('#minedBlockTrackerModal').modal({dismissible: true});
- $('#minedBlockTrackerModal').modal('open');
- $('#preparingUploadModal').modal({dismissible: true});
- $('#preparingUploadModal').modal('close');
- waitForReceipt(result, function(receipt) {
- console.log("Transaction Has Been Mined: " + receipt);
- $('#minedBlockTrackerModal').modal({dismissible: true});
- $('#minedBlockTrackerModal').modal('close');
- $('#nodeModal').modal({dismissible: true});
- $('#nodeModal').modal('close');
- var filesForStream = MainFileArray;
- streamFilesExternally(filesForStream, MainHashArray);
- checkForUploadedContentAvailability(HostingContractName);
- });
- } else {
- console.log("There was a problem adding new contract");
- }
- } else {
- console.error(error);
- }
- });
- });
- } else {
- pinAdding.methods.AddNewContract(GlobalMainContentHash, HostingContractName, HostingContractDuration, pinSize, pinSize, contentHashString, contentPathString).send(transactionObject, function(error, result) {
- if (!error) {
- if (result) {
- $('#minedBlockTrackerModal').modal('open');
- $('#preparingUploadModal').modal('close');
- waitForReceipt(result, function(receipt) {
- console.log("Transaction Has Been Mined: " + receipt);
- $('#minedBlockTrackerModal').modal('close');
- $('#nodeModal').modal('close');
- var filesForStream = MainFileArray;
- streamFilesExternally(filesForStream, MainHashArray);
- checkForUploadedContentAvailability(HostingContractName);
+ $('#preparingUploadModal').modal('open');
+ var streamFinishCount = 0;
+ for (var i = 0; i < MainFileArray.length; i++) {
+ const streamFiles = (files) => {
+ const stream = node.addReadableStream()
+ stream.on('data', function (data) {
+ //console.log("Data...");
+ //console.log(data);
+ GlobalHashArray.push(`${data.hash}`);
+ GlobalSizeArray.push(`${data.size}`);
+ GlobalPathArray.push(`${data.path}`);
+ GlobalUploadHash = `${data.hash}`;
+ GlobalUploadPath = `${data.path}`;
+ console.log("Path: " + data.path + " Hash: " + data.hash);
+ //var comparePath = data.path.replace(pathSymbol, "/");
+ var comparePath = data.path.replace(/\\/g, '/');
+ console.log("Compare Path: " + comparePath);
+ var splitString = comparePath.split("/")
+ if (splitString.length == 1 || splitString[0] == "") {
+ //if (splitString.length == 1) {
+ streamFinishCount++;
+ GlobalMainHashArray.push(`${data.hash}`);
+ GlobalMainPathArray.push(`${data.path}`);
+ if (streamFinishCount == MainFileArray.length) {
+ console.log("Finish Path: " + data.path + " Hash: " + data.hash);
+ createMainHash();
+ }
+ }
});
- } else {
- console.log("There was a problem adding new contract");
- }
- } else {
- console.error(error);
+ files.forEach(file => stream.write(file))
+ stream.end()
}
- });
+ var filesForStream = MainFileArray[i];
+ streamFiles(filesForStream);
}
- }
- /*****************************************************************************/
+
+ const streamFilesExternally = (filesArray, MainHashArray) => {
+
+ var confirmationServers = ["https://ipfsapi.ethofs.com/ipfs/", "https://ipfsapi1.ethofs.com/ipfs/", "https://ipfsapi2.ethofs.com/ipfs/", "https://ipfsapi5.ethofs.com/ipfs/", "https://ipfsapi6.ethofs.com/ipfs/", "https://ipfsapi7.ethofs.com/ipfs/"];
+ let hashVerificationArray = [...GlobalHashArray, ...GlobalMainHashArray];
+ hashVerificationArray.push(GlobalMainContentHash);
+ var hashConfirmationCount = 0;
+ var uploadCompleteFlag = false;
+
+ for (var i = 0; i < MainHashArray.length; i++) {
+ console.log("Sending Immediate Pin Request: " + MainHashArray[i]);
+ publishImmediatePin(MainHashArray[i]);
+ }
+ setTimeout(function () {
+ hashVerificationArray.forEach(function (hash) {
+ verifyDataUpload(hash);
+ });
+ }, 5000);
+
+ const verifyDataUpload = async hash => {
+ var confirmationServer = confirmationServers[Math.floor(Math.random() * confirmationServers.length)];
+ var url = confirmationServer + hash;
+ try {
+ const response = await fetch(url);
+ console.log("Data Confirmation Status: " + response.status + " Hash: " + hash);
+ if (response.status == 200) {
+ hashConfirmationCount++;
+ var confirmationPercentage = Math.ceil((hashConfirmationCount / hashVerificationArray.length) * 100);
+ updateUploadProgress(confirmationPercentage);
+ console.log("Data Upload Confirmation Received: " + hashConfirmationCount + "/" + hashVerificationArray.length);
+ $uploadMessage.innerText = "Upload Confirmation Received: " + hashConfirmationCount + "/" + hashVerificationArray.length;
+ if (confirmationPercentage >= 99) {
+ $uploadMessage.innerText = "Upload Complete";
+ document.getElementById("upload-status-message").textContent = "Complete";
+ if (!uploadCompleteFlag) {
+ uploadCompleteFlag = true;
+ updateContractTable();
+ finishUploadModal();
+ }
+ return;
+ }
+ } else {
+ var confirmationPercentage = Math.ceil((hashConfirmationCount / hashVerificationArray.length) * 100);
+ if (confirmationPercentage < 99) {
+ setTimeout(function () {
+ verifyDataUpload(hash)
+ }, 2000);
+ } else {
+ return;
+ }
+ }
+ } catch (error) {
+ console.log(error);
+ console.log("Data Confirmation Error: " + error.status);
+ var confirmationPercentage = Math.ceil((hashConfirmationCount / hashVerificationArray.length) * 100);
+ if (confirmationPercentage < 99) {
+ setTimeout(function () {
+ verifyDataUpload(hash)
+ }, 2000);
+ } else {
+ return;
+ }
+ }
+ };
+ }
+
+ function createMainHash() {
+ var contentHashString = GlobalChannelString;
+ for (i = 0; i < GlobalMainHashArray.length; i++) {
+ contentHashString += ":" + GlobalMainHashArray[i];
+ }
+ window.node.add(Buffer.from(contentHashString), (err, res) => {
+ if (err || !res) {
+ return console.error('ipfs add error', err, res)
+ }
+ res.forEach((file) => {
+ if (file && file.hash) {
+ GlobalMainContentHash = file.hash;
+ AddNewPin(GlobalUploadHash, GlobalUploadSize, document.getElementById('newcontractname').value, GlobalContractDuration);
+ }
+ });
+ });
+ }
+
+ /*****************************************************************************/
+ function AddNewPin(pinToAdd, pinSize, HostingContractName, HostingContractDuration) {
+ var contentHashString = GlobalChannelString;
+ var contentPathString = GlobalChannelString;
+ for (i = 0; i < GlobalMainHashArray.length; i++) {
+ contentHashString += ":" + GlobalMainHashArray[i];
+ contentPathString += ":" + GlobalMainPathArray[i];
+ }
+ var MainHashArray = GlobalMainHashArray;
+ GlobalUploadName = HostingContractName;
+ var contractCost = calculateCost(pinSize, HostingContractDuration, GlobalHostingCostWei);
+ var pinAdding = new web3.eth.Contract(GlobalControllerABI, GlobalControllerContractAddress);
+ const transactionObject = {
+ from: GlobalUserAddress,
+ value: contractCost
+ };
+ console.log("Contract Address: " + GlobalControllerContractAddress + " Value: " + contractCost);
+ if (privateKeyLogin == true) {
+ const tx = {
+ to: GlobalControllerContractAddress,
+ from: GlobalUserAddress,
+ value: contractCost,
+ gas: 4000000,
+ data: pinAdding.methods.AddNewContract(GlobalMainContentHash, HostingContractName, HostingContractDuration, pinSize, pinSize, contentHashString, contentPathString).encodeABI()
+ };
+ var privateKey = '0x' + GlobalPrivateKey;
+ console.log("Private Key: " + privateKey);
+ web3.eth.accounts.signTransaction(tx, privateKey)
+ .then(function (signedTransactionData) {
+ console.log("Signed TX Data: " + signedTransactionData.rawTransaction);
+ web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function (error, result) {
+ if (!error) {
+ if (result) {
+ console.log("Result: " + result);
+ $('#minedBlockTrackerModal').modal({
+ dismissible: true
+ });
+ $('#minedBlockTrackerModal').modal('open');
+ $('#preparingUploadModal').modal({
+ dismissible: true
+ });
+ $('#preparingUploadModal').modal('close');
+ waitForReceipt(result, function (receipt) {
+ console.log("Transaction Has Been Mined: " + receipt);
+ $('#minedBlockTrackerModal').modal({
+ dismissible: true
+ });
+ $('#minedBlockTrackerModal').modal('close');
+ $('#nodeModal').modal({
+ dismissible: true
+ });
+ $('#nodeModal').modal('close');
+ var filesForStream = MainFileArray;
+ streamFilesExternally(filesForStream, MainHashArray);
+ checkForUploadedContentAvailability(HostingContractName);
+ });
+ } else {
+ console.log("There was a problem adding new contract");
+ }
+ } else {
+ console.error(error);
+ }
+ });
+ });
+ } else {
+ pinAdding.methods.AddNewContract(GlobalMainContentHash, HostingContractName, HostingContractDuration, pinSize, pinSize, contentHashString, contentPathString).send(transactionObject, function (error, result) {
+ if (!error) {
+ if (result) {
+ $('#minedBlockTrackerModal').modal('open');
+ $('#preparingUploadModal').modal('close');
+ waitForReceipt(result, function (receipt) {
+ console.log("Transaction Has Been Mined: " + receipt);
+ $('#minedBlockTrackerModal').modal('close');
+ $('#nodeModal').modal('close');
+ var filesForStream = MainFileArray;
+ streamFilesExternally(filesForStream, MainHashArray);
+ checkForUploadedContentAvailability(HostingContractName);
+ });
+ } else {
+ console.log("There was a problem adding new contract");
+ }
+ } else {
+ console.error(error);
+ }
+ });
+ }
+ }
+ /*****************************************************************************/
}
function updateUploadProgress(width) {
- var elem = document.getElementById("myBar");
- width = round(width, 2);
- if (width >= 100) {
- width = 100;
+ var elem = document.getElementById("myBar");
+ width = round(width, 2);
+ if (width >= 100) {
+ width = 100;
+ elem.style.width = width + '%';
+ elem.innerHTML = width * 1 + '%';
+ }
elem.style.width = width + '%';
elem.innerHTML = width * 1 + '%';
- }
- elem.style.width = width + '%';
- elem.innerHTML = width * 1 + '%';
}
function resetUploadProcess() {
- resetFileTable();
- updateUploadProgress(0);
- $uploadMessage.innerText = "Preparing Upload";
- document.getElementById("upload-status-message").textContent = "";
- MainFileArray = new Array();
- GlobalUploadSize = 0;
+ resetFileTable();
+ updateUploadProgress(0);
+ $uploadMessage.innerText = "Preparing Upload";
+ document.getElementById("upload-status-message").textContent = "";
+ MainFileArray = new Array();
+ GlobalUploadSize = 0;
}
function updateAnalyzeProgress(width) {
- var elem = document.getElementById("myAnalyzeBar");
- width = round(width, 2);
- if (width >= 100) {
- width = 100;
+ var elem = document.getElementById("myAnalyzeBar");
+ width = round(width, 2);
+ if (width >= 100) {
+ width = 100;
+ elem.style.width = width + '%';
+ elem.innerHTML = width * 1 + '%';
+ }
elem.style.width = width + '%';
elem.innerHTML = width * 1 + '%';
- }
- elem.style.width = width + '%';
- elem.innerHTML = width * 1 + '%';
}
function 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);
+ 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);
- fileSize += Number(stats.size);
- var totalUploadSizeMB = GlobalUploadSize / 1000000;
- appendFile(updatedPath, filename, stats.size, null);
- console.log("Path: " + filepath + " Size: " + stats.size + " Total Size: " + GlobalUploadSize);
- document.getElementById("upload-size").textContent = totalUploadSizeMB;
- contractDurationChange(document.getElementById('contract-duration').value);
- streamCompareCount--;
- updateAnalyzeProgress(((totalUploadItems - streamCompareCount) / totalUploadItems));
- if (streamCompareCount == 0) {
- document.getElementById("upload-hash").textContent = "READY FOR UPLOAD";
- document.getElementById("upload-confirm-button").style.visibility = "visible";
+ 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);
}
- });
- }
- } else {
- console.log("File Stats 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);
+ fileSize += Number(stats.size);
+ var totalUploadSizeMB = GlobalUploadSize / 1000000;
+ appendFile(updatedPath, filename, stats.size, null);
+ console.log("Path: " + filepath + " Size: " + stats.size + " Total Size: " + GlobalUploadSize);
+ document.getElementById("upload-size").textContent = totalUploadSizeMB;
+ contractDurationChange(document.getElementById('contract-duration').value);
+ streamCompareCount--;
+ 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) {
- MainFileArray.push([]);
- document.getElementById("upload-hash").textContent = "ANALYZING UPLOAD DATA";
- document.getElementById("upload-confirm-button").style.visibility = "hidden";
- fileSize = 0;
- resetProgress();
- 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());
+ MainFileArray.push([]);
+ document.getElementById("upload-hash").textContent = "ANALYZING UPLOAD DATA";
+ document.getElementById("upload-confirm-button").style.visibility = "hidden";
+ fileSize = 0;
+ resetProgress();
+ 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 handleEntry(entry) {
- if (entry.isFile) {
- getFile(entry);
+ 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 getFile(entry) {
- 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;
- appendFile(entry.fullPath, entry.name, file.size, null);
- document.getElementById("upload-size").textContent = totalUploadSizeMB;
- contractDurationChange(document.getElementById('contract-duration').value);
- streamCompareCount--;
- updateAnalyzeProgress(((totalItemCount - streamCompareCount) / totalItemCount));
- if (streamCompareCount == 0) {
- document.getElementById("upload-hash").textContent = "READY FOR UPLOAD";
- document.getElementById("upload-confirm-button").style.visibility = "visible";
- }
- });
- });
+ function initialHandleItems(items) {
+ const files = [];
+ totalItemCount = items.length;
+ streamCompareCount = items.length;
+ for (var item of items) {
+ var awaitHandleEntry = handleEntry(item.webkitGetAsEntry());
}
- } 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);
- });
- });
- }
- }
+ function handleEntry(entry) {
+ if (entry.isFile) {
+ getFile(entry);
- }
- initialHandleItems(event.dataTransfer.items);
+ function getFile(entry) {
+ 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;
+ appendFile(entry.fullPath, entry.name, file.size, null);
+ document.getElementById("upload-size").textContent = totalUploadSizeMB;
+ contractDurationChange(document.getElementById('contract-duration').value);
+ streamCompareCount--;
+ 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);
}
/* ===========================================================================
@@ -1271,66 +1320,66 @@ function onDrop(event) {
=========================================================================== */
function connectToPeer(event) {
- const multiaddr = $multiaddrInput.value
+ const multiaddr = $multiaddrInput.value
- if (!multiaddr) {
- return onError('No multiaddr was inserted.')
- }
+ if (!multiaddr) {
+ return onError('No multiaddr was inserted.')
+ }
- window.node.swarm.connect(multiaddr)
- .then(() => {
- onSuccess(`Successfully connected to peer.`)
- $multiaddrInput.value = ''
- })
- .catch(() => onError('An error occurred when connecting to the peer.'))
+ window.node.swarm.connect(multiaddr)
+ .then(() => {
+ onSuccess(`Successfully connected to peer.`)
+ $multiaddrInput.value = ''
+ })
+ .catch(() => onError('An error occurred when connecting to the peer.'))
}
function updatePeerProgress(width, peercount) {
- var backgroundcolor = "";
- var elem = document.getElementById("myPeerBar");
- width = round(width, 2);
- if (width >= 100) {
- width = 100;
- }
- if (width >= 80) {
- backgroundcolor = '"#3CB371"';
- } else if (width >= 40 && width < 80) {
- backgroundcolor = '"#FFFF00"';
- } else {
- backgroundcolor = '"#FF0000"';
- }
- elem.style.width = width + '%';
+ var backgroundcolor = "";
+ var elem = document.getElementById("myPeerBar");
+ width = round(width, 2);
+ if (width >= 100) {
+ width = 100;
+ }
+ if (width >= 80) {
+ backgroundcolor = '"#3CB371"';
+ } else if (width >= 40 && width < 80) {
+ backgroundcolor = '"#FFFF00"';
+ } else {
+ backgroundcolor = '"#FF0000"';
+ }
+ elem.style.width = width + '%';
}
function refreshPeerList() {
- var updatedPeerCount = 0;
- window.node.swarm.peers()
- .then((peers) => {
- const peersAsHtml = peers.reverse()
- .map((peer) => {
- if (peer.addr) {
- const addr = peer.addr.toString()
- if (addr.indexOf('ipfs') >= 0) {
- return addr
- } else {
- return addr + peer.peer.id.toB58String()
- }
- }
- })
- .map((addr) => {
- var splitString = addr.split("/");
- addr = splitString[splitString.length - 1];
- updatedPeerCount++;
- if (!PeersForChannel.includes(addr)) {
- PeersForChannel.push(addr);
- }
- return `| ${addr} |
`
- }).join('')
+ var updatedPeerCount = 0;
+ window.node.swarm.peers()
+ .then((peers) => {
+ const peersAsHtml = peers.reverse()
+ .map((peer) => {
+ if (peer.addr) {
+ const addr = peer.addr.toString()
+ if (addr.indexOf('ipfs') >= 0) {
+ return addr
+ } else {
+ return addr + peer.peer.id.toB58String()
+ }
+ }
+ })
+ .map((addr) => {
+ var splitString = addr.split("/");
+ addr = splitString[splitString.length - 1];
+ updatedPeerCount++;
+ if (!PeersForChannel.includes(addr)) {
+ PeersForChannel.push(addr);
+ }
+ return `| ${addr} |
`
+ }).join('')
- }).then(() => {
- updatePeerProgress(((updatedPeerCount / 7) * 100), updatedPeerCount)
- })
- .catch((error) => onError(error))
+ }).then(() => {
+ updatePeerProgress(((updatedPeerCount / 7) * 100), updatedPeerCount)
+ })
+ .catch((error) => onError(error))
}
/* ===========================================================================
@@ -1338,21 +1387,21 @@ function refreshPeerList() {
=========================================================================== */
function onSuccess(msg) {
- $logs.classList.add('success')
- $logs.innerHTML = msg
+ $logs.classList.add('success')
+ $logs.innerHTML = msg
}
function onError(err) {
- let msg = 'An error occured, check the dev console'
+ let msg = 'An error occured, check the dev console'
- if (err.stack !== undefined) {
- msg = err.stack
- } else if (typeof err === 'string') {
- msg = err
- }
+ if (err.stack !== undefined) {
+ msg = err.stack
+ } else if (typeof err === 'string') {
+ msg = err
+ }
- $logs.classList.remove('success')
- $logs.innerHTML = msg
+ $logs.classList.remove('success')
+ $logs.innerHTML = msg
}
window.onerror = onError
@@ -1362,50 +1411,50 @@ window.onerror = onError
=========================================================================== */
const states = {
- ready: () => {
- const addressesHtml = window.info.addresses.map((address) => {
- return `${address}`
- }).join('')
- $nodeId.innerText = window.info.id
- $allDisabledButtons.forEach(b => {
- b.disabled = false
- })
- $allDisabledInputs.forEach(b => {
- b.disabled = false
- })
- $allDisabledElements.forEach(el => {
- el.classList.remove('disabled')
- })
- }
+ ready: () => {
+ const addressesHtml = window.info.addresses.map((address) => {
+ return `${address}`
+ }).join('')
+ $nodeId.innerText = window.info.id
+ $allDisabledButtons.forEach(b => {
+ b.disabled = false
+ })
+ $allDisabledInputs.forEach(b => {
+ b.disabled = false
+ })
+ $allDisabledElements.forEach(el => {
+ el.classList.remove('disabled')
+ })
+ }
}
function updateView(state, ipfs) {
- if (states[state] !== undefined) {
- states[state]()
- } else {
- throw new Error('Could not find state "' + state + '"')
- }
+ if (states[state] !== undefined) {
+ states[state]()
+ } else {
+ throw new Error('Could not find state "' + state + '"')
+ }
}
/* ===========================================================================
Boot the app
=========================================================================== */
function startApplication() {
- // Setup event listeners
- $dragContainer.addEventListener('dragenter', onDragEnter)
- $dragContainer.addEventListener('dragover', onDragEnter)
- $dragContainer.addEventListener('drop', onDrop)
- $dragContainer.addEventListener('dragleave', onDragLeave)
- document.getElementById("fileUploadButton").addEventListener("change", onFileUpload)
- //start()
- window.startNode()
- extendedStartApplication()
+ // Setup event listeners
+ $dragContainer.addEventListener('dragenter', onDragEnter)
+ $dragContainer.addEventListener('dragover', onDragEnter)
+ $dragContainer.addEventListener('drop', onDrop)
+ $dragContainer.addEventListener('dragleave', onDragLeave)
+ document.getElementById("fileUploadButton").addEventListener("change", onFileUpload)
+ //start()
+ window.startNode()
+ extendedStartApplication()
}
function extendedStartApplication() {
- $ethomessage.innerText = GlobalUserAddress;
+ $ethomessage.innerText = GlobalUserAddress;
}
function stopApplication() {
- resetUploadProcess();
- resetFileTable();
-}
+ resetUploadProcess();
+ resetFileTable();
+}
\ No newline at end of file
diff --git a/assets/templates/uploads.html b/assets/templates/uploads.html
index c80e8c6..78904d2 100644
--- a/assets/templates/uploads.html
+++ b/assets/templates/uploads.html
@@ -27,14 +27,15 @@
-
+
@@ -127,9 +128,13 @@
-
@@ -386,7 +391,7 @@
@@ -692,11 +697,14 @@
-
+
+